From d45818ccff0e9766d0839efb7d6dc795e3fa2e1a Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Wed, 17 May 2023 19:17:41 +0200 Subject: Limit deepcopy to just the initial "all" section (#37718) Modifications: - [x] Limit the scope of the deepcopy when initializing module file writers --- lib/spack/spack/modules/common.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/lib/spack/spack/modules/common.py b/lib/spack/spack/modules/common.py index 930bce8a92..dfcd20b0ce 100644 --- a/lib/spack/spack/modules/common.py +++ b/lib/spack/spack/modules/common.py @@ -170,17 +170,12 @@ def merge_config_rules(configuration, spec): Returns: dict: actions to be taken on the spec passed as an argument """ - - # Get the top-level configuration for the module type we are using - module_specific_configuration = copy.deepcopy(configuration) - - # Construct a dictionary with the actions we need to perform on the spec - # passed as a parameter - + # Construct a dictionary with the actions we need to perform on the spec passed as a parameter + spec_configuration = {} # The keyword 'all' is always evaluated first, all the others are # evaluated in order of appearance in the module file - spec_configuration = module_specific_configuration.pop("all", {}) - for constraint, action in module_specific_configuration.items(): + spec_configuration.update(copy.deepcopy(configuration.get("all", {}))) + for constraint, action in configuration.items(): if spec.satisfies(constraint): if hasattr(constraint, "override") and constraint.override: spec_configuration = {} @@ -200,14 +195,14 @@ def merge_config_rules(configuration, spec): # configuration # Hash length in module files - hash_length = module_specific_configuration.get("hash_length", 7) + hash_length = configuration.get("hash_length", 7) spec_configuration["hash_length"] = hash_length - verbose = module_specific_configuration.get("verbose", False) + verbose = configuration.get("verbose", False) spec_configuration["verbose"] = verbose # module defaults per-package - defaults = module_specific_configuration.get("defaults", []) + defaults = configuration.get("defaults", []) spec_configuration["defaults"] = defaults return spec_configuration -- cgit v1.2.3-70-g09d2