@@ -611,10 +611,16 @@ def _initialworkdir(self, j: Optional[JobBase], builder: Builder) -> None:
611611 continue
612612
613613 et : CWLObjectType = {}
614+ writable = t .get ("writable" , False )
615+ et ["writable" ] = writable
614616 if isinstance (entry , Mapping ) and entry .get ("class" ) in (
615617 "File" ,
616618 "Directory" ,
617619 ):
620+ if writable and "secondaryFiles" in entry :
621+ secFiles = cast (MutableSequence [CWLObjectType ], entry ["secondaryFiles" ])
622+ for sf in secFiles :
623+ sf ["writable" ] = writable
618624 et ["entry" ] = cast (CWLOutputType , entry )
619625 else :
620626 if isinstance (entry , str ):
@@ -650,7 +656,6 @@ def _initialworkdir(self, j: Optional[JobBase], builder: Builder) -> None:
650656 et ["entryname" ] = entryname_field
651657 else :
652658 et ["entryname" ] = None
653- et ["writable" ] = t .get ("writable" , False )
654659 ls .append (et )
655660 else :
656661 # Expression, must return a Dirent, File, Directory
@@ -700,13 +705,14 @@ def _initialworkdir(self, j: Optional[JobBase], builder: Builder) -> None:
700705 )
701706
702707 if t2 .get ("entryname" ) or t2 .get ("writable" ):
703- t2 = copy .deepcopy (t2 )
704- t2entry = cast (CWLObjectType , t2 ["entry" ])
708+ t2copy = copy .deepcopy (t2 )
709+ t2entry = cast (CWLObjectType , t2copy ["entry" ])
705710 if t2 .get ("entryname" ):
706- t2entry ["basename" ] = t2 ["entryname" ]
707- t2entry ["writable" ] = t2 .get ("writable" )
711+ t2entry ["basename" ] = t2copy ["entryname" ]
712+ t2entry ["writable" ] = t2copy .get ("writable" )
713+ t2 ["entry" ] = t2entry
708714
709- ls [i ] = cast ( CWLObjectType , t2 ["entry" ])
715+ ls [i ] = t2 ["entry" ]
710716
711717 for i , t3 in enumerate (ls ):
712718 if t3 .get ("class" ) not in ("File" , "Directory" ):
@@ -753,14 +759,21 @@ def _initialworkdir(self, j: Optional[JobBase], builder: Builder) -> None:
753759 for entry in ls :
754760 if "basename" in entry :
755761 basename = cast (str , entry ["basename" ])
756- entry ["dirname" ] = os .path .join (builder .outdir , os .path .dirname (basename ))
762+ dirname = os .path .join (builder .outdir , os .path .dirname (basename ))
763+ entry ["dirname" ] = dirname
757764 entry ["basename" ] = os .path .basename (basename )
765+ if "secondaryFiles" in entry :
766+ for sec_file in cast (
767+ MutableSequence [CWLObjectType ], entry ["secondaryFiles" ]
768+ ):
769+ sec_file ["dirname" ] = dirname
758770 normalizeFilesDirs (entry )
759771 self .updatePathmap (
760772 cast (Optional [str ], entry .get ("dirname" )) or builder .outdir ,
761773 cast (PathMapper , builder .pathmapper ),
762774 entry ,
763775 )
776+
764777 if "listing" in entry :
765778
766779 def remove_dirname (d : CWLObjectType ) -> None :
0 commit comments