Skip to content

Commit 910725b

Browse files
author
Peter Amstutz
committed
Add support for "writable" in InitialWorkDir
1 parent a85638c commit 910725b

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

cwltool/pathmapper.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,20 +71,20 @@ def visitlisting(self, listing, stagedir, basedir):
7171
if "entryname" in ld:
7272
tgt = os.path.join(stagedir, ld["entryname"])
7373
if isinstance(ld["entry"], (str, unicode)):
74-
self._pathmap[str(id(ld["entry"]))] = MapperEnt(ld["entry"], tgt, "Copy")
74+
self._pathmap[str(id(ld["entry"]))] = MapperEnt(ld["entry"], tgt, "CreateFile")
7575
else:
7676
if ld["entry"]["class"] == "Directory":
77-
self.visit(ld["entry"], tgt, basedir)
77+
self.visit(ld["entry"], tgt, basedir, copy=ld.get("writable", False))
7878
else:
79-
self.visit(ld["entry"], stagedir, basedir, entryname=ld["entryname"])
79+
self.visit(ld["entry"], stagedir, basedir, entryname=ld["entryname"], copy=ld.get("writable", False))
8080
#ab = ld["entry"]["location"]
8181
#if ab.startswith("file://"):
8282
# ab = ab[7:]
8383
#self._pathmap[ld["entry"]["location"]] = MapperEnt(ab, tgt, ld["entry"]["class"])
8484
elif ld.get("class") == "File":
85-
self.visit(ld, stagedir, basedir)
85+
self.visit(ld, stagedir, basedir, copy=ld.get("writable", False))
8686

87-
def visit(self, obj, stagedir, basedir, entryname=None):
87+
def visit(self, obj, stagedir, basedir, entryname=None, copy=False):
8888
if obj["class"] == "Directory":
8989
if "location" in obj:
9090
self._pathmap[obj["location"]] = MapperEnt(obj["location"], stagedir, "Directory")
@@ -100,7 +100,10 @@ def visit(self, obj, stagedir, basedir, entryname=None):
100100
tgt = os.path.join(stagedir, entryname)
101101
else:
102102
tgt = os.path.join(stagedir, os.path.basename(path))
103-
self._pathmap[path] = MapperEnt(ab, tgt, "File")
103+
if copy:
104+
self._pathmap[path] = MapperEnt(ab, tgt, "WritableFile")
105+
else:
106+
self._pathmap[path] = MapperEnt(ab, tgt, "File")
104107
self.visitlisting(obj.get("secondaryFiles", []), stagedir, basedir)
105108

106109
def setup(self, referenced_files, basedir):

cwltool/process.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,9 @@ def stageFiles(pm, stageFunc):
177177
os.makedirs(os.path.dirname(p.target), 0755)
178178
if p.type == "File":
179179
stageFunc(p.resolved, p.target)
180-
elif p.type == "Copy":
180+
elif p.type == "WritableFile":
181+
shutil.copy(p.resolved, p.target)
182+
elif p.type == "CreateFile":
181183
with open(p.target, "w") as n:
182184
n.write(p.resolved.encode("utf-8"))
183185

0 commit comments

Comments
 (0)