diff options
author | Todd Gamblin <tgamblin@llnl.gov> | 2022-05-11 15:36:46 -0700 |
---|---|---|
committer | Todd Gamblin <tgamblin@llnl.gov> | 2022-05-13 10:45:12 -0700 |
commit | 5cb40cbcd2d9b6a95515de99bb6b3cc7fae14787 (patch) | |
tree | ba28dd33bcfccdbc4796a9331e1229f10d1e4246 /lib | |
parent | c93e465134b06b8f18717fc664ac328858bad95c (diff) | |
download | spack-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.py | 39 | ||||
-rw-r--r-- | lib/spack/spack/environment/environment.py | 1 |
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 |