[3.15] gh-109940: Respect VIRTUAL_ENV_DISABLE_PROMPT in activate.bat (GH-151215) (GH-151225)

Co-authored-by: Harjoth Khara <harjoth.khara@gmail.com>
This commit is contained in:
Miss Islington (bot) 2026-06-10 18:48:10 +02:00 committed by GitHub
parent 54ee910bcd
commit 5c83037313
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 49 additions and 2 deletions

View file

@ -592,6 +592,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):

View file

@ -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=

View file

@ -0,0 +1,2 @@
Fix Windows :mod:`venv` activation in ``cmd.exe`` to respect
``VIRTUAL_ENV_DISABLE_PROMPT``.