Skip to content
Snippets Groups Projects
Commit 5d2151ed authored by Tom Scogland's avatar Tom Scogland
Browse files

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.
parent 63f824b2
Branches
No related tags found
No related merge requests found
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment