@@ -129,18 +129,33 @@ def job(self, joborder, input_basedir, output_callback, **kwargs):
129
129
cachebuilder = self ._init_job (joborder , input_basedir , ** cacheargs )
130
130
cachebuilder .pathmapper = PathMapper (set ((f ["path" ] for f in cachebuilder .files )),
131
131
input_basedir )
132
+
132
133
cmdline = flatten (map (cachebuilder .generate_arg , cachebuilder .bindings ))
133
134
(docker_req , docker_is_req ) = self .get_requirement ("DockerRequirement" )
134
135
if docker_req and kwargs .get ("use_container" ) is not False :
135
136
dockerimg = docker_req .get ("dockerImageId" ) or docker_req .get ("dockerPull" )
136
137
cmdline = ["docker" , "run" , dockerimg ] + cmdline
138
+
137
139
keydict = {"cmdline" : cmdline }
140
+
138
141
for _ ,f in cachebuilder .pathmapper .items ():
139
142
st = os .stat (f [0 ])
140
143
keydict [f [0 ]] = [st .st_size , int (st .st_mtime * 1000 )]
144
+
145
+ interesting = {"DockerRequirement" ,
146
+ "EnvVarRequirement" ,
147
+ "CreateFileRequirement" ,
148
+ "ShellCommandRequirement" }
149
+ for rh in (self .requirements , self .hints ):
150
+ for r in reversed (rh ):
151
+ if r ["class" ] in interesting and r ["class" ] not in keydict :
152
+ keydict [r ["class" ]] = r
153
+
141
154
keydictstr = json .dumps (keydict , separators = (',' ,':' ), sort_keys = True )
142
155
cachekey = hashlib .md5 (keydictstr ).hexdigest ()
156
+
143
157
_logger .debug ("[job %s] keydictstr is %s -> %s" , jobname , keydictstr , cachekey )
158
+
144
159
jobcache = os .path .join (kwargs ["cachedir" ], cachekey )
145
160
jobcachepending = jobcache + ".pending"
146
161
if os .path .isdir (jobcache ) and not os .path .isfile (jobcachepending ):
0 commit comments