Skip to content

Commit

Permalink
Merge pull request #2651 from pypa/shell-fallback-improvement
Browse files Browse the repository at this point in the history
Use COMSPEC for shell detection fallback
  • Loading branch information
uranusjr authored Jul 30, 2018
2 parents 5a55c88 + 9ec4ff1 commit 7223240
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 5 deletions.
2 changes: 2 additions & 0 deletions news/2651.behavior
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Add ``COMSPEC`` to fallback option (along with ``SHELL`` and ``PYENV_SHELL``)
if shell detection fails, improving robustness on Windows.
6 changes: 5 additions & 1 deletion pipenv/environments.py
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,11 @@
PIPENV_SKIP_VALIDATION = True

# Internal, the default shell to use if shell detection fails.
PIPENV_SHELL = os.environ.get("SHELL") or os.environ.get("PYENV_SHELL")
PIPENV_SHELL = (
os.environ.get("SHELL") or
os.environ.get("PYENV_SHELL") or
os.environ.get("COMSPEC")
)

# Internal, to tell whether the command line session is interactive.
SESSION_IS_INTERACTIVE = bool(os.isatty(sys.stdout.fileno()))
8 changes: 4 additions & 4 deletions pipenv/shells.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,19 @@ def detect_info():
raise ShellDetectionFailure


def _get_activate_script(venv):
def _get_activate_script(cmd, venv):
"""Returns the string to activate a virtualenv.
This is POSIX-only at the moment since the compat (pexpect-based) shell
does not work elsewhere anyway.
"""
# Suffix and source command for other shells.
# Support for fish shell.
if PIPENV_SHELL and "fish" in PIPENV_SHELL:
if "fish" in cmd:
suffix = ".fish"
command = "source"
# Support for csh shell.
elif PIPENV_SHELL and "csh" in PIPENV_SHELL:
elif "csh" in cmd:
suffix = ".csh"
command = "source"
else:
Expand Down Expand Up @@ -104,7 +104,7 @@ def fork_compat(self, venv, cwd, args):
dims = get_terminal_size()
with temp_environ():
c = pexpect.spawn(self.cmd, ["-i"], dimensions=(dims.lines, dims.columns))
c.sendline(_get_activate_script(venv))
c.sendline(_get_activate_script(self.cmd, venv))
if args:
c.sendline(" ".join(args))

Expand Down

0 comments on commit 7223240

Please sign in to comment.