Added a setter to the Spec.prefix property (#6814)

This commit removes logic from Spec that was there only to be used in
tests, and allows to set a new prefix cleanly in user's code.
This commit is contained in:
Massimiliano Culpo 2018-01-19 09:31:19 +01:00 committed by GitHub
parent 3686c250ed
commit a389bff949
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 13 deletions

View File

@ -884,6 +884,9 @@ def __init__(self, spec, name, query_parameters):
@key_ordering
class Spec(object):
#: Cache for spec's prefix, computed lazily in the corresponding property
_prefix = None
@staticmethod
def from_literal(spec_dict, normal=True):
"""Builds a Spec from a dictionary containing the spec literal.
@ -1374,12 +1377,13 @@ def cshort_spec(self):
@property
def prefix(self):
if hasattr(self, 'test_prefix'):
return Prefix(self.test_prefix)
return Prefix(spack.store.layout.path_for_spec(self))
if self._prefix is None:
self.prefix = spack.store.layout.path_for_spec(self)
return self._prefix
def _set_test_prefix(self, val):
self.test_prefix = val
@prefix.setter
def prefix(self, value):
self._prefix = Prefix(value)
def dag_hash(self, length=None):
"""Return a hash of the entire spec DAG, including connectivity."""

View File

@ -75,7 +75,7 @@ def python_and_extension_dirs(tmpdir):
python_spec = spack.spec.Spec('python@2.7.12')
python_spec._concrete = True
python_spec.package.spec._set_test_prefix(str(python_prefix))
python_spec.package.spec.prefix = str(python_prefix)
ext_dirs = {
'bin/': {
@ -115,7 +115,7 @@ def test_python_activation(tmpdir):
python_prefix = str(tmpdir.join(python_name))
# Set the prefix on the package's spec reference because that is a copy of
# the original spec
python_spec.package.spec._set_test_prefix(python_prefix)
python_spec.package.spec.prefix = python_prefix
ext_name = 'py-extension'
tmpdir.ensure(ext_name, dir=True)
@ -130,7 +130,7 @@ def test_python_activation_with_files(tmpdir, python_and_extension_dirs):
python_spec = spack.spec.Spec('python@2.7.12')
python_spec._concrete = True
python_spec.package.spec._set_test_prefix(python_prefix)
python_spec.package.spec.prefix = python_prefix
ext_pkg = FakeExtensionPackage('py-extension', ext_prefix)
@ -152,7 +152,7 @@ def test_python_activation_view(tmpdir, python_and_extension_dirs):
python_spec = spack.spec.Spec('python@2.7.12')
python_spec._concrete = True
python_spec.package.spec._set_test_prefix(python_prefix)
python_spec.package.spec.prefix = python_prefix
ext_pkg = FakeExtensionPackage('py-extension', ext_prefix)
@ -189,7 +189,7 @@ def perl_and_extension_dirs(tmpdir):
perl_spec = spack.spec.Spec('perl@5.24.1')
perl_spec._concrete = True
perl_spec.package.spec._set_test_prefix(str(perl_prefix))
perl_spec.package.spec.prefix = str(perl_prefix)
ext_dirs = {
'bin/': {
@ -225,7 +225,7 @@ def test_perl_activation(tmpdir):
perl_prefix = str(tmpdir.join(perl_name))
# Set the prefix on the package's spec reference because that is a copy of
# the original spec
perl_spec.package.spec._set_test_prefix(perl_prefix)
perl_spec.package.spec.prefix = perl_prefix
ext_name = 'perl-extension'
tmpdir.ensure(ext_name, dir=True)
@ -240,7 +240,7 @@ def test_perl_activation_with_files(tmpdir, perl_and_extension_dirs):
perl_spec = spack.spec.Spec('perl@5.24.1')
perl_spec._concrete = True
perl_spec.package.spec._set_test_prefix(perl_prefix)
perl_spec.package.spec.prefix = perl_prefix
ext_pkg = FakeExtensionPackage('perl-extension', ext_prefix)
@ -255,7 +255,7 @@ def test_perl_activation_view(tmpdir, perl_and_extension_dirs):
perl_spec = spack.spec.Spec('perl@5.24.1')
perl_spec._concrete = True
perl_spec.package.spec._set_test_prefix(perl_prefix)
perl_spec.package.spec.prefix = perl_prefix
ext_pkg = FakeExtensionPackage('perl-extension', ext_prefix)