fix create/remove env with invalid spack.yaml (#39898)
* fix create/remove env with invalid spack.yaml * fix isort error * fix env ident unittests * Fix pull request points
This commit is contained in:
parent
4738b45fb1
commit
e5cebb6b6f
@ -380,28 +380,35 @@ def env_remove(args):
|
|||||||
and manifests embedded in repositories should be removed manually.
|
and manifests embedded in repositories should be removed manually.
|
||||||
"""
|
"""
|
||||||
read_envs = []
|
read_envs = []
|
||||||
|
bad_envs = []
|
||||||
for env_name in args.rm_env:
|
for env_name in args.rm_env:
|
||||||
env = ev.read(env_name)
|
try:
|
||||||
read_envs.append(env)
|
env = ev.read(env_name)
|
||||||
|
read_envs.append(env)
|
||||||
|
except spack.config.ConfigFormatError:
|
||||||
|
bad_envs.append(env_name)
|
||||||
|
|
||||||
if not args.yes_to_all:
|
if not args.yes_to_all:
|
||||||
answer = tty.get_yes_or_no(
|
environments = string.plural(len(args.rm_env), "environment", show_n=False)
|
||||||
"Really remove %s %s?"
|
envs = string.comma_and(args.rm_env)
|
||||||
% (
|
answer = tty.get_yes_or_no(f"Really remove {environments} {envs}?", default=False)
|
||||||
string.plural(len(args.rm_env), "environment", show_n=False),
|
if not answer:
|
||||||
string.comma_and(args.rm_env),
|
tty.die("Will not remove any environments")
|
||||||
),
|
|
||||||
default=False,
|
|
||||||
)
|
|
||||||
if not answer:
|
|
||||||
tty.die("Will not remove any environments")
|
|
||||||
|
|
||||||
for env in read_envs:
|
for env in read_envs:
|
||||||
if env.active:
|
name = env.name
|
||||||
tty.die("Environment %s can't be removed while activated." % env.name)
|
if env.active:
|
||||||
|
tty.die(f"Environment {name} can't be removed while activated.")
|
||||||
|
env.destroy()
|
||||||
|
tty.msg(f"Successfully removed environment {name}")
|
||||||
|
|
||||||
env.destroy()
|
for bad_env_name in bad_envs:
|
||||||
tty.msg("Successfully removed environment '%s'" % env.name)
|
shutil.rmtree(
|
||||||
|
spack.environment.environment.environment_dir_from_name(
|
||||||
|
bad_env_name, exists_ok=True
|
||||||
|
)
|
||||||
|
)
|
||||||
|
tty.msg(f"Successfully removed environment '{bad_env_name}'")
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -330,16 +330,21 @@ def create_in_dir(
|
|||||||
if with_view is None and keep_relative:
|
if with_view is None and keep_relative:
|
||||||
return Environment(manifest_dir)
|
return Environment(manifest_dir)
|
||||||
|
|
||||||
manifest = EnvironmentManifestFile(manifest_dir)
|
try:
|
||||||
|
manifest = EnvironmentManifestFile(manifest_dir)
|
||||||
|
|
||||||
if with_view is not None:
|
if with_view is not None:
|
||||||
manifest.set_default_view(with_view)
|
manifest.set_default_view(with_view)
|
||||||
|
|
||||||
if not keep_relative and init_file is not None and str(init_file).endswith(manifest_name):
|
if not keep_relative and init_file is not None and str(init_file).endswith(manifest_name):
|
||||||
init_file = pathlib.Path(init_file)
|
init_file = pathlib.Path(init_file)
|
||||||
manifest.absolutify_dev_paths(init_file.parent)
|
manifest.absolutify_dev_paths(init_file.parent)
|
||||||
|
|
||||||
manifest.flush()
|
manifest.flush()
|
||||||
|
|
||||||
|
except spack.config.ConfigFormatError as e:
|
||||||
|
shutil.rmtree(manifest_dir)
|
||||||
|
raise e
|
||||||
|
|
||||||
return Environment(manifest_dir)
|
return Environment(manifest_dir)
|
||||||
|
|
||||||
|
@ -991,8 +991,26 @@ def test_bad_env_yaml_format(tmpdir):
|
|||||||
with tmpdir.as_cwd():
|
with tmpdir.as_cwd():
|
||||||
with pytest.raises(spack.config.ConfigFormatError) as e:
|
with pytest.raises(spack.config.ConfigFormatError) as e:
|
||||||
env("create", "test", "./spack.yaml")
|
env("create", "test", "./spack.yaml")
|
||||||
assert "spack.yaml:2" in str(e)
|
assert "'spacks' was unexpected" in str(e)
|
||||||
assert "'spacks' was unexpected" in str(e)
|
|
||||||
|
assert "test" not in env("list")
|
||||||
|
|
||||||
|
|
||||||
|
def test_bad_env_yaml_format_remove():
|
||||||
|
badenv = "badenv"
|
||||||
|
env("create", badenv)
|
||||||
|
tmpdir = spack.environment.environment.environment_dir_from_name(badenv, exists_ok=True)
|
||||||
|
filename = os.path.join(tmpdir, "spack.yaml")
|
||||||
|
with open(filename, "w") as f:
|
||||||
|
f.write(
|
||||||
|
"""\
|
||||||
|
- mpileaks
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
assert badenv in env("list")
|
||||||
|
env("remove", "-y", badenv)
|
||||||
|
assert badenv not in env("list")
|
||||||
|
|
||||||
|
|
||||||
def test_env_loads(install_mockery, mock_fetch):
|
def test_env_loads(install_mockery, mock_fetch):
|
||||||
|
Loading…
Reference in New Issue
Block a user