diff options
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 |