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 os
|
||||||
import sys
|
import sys
|
||||||
import argparse
|
import argparse
|
||||||
import shutil
|
|
||||||
import tempfile
|
|
||||||
|
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
import llnl.util.filesystem as fs
|
import llnl.util.filesystem as fs
|
||||||
@ -37,11 +35,9 @@
|
|||||||
['list', 'ls'],
|
['list', 'ls'],
|
||||||
'add',
|
'add',
|
||||||
['remove', 'rm'],
|
['remove', 'rm'],
|
||||||
'upgrade',
|
|
||||||
'concretize',
|
'concretize',
|
||||||
['status', 'st'],
|
['status', 'st'],
|
||||||
'loads',
|
'loads',
|
||||||
'relocate',
|
|
||||||
'stage',
|
'stage',
|
||||||
'install',
|
'install',
|
||||||
'uninstall',
|
'uninstall',
|
||||||
@ -411,20 +407,6 @@ def env_uninstall(args):
|
|||||||
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
|
# env status
|
||||||
#
|
#
|
||||||
@ -503,34 +485,6 @@ def env_loads(args):
|
|||||||
print(' source %s' % loads_file)
|
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
|
#: Dictionary mapping subcommand names and aliases to functions
|
||||||
subcommand_functions = {}
|
subcommand_functions = {}
|
||||||
|
|
||||||
|
@ -21,8 +21,7 @@
|
|||||||
import spack.spec
|
import spack.spec
|
||||||
import spack.util.spack_json as sjson
|
import spack.util.spack_json as sjson
|
||||||
import spack.config
|
import spack.config
|
||||||
from spack.spec import Spec, CompilerSpec, FlagMap
|
from spack.spec import Spec
|
||||||
from spack.version import VersionList
|
|
||||||
|
|
||||||
|
|
||||||
#: environment variable used to indicate the active environment
|
#: environment variable used to indicate the active environment
|
||||||
@ -224,31 +223,6 @@ def list_environments():
|
|||||||
return names
|
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):
|
def validate(data, filename=None):
|
||||||
global _validator
|
global _validator
|
||||||
if _validator is None:
|
if _validator is None:
|
||||||
@ -635,44 +609,6 @@ def write_user_spec(s, c):
|
|||||||
write_user_spec(s, 'r')
|
write_user_spec(s, 'r')
|
||||||
stream.write(c.tree(**kwargs))
|
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):
|
def _get_environment_specs(self, recurse_dependencies=True):
|
||||||
"""Returns the specs of all the packages in an environment.
|
"""Returns the specs of all the packages in an environment.
|
||||||
If these specs appear under different user_specs, only one copy
|
If these specs appear under different user_specs, only one copy
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
import spack.modules
|
import spack.modules
|
||||||
import spack.environment as ev
|
import spack.environment as ev
|
||||||
from spack.cmd.env import _env_concretize, _env_create
|
from spack.cmd.env import _env_concretize, _env_create
|
||||||
from spack.version import Version
|
|
||||||
from spack.spec import Spec
|
from spack.spec import Spec
|
||||||
from spack.main import SpackCommand
|
from spack.main import SpackCommand
|
||||||
|
|
||||||
@ -139,21 +138,6 @@ def test_remove_command():
|
|||||||
assert 'mpileaks' not in env('status', 'test')
|
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():
|
def test_environment_status():
|
||||||
e = ev.create('test')
|
e = ev.create('test')
|
||||||
e.add('mpileaks')
|
e.add('mpileaks')
|
||||||
@ -168,19 +152,6 @@ def test_environment_status():
|
|||||||
assert mpileaks_spec.format() in list_content
|
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():
|
def test_to_lockfile_dict():
|
||||||
e = ev.create('test')
|
e = ev.create('test')
|
||||||
e.add('mpileaks')
|
e.add('mpileaks')
|
||||||
|
Loading…
Reference in New Issue
Block a user