Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions Lib/test/test_venv.py
Original file line number Diff line number Diff line change
Expand Up @@ -593,6 +593,51 @@ def test_unicode_in_batch_file(self):
)
self.assertEqual(out.strip(), '0')

@unittest.skipUnless(os.name == 'nt', 'only relevant on Windows')
def test_activate_bat_respects_disable_prompt(self):
rmtree(self.env_dir)
env_dir = os.path.join(os.path.realpath(self.env_dir), 'venv')
builder = venv.EnvBuilder(clear=True)
builder.create(env_dir)
activate = os.path.join(env_dir, self.bindir, 'activate.bat')
test_batch = os.path.join(self.env_dir, 'test_disable_prompt.bat')
with open(test_batch, "w") as f:
f.write('@echo off\n'
'set "PROMPT=base$G"\n'
'set "VIRTUAL_ENV_DISABLE_PROMPT=1"\n'
f'call "{activate}"\n'
'echo ACTIVE_PROMPT:%PROMPT%\n'
'echo VIRTUAL_ENV:%VIRTUAL_ENV%\n'
'set "PROMPT=changed$G"\n'
'call deactivate\n'
'echo FINAL_PROMPT:%PROMPT%\n')
out, err = check_output([test_batch])
lines = out.splitlines()
self.assertEqual(lines[0], b'ACTIVE_PROMPT:base$G')
self.assertEndsWith(lines[1], os.fsencode(env_dir))
self.assertEqual(lines[2], b'FINAL_PROMPT:changed$G')

@unittest.skipUnless(os.name == 'nt', 'only relevant on Windows')
def test_activate_bat_prefixes_prompt_by_default(self):
rmtree(self.env_dir)
env_dir = os.path.join(os.path.realpath(self.env_dir), 'venv')
builder = venv.EnvBuilder(clear=True)
builder.create(env_dir)
activate = os.path.join(env_dir, self.bindir, 'activate.bat')
test_batch = os.path.join(self.env_dir, 'test_enable_prompt.bat')
with open(test_batch, "w") as f:
f.write('@echo off\n'
'set "PROMPT=base) $G"\n'
'set "VIRTUAL_ENV_DISABLE_PROMPT="\n'
f'call "{activate}"\n'
'echo ACTIVE_PROMPT:%PROMPT%\n'
'call deactivate\n'
'echo FINAL_PROMPT:%PROMPT%\n')
out, err = check_output([test_batch])
lines = out.splitlines()
self.assertEqual(lines[0], b'ACTIVE_PROMPT:(venv) base) $G')
self.assertEqual(lines[1], b'FINAL_PROMPT:base) $G')

@unittest.skipUnless(os.name == 'nt' and can_symlink(),
'symlinks on Windows')
def test_failed_symlink(self):
Expand Down
4 changes: 2 additions & 2 deletions Lib/venv/scripts/nt/activate.bat
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
@if defined _OLD_VIRTUAL_PROMPT @set PROMPT=%_OLD_VIRTUAL_PROMPT%
@if defined _OLD_VIRTUAL_PYTHONHOME @set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%

@set "_OLD_VIRTUAL_PROMPT=%PROMPT%"
@set "PROMPT=(__VENV_PROMPT__) %PROMPT%"
@if not defined VIRTUAL_ENV_DISABLE_PROMPT @set "_OLD_VIRTUAL_PROMPT=%PROMPT%"
@if not defined VIRTUAL_ENV_DISABLE_PROMPT @set "PROMPT=(__VENV_PROMPT__) %PROMPT%"

@if defined PYTHONHOME @set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%
@set PYTHONHOME=
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fix Windows :mod:`venv` activation in ``cmd.exe`` to respect
``VIRTUAL_ENV_DISABLE_PROMPT``.
Loading