Skip to content

Commit c823085

Browse files
authored
Make "writable" flag apply recursively. (#301)
* Make "writable" flag apply recursively.
1 parent 59cdde8 commit c823085

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

cwltool/draft2tool.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -354,9 +354,10 @@ def rm_pending_output_callback(output_callbacks, jobcachepending,
354354
"writable": t.get("writable")
355355
}
356356
else:
357-
if t["entryname"]:
357+
if t["entryname"] or t["writable"]:
358358
t = copy.deepcopy(t)
359-
t["entry"]["basename"] = t["entryname"]
359+
if t["entryname"]:
360+
t["entry"]["basename"] = t["entryname"]
360361
t["entry"]["writable"] = t.get("writable")
361362
ls[i] = t["entry"]
362363
j.generatefiles[u"listing"] = ls

cwltool/pathmapper.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,21 +149,21 @@ def __init__(self, referenced_files, basedir, stagedir, separateDirs=True):
149149
self.separateDirs = separateDirs
150150
self.setup(dedup(referenced_files), basedir)
151151

152-
def visitlisting(self, listing, stagedir, basedir):
153-
# type: (List[Dict[Text, Any]], Text, Text) -> None
152+
def visitlisting(self, listing, stagedir, basedir, copy=False):
153+
# type: (List[Dict[Text, Any]], Text, Text, bool) -> None
154154
for ld in listing:
155155
tgt = os.path.join(stagedir, ld["basename"])
156156
if ld["class"] == "Directory":
157-
self.visit(ld, stagedir, basedir, copy=ld.get("writable", False))
157+
self.visit(ld, stagedir, basedir, copy=ld.get("writable", copy))
158158
else:
159-
self.visit(ld, stagedir, basedir, copy=ld.get("writable", False))
159+
self.visit(ld, stagedir, basedir, copy=ld.get("writable", copy))
160160

161161
def visit(self, obj, stagedir, basedir, copy=False):
162162
# type: (Dict[Text, Any], Text, Text, bool) -> None
163163
tgt = os.path.join(stagedir, obj["basename"])
164164
if obj["class"] == "Directory":
165165
self._pathmap[obj["location"]] = MapperEnt(obj["location"], tgt, "Directory")
166-
self.visitlisting(obj.get("listing", []), tgt, basedir)
166+
self.visitlisting(obj.get("listing", []), tgt, basedir, copy=copy)
167167
elif obj["class"] == "File":
168168
path = obj["location"]
169169
if path in self._pathmap:
@@ -186,7 +186,7 @@ def visit(self, obj, stagedir, basedir, copy=False):
186186
st = os.lstat(deref)
187187

188188
self._pathmap[path] = MapperEnt(deref, tgt, "File")
189-
self.visitlisting(obj.get("secondaryFiles", []), stagedir, basedir)
189+
self.visitlisting(obj.get("secondaryFiles", []), stagedir, basedir, copy=copy)
190190

191191
def setup(self, referenced_files, basedir):
192192
# type: (List[Any], Text) -> None

0 commit comments

Comments
 (0)