From c0e4d2e3cf6e039fdab12bfb0d6ef957e378f77f Mon Sep 17 00:00:00 2001 From: Philip Sakievich Date: Tue, 25 Mar 2025 22:28:30 -0600 Subject: [PATCH] First new unit test passes --- lib/spack/spack/solver/asp.py | 9 ++++++--- lib/spack/spack/solver/concretize.lp | 1 + lib/spack/spack/test/concretization/core.py | 7 ++++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/spack/spack/solver/asp.py b/lib/spack/spack/solver/asp.py index 43643a69c17..39cce4c2d2c 100644 --- a/lib/spack/spack/solver/asp.py +++ b/lib/spack/spack/solver/asp.py @@ -2901,14 +2901,17 @@ def virtual_providers(self): def define_version_constraints(self): """Define what version_satisfies(...) means in ASP logic.""" # TODO(psakiev) + for pkg_name, versions in sorted(self.possible_versions.items()): + for v in versions: + if v in self.git_commit_versions[pkg_name]: + self.gen.fact(fn.pkg_fact(pkg_name, fn.version_needs_commit(v))) + self.gen.newline() + for pkg_name, versions in sorted(self.version_constraints): # generate facts for each package constraint and the version # that satisfies it for v in sorted(v for v in self.possible_versions[pkg_name] if v.satisfies(versions)): self.gen.fact(fn.pkg_fact(pkg_name, fn.version_satisfies(versions, v))) - if v in self.git_commit_versions[pkg_name]: - self.gen.fact(fn.pkg_fact(pkg_name, fn.version_needs_commit(v))) - self.gen.newline() def collect_virtual_constraints(self): diff --git a/lib/spack/spack/solver/concretize.lp b/lib/spack/spack/solver/concretize.lp index 5743f785322..775df26bc5e 100644 --- a/lib/spack/spack/solver/concretize.lp +++ b/lib/spack/spack/solver/concretize.lp @@ -336,6 +336,7 @@ attr("node_version_satisfies", node(ID, Package), Constraint) pkg_fact(Package, version_satisfies(Constraint, Version)). % Specs with a commit variant can't use versions that don't need commits +error(10, "Cannot use commit variant with '{0}@{1}'", Package, Version) :- attr("version", node(ID, Package), Version), not pkg_fact(Package, version_needs_commit(Version)), attr("variant_value", node(ID, Package), "commit", _). diff --git a/lib/spack/spack/test/concretization/core.py b/lib/spack/spack/test/concretization/core.py index 8f89105f2a2..6592fb1a46d 100644 --- a/lib/spack/spack/test/concretization/core.py +++ b/lib/spack/spack/test/concretization/core.py @@ -2730,11 +2730,12 @@ def test_correct_external_is_selected_from_packages_yaml(self, mutable_config): def test_phil_add_git_based_version_must_exist_to_use_ref(self): s = spack.concretize.concretize_one(f"git-ref-package commit={'a' * 40}") - assert s.satisifes("@main") + assert s.satisfies("@main") #gmake should fail, only has sha256 - with pytest.raises(AssertionError): - s = spack.concretize.concretize_one(f"gmake={'a' * 40}") + with pytest.raises(spack.error.UnsatisfiableSpecError) as e: + s = spack.concretize.concretize_one(f"gmake commit={'a' * 40}") + assert "Cannot use commit variant with" in e.value.message @pytest.mark.usefixtures("mutable_config", "mock_packages", "do_not_check_runtimes_on_reuse")