From b8cea86364e36d437b3c5fdbe04b79da2620475e Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Fri, 21 Jan 2022 16:41:23 +0300 Subject: [PATCH 1/5] Add filename for windows FileNotFoundError --- src/pip/_internal/commands/configuration.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/pip/_internal/commands/configuration.py b/src/pip/_internal/commands/configuration.py index c6c74ed50ba..36555d0a6ee 100644 --- a/src/pip/_internal/commands/configuration.py +++ b/src/pip/_internal/commands/configuration.py @@ -13,6 +13,7 @@ kinds, ) from pip._internal.exceptions import PipError +from pip._internal.utils.compat import WINDOWS from pip._internal.utils.logging import indent_log from pip._internal.utils.misc import get_prog, write_output @@ -225,6 +226,10 @@ def open_in_editor(self, options: Values, args: List[str]) -> None: try: subprocess.check_call([editor, fname]) + except FileNotFoundError as e: + if WINDOWS: + e.filename = editor + raise e except subprocess.CalledProcessError as e: raise PipError( "Editor Subprocess exited with exit code {}".format(e.returncode) From b33da32f1cf06f24c9cde66f4a4d9c54296b398a Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Tue, 25 Jan 2022 08:26:47 +0300 Subject: [PATCH 2/5] Reraise current exc --- src/pip/_internal/commands/configuration.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pip/_internal/commands/configuration.py b/src/pip/_internal/commands/configuration.py index 36555d0a6ee..000e48335db 100644 --- a/src/pip/_internal/commands/configuration.py +++ b/src/pip/_internal/commands/configuration.py @@ -229,7 +229,7 @@ def open_in_editor(self, options: Values, args: List[str]) -> None: except FileNotFoundError as e: if WINDOWS: e.filename = editor - raise e + raise except subprocess.CalledProcessError as e: raise PipError( "Editor Subprocess exited with exit code {}".format(e.returncode) From cfcb4e9221b278563f29b8ee4184dc35fd327a77 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Tue, 25 Jan 2022 14:48:11 +0300 Subject: [PATCH 3/5] Add changelog --- news/10812.feature.rst | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 news/10812.feature.rst diff --git a/news/10812.feature.rst b/news/10812.feature.rst new file mode 100644 index 00000000000..a8fbc37d9aa --- /dev/null +++ b/news/10812.feature.rst @@ -0,0 +1,2 @@ +Improve error message when ``pip config edit`` is provided an editor that +doesn't exist. From 332e960ecf481bdce48c9373f2ef02c9c3e7b9d7 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Thu, 3 Feb 2022 14:22:10 +0300 Subject: [PATCH 4/5] Check if there is no filename in exc --- src/pip/_internal/commands/configuration.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pip/_internal/commands/configuration.py b/src/pip/_internal/commands/configuration.py index 000e48335db..941ee87b5e0 100644 --- a/src/pip/_internal/commands/configuration.py +++ b/src/pip/_internal/commands/configuration.py @@ -13,7 +13,6 @@ kinds, ) from pip._internal.exceptions import PipError -from pip._internal.utils.compat import WINDOWS from pip._internal.utils.logging import indent_log from pip._internal.utils.misc import get_prog, write_output @@ -227,7 +226,7 @@ def open_in_editor(self, options: Values, args: List[str]) -> None: try: subprocess.check_call([editor, fname]) except FileNotFoundError as e: - if WINDOWS: + if not e.filename: e.filename = editor raise except subprocess.CalledProcessError as e: From 7f6a9cad22b4fa4177358f548b803718039de68f Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Thu, 3 Feb 2022 14:57:21 +0300 Subject: [PATCH 5/5] Add test --- tests/functional/test_configuration.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/functional/test_configuration.py b/tests/functional/test_configuration.py index 9f656287507..b3de3f697b0 100644 --- a/tests/functional/test_configuration.py +++ b/tests/functional/test_configuration.py @@ -140,3 +140,10 @@ def test_global_config_file(self, script: PipTestEnvironment) -> None: global_config_file = get_configuration_files()[kinds.GLOBAL][0] result = script.pip("config", "debug") assert f"{global_config_file}, exists:" in result.stdout + + def test_editor_does_not_exist(self, script: PipTestEnvironment) -> None: + """Ensure that FileNotFoundError sets filename correctly""" + result = script.pip( + "config", "edit", "--editor", "notrealeditor", expect_error=True + ) + assert "notrealeditor" in result.stderr