Fix caching of spack.repo.all_package_names() (#26991)

fixes #24522
This commit is contained in:
Massimiliano Culpo 2021-11-01 09:16:30 +01:00 committed by GitHub
parent b87678c2dd
commit d73b1b9742
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 9 deletions

View File

@ -473,7 +473,6 @@ def __init__(self, *repos):
self.repos = []
self.by_namespace = nm.NamespaceTrie()
self._all_package_names = None
self._provider_index = None
self._patch_index = None
@ -544,15 +543,17 @@ def first_repo(self):
"""Get the first repo in precedence order."""
return self.repos[0] if self.repos else None
def all_package_names(self, include_virtuals=False):
@llnl.util.lang.memoized
def _all_package_names(self, include_virtuals):
"""Return all unique package names in all repositories."""
if self._all_package_names is None:
all_pkgs = set()
for repo in self.repos:
for name in repo.all_package_names(include_virtuals):
all_pkgs.add(name)
self._all_package_names = sorted(all_pkgs, key=lambda n: n.lower())
return self._all_package_names
all_pkgs = set()
for repo in self.repos:
for name in repo.all_package_names(include_virtuals):
all_pkgs.add(name)
return sorted(all_pkgs, key=lambda n: n.lower())
def all_package_names(self, include_virtuals=False):
return self._all_package_names(include_virtuals)
def packages_with_tags(self, *tags):
r = set()

View File

@ -80,3 +80,9 @@ def test_namespace_hasattr(attr_name, exists, mutable_mock_repo):
# of a custom __getattr__ implementation
nms = spack.repo.SpackNamespace('spack.pkg.builtin.mock')
assert hasattr(nms, attr_name) == exists
@pytest.mark.regression('24552')
def test_all_package_names_is_cached_correctly():
assert 'mpi' in spack.repo.all_package_names(include_virtuals=True)
assert 'mpi' not in spack.repo.all_package_names(include_virtuals=False)