env: remove upgrade() and relocate() for now
- these won't be in the first release of environments - they'll be added back in later
This commit is contained in:
parent
36623a27fd
commit
c27b78ee36
@ -6,8 +6,6 @@
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import shutil
|
||||
import tempfile
|
||||
|
||||
import llnl.util.tty as tty
|
||||
import llnl.util.filesystem as fs
|
||||
@ -37,11 +35,9 @@
|
||||
['list', 'ls'],
|
||||
'add',
|
||||
['remove', 'rm'],
|
||||
'upgrade',
|
||||
'concretize',
|
||||
['status', 'st'],
|
||||
'loads',
|
||||
'relocate',
|
||||
'stage',
|
||||
'install',
|
||||
'uninstall',
|
||||
@ -411,20 +407,6 @@ def env_uninstall(args):
|
||||
env.uninstall(args)
|
||||
|
||||
|
||||
#
|
||||
# env relocate
|
||||
#
|
||||
def env_relocate_setup_parser(subparser):
|
||||
"""reconcretize environment with new OS and/or compiler"""
|
||||
subparser.add_argument('--compiler', help="Compiler spec to use")
|
||||
|
||||
|
||||
def env_relocate(args):
|
||||
env = get_env(args, 'relocate')
|
||||
env.reset_os_and_compiler(compiler=args.compiler)
|
||||
env.write()
|
||||
|
||||
|
||||
#
|
||||
# env status
|
||||
#
|
||||
@ -503,34 +485,6 @@ def env_loads(args):
|
||||
print(' source %s' % loads_file)
|
||||
|
||||
|
||||
#
|
||||
# env upgrade
|
||||
#
|
||||
def env_upgrade_setup_parser(subparser):
|
||||
"""upgrade a dependency package in an environment to the latest version"""
|
||||
subparser.add_argument('dep_name', help='Dependency package to upgrade')
|
||||
subparser.add_argument('--dry-run', action='store_true', dest='dry_run',
|
||||
help="Just show the updates that would take place")
|
||||
|
||||
|
||||
def env_upgrade(args):
|
||||
env = get_env(args, 'upgrade')
|
||||
|
||||
if os.path.exists(env.repos_path):
|
||||
repo_stage = tempfile.mkdtemp()
|
||||
new_repos_path = os.path.join_path(repo_stage, 'repos')
|
||||
shutil.copytree(env.repos_path, new_repos_path)
|
||||
|
||||
repo = spack.environment.make_repo_path(new_repos_path)
|
||||
if args.dep_name in repo:
|
||||
shutil.rmtree(repo.dirname_for_package_name(args.dep_name))
|
||||
spack.repo.path.put_first(repo)
|
||||
|
||||
new_dep = env.upgrade_dependency(args.dep_name, args.dry_run)
|
||||
if not args.dry_run and new_dep:
|
||||
env.write(new_dep)
|
||||
|
||||
|
||||
#: Dictionary mapping subcommand names and aliases to functions
|
||||
subcommand_functions = {}
|
||||
|
||||
|
@ -21,8 +21,7 @@
|
||||
import spack.spec
|
||||
import spack.util.spack_json as sjson
|
||||
import spack.config
|
||||
from spack.spec import Spec, CompilerSpec, FlagMap
|
||||
from spack.version import VersionList
|
||||
from spack.spec import Spec
|
||||
|
||||
|
||||
#: environment variable used to indicate the active environment
|
||||
@ -224,31 +223,6 @@ def list_environments():
|
||||
return names
|
||||
|
||||
|
||||
def _reset_os_and_compiler(spec, compiler=None):
|
||||
spec = spec.copy()
|
||||
for x in spec.traverse():
|
||||
x.compiler = None
|
||||
x.architecture = None
|
||||
x.compiler_flags = FlagMap(x)
|
||||
x._concrete = False
|
||||
x._hash = None
|
||||
if compiler:
|
||||
spec.compiler = CompilerSpec(compiler)
|
||||
spec.concretize()
|
||||
return spec
|
||||
|
||||
|
||||
def _upgrade_dependency_version(spec, dep_name):
|
||||
spec = spec.copy()
|
||||
for x in spec.traverse():
|
||||
x._concrete = False
|
||||
x._normal = False
|
||||
x._hash = None
|
||||
spec[dep_name].versions = VersionList(':')
|
||||
spec.concretize()
|
||||
return spec
|
||||
|
||||
|
||||
def validate(data, filename=None):
|
||||
global _validator
|
||||
if _validator is None:
|
||||
@ -635,44 +609,6 @@ def write_user_spec(s, c):
|
||||
write_user_spec(s, 'r')
|
||||
stream.write(c.tree(**kwargs))
|
||||
|
||||
def upgrade_dependency(self, dep_name, dry_run=False):
|
||||
# TODO: if you have
|
||||
# w -> x -> y
|
||||
# and
|
||||
# v -> x -> y
|
||||
# then it would be desirable to ensure that w and v refer to the
|
||||
# same x after upgrading y. This is not currently guaranteed.
|
||||
new_order = list()
|
||||
new_deps = list()
|
||||
for i, spec_hash in enumerate(self.concretized_order):
|
||||
spec = self.specs_by_hash[spec_hash]
|
||||
if dep_name in spec:
|
||||
if dry_run:
|
||||
tty.msg("Would upgrade {0} for {1}"
|
||||
.format(spec[dep_name].format(), spec.format()))
|
||||
else:
|
||||
new_spec = _upgrade_dependency_version(spec, dep_name)
|
||||
new_order.append(new_spec.dag_hash())
|
||||
self.specs_by_hash[new_spec.dag_hash()] = new_spec
|
||||
new_deps.append(new_spec[dep_name])
|
||||
else:
|
||||
new_order.append(spec_hash)
|
||||
|
||||
if not dry_run:
|
||||
self.concretized_order = new_order
|
||||
return new_deps[0] if new_deps else None
|
||||
|
||||
def reset_os_and_compiler(self, compiler=None):
|
||||
new_order = list()
|
||||
new_specs_by_hash = {}
|
||||
for spec_hash in self.concretized_order:
|
||||
spec = self.specs_by_hash[spec_hash]
|
||||
new_spec = _reset_os_and_compiler(spec, compiler)
|
||||
new_order.append(new_spec.dag_hash())
|
||||
new_specs_by_hash[new_spec.dag_hash()] = new_spec
|
||||
self.concretized_order = new_order
|
||||
self.specs_by_hash = new_specs_by_hash
|
||||
|
||||
def _get_environment_specs(self, recurse_dependencies=True):
|
||||
"""Returns the specs of all the packages in an environment.
|
||||
If these specs appear under different user_specs, only one copy
|
||||
|
@ -13,7 +13,6 @@
|
||||
import spack.modules
|
||||
import spack.environment as ev
|
||||
from spack.cmd.env import _env_concretize, _env_create
|
||||
from spack.version import Version
|
||||
from spack.spec import Spec
|
||||
from spack.main import SpackCommand
|
||||
|
||||
@ -139,21 +138,6 @@ def test_remove_command():
|
||||
assert 'mpileaks' not in env('status', 'test')
|
||||
|
||||
|
||||
def test_reset_compiler():
|
||||
e = ev.create('test')
|
||||
e.add('mpileaks')
|
||||
e.concretize()
|
||||
|
||||
first_spec = e.specs_by_hash[e.concretized_order[0]]
|
||||
available = set(['gcc', 'clang'])
|
||||
available.remove(first_spec.compiler.name)
|
||||
new_compiler = next(iter(available))
|
||||
e.reset_os_and_compiler(compiler=new_compiler)
|
||||
|
||||
new_spec = e.specs_by_hash[e.concretized_order[0]]
|
||||
assert new_spec.compiler != first_spec.compiler
|
||||
|
||||
|
||||
def test_environment_status():
|
||||
e = ev.create('test')
|
||||
e.add('mpileaks')
|
||||
@ -168,19 +152,6 @@ def test_environment_status():
|
||||
assert mpileaks_spec.format() in list_content
|
||||
|
||||
|
||||
def test_upgrade_dependency():
|
||||
e = ev.create('test')
|
||||
e.add('mpileaks ^callpath@0.9')
|
||||
e.concretize()
|
||||
|
||||
e.upgrade_dependency('callpath')
|
||||
env_specs = e._get_environment_specs()
|
||||
callpath_dependents = list(x for x in env_specs if 'callpath' in x)
|
||||
assert callpath_dependents
|
||||
for spec in callpath_dependents:
|
||||
assert spec['callpath'].version == Version('1.0')
|
||||
|
||||
|
||||
def test_to_lockfile_dict():
|
||||
e = ev.create('test')
|
||||
e.add('mpileaks')
|
||||
|
Loading…
Reference in New Issue
Block a user