summaryrefslogtreecommitdiff
path: root/lib/spack/spack/cmd/fetch.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/spack/spack/cmd/fetch.py')
-rw-r--r--lib/spack/spack/cmd/fetch.py30
1 files changed, 18 insertions, 12 deletions
diff --git a/lib/spack/spack/cmd/fetch.py b/lib/spack/spack/cmd/fetch.py
index 873c6b54db..227f7e8973 100644
--- a/lib/spack/spack/cmd/fetch.py
+++ b/lib/spack/spack/cmd/fetch.py
@@ -10,6 +10,7 @@ import spack.cmd.common.arguments as arguments
import spack.config
import spack.environment as ev
import spack.repo
+import spack.traverse
description = "fetch archives for packages"
section = "build"
@@ -36,6 +37,12 @@ def setup_parser(subparser):
def fetch(parser, args):
+ if args.no_checksum:
+ spack.config.set("config:checksum", False, scope="command_line")
+
+ if args.deprecated:
+ spack.config.set("config:deprecated", True, scope="command_line")
+
if args.specs:
specs = spack.cmd.parse_specs(args.specs, concretize=True)
else:
@@ -55,18 +62,17 @@ def fetch(parser, args):
else:
tty.die("fetch requires at least one spec argument")
- if args.no_checksum:
- spack.config.set("config:checksum", False, scope="command_line")
+ if args.dependencies or args.missing:
+ to_be_fetched = spack.traverse.traverse_nodes(specs, key=spack.traverse.by_dag_hash)
+ else:
+ to_be_fetched = specs
- if args.deprecated:
- spack.config.set("config:deprecated", True, scope="command_line")
+ for spec in to_be_fetched:
+ if args.missing and spec.installed:
+ continue
- for spec in specs:
- if args.missing or args.dependencies:
- for s in spec.traverse(root=False):
- # Skip already-installed packages with --missing
- if args.missing and s.installed:
- continue
+ pkg = spec.package
- s.package.do_fetch()
- spec.package.do_fetch()
+ pkg.stage.keep = True
+ with pkg.stage:
+ pkg.do_fetch()