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:
Todd Gamblin 2018-10-26 17:02:21 -07:00
parent 36623a27fd
commit c27b78ee36
3 changed files with 1 additions and 140 deletions

View File

@ -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 = {}

View File

@ -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

View File

@ -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')