summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVinay Sajip <vinay_sajip@yahoo.co.uk>2020-01-14 20:49:30 +0000
committerGitHub <noreply@github.com>2020-01-14 20:49:30 +0000
commit7d6378051feeadf45b4ce45b4b406b65df255648 (patch)
tree1046f35a3335e2ad083d1d5bdcc277035a2ddc23
parent4b0d91aab4cfba30a2a9728e9eaea15dbc0ba9bd (diff)
downloadcpython-git-7d6378051feeadf45b4ce45b4b406b65df255648.tar.gz
bpo-38901: Allow setting a venv's prompt to the basename of the current directory. (GH-17946)
When a prompt value of '.' is specified, os.path.basename(os.getcwd()) is used to configure the prompt for the created venv.
-rw-r--r--Doc/library/venv.rst3
-rw-r--r--Lib/test/test_venv.py9
-rw-r--r--Lib/venv/__init__.py2
-rw-r--r--Misc/NEWS.d/next/Library/2020-01-10-22-30-48.bpo-38901.OdVIIb.rst3
4 files changed, 16 insertions, 1 deletions
diff --git a/Doc/library/venv.rst b/Doc/library/venv.rst
index 5494c0c878..d778486b0a 100644
--- a/Doc/library/venv.rst
+++ b/Doc/library/venv.rst
@@ -122,7 +122,8 @@ creation according to their needs, the :class:`EnvBuilder` class.
* ``prompt`` -- a String to be used after virtual environment is activated
(defaults to ``None`` which means directory name of the environment would
- be used).
+ be used). If the special string ``"."`` is provided, the basename of the
+ current directory is used as the prompt.
* ``upgrade_deps`` -- Update the base venv modules to the latest on PyPI
diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py
index 741ac109bb..a3b78c4e44 100644
--- a/Lib/test/test_venv.py
+++ b/Lib/test/test_venv.py
@@ -138,6 +138,15 @@ class BasicTest(BaseTest):
self.assertEqual(context.prompt, '(My prompt) ')
self.assertIn("prompt = 'My prompt'\n", data)
+ rmtree(self.env_dir)
+ builder = venv.EnvBuilder(prompt='.')
+ cwd = os.path.basename(os.getcwd())
+ self.run_with_capture(builder.create, self.env_dir)
+ context = builder.ensure_directories(self.env_dir)
+ data = self.get_text_file_contents('pyvenv.cfg')
+ self.assertEqual(context.prompt, '(%s) ' % cwd)
+ self.assertIn("prompt = '%s'\n" % cwd, data)
+
def test_upgrade_dependencies(self):
builder = venv.EnvBuilder()
bin_path = 'Scripts' if sys.platform == 'win32' else 'bin'
diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py
index 81cb1d13e2..a220ef784c 100644
--- a/Lib/venv/__init__.py
+++ b/Lib/venv/__init__.py
@@ -51,6 +51,8 @@ class EnvBuilder:
self.symlinks = symlinks
self.upgrade = upgrade
self.with_pip = with_pip
+ if prompt == '.': # see bpo-38901
+ prompt = os.path.basename(os.getcwd())
self.prompt = prompt
self.upgrade_deps = upgrade_deps
diff --git a/Misc/NEWS.d/next/Library/2020-01-10-22-30-48.bpo-38901.OdVIIb.rst b/Misc/NEWS.d/next/Library/2020-01-10-22-30-48.bpo-38901.OdVIIb.rst
new file mode 100644
index 0000000000..304d53289e
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-01-10-22-30-48.bpo-38901.OdVIIb.rst
@@ -0,0 +1,3 @@
+When you specify prompt='.' or equivalently python -m venv --prompt . ...
+the basename of the current directory is used to set the created venv's
+prompt when it's activated.