Fix #217: Make package cache use DAG hash instead of sorted deps.

- Gets rid of last vestige of old-style specs.
- Uses new hashing for lookup
This commit is contained in:
Todd Gamblin 2015-12-11 02:16:24 -08:00
parent 3163d016db
commit 7526a89463

View File

@ -67,27 +67,28 @@ def get(self, spec, **kwargs):
if spec.virtual:
raise UnknownPackageError(spec.name)
dhash = spec.dag_hash()
if kwargs.get('new', False):
if spec in self.instances:
del self.instances[spec]
if dhash in self.instances:
del self.instances[dhash]
if not spec in self.instances:
if not dhash in self.instances:
package_class = self.get_class_for_package_name(spec.name)
try:
copy = spec.copy()
self.instances[copy] = package_class(copy)
copy = spec.copy() # defensive copy. Package owns its spec.
self.instances[dhash] = package_class(copy)
except Exception, e:
if spack.debug:
sys.excepthook(*sys.exc_info())
raise FailedConstructorError(spec.name, e)
return self.instances[spec]
return self.instances[dhash]
@_autospec
def delete(self, spec):
"""Force a package to be recreated."""
del self.instances[spec]
del self.instances[spec.dag_hash()]
def purge(self):