reworked to deal with stage.path as property

This version actually pulls the path through the package to deliver it
to each stage on creation when passed through the command.  This is
necessary due to the new StageComposite class that makes setting the
path directly on the stage impractical, it also takes the logic out of
package for the most part, which seems like an improvement.
This commit is contained in:
Tom Scogland 2016-03-31 10:20:55 -07:00
parent 63f824b218
commit 5d2151ed64
3 changed files with 14 additions and 13 deletions

View file

@ -54,6 +54,5 @@ def stage(parser, args):
for spec in specs:
package = spack.repo.get(spec)
if args.path:
package.do_stage(path=args.path)
else:
package.do_stage()
package.path = args.path
package.do_stage()

View file

@ -335,6 +335,9 @@ def __init__(self, spec):
if '.' in self.name:
self.name = self.name[self.name.rindex('.') + 1:]
# Allow custom staging paths for packages
self.path=None
# Sanity check attributes required by Spack directives.
spack.directives.ensure_dicts(type(self))
@ -445,7 +448,8 @@ def _make_resource_stage(self, root_stage, fetcher, resource):
resource_stage_folder = self._resource_stage(resource)
resource_mirror = join_path(self.name, os.path.basename(fetcher.url))
stage = ResourceStage(resource.fetcher, root=root_stage, resource=resource,
name=resource_stage_folder, mirror_path=resource_mirror)
name=resource_stage_folder, mirror_path=resource_mirror,
path=self.path)
return stage
def _make_root_stage(self, fetcher):
@ -455,7 +459,7 @@ def _make_root_stage(self, fetcher):
s = self.spec
stage_name = "%s-%s-%s" % (s.name, s.version, s.dag_hash())
# Build the composite stage
stage = Stage(fetcher, mirror_path=mp, name=stage_name)
stage = Stage(fetcher, mirror_path=mp, name=stage_name, path=self.path)
return stage
def _make_stage(self):
@ -709,18 +713,13 @@ def do_fetch(self, mirror_only=False):
if spack.do_checksum and self.version in self.versions:
self.stage.check()
def do_stage(self, mirror_only=False, path=None):
def do_stage(self, mirror_only=False):
"""Unpacks the fetched tarball, then changes into the expanded tarball
directory."""
if not self.spec.concrete:
raise ValueError("Can only stage concrete packages.")
self.do_fetch(mirror_only)
if path is not None:
self.stage.path = path
self.stage.expand_archive()
self.stage.chdir_to_source()

View file

@ -89,7 +89,7 @@ class Stage(object):
"""
def __init__(self, url_or_fetch_strategy,
name=None, mirror_path=None, keep=False):
name=None, mirror_path=None, keep=False, path=None):
"""Create a stage object.
Parameters:
url_or_fetch_strategy
@ -135,7 +135,10 @@ def __init__(self, url_or_fetch_strategy,
# Try to construct here a temporary name for the stage directory
# If this is a named stage, then construct a named path.
self.path = join_path(spack.stage_path, self.name)
if path is not None:
self.path = path
else:
self.path = join_path(spack.stage_path, self.name)
# Flag to decide whether to delete the stage folder on exit or not
self.keep = keep