Add lookup check tests

This commit is contained in:
psakiev 2025-03-29 21:00:54 -06:00
parent b4269ff8f1
commit a5f0ba5692
3 changed files with 39 additions and 8 deletions

View File

@ -3101,6 +3101,14 @@ def setup(
if node.namespace is not None:
self.explicitly_required_namespaces[node.name] = node.namespace
# abstract specs with commit variants are assigend version most likely to have commit sha
for spec in specs:
version = spec.versions.concrete_range_as_version
if not version:
version = max(spack.repo.PATH.get_pkg_class(spec.fullname).versions.keys())
spec.versions = spack.version.VersionList([version])
self.gen = ProblemInstanceBuilder()
compiler_parser = CompilerParser(configuration=spack.config.CONFIG).with_input_specs(specs)
@ -3128,7 +3136,6 @@ def setup(
specs = tuple(specs) # ensure compatible types to add
self.gen.h1("Reusable concrete specs")
# TODO(psakiev) need fact spec has commit
self.define_concrete_input_specs(specs, self.pkgs)
if reuse:
self.gen.fact(fn.optimize_for_reuse())
@ -4219,7 +4226,8 @@ def _specs_with_commits(spec):
if not spec.version.commit_sha:
# TODO(psakiev) this will be a failure when commit look up is automated
return
spec.variants["commit"] = vt.SingleValuedVariant("commit", spec.version.commit_sha)
if not "commit" in spec.variants:
spec.variants["commit"] = vt.SingleValuedVariant("commit", spec.version.commit_sha)
def _inject_patches_variant(root: spack.spec.Spec) -> None:

View File

@ -617,7 +617,7 @@ def _nresults(_qresult):
@pytest.mark.usefixtures("install_mockery", "mock_fetch", "mutable_mock_env_path")
def test_phil_add_find_based_on_commit_sha(mock_git_version_info, monkeypatch):
def test_find_based_on_commit_sha(mock_git_version_info, monkeypatch):
repo_path, filename, commits = mock_git_version_info
file_url = pathlib.Path(repo_path).as_uri()

View File

@ -2729,13 +2729,13 @@ def test_correct_external_is_selected_from_packages_yaml(self, mutable_config):
assert s.satisfies("%clang")
assert s.prefix == "/tmp/prefix2"
def test_phil_add_git_based_version_must_exist_to_use_ref(self):
def test_git_based_version_must_exist_to_use_ref(self):
# gmake should fail, only has sha256
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
def test_phil_add_commit_variant_in_absence_of_version_selects_max_infinity_version(self):
def test_commit_variant_in_absence_of_version_selects_max_infinity_version(self):
spec = spack.concretize.concretize_one(f"git-ref-package commit={'a' * 40}")
assert spec.satisfies("@develop")
@ -3277,11 +3277,10 @@ def test_spec_unification(unify, mutable_config, mock_packages):
(f"git-ref-package@main commit={'a' * 39}", AssertionError),
(f"git-ref-package@2.1.6 commit={'a' * 40}", spack.error.UnsatisfiableSpecError),
(f"git-ref-package@git.2.1.6=2.1.6 commit={'a' * 40}", None),
# TODO(psakiev): need to monkeypatch git so this case doesn't query the web
# (f"git-ref-package@git.2.1.6 commit={'a' * 40}", None),
(f"git-ref-package@git.{'a' * 40}=2.1.6 commit={'a' * 40}", None),
],
)
def test_spec_containing_commit_variant(spec_str, error_type):
def test_phil_spec_containing_commit_variant(spec_str, error_type):
spec = spack.spec.Spec(spec_str)
if error_type is None:
spack.concretize.concretize_one(spec)
@ -3290,6 +3289,30 @@ def test_spec_containing_commit_variant(spec_str, error_type):
spack.concretize.concretize_one(spec)
@pytest.mark.usefixtures("mutable_config", "mock_packages", "do_not_check_runtimes_on_reuse")
@pytest.mark.parametrize(
"spec_str, error_type",
[
(f"git-test-commit@git.main commit={'a' * 40}", None),
(f"git-test-commit@git.v1.0 commit={'a' * 40}", None),
("git-test-commit@{sha} commit={sha}", None),
("git-test-commit@{sha} commit=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", None),
],
)
def test_phil_spec_with_commit_interacts_with_lookup(mock_git_version_info, monkeypatch, spec_str, error_type):
# This test will be short lived. Technically we could do further checks with a Lookup
# but skipping impl since we are going to deprecate
repo_path, filename, commits = mock_git_version_info
file_url = pathlib.Path(repo_path).as_uri()
monkeypatch.setattr(spack.package_base.PackageBase, "git", file_url, raising=False)
spec = spack.spec.Spec(spec_str.format(sha = commits[-1]))
if error_type is None:
spack.concretize.concretize_one(spec)
else:
with pytest.raises(error_type):
spack.concretize.concretize_one(spec)
@pytest.mark.usefixtures("mutable_config", "mock_packages", "do_not_check_runtimes_on_reuse")
@pytest.mark.parametrize("version_str", [f"git.{'a' * 40}=main", "git.2.1.5=main"])
def test_relationship_git_versions_and_commit_variant(version_str):