summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTodd Gamblin <tgamblin@llnl.gov>2022-05-11 15:36:46 -0700
committerTodd Gamblin <tgamblin@llnl.gov>2022-05-13 10:45:12 -0700
commit5cb40cbcd2d9b6a95515de99bb6b3cc7fae14787 (patch)
treeba28dd33bcfccdbc4796a9331e1229f10d1e4246 /lib
parentc93e465134b06b8f18717fc664ac328858bad95c (diff)
downloadspack-5cb40cbcd2d9b6a95515de99bb6b3cc7fae14787.tar.gz
spack-5cb40cbcd2d9b6a95515de99bb6b3cc7fae14787.tar.bz2
spack-5cb40cbcd2d9b6a95515de99bb6b3cc7fae14787.tar.xz
spack-5cb40cbcd2d9b6a95515de99bb6b3cc7fae14787.zip
directory_layout: remove outdated checks for old DAG hash
We previously had checks in `directory_layout` to check for build-dependency conflicts when we weren't storing build dependencies. We don't need those anymore; we can just rely on the DAG hash now that it includes everything we know about each spec. - [x] Remove vestigial code for checking installed spec against concrete spec in `ensure_installed()` - [x] Remove `SpecHashCollisionError` -- if specs have the same hash now, they're the same as far as `DirectoryLayout` should be concerned. - [x] Convert spec comparison to `dag_hash()` comparison when adding extensions.
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/directory_layout.py39
-rw-r--r--lib/spack/spack/environment/environment.py1
2 files changed, 6 insertions, 34 deletions
diff --git a/lib/spack/spack/directory_layout.py b/lib/spack/spack/directory_layout.py
index 56ba01c7b4..3ccec788d8 100644
--- a/lib/spack/spack/directory_layout.py
+++ b/lib/spack/spack/directory_layout.py
@@ -238,10 +238,10 @@ class DirectoryLayout(object):
def ensure_installed(self, spec):
"""
- Throws DirectoryLayoutError if:
+ Throws InconsistentInstallDirectoryError if:
1. spec prefix does not exist
- 2. spec prefix does not contain a spec file
- 3. the spec file does not correspond to the spec
+ 2. spec prefix does not contain a spec file, or
+ 3. We read a spec with the wrong DAG hash out of an existing install directory.
"""
_check_concrete(spec)
path = self.path_for_spec(spec)
@@ -257,25 +257,7 @@ class DirectoryLayout(object):
" " + path)
installed_spec = self.read_spec(spec_file_path)
- if installed_spec == spec:
- return
-
- # DAG hashes currently do not include build dependencies.
- #
- # TODO: remove this when we do better concretization and don't
- # ignore build-only deps in hashes.
- elif (installed_spec.copy(deps=('link', 'run')) ==
- spec.copy(deps=('link', 'run'))):
- # The directory layout prefix is based on the dag hash, so among
- # specs with differing full-hash but matching dag-hash, only one
- # may be installed. This means for example that for two instances
- # that differ only in CMake version used to build, only one will
- # be installed.
- return
-
- if spec.dag_hash() == installed_spec.dag_hash():
- raise SpecHashCollisionError(spec, installed_spec)
- else:
+ if installed_spec.dag_hash() != spec.dag_hash():
raise InconsistentInstallDirectoryError(
'Spec file in %s does not match hash!' % spec_file_path)
@@ -463,8 +445,8 @@ class YamlViewExtensionsLayout(ExtensionsLayout):
def check_extension_conflict(self, spec, ext_spec):
exts = self._extension_map(spec)
if ext_spec.name in exts:
- installed_spec = exts[ext_spec.name].copy(deps=('link', 'run'))
- if ext_spec.copy(deps=('link', 'run')) == installed_spec:
+ installed_spec = exts[ext_spec.name]
+ if ext_spec.dag_hash() == installed_spec.dag_hash():
raise ExtensionAlreadyInstalledError(spec, ext_spec)
else:
raise ExtensionConflictError(spec, ext_spec, installed_spec)
@@ -584,15 +566,6 @@ class DirectoryLayoutError(SpackError):
super(DirectoryLayoutError, self).__init__(message, long_msg)
-class SpecHashCollisionError(DirectoryLayoutError):
- """Raised when there is a hash collision in an install layout."""
-
- def __init__(self, installed_spec, new_spec):
- super(SpecHashCollisionError, self).__init__(
- 'Specs %s and %s have the same SHA-1 prefix!'
- % (installed_spec, new_spec))
-
-
class RemoveFailedError(DirectoryLayoutError):
"""Raised when a DirectoryLayout cannot remove an install prefix."""
diff --git a/lib/spack/spack/environment/environment.py b/lib/spack/spack/environment/environment.py
index 6ed4297fca..8c71deb561 100644
--- a/lib/spack/spack/environment/environment.py
+++ b/lib/spack/spack/environment/environment.py
@@ -1828,7 +1828,6 @@ class Environment(object):
spec = Spec.from_node_dict(node_dict)
if not spec._hash:
# in v1 lockfiles, the hash only occurs as a key
- print("HERE")
spec._hash = lockfile_key
specs_by_hash[lockfile_key] = spec