Skip to content

Commit eba1d64

Browse files
authored
--pack generates same-file $import to reference shared objects (#353)
* Use same-file $import to reference shared objects (such as SchemaDefRequirement).
1 parent d8981e1 commit eba1d64

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

cwltool/pack.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,26 @@ def replace_refs(d, rewrite, stem, newstem):
6565
d[s] = newstem + v[len(stem):]
6666
replace_refs(v, rewrite, stem, newstem)
6767

68+
def import_embed(d, seen):
69+
# type: (Any, Set[Text]) -> None
70+
if isinstance(d, list):
71+
for v in d:
72+
import_embed(v, seen)
73+
elif isinstance(d, dict):
74+
for n in ("id", "name"):
75+
if n in d:
76+
if d[n] in seen:
77+
this = d[n]
78+
d.clear()
79+
d["$import"] = this
80+
else:
81+
this = d[n]
82+
seen.add(this)
83+
break
84+
85+
for v in d.values():
86+
import_embed(v, seen)
87+
6888

6989
def pack(document_loader, processobj, uri, metadata):
7090
# type: (Loader, Union[Dict[Text, Any], List[Dict[Text, Any]]], Text, Dict[Text, Text]) -> Dict[Text, Any]
@@ -133,4 +153,6 @@ def rewrite_id(r, mainuri):
133153
v = rewrite[r]
134154
replace_refs(packed, rewrite, r + "/" if "#" in r else r + "#", v + "/")
135155

156+
import_embed(packed, set())
157+
136158
return packed

0 commit comments

Comments
 (0)