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)
WINDOWS = sys.platform == "win32"
if PY2:
import pipes
shell_quote = pipes.quote
else:
import shlex
shell_quote = shlex.quote
try:
from shlex import quote
except ImportError:
# PY2
from pipes import quote # noqa
if PY34:
from importlib.machinery import EXTENSION_SUFFIXES
......@@ -288,10 +284,7 @@ def to_str(string):
def list_to_shell_command(cmd):
executable = cmd[0]
if " " in executable:
executable = '"{}"'.format(executable)
cmd[0] = executable
return " ".join(cmd)
return " ".join(
'"{}"'.format(token) if " " in token and token[0] not in {"'", '"'} else token
for token in cmd
)
......@@ -15,6 +15,7 @@ from poetry.core.toml.file import TOMLFile
from poetry.factory import Factory
from poetry.utils._compat import PY2
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 EnvManager
from poetry.utils.env import NoCompatiblePythonVersionFound
......@@ -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")
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
def in_project_venv_dir(poetry):
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