summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorHarmen Stoppels <harmenstoppels@gmail.com>2023-05-24 15:23:46 +0200
committerGitHub <noreply@github.com>2023-05-24 09:23:46 -0400
commit8096ed4b22f1187bc7262521534ec5ebeb41be67 (patch)
treefa1ae98825c7c17efc17ce16d8735e03b44a9dc2 /lib
parentb49bfe25af85e1197ba7de892fcab19e29387498 (diff)
downloadspack-8096ed4b22f1187bc7262521534ec5ebeb41be67.tar.gz
spack-8096ed4b22f1187bc7262521534ec5ebeb41be67.tar.bz2
spack-8096ed4b22f1187bc7262521534ec5ebeb41be67.tar.xz
spack-8096ed4b22f1187bc7262521534ec5ebeb41be67.zip
spack remove: fix traversal when user specs intersect (#37882)
drop unnecessary double loop over the matching user specs.
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/environment/environment.py41
1 files changed, 20 insertions, 21 deletions
diff --git a/lib/spack/spack/environment/environment.py b/lib/spack/spack/environment/environment.py
index a4312df6dc..3d56a7d207 100644
--- a/lib/spack/spack/environment/environment.py
+++ b/lib/spack/spack/environment/environment.py
@@ -1221,28 +1221,27 @@ class Environment:
old_specs = set(self.user_specs)
new_specs = set()
for spec in matches:
- if spec in list_to_change:
- try:
- list_to_change.remove(spec)
- self.update_stale_references(list_name)
- new_specs = set(self.user_specs)
- except spack.spec_list.SpecListError:
- # define new specs list
- new_specs = set(self.user_specs)
- msg = f"Spec '{spec}' is part of a spec matrix and "
- msg += f"cannot be removed from list '{list_to_change}'."
- if force:
- msg += " It will be removed from the concrete specs."
- # Mock new specs, so we can remove this spec from concrete spec lists
- new_specs.remove(spec)
- tty.warn(msg)
+ if spec not in list_to_change:
+ continue
+ try:
+ list_to_change.remove(spec)
+ self.update_stale_references(list_name)
+ new_specs = set(self.user_specs)
+ except spack.spec_list.SpecListError:
+ # define new specs list
+ new_specs = set(self.user_specs)
+ msg = f"Spec '{spec}' is part of a spec matrix and "
+ msg += f"cannot be removed from list '{list_to_change}'."
+ if force:
+ msg += " It will be removed from the concrete specs."
+ # Mock new specs, so we can remove this spec from concrete spec lists
+ new_specs.remove(spec)
+ tty.warn(msg)
+ else:
+ if list_name == user_speclist_name:
+ self.manifest.remove_user_spec(str(spec))
else:
- if list_name == user_speclist_name:
- for user_spec in matches:
- self.manifest.remove_user_spec(str(user_spec))
- else:
- for user_spec in matches:
- self.manifest.remove_definition(str(user_spec), list_name=list_name)
+ self.manifest.remove_definition(str(spec), list_name=list_name)
# If force, update stale concretized specs
for spec in old_specs - new_specs: