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:
parent
63f824b218
commit
5d2151ed64
3 changed files with 14 additions and 13 deletions
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue