@@ -121,7 +121,7 @@ def get_taskgraph_generator(root, parameters):
121121 return TaskGraphGenerator (root_dir = root , parameters = parameters )
122122
123123
124- def format_taskgraph (options , parameters , logfile = None ):
124+ def format_taskgraph (options , parameters , overrides , logfile = None ):
125125 import taskgraph
126126 from taskgraph .parameters import parameters_loader
127127
@@ -139,7 +139,7 @@ def format_taskgraph(options, parameters, logfile=None):
139139 if isinstance (parameters , str ):
140140 parameters = parameters_loader (
141141 parameters ,
142- overrides = { "target-kinds" : options . get ( "target_kinds" )} ,
142+ overrides = overrides ,
143143 strict = False ,
144144 )
145145
@@ -173,7 +173,7 @@ def dump_output(out, path=None, params_spec=None):
173173 print (out + "\n " , file = fh )
174174
175175
176- def generate_taskgraph (options , parameters , logdir ):
176+ def generate_taskgraph (options , parameters , overrides , logdir ):
177177 from taskgraph .parameters import Parameters
178178
179179 def logfile (spec ):
@@ -189,14 +189,16 @@ def logfile(spec):
189189 # tracebacks a little more readable and avoids additional process overhead.
190190 if len (parameters ) == 1 :
191191 spec = parameters [0 ]
192- out = format_taskgraph (options , spec , logfile (spec ))
192+ out = format_taskgraph (options , spec , overrides , logfile (spec ))
193193 dump_output (out , options ["output_file" ])
194194 return 0
195195
196196 futures = {}
197197 with ProcessPoolExecutor (max_workers = options ["max_workers" ]) as executor :
198198 for spec in parameters :
199- f = executor .submit (format_taskgraph , options , spec , logfile (spec ))
199+ f = executor .submit (
200+ format_taskgraph , options , spec , overrides , logfile (spec )
201+ )
200202 futures [f ] = spec
201203
202204 returncode = 0
@@ -293,6 +295,15 @@ def logfile(spec):
293295 "generations will happen from the same invocation (one per parameters "
294296 "specified)." ,
295297)
298+ @argument (
299+ "--force-local-files-changed" ,
300+ default = False ,
301+ action = "store_true" ,
302+ help = "Compute the 'files-changed' parameter from local version control, "
303+ "even when explicitly using a parameter set that already has it defined. "
304+ "Note that this is already the default behaviour when no parameters are "
305+ "specified." ,
306+ )
296307@argument (
297308 "--no-optimize" ,
298309 dest = "optimize" ,
@@ -367,9 +378,11 @@ def show_taskgraph(options):
367378 diffdir = None
368379 output_file = options ["output_file" ]
369380
370- if options ["diff" ]:
381+ if options ["diff" ] or options [ "force_local_files_changed" ] :
371382 repo = get_repository (os .getcwd ())
372383
384+ if options ["diff" ]:
385+ assert repo is not None
373386 if not repo .working_directory_clean ():
374387 print (
375388 "abort: can't diff taskgraph with dirty working directory" ,
@@ -393,15 +406,22 @@ def show_taskgraph(options):
393406 )
394407 print (f"Generating { options ['graph_attr' ]} @ { cur_rev } " , file = sys .stderr )
395408
409+ overrides = {
410+ "target-kinds" : options .get ("target_kinds" ),
411+ }
396412 parameters : List [Any [str , Parameters ]] = options .pop ("parameters" )
397413 if not parameters :
398- overrides = {
399- "target-kinds" : options .get ("target_kinds" ),
400- }
401414 parameters = [
402415 parameters_loader (None , strict = False , overrides = overrides )
403416 ] # will use default values
404417
418+ # This is the default behaviour anyway, so no need to re-compute.
419+ options ["force_local_files_changed" ] = False
420+
421+ elif options ["force_local_files_changed" ]:
422+ assert repo is not None
423+ overrides ["files-changed" ] = sorted (repo .get_changed_files ("AM" ))
424+
405425 for param in parameters [:]:
406426 if isinstance (param , str ) and os .path .isdir (param ):
407427 parameters .remove (param )
@@ -427,7 +447,7 @@ def show_taskgraph(options):
427447 # to setup its `mach` based logging.
428448 setup_logging ()
429449
430- ret = generate_taskgraph (options , parameters , logdir )
450+ ret = generate_taskgraph (options , parameters , overrides , logdir )
431451
432452 if options ["diff" ]:
433453 assert diffdir is not None
@@ -451,7 +471,7 @@ def show_taskgraph(options):
451471 diffdir , f"{ options ['graph_attr' ]} _{ base_rev_file } "
452472 )
453473 print (f"Generating { options ['graph_attr' ]} @ { base_rev } " , file = sys .stderr )
454- ret |= generate_taskgraph (options , parameters , logdir )
474+ ret |= generate_taskgraph (options , parameters , overrides , logdir )
455475 finally :
456476 repo .update (cur_rev )
457477
0 commit comments