20462: Move to util & use Brett's implementation
authorPeter Amstutz <peter.amstutz@curii.com>
Mon, 1 May 2023 15:42:29 +0000 (11:42 -0400)
committerPeter Amstutz <peter.amstutz@curii.com>
Mon, 1 May 2023 15:42:29 +0000 (11:42 -0400)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

sdk/cwl/arvados_cwl/arvworkflow.py
sdk/cwl/arvados_cwl/util.py
sdk/cwl/tests/test_util.py

index bd32e9f81b7f4f714c26ce9989e26e41bb7349b9..43d23e9b92bd7ff79e5b874d96754de3d8bb5c0e 100644 (file)
@@ -41,6 +41,7 @@ from .runner import (upload_dependencies, packed_workflow, upload_workflow_colle
 from .pathmapper import ArvPathMapper, trim_listing
 from .arvtool import ArvadosCommandTool, set_cluster_target
 from ._version import __version__
+from .util import common_prefix
 
 from .perf import Perf
 
@@ -248,32 +249,6 @@ def drop_ids(d):
             drop_ids(d[field])
 
 
-def common_prefix(firstfile, all_files):
-    n = 0
-    allmatch = True
-    if not firstfile:
-        return ""
-
-    while allmatch and n < len(firstfile)-1:
-        n += 1
-        for f in all_files:
-            if len(f)-1 < n:
-                n -= 1
-                allmatch = False
-                break
-            if f[n] != firstfile[n]:
-                allmatch = False
-                break
-
-    while n > 0 and firstfile[n] != "/":
-        n -= 1
-
-    if firstfile[n] == "/":
-        n += 1
-
-    return firstfile[:n]
-
-
 def upload_workflow(arvRunner, tool, job_order, project_uuid,
                         runtimeContext,
                         uuid=None,
index a0c34ea52d2c1ca407f0c291f3a0a46e77eca9c6..299f854ec202020b08156c2929bd35bf9a32cfaf 100644 (file)
@@ -34,3 +34,18 @@ def get_current_container(api, num_retries=0, logger=None):
             raise e
 
     return current_container
+
+
+def common_prefix(firstfile, all_files):
+    common_parts = firstfile.split('/')
+    common_parts[-1] = ''
+    for f in all_files:
+        f_parts = f.split('/')
+        for index, (a, b) in enumerate(zip(common_parts, f_parts)):
+            if a != b:
+                common_parts = common_parts[:index + 1]
+                common_parts[-1] = ''
+                break
+        if not any(common_parts):
+            break
+    return '/'.join(common_parts)
index 183e0fcc698eccf85613590ccd2fa90fb93e3ca4..bf3d6fe0ef3de8d46a1f372f39dbe0607fd8aef9 100644 (file)
@@ -11,7 +11,7 @@ import httplib2
 
 from arvados_cwl.util import *
 from arvados.errors import ApiError
-from arvados_cwl.arvworkflow import common_prefix
+from arvados_cwl.util import common_prefix
 
 class MockDateTime(datetime.datetime):
     @classmethod