X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/b5d352d6099b60db5dcdd9183dcab3e8e17d729e..6f6ce90eb894bde190fd7522cbec037fe61fc25c:/sdk/cwl/arvados_cwl/pathmapper.py diff --git a/sdk/cwl/arvados_cwl/pathmapper.py b/sdk/cwl/arvados_cwl/pathmapper.py index 1ab8e831f4..c8ae77a8b6 100644 --- a/sdk/cwl/arvados_cwl/pathmapper.py +++ b/sdk/cwl/arvados_cwl/pathmapper.py @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: Apache-2.0 + import re import logging import uuid @@ -191,20 +195,34 @@ class ArvPathMapper(PathMapper): self.keepdir = None def reversemap(self, target): - if target.startswith("keep:"): + p = super(ArvPathMapper, self).reversemap(target) + if p: + return p + elif target.startswith("keep:"): return (target, target) elif self.keepdir and target.startswith(self.keepdir): - return (target, "keep:" + target[len(self.keepdir)+1:]) + kp = "keep:" + target[len(self.keepdir)+1:] + return (kp, kp) else: - return super(ArvPathMapper, self).reversemap(target) + return None class StagingPathMapper(PathMapper): _follow_dirs = True + def __init__(self, referenced_files, basedir, stagedir, separateDirs=True): + self.targets = set() + super(StagingPathMapper, self).__init__(referenced_files, basedir, stagedir, separateDirs) + def visit(self, obj, stagedir, basedir, copy=False, staged=False): # type: (Dict[unicode, Any], unicode, unicode, bool) -> None loc = obj["location"] tgt = os.path.join(stagedir, obj["basename"]) + basetgt, baseext = os.path.splitext(tgt) + n = 1 + while tgt in self.targets: + n += 1 + tgt = "%s_%i%s" % (basetgt, n, baseext) + self.targets.add(tgt) if obj["class"] == "Directory": self._pathmap[loc] = MapperEnt(loc, tgt, "Directory", staged) if loc.startswith("_:") or self._follow_dirs: