From f6781d65f0cfa142c515aa969790816e574b03a6 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Tue, 26 Nov 2019 21:24:15 +0100 Subject: buildcache list: do not display duplicate specs (#13758) fixes #13757 --- lib/spack/spack/cmd/buildcache.py | 8 +++----- lib/spack/spack/test/cmd/buildcache.py | 23 ++++++++++++++++++++++- 2 files changed, 25 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/spack/spack/cmd/buildcache.py b/lib/spack/spack/cmd/buildcache.py index ee09a33f39..112949c338 100644 --- a/lib/spack/spack/cmd/buildcache.py +++ b/lib/spack/spack/cmd/buildcache.py @@ -416,11 +416,9 @@ def listspecs(args): """list binary packages available from mirrors""" specs = bindist.get_specs(args.force) if args.packages: - pkgs = set(args.packages) - specs = [s for s in specs for p in pkgs if s.satisfies(p)] - display_specs(specs, args, all_headers=True) - else: - display_specs(specs, args, all_headers=True) + constraints = set(args.packages) + specs = [s for s in specs if any(s.satisfies(c) for c in constraints)] + display_specs(specs, args, all_headers=True) def getkeys(args): diff --git a/lib/spack/spack/test/cmd/buildcache.py b/lib/spack/spack/test/cmd/buildcache.py index 2c4f351d86..28f0fb9aec 100644 --- a/lib/spack/spack/test/cmd/buildcache.py +++ b/lib/spack/spack/test/cmd/buildcache.py @@ -8,11 +8,19 @@ import platform import pytest import spack.main - +import spack.binary_distribution buildcache = spack.main.SpackCommand('buildcache') +@pytest.fixture() +def mock_get_specs(database, monkeypatch): + specs = database.query_local() + monkeypatch.setattr( + spack.binary_distribution, 'get_specs', lambda x: specs + ) + + @pytest.mark.skipif( platform.system().lower() != 'linux', reason='implementation for MacOS still missing' @@ -20,3 +28,16 @@ buildcache = spack.main.SpackCommand('buildcache') @pytest.mark.db def test_buildcache_preview_just_runs(database): buildcache('preview', 'mpileaks') + + +@pytest.mark.skipif( + platform.system().lower() != 'linux', + reason='implementation for MacOS still missing' +) +@pytest.mark.db +@pytest.mark.regression('13757') +def test_buildcache_list_duplicates(mock_get_specs, capsys): + with capsys.disabled(): + output = buildcache('list', 'mpileaks', '@2.3') + + assert output.count('mpileaks') == 3 -- cgit v1.2.3-60-g2f50