spack audit: fix spurious failures for target/platform conflicts (#28860)
This commit is contained in:
parent
36ef59bc67
commit
130354b867
3 changed files with 31 additions and 5 deletions
|
@ -323,10 +323,17 @@ def _unknown_variants_in_directives(pkgs, error_cls):
|
||||||
vrn = spack.spec.Spec(conflict)
|
vrn = spack.spec.Spec(conflict)
|
||||||
try:
|
try:
|
||||||
vrn.constrain(trigger)
|
vrn.constrain(trigger)
|
||||||
except Exception as e:
|
except Exception:
|
||||||
msg = 'Generic error in conflict for package "{0}": '
|
# If one of the conflict/trigger includes a platform and the other
|
||||||
errors.append(error_cls(msg.format(pkg.name), [str(e)]))
|
# includes an os or target, the constraint will fail if the current
|
||||||
continue
|
# platform is not the plataform in the conflict/trigger. Audit the
|
||||||
|
# conflict and trigger separately in that case.
|
||||||
|
# When os and target constraints can be created independently of
|
||||||
|
# the platform, TODO change this back to add an error.
|
||||||
|
errors.extend(_analyze_variants_in_directive(
|
||||||
|
pkg, spack.spec.Spec(trigger),
|
||||||
|
directive='conflicts', error_cls=error_cls
|
||||||
|
))
|
||||||
errors.extend(_analyze_variants_in_directive(
|
errors.extend(_analyze_variants_in_directive(
|
||||||
pkg, vrn, directive='conflicts', error_cls=error_cls
|
pkg, vrn, directive='conflicts', error_cls=error_cls
|
||||||
))
|
))
|
||||||
|
|
|
@ -16,7 +16,10 @@
|
||||||
# The package use a non existing variant in a depends_on directive
|
# The package use a non existing variant in a depends_on directive
|
||||||
(['wrong-variant-in-depends-on'], 'PKG-DIRECTIVES'),
|
(['wrong-variant-in-depends-on'], 'PKG-DIRECTIVES'),
|
||||||
# This package has no issues
|
# This package has no issues
|
||||||
(['mpileaks'], None)
|
(['mpileaks'], None),
|
||||||
|
# This package has a conflict with a trigger which cannot constrain the constraint
|
||||||
|
# Should not raise an error
|
||||||
|
(['unconstrainable-conflict'], None),
|
||||||
])
|
])
|
||||||
def test_package_audits(packages, failing_check, mock_packages):
|
def test_package_audits(packages, failing_check, mock_packages):
|
||||||
reports = spack.audit.run_group('packages', pkgs=packages)
|
reports = spack.audit.run_group('packages', pkgs=packages)
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
||||||
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
|
||||||
|
class UnconstrainableConflict(Package):
|
||||||
|
"""Package with a conflict whose trigger cannot constrain its constraint."""
|
||||||
|
|
||||||
|
homepage = "http://www.example.com"
|
||||||
|
url = "http://www.example.com/unconstrainable-conflict-1.0.tar.gz"
|
||||||
|
|
||||||
|
version('1.0', '0123456789abcdef0123456789abcdef')
|
||||||
|
|
||||||
|
# Two conflicts so there's always one that is not the current platform
|
||||||
|
conflicts('target=x86_64', when='platform=darwin')
|
||||||
|
conflicts('target=aarch64', when='platform=linux')
|
Loading…
Reference in a new issue