Skip to content

Commit db84a1e

Browse files
author
Peter Amstutz
committed
Add InplaceUpdateRequirement.
1 parent ed12906 commit db84a1e

File tree

5 files changed

+25
-4
lines changed

5 files changed

+25
-4
lines changed

cwltool/draft2tool.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,9 +363,13 @@ def rm_pending_output_callback(output_callbacks, jobcachepending,
363363
ls[i] = t["entry"]
364364
j.generatefiles[u"listing"] = ls
365365

366+
inplaceUpdateReq = self.get_requirement("InplaceUpdateRequirement")[0]
367+
368+
if inplaceUpdateReq:
369+
j.inplace_update = inplaceUpdateReq["inplaceUpdate"]
366370
normalizeFilesDirs(j.generatefiles)
367371
for i in j.generatefiles["listing"]:
368-
if i.get("writable"):
372+
if i.get("writable") and j.inplace_update:
369373
adjustFileObjs(i, partial(builder.mutation_manager.register_mutation, j.name))
370374
adjustDirObjs(i, partial(builder.mutation_manager.register_mutation, j.name))
371375

cwltool/extensions.yml

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,17 @@ $graph:
1919
- "null"
2020
- type: enum
2121
name: LoadListingEnum
22-
symbols: [shallow, deep]
22+
symbols: [shallow, deep]
23+
24+
- name: InplaceUpdateRequirement
25+
type: record
26+
extends: cwl:ProcessRequirement
27+
fields:
28+
class:
29+
type: string
30+
doc: "Always 'InplaceUpdateRequirement'"
31+
jsonldPredicate:
32+
"_id": "@type"
33+
"_type": "@vocab"
34+
inplaceUpdate:
35+
type: boolean

cwltool/job.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ def __init__(self): # type: () -> None
151151
self.environment = None # type: MutableMapping[Text, Text]
152152
self.generatefiles = None # type: Dict[Text, Union[List[Dict[Text, Text]], Dict[Text, Text], Text]]
153153
self.stagedir = None # type: Text
154-
self.inplace_update = False # type: bool
154+
self.inplace_update = None # type: bool
155155

156156
def run(self, dry_run=False, pull_image=True, rm_container=True,
157157
rm_tmpdir=True, move_outputs="move", **kwargs):
@@ -259,6 +259,7 @@ def run(self, dry_run=False, pull_image=True, rm_container=True,
259259

260260
stageFiles(self.pathmapper, os.symlink, ignoreWritable=True)
261261
if generatemapper:
262+
stageFiles(generatemapper, os.symlink)
262263
relink_initialworkdir(generatemapper, inplace_update=self.inplace_update)
263264

264265
scr, _ = get_feature(self, "ShellCommandRequirement")

cwltool/process.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@
4646
"StepInputExpressionRequirement",
4747
"ResourceRequirement",
4848
"InitialWorkDirRequirement",
49-
"LoadListingRequirement"]
49+
"LoadListingRequirement",
50+
"InplaceUpdateRequirement"]
5051

5152
cwl_files = (
5253
"Workflow.yml",

tests/wf/updateval.cwl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ requirements:
55
listing:
66
- entry: $(inputs.r)
77
writable: true
8+
InplaceUpdateRequirement:
9+
inplaceUpdate: true
810
inputs:
911
r: File
1012
script:

0 commit comments

Comments
 (0)