summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoão Eiras <joao.carlos.eiras@tine.no>2019-07-23 10:12:12 +0200
committerBernát Gábor <bgabor8@bloomberg.net>2019-07-23 09:12:12 +0100
commite81ffe07a1c0660a28e1b420cc0799138ea33d11 (patch)
treef41bd55fa4c52d73b9845a0bcdd4d68e4c1306e8
parent311a909c10459711d47377e34b9dcd77e282cc2a (diff)
downloadvirtualenv-e81ffe07a1c0660a28e1b420cc0799138ea33d11.tar.gz
Report error when not sourcing activate scripts (#1372) (#1388)
* Report error when not sourcing activate scripts (#1372) The activate scripts are to be used in the context of the current shell session. The feature so far only works in powershell and bash, because in other shells it is hard to get the name of the currently executing script. Also added tests. * fix
-rw-r--r--docs/changelog/1388.feature.rst1
-rw-r--r--tests/activation/test_activation.py10
-rwxr-xr-xvirtualenv.py56
-rw-r--r--virtualenv_embedded/activate.ps15
-rw-r--r--virtualenv_embedded/activate.sh8
5 files changed, 52 insertions, 28 deletions
diff --git a/docs/changelog/1388.feature.rst b/docs/changelog/1388.feature.rst
new file mode 100644
index 0000000..1a6083d
--- /dev/null
+++ b/docs/changelog/1388.feature.rst
@@ -0,0 +1 @@
+Report error when running activate scripts directly, instead of sourcing. By reporting an error instead of running silently, the user get immediate feedback that the script was not used correctly. Only Bash and PowerShell are supported for now.
diff --git a/tests/activation/test_activation.py b/tests/activation/test_activation.py
index d260239..397bc34 100644
--- a/tests/activation/test_activation.py
+++ b/tests/activation/test_activation.py
@@ -64,6 +64,7 @@ class Activation(object):
check_has_exe = []
check = []
env = {}
+ also_test_error_if_not_sourced = False
def __init__(self, activation_env, tmp_path):
self.home_dir = activation_env[0]
@@ -139,6 +140,13 @@ class Activation(object):
assert out[-2] == out[0], raw
assert out[-1] == "None", raw
+ if self.also_test_error_if_not_sourced:
+ invoke_shell = self.invoke_script + [absolute_activate_script]
+
+ with pytest.raises(subprocess.CalledProcessError) as c:
+ subprocess.check_output(invoke_shell, stderr=subprocess.STDOUT, env=env)
+ assert c.value.returncode, c
+
def activate_call(self, script):
return "{} {}".format(pipes.quote(self.activate_cmd), pipes.quote(script)).strip()
@@ -155,6 +163,7 @@ class BashActivation(Activation):
extension = "sh"
activate_script = "activate"
check = [cmd, "--version"]
+ also_test_error_if_not_sourced = True
@pytest.mark.skipif(sys.platform == "win32", reason="no sane way to provision bash on Windows yet")
@@ -198,6 +207,7 @@ class PowershellActivation(Activation):
activate_script = "activate.ps1"
activate_cmd = "."
check = [cmd, "-c", "$PSVersionTable"]
+ also_test_error_if_not_sourced = True
def quote(self, s):
"""powershell double double quote needed for quotes within single quotes"""
diff --git a/virtualenv.py b/virtualenv.py
index ac1dbd5..bd79860 100755
--- a/virtualenv.py
+++ b/virtualenv.py
@@ -2281,20 +2281,21 @@ IWNQ+EMONwZIp5gxI994rJ0KayiC/wegEfUH
# file activate.sh
ACTIVATE_SH = convert(
"""
-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
+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
"""
)
@@ -2379,19 +2380,20 @@ pk+k4fAba/wd0Pr4P2CqyLeOlJ4iKfkJo6v/iaH9YzfPMEoeMG2RUA==
# file activate.ps1
ACTIVATE_PS = convert(
"""
-eJytVV1vmzAUfedX3FK0Jeqg2mumPtAlUiOlaRSyvmyT5cBNYwlsZBvaaMp/nyEQCCRVNc1v9v3w
-Ofeea1/DassUbFiMkGRKwxohEhqUyGSIEWykSGAhgu032IkMQsq5scqMA9MQMYmhjncejAVok2cE
-Hni3NNQspxq9VH21LEeFkqV6tHqYBmThrx7gDpxkx3guQqqZ4F6yC0WSUB55KdXbY8C9H0zIeLo0
-/kEaM+0ujBUGS1QizvGws51j2lvPs4dgjiVybVmbjIdFdniJxZrGowhrWIOf6pXpcPsbnLngY1Ra
-ZoUJh/DHArPYBgYrc3y4IqeS0XWMI/I0G5Pn6XL1w5+VN9b+xXKQ56Oa3eWQo/8SE2FIPFeeYPdc
-bXCDUKRYESgj99YZgDXTERFxRHImdUZjkprGpfoE4tHxYCuQvhfbxTrVmDSX/boU0cJYFqXmNJk/
-t9G0k3bcwJ1IKaR/6F9gpMmNyL4LrhnPsHvJ1YUuFusaAow3EFXWq/cpNRJ53y/dRSKsYOz7SivN
-FYh0p7fG4iZwOHWofFFF0DVkXKEGJiXGmFOuj0JTVgMEXC541JAz49QulOlgPSVWt9iFsbW1rDm+
-Nno70Ra4c5og9CQIxj/OsBG3ZbV1bnevvCXkfjonc/9xQswq3EgwWRBiw00ryaFrnVjDIfDvZxOy
-WD49LlZ1F7vFPaO6Vr9tu2rLqd7PBd315qGRlE2aMpRoCgYuN1Nqt9XVa3wXzkGCfhSZxxEhNM+r
-eUxTiRv2BlqUh/jGlJH1C3RmriRgXHMmMlVhJnnZjTv49MHBLdZ5MjcXkg+PsftWJTFW+G+8aYdu
-mMniea7YfoF1Zn4RwT8Xf4kKqYzMt+L9/yI4HF+78fbAGbQ/lt78uDOkGxgOwT4taD/Zx6u5t/4C
-0ptRdg==
+eJytVW1v2jAQ/p5fcUujFdQm1dRvTJ1GV6YitRQR1mnaJsskB1hK7Mhx0qKJ/75LCCSEUlXT/Aly
+b89z95x9AtOlSGEuIoQ4Sw3MEEJlIFWZDjCEuVYxjJW//AgrlUHApSSrziQIA6HQGJho5cGNAkN5
+euCBd8EDI3Ju0EvSD5Yl5tD53HFkFkXn9lAa1JJHdhdcShQoabiQKTjxSshcBdwIJb1AxTGXodJi
+IWQX/lhA57sWBt1bRRjdr0rjQqtMhqAJpP2DoJXoTze4T0s0kAZaJKYHY/8TAXM6+1Xqn5LH2LXL
+KvhMvC4vrbVlOVX49Hbos3F/egtXLZzxqkLqJdwsdwHXfX/AboYT8veTSBh3TFboTDBVUY6bf7az
+S3vheUU7xlyjNJY1z2RQZIdFpGY86oW47WfnZ/okTLD8Dc5IyRtMjc4KE25bVLR6Sp83JXKuBZ9F
+2GMPdzfscTiZfuvflRW3/sVxUOa9LbvjITv/CcaKSDxWnmAfuNrg+oFKsCJQRlI7DwFumfaYikKW
+C20yHrGEFJeYPYg7x42tQPpabBvr0GBcF/t1LKKBsWzKltNg9NhE00zacgN3oLXS/c38fNopSdvx
+hUQuZIbtIu+OTLE4J+BjNIewsr57nVItkdf9klWoggrG+lBppbkCkazMkixuDJuvDteLtAg6gUym
+aEBojRHmXJqd0FKrBlKstwxrcrROzUbRBLdbYrWbXRgbfy1rhE+13va0Be6IVhcOJAjkH2VYi9uy
+mjq32yUvGLsejtiofz9gdAo35g/GjNlw1kiymVorljj4/eu7ARtPHu7H0+0U2819QXWNedt2NZZ9
+vb8UdHWwD7WkbFa3oURTMHAlbandVNfB4NtwNhLshyHdowgB3az0CiQa5+IZjCo/0kWZkqwX0Nq5
+kgC55kJlaYWZ5eU0ruD9Gxe3OC+TOTuSvLuLXTc6iVGK/8abt+gGmS6u54rtOcwyev6UPC0ewTTg
+OqT30Pv/TXAkPrXj7Y7TaT4sB/vj3iGfQ7cL9n5DD5O9vZtr6y9V3o9t
"""
)
diff --git a/virtualenv_embedded/activate.ps1 b/virtualenv_embedded/activate.ps1
index e8daf34..2a94af3 100644
--- a/virtualenv_embedded/activate.ps1
+++ b/virtualenv_embedded/activate.ps1
@@ -1,5 +1,10 @@
# This file must be dot sourced from PoSh; you cannot run it directly. Do this: . ./activate.ps1
+if (@($null,"Internal") -notcontains $myinvocation.commandorigin) {
+ Write-Host -Foreground red "You must 'source' this script: PS> . $($myinvocation.invocationname)"
+ exit 33
+}
+
$script:THIS_PATH = $myinvocation.mycommand.path
$script:BASE_DIR = Split-Path (Resolve-Path "$THIS_PATH/..") -Parent
diff --git a/virtualenv_embedded/activate.sh b/virtualenv_embedded/activate.sh
index 47332e8..2f86735 100644
--- a/virtualenv_embedded/activate.sh
+++ b/virtualenv_embedded/activate.sh
@@ -1,12 +1,18 @@
# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly
+
+if [[ "${BASH_SOURCE-}" = "$0" ]]; then
+ echo "You must source this script: \$ source $0" >&2
+ exit 33
+fi
+
deactivate () {
unset -f pydoc >/dev/null 2>&1
# reset old environment variables
# ! [ -z ${VAR+_} ] returns true if VAR is declared at all
- if ! [ -z "${_OLD_VIRTUAL_PATH+_}" ] ; then
+ if ! [ -z "${_OLD_VIRTUAL_PATH:+_}" ] ; then
PATH="$_OLD_VIRTUAL_PATH"
export PATH
unset _OLD_VIRTUAL_PATH