Commit 598503ec by Arun Babu Neelicattu

env/run: ensure all args are quoted as required

Resolves: #3013
parent 51d4b5a8
...@@ -46,15 +46,11 @@ PY36 = sys.version_info >= (3, 6) ...@@ -46,15 +46,11 @@ PY36 = sys.version_info >= (3, 6)
WINDOWS = sys.platform == "win32" WINDOWS = sys.platform == "win32"
if PY2: try:
import pipes from shlex import quote
except ImportError:
shell_quote = pipes.quote # PY2
else: from pipes import quote # noqa
import shlex
shell_quote = shlex.quote
if PY34: if PY34:
from importlib.machinery import EXTENSION_SUFFIXES from importlib.machinery import EXTENSION_SUFFIXES
...@@ -288,10 +284,7 @@ def to_str(string): ...@@ -288,10 +284,7 @@ def to_str(string):
def list_to_shell_command(cmd): def list_to_shell_command(cmd):
executable = cmd[0] return " ".join(
'"{}"'.format(token) if " " in token and token[0] not in {"'", '"'} else token
if " " in executable: for token in cmd
executable = '"{}"'.format(executable) )
cmd[0] = executable
return " ".join(cmd)
...@@ -15,6 +15,7 @@ from poetry.core.toml.file import TOMLFile ...@@ -15,6 +15,7 @@ from poetry.core.toml.file import TOMLFile
from poetry.factory import Factory from poetry.factory import Factory
from poetry.utils._compat import PY2 from poetry.utils._compat import PY2
from poetry.utils._compat import Path from poetry.utils._compat import Path
from poetry.utils.env import GET_BASE_PREFIX
from poetry.utils.env import EnvCommandError from poetry.utils.env import EnvCommandError
from poetry.utils.env import EnvManager from poetry.utils.env import EnvManager
from poetry.utils.env import NoCompatiblePythonVersionFound from poetry.utils.env import NoCompatiblePythonVersionFound
...@@ -74,6 +75,26 @@ def test_virtualenvs_with_spaces_in_their_path_work_as_expected(tmp_dir, manager ...@@ -74,6 +75,26 @@ def test_virtualenvs_with_spaces_in_their_path_work_as_expected(tmp_dir, manager
assert venv.run("python", "-V", shell=True).startswith("Python") assert venv.run("python", "-V", shell=True).startswith("Python")
def test_env_commands_with_spaces_in_their_arg_work_as_expected(tmp_dir, manager):
venv_path = Path(tmp_dir) / "Virtual Env"
manager.build_venv(str(venv_path))
venv = VirtualEnv(venv_path)
assert venv.run("python", venv.pip, "--version", shell=True).startswith(
"pip {} from ".format(venv.pip_version)
)
def test_env_shell_commands_with_stdinput_in_their_arg_work_as_expected(
tmp_dir, manager
):
venv_path = Path(tmp_dir) / "Virtual Env"
manager.build_venv(str(venv_path))
venv = VirtualEnv(venv_path)
assert venv.run("python", "-", input_=GET_BASE_PREFIX, shell=True).strip() == str(
venv.get_base_prefix()
)
@pytest.fixture @pytest.fixture
def in_project_venv_dir(poetry): def in_project_venv_dir(poetry):
os.environ.pop("VIRTUAL_ENV", None) os.environ.pop("VIRTUAL_ENV", None)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment