summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd Gamblin <tgamblin@llnl.gov>2022-04-29 09:59:59 -0700
committerTodd Gamblin <tgamblin@llnl.gov>2022-05-13 10:45:12 -0700
commit15eb98368d2453ab5cbfbdf4675c4c7e99b022d4 (patch)
treed16d6f7e5686be0a52054aff7e5ba052cf822ac7
parent7c1d566959838dec48185d1de67697225d8979d5 (diff)
downloadspack-15eb98368d2453ab5cbfbdf4675c4c7e99b022d4.tar.gz
spack-15eb98368d2453ab5cbfbdf4675c4c7e99b022d4.tar.bz2
spack-15eb98368d2453ab5cbfbdf4675c4c7e99b022d4.tar.xz
spack-15eb98368d2453ab5cbfbdf4675c4c7e99b022d4.zip
bugfix: tests trying to ignore package changes should use `build_hash`
- [x] update test to use `build_hash` instead of `dag_hash`, as we're testing for graph structure, and specifically NOT testing for package changes. - [x] make hash descriptors callable on specs to simplify syntax for invoking them - [x] make `Spec.spec_hash()` public
-rw-r--r--lib/spack/spack/hash_types.py4
-rw-r--r--lib/spack/spack/spec.py8
-rw-r--r--lib/spack/spack/test/concretize.py8
3 files changed, 15 insertions, 5 deletions
diff --git a/lib/spack/spack/hash_types.py b/lib/spack/spack/hash_types.py
index 0f8d20fb5b..abe8a0b282 100644
--- a/lib/spack/spack/hash_types.py
+++ b/lib/spack/spack/hash_types.py
@@ -33,6 +33,10 @@ class SpecHashDescriptor(object):
"""Private attribute stored on spec"""
return '_' + self.name
+ def __call__(self, spec):
+ """Run this hash on the provided spec."""
+ return spec.spec_hash(self)
+
#: Spack's deployment hash. Includes all inputs that can affect how a package is built.
dag_hash = SpecHashDescriptor(
diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py
index c49878cd37..cf27a8db68 100644
--- a/lib/spack/spack/spec.py
+++ b/lib/spack/spack/spec.py
@@ -1754,7 +1754,7 @@ class Spec(object):
def prefix(self, value):
self._prefix = spack.util.prefix.Prefix(pth.convert_to_platform_path(value))
- def _spec_hash(self, hash):
+ def spec_hash(self, hash):
"""Utility method for computing different types of Spec hashes.
Arguments:
@@ -1771,7 +1771,7 @@ class Spec(object):
def _cached_hash(self, hash, length=None):
"""Helper function for storing a cached hash on the spec.
- This will run _spec_hash() with the deptype and package_hash
+ This will run spec_hash() with the deptype and package_hash
parameters, and if this spec is concrete, it will store the value
in the supplied attribute on this spec.
@@ -1779,13 +1779,13 @@ class Spec(object):
hash (spack.hash_types.SpecHashDescriptor): type of hash to generate.
"""
if not hash.attr:
- return self._spec_hash(hash)[:length]
+ return self.spec_hash(hash)[:length]
hash_string = getattr(self, hash.attr, None)
if hash_string:
return hash_string[:length]
else:
- hash_string = self._spec_hash(hash)
+ hash_string = self.spec_hash(hash)
if self.concrete:
setattr(self, hash.attr, hash_string)
diff --git a/lib/spack/spack/test/concretize.py b/lib/spack/spack/test/concretize.py
index 698041de98..4c2c8f5bb2 100644
--- a/lib/spack/spack/test/concretize.py
+++ b/lib/spack/spack/test/concretize.py
@@ -16,6 +16,7 @@ import llnl.util.lang
import spack.compilers
import spack.concretize
import spack.error
+import spack.hash_types as ht
import spack.platforms
import spack.repo
import spack.variant as vt
@@ -1287,7 +1288,12 @@ class TestConcretize(object):
new_root_without_reuse = Spec('root').concretized()
- assert root.dag_hash() == new_root_with_reuse.dag_hash()
+ # validate that the graphs are the same with reuse, but not without
+ assert ht.build_hash(root) == ht.build_hash(new_root_with_reuse)
+ assert ht.build_hash(root) != ht.build_hash(new_root_without_reuse)
+
+ # package hashes are different, so dag hashes will be different
+ assert root.dag_hash() != new_root_with_reuse.dag_hash()
assert root.dag_hash() != new_root_without_reuse.dag_hash()
@pytest.mark.regression('20784')