diff options
author | Massimiliano Culpo <massimiliano.culpo@gmail.com> | 2022-07-22 10:04:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-22 10:04:17 +0200 |
commit | 5cf7bf37701a18d73730f05894d0f81dff16493e (patch) | |
tree | 1f9b58448badd3e008abe982899e2557e3888a0a | |
parent | 2b0b573827143829aa259d0e74b6b1e7052a2ffc (diff) | |
download | spack-5cf7bf37701a18d73730f05894d0f81dff16493e.tar.gz spack-5cf7bf37701a18d73730f05894d0f81dff16493e.tar.bz2 spack-5cf7bf37701a18d73730f05894d0f81dff16493e.tar.xz spack-5cf7bf37701a18d73730f05894d0f81dff16493e.zip |
Use pkg_cls in spack.mirror.get_all_versions (#31636)
fixes #31627
spack.mirror.get_all_versions now uses the package class
instead of the package object in its implementation.
Ensure spec is concrete before staging for mirrors
-rw-r--r-- | lib/spack/spack/mirror.py | 16 | ||||
-rw-r--r-- | lib/spack/spack/test/mirror.py | 13 |
2 files changed, 22 insertions, 7 deletions
diff --git a/lib/spack/spack/mirror.py b/lib/spack/spack/mirror.py index bdafb70e25..6a8f15e58f 100644 --- a/lib/spack/spack/mirror.py +++ b/lib/spack/spack/mirror.py @@ -421,18 +421,16 @@ def get_all_versions(specs): version, this information will be omitted in the new set; for example; the new set of specs will not include variant settings. """ - version_specs = [] for spec in specs: - pkg = spec.package - + pkg_cls = spack.repo.path.get_pkg_class(spec.name) # Skip any package that has no known versions. - if not pkg.versions: - tty.msg("No safe (checksummed) versions for package %s" % pkg.name) + if not pkg_cls.versions: + tty.msg("No safe (checksummed) versions for package %s" % pkg_cls.name) continue - for version in pkg.versions: - version_spec = spack.spec.Spec(pkg.name) + for version in pkg_cls.versions: + version_spec = spack.spec.Spec(pkg_cls.name) version_spec.versions = VersionList([version]) version_specs.append(version_spec) @@ -639,6 +637,10 @@ class MirrorStats(object): def _add_single_spec(spec, mirror, mirror_stats): + # Ensure that the spec is concrete, since we'll stage it later + if not spec.concrete: + spec = spec.concretized() + tty.msg("Adding package {pkg} to mirror".format( pkg=spec.format("{name}{@version}") )) diff --git a/lib/spack/spack/test/mirror.py b/lib/spack/spack/test/mirror.py index 9dc1856958..8611765362 100644 --- a/lib/spack/spack/test/mirror.py +++ b/lib/spack/spack/test/mirror.py @@ -320,3 +320,16 @@ def test_mirror_cache_symlinks(tmpdir): assert os.path.exists(link_target) assert (os.path.normpath(link_target) == os.path.join(cache.root, reference.storage_path)) + + +@pytest.mark.regression('31627') +@pytest.mark.parametrize('specs,expected_specs', [ + (['a'], ['a@1.0', 'a@2.0']), + (['a', 'brillig'], ['a@1.0', 'a@2.0', 'brillig@1.0.0', 'brillig@2.0.0']), +]) +def test_get_all_versions(specs, expected_specs): + specs = [Spec(s) for s in specs] + output_list = spack.mirror.get_all_versions(specs) + output_list = [str(x) for x in output_list] + # Compare sets since order is not important + assert set(output_list) == set(expected_specs) |