summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorCory Bloor <Cordell.Bloor@amd.com>2022-07-07 09:08:15 -0600
committerGitHub <noreply@github.com>2022-07-07 17:08:15 +0200
commitbb92ea59a26a5f4f6765c89e1c73398ba73d64d3 (patch)
treef3c2f940637af57f29a5965d95c5dd0d04ebac22 /lib
parent626b239c962c78ee6bb9d2b86b9c73c980d602d7 (diff)
downloadspack-bb92ea59a26a5f4f6765c89e1c73398ba73d64d3.tar.gz
spack-bb92ea59a26a5f4f6765c89e1c73398ba73d64d3.tar.bz2
spack-bb92ea59a26a5f4f6765c89e1c73398ba73d64d3.tar.xz
spack-bb92ea59a26a5f4f6765c89e1c73398ba73d64d3.zip
Fix spack edit message when no editor installed (#31412)
When no default editor is installed and no environment variable is set, which_string would return None and this would be passed to os.execv resulting in a TypeError. The message presented to the user would be: Error: execv: path should be string, bytes or os.PathLike, not NoneType This change checks that which_string has returned successfully before attempting to execute the result, resulting in a new error message: Error: No text editor found! Please set the VISUAL and/or EDITOR environment variable(s) to your preferred text editor. It's not strictly necessary, but I've also changed try_exec to catch all errors rather than just OSErrors. This would have provided slightly more context for the original error message.
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/test/util/editor.py14
-rw-r--r--lib/spack/spack/util/editor.py2
2 files changed, 15 insertions, 1 deletions
diff --git a/lib/spack/spack/test/util/editor.py b/lib/spack/spack/test/util/editor.py
index e7c8bf2364..54b1c251fe 100644
--- a/lib/spack/spack/test/util/editor.py
+++ b/lib/spack/spack/test/util/editor.py
@@ -132,3 +132,17 @@ def test_editor_both_bad(nosuch_exe, vim_exe):
assert args == [vim_exe, '/path/to/file']
ed.editor('/path/to/file', _exec_func=assert_exec)
+
+
+def test_no_editor():
+ if 'VISUAL' in os.environ:
+ del os.environ['VISUAL']
+ if 'EDITOR' in os.environ:
+ del os.environ['EDITOR']
+ os.environ['PATH'] = ''
+
+ def assert_exec(exe, args):
+ assert False
+
+ with pytest.raises(EnvironmentError, match=r'No text editor found.*'):
+ ed.editor('/path/to/file', _exec_func=assert_exec)
diff --git a/lib/spack/spack/util/editor.py b/lib/spack/spack/util/editor.py
index e3f740adac..58198907af 100644
--- a/lib/spack/spack/util/editor.py
+++ b/lib/spack/spack/util/editor.py
@@ -122,7 +122,7 @@ def editor(*args, **kwargs):
# trying them all -- if we get here and one fails, something is
# probably much more deeply wrong with the environment.
exe = which_string(*_default_editors)
- if try_exec(exe, [exe] + list(args)):
+ if exe and try_exec(exe, [exe] + list(args)):
return
# Fail if nothing could be found