From 74389472abb5ed8200c5e83cf5f0775718ee8b4c Mon Sep 17 00:00:00 2001
From: Harmen Stoppels <harmenstoppels@gmail.com>
Date: Fri, 27 Aug 2021 01:54:58 +0200
Subject: Make env (de)activate error with -e, -E, -D flags (#25625)

* Make sure that spack -e. env activate b and spack -e. env deactivate error
* Add a test
---
 lib/spack/spack/cmd/env.py      | 10 ++++++++++
 lib/spack/spack/test/cmd/env.py | 23 +++++++++++++++++++++++
 2 files changed, 33 insertions(+)

diff --git a/lib/spack/spack/cmd/env.py b/lib/spack/spack/cmd/env.py
index 75d573f6fe..5d436624bd 100644
--- a/lib/spack/spack/cmd/env.py
+++ b/lib/spack/spack/cmd/env.py
@@ -88,6 +88,11 @@ def env_activate(args):
         )
         return 1
 
+    # Error out when -e, -E, -D flags are given, cause they are ambiguous.
+    if args.env or args.no_env or args.env_dir:
+        tty.die('Calling spack env activate with --env, --env-dir and --no-env '
+                'is ambiguous')
+
     if ev.exists(env) and not args.dir:
         spack_env = ev.root(env)
         short_name = env
@@ -137,6 +142,11 @@ def env_deactivate(args):
         )
         return 1
 
+    # Error out when -e, -E, -D flags are given, cause they are ambiguous.
+    if args.env or args.no_env or args.env_dir:
+        tty.die('Calling spack env deactivate with --env, --env-dir and --no-env '
+                'is ambiguous')
+
     if 'SPACK_ENV' not in os.environ:
         tty.die('No environment is currently active.')
 
diff --git a/lib/spack/spack/test/cmd/env.py b/lib/spack/spack/test/cmd/env.py
index ea1c660804..d9d6f5483c 100644
--- a/lib/spack/spack/test/cmd/env.py
+++ b/lib/spack/spack/test/cmd/env.py
@@ -4,6 +4,7 @@
 # SPDX-License-Identifier: (Apache-2.0 OR MIT)
 import glob
 import os
+from argparse import Namespace
 
 import pytest
 from six import StringIO
@@ -11,6 +12,7 @@ from six import StringIO
 import llnl.util.filesystem as fs
 import llnl.util.link_tree
 
+import spack.cmd.env
 import spack.environment as ev
 import spack.hash_types as ht
 import spack.modules
@@ -2632,3 +2634,24 @@ def test_query_develop_specs():
 
         assert e.is_develop(Spec('mpich'))
         assert not e.is_develop(Spec('mpileaks'))
+
+
+@pytest.mark.parametrize('method', [
+    spack.cmd.env.env_activate,
+    spack.cmd.env.env_deactivate
+])
+@pytest.mark.parametrize(
+    'env,no_env,env_dir',
+    [
+        ('b', False, None),
+        (None, True, None),
+        (None, False, 'path/'),
+    ])
+def test_activation_and_deactiviation_ambiguities(method, env, no_env, env_dir, capsys):
+    """spack [-e x | -E | -D x/]  env [activate | deactivate] y are ambiguous"""
+    args = Namespace(shell='sh', activate_env='a',
+                     env=env, no_env=no_env, env_dir=env_dir)
+    with pytest.raises(SystemExit):
+        method(args)
+    _, err = capsys.readouterr()
+    assert 'is ambiguous' in err
-- 
cgit v1.2.3-70-g09d2