diff options
author | Steve Dower <steve.dower@microsoft.com> | 2018-02-20 01:25:24 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-20 01:25:24 (GMT) |
commit | 6240917b773b52f8883387b9e3a5f327a4372068 (patch) | |
tree | f31ad9b8b1eef5f4174db12478ff9b71ac2d26d6 | |
parent | 5537646bfacec463b450871dde31cb06c44a0556 (diff) | |
download | cpython-6240917b773b52f8883387b9e3a5f327a4372068.zip cpython-6240917b773b52f8883387b9e3a5f327a4372068.tar.gz cpython-6240917b773b52f8883387b9e3a5f327a4372068.tar.bz2 |
bpo-32409: Ensures activate.bat can handle Unicode contents (GH-5757)
-rw-r--r-- | Lib/test/test_venv.py | 18 | ||||
-rw-r--r-- | Lib/venv/scripts/nt/activate.bat | 13 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Windows/2018-02-19-10-00-57.bpo-32409.nocuDg.rst | 1 |
3 files changed, 32 insertions, 0 deletions
diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py index c550426..9cea87e 100644 --- a/Lib/test/test_venv.py +++ b/Lib/test/test_venv.py @@ -281,6 +281,24 @@ class BasicTest(BaseTest): out, err = p.communicate() self.assertEqual(out.strip(), envpy.encode()) + @unittest.skipUnless(os.name == 'nt', 'only relevant on Windows') + def test_unicode_in_batch_file(self): + """ + Test isolation from system site-packages + """ + rmtree(self.env_dir) + env_dir = os.path.join(os.path.realpath(self.env_dir), 'ϼўТλФЙ') + builder = venv.EnvBuilder(clear=True) + builder.create(env_dir) + activate = os.path.join(env_dir, self.bindir, 'activate.bat') + envpy = os.path.join(env_dir, self.bindir, self.exe) + cmd = [activate, '&', self.exe, '-c', 'print(0)'] + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, encoding='oem', + shell=True) + out, err = p.communicate() + print(err) + self.assertEqual(out.strip(), '0') @skipInVenv class EnsurePipTest(BaseTest): diff --git a/Lib/venv/scripts/nt/activate.bat b/Lib/venv/scripts/nt/activate.bat index d76ca13..126049f 100644 --- a/Lib/venv/scripts/nt/activate.bat +++ b/Lib/venv/scripts/nt/activate.bat @@ -1,4 +1,13 @@ @echo off + +rem This file is UTF-8 encoded, so we need to update the current code page while executing it +for /f "tokens=2 delims=:" %%a in ('"%SystemRoot%\System32\chcp.com"') do ( + set "_OLD_CODEPAGE=%%a" +) +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" 65001 > nul +) + set "VIRTUAL_ENV=__VENV_DIR__" if not defined PROMPT ( @@ -30,3 +39,7 @@ if defined _OLD_VIRTUAL_PATH ( set "PATH=%VIRTUAL_ENV%\__VENV_BIN_NAME__;%PATH%" :END +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul + set "_OLD_CODEPAGE=" +) diff --git a/Misc/NEWS.d/next/Windows/2018-02-19-10-00-57.bpo-32409.nocuDg.rst b/Misc/NEWS.d/next/Windows/2018-02-19-10-00-57.bpo-32409.nocuDg.rst new file mode 100644 index 0000000..36251b0 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2018-02-19-10-00-57.bpo-32409.nocuDg.rst @@ -0,0 +1 @@ +Ensures activate.bat can handle Unicode contents. |