@@ -3437,18 +3437,25 @@ def reproduce_build(app, reprod_dir_root):
34373437 except NotImplementedError as err :
34383438 _log .warning ("Unable to dump easyconfig instance to %s: %s" , reprod_spec , err )
34393439
3440- # also archive the relevant easyblocks
3440+ # also archive all the relevant easyblocks (including any used by extensions)
34413441 reprod_easyblock_dir = os .path .join (reprod_dir , 'easyblocks' )
3442- for easyblock_class in inspect .getmro (type (app )):
3443- easyblock_path = inspect .getsourcefile (easyblock_class )
3444- easyblock_basedir , easyblock_filename = os .path .split (easyblock_path )
3445- # if we reach EasyBlock or ExtensionEasyBlock class, we are done
3446- # (ExtensionEasyblock is hardcoded to avoid a cyclical import)
3447- if easyblock_class .__name__ in [EasyBlock .__name__ , 'ExtensionEasyBlock' ]:
3448- break
3449- else :
3450- copy_file (easyblock_path , os .path .join (reprod_easyblock_dir , easyblock_filename ))
3451- _log .info ("Dumped easyblock %s required for reproduction to %s" , easyblock_filename , reprod_easyblock_dir )
3442+ easyblock_instances = [app ] + app .ext_instances
3443+ easyblock_paths = set ()
3444+ for easyblock_instance in easyblock_instances :
3445+ for easyblock_class in inspect .getmro (type (easyblock_instance )):
3446+ easyblock_path = inspect .getsourcefile (easyblock_class )
3447+ easyblock_basedir , easyblock_filename = os .path .split (easyblock_path )
3448+ # if we reach EasyBlock or ExtensionEasyBlock class, we are done
3449+ # (ExtensionEasyblock is hardcoded to avoid a cyclical import)
3450+ if easyblock_class .__name__ in [EasyBlock .__name__ , 'ExtensionEasyBlock' ]:
3451+ break
3452+ else :
3453+ easyblock_paths .add (easyblock_path )
3454+ for easyblock_path in easyblock_paths :
3455+ copy_file (easyblock_path , os .path .join (reprod_easyblock_dir , easyblock_filename ))
3456+ _log .info ("Dumped easyblock %s required for reproduction to %s" , easyblock_filename , reprod_easyblock_dir )
3457+
3458+
34523459
34533460 # if there is a hook file we should also archive it
34543461 hooks_path = build_option ('hooks' )
0 commit comments