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 @key_ordering
class Spec(object): class Spec(object):
#: Cache for spec's prefix, computed lazily in the corresponding property
_prefix = None
@staticmethod @staticmethod
def from_literal(spec_dict, normal=True): def from_literal(spec_dict, normal=True):
"""Builds a Spec from a dictionary containing the spec literal. """Builds a Spec from a dictionary containing the spec literal.
@ -1374,12 +1377,13 @@ def cshort_spec(self):
@property @property
def prefix(self): def prefix(self):
if hasattr(self, 'test_prefix'): if self._prefix is None:
return Prefix(self.test_prefix) self.prefix = spack.store.layout.path_for_spec(self)
return Prefix(spack.store.layout.path_for_spec(self)) return self._prefix
def _set_test_prefix(self, val): @prefix.setter
self.test_prefix = val def prefix(self, value):
self._prefix = Prefix(value)
def dag_hash(self, length=None): def dag_hash(self, length=None):
"""Return a hash of the entire spec DAG, including connectivity.""" """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 = spack.spec.Spec('python@2.7.12')
python_spec._concrete = True python_spec._concrete = True
python_spec.package.spec._set_test_prefix(str(python_prefix)) python_spec.package.spec.prefix = str(python_prefix)
ext_dirs = { ext_dirs = {
'bin/': { 'bin/': {
@ -115,7 +115,7 @@ def test_python_activation(tmpdir):
python_prefix = str(tmpdir.join(python_name)) python_prefix = str(tmpdir.join(python_name))
# Set the prefix on the package's spec reference because that is a copy of # Set the prefix on the package's spec reference because that is a copy of
# the original spec # the original spec
python_spec.package.spec._set_test_prefix(python_prefix) python_spec.package.spec.prefix = python_prefix
ext_name = 'py-extension' ext_name = 'py-extension'
tmpdir.ensure(ext_name, dir=True) 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 = spack.spec.Spec('python@2.7.12')
python_spec._concrete = True 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) 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 = spack.spec.Spec('python@2.7.12')
python_spec._concrete = True 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) 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 = spack.spec.Spec('perl@5.24.1')
perl_spec._concrete = True perl_spec._concrete = True
perl_spec.package.spec._set_test_prefix(str(perl_prefix)) perl_spec.package.spec.prefix = str(perl_prefix)
ext_dirs = { ext_dirs = {
'bin/': { 'bin/': {
@ -225,7 +225,7 @@ def test_perl_activation(tmpdir):
perl_prefix = str(tmpdir.join(perl_name)) perl_prefix = str(tmpdir.join(perl_name))
# Set the prefix on the package's spec reference because that is a copy of # Set the prefix on the package's spec reference because that is a copy of
# the original spec # the original spec
perl_spec.package.spec._set_test_prefix(perl_prefix) perl_spec.package.spec.prefix = perl_prefix
ext_name = 'perl-extension' ext_name = 'perl-extension'
tmpdir.ensure(ext_name, dir=True) 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 = spack.spec.Spec('perl@5.24.1')
perl_spec._concrete = True 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) 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 = spack.spec.Spec('perl@5.24.1')
perl_spec._concrete = True 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) ext_pkg = FakeExtensionPackage('perl-extension', ext_prefix)