summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Abrahamsson <hamsson@gmail.com>2019-09-11 14:58:56 (GMT)
committerT. Wouters <thomas@python.org>2019-09-11 14:58:56 (GMT)
commit5209e586b7cac9a43b2c44349a26b1b0af06ead3 (patch)
treecafe1143250451d37a63d17261fb117308364e50
parent3b58a70d9cf1c0f963adce9b07060116b2775687 (diff)
downloadcpython-5209e586b7cac9a43b2c44349a26b1b0af06ead3.zip
cpython-5209e586b7cac9a43b2c44349a26b1b0af06ead3.tar.gz
cpython-5209e586b7cac9a43b2c44349a26b1b0af06ead3.tar.bz2
bpo-37885: venv: Don't produce unbound variable warning on deactivate (GH-15330)
Before, running deactivate from a bash shell configured to treat undefined variables as errors (`set -u`) would produce a warning: ``` $ python3 -m venv test $ source test/bin/activate (test) $ deactivate -bash: $1: unbound variable ```
-rw-r--r--Lib/test/test_venv.py20
-rw-r--r--Lib/venv/scripts/common/activate2
-rw-r--r--Misc/NEWS.d/next/Library/2019-08-19-10-31-41.bpo-37885.4Nc9sp.rst1
3 files changed, 22 insertions, 1 deletions
diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py
index de93d95..0103de8 100644
--- a/Lib/test/test_venv.py
+++ b/Lib/test/test_venv.py
@@ -9,6 +9,7 @@ import ensurepip
import os
import os.path
import re
+import shutil
import struct
import subprocess
import sys
@@ -360,6 +361,25 @@ class BasicTest(BaseTest):
'pool.terminate()'])
self.assertEqual(out.strip(), "python".encode())
+ @unittest.skipIf(os.name == 'nt', 'not relevant on Windows')
+ def test_deactivate_with_strict_bash_opts(self):
+ bash = shutil.which("bash")
+ if bash is None:
+ self.skipTest("bash required for this test")
+ rmtree(self.env_dir)
+ builder = venv.EnvBuilder(clear=True)
+ builder.create(self.env_dir)
+ activate = os.path.join(self.env_dir, self.bindir, "activate")
+ test_script = os.path.join(self.env_dir, "test_strict.sh")
+ with open(test_script, "w") as f:
+ f.write("set -euo pipefail\n"
+ f"source {activate}\n"
+ "deactivate\n")
+ out, err = check_output([bash, test_script])
+ self.assertEqual(out, "".encode())
+ self.assertEqual(err, "".encode())
+
+
@requireVenvCreate
class EnsurePipTest(BaseTest):
"""Test venv module installation of pip."""
diff --git a/Lib/venv/scripts/common/activate b/Lib/venv/scripts/common/activate
index 6a2320a..b1b4625 100644
--- a/Lib/venv/scripts/common/activate
+++ b/Lib/venv/scripts/common/activate
@@ -28,7 +28,7 @@ deactivate () {
fi
unset VIRTUAL_ENV
- if [ ! "$1" = "nondestructive" ] ; then
+ if [ ! "${1:-}" = "nondestructive" ] ; then
# Self destruct!
unset -f deactivate
fi
diff --git a/Misc/NEWS.d/next/Library/2019-08-19-10-31-41.bpo-37885.4Nc9sp.rst b/Misc/NEWS.d/next/Library/2019-08-19-10-31-41.bpo-37885.4Nc9sp.rst
new file mode 100644
index 0000000..055d029
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-08-19-10-31-41.bpo-37885.4Nc9sp.rst
@@ -0,0 +1 @@
+venv: Don't generate unset variable warning on deactivate. \ No newline at end of file