summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorm-lima <m-lima@users.noreply.github.com>2022-12-05 20:59:27 +0100
committerGitHub <noreply@github.com>2022-12-05 11:59:27 -0800
commitd3215e4b3c1db93c7591ed68d20dc3c62fe0b03b (patch)
tree6a81af6c7913dfa2278d961116d6727b99c5be97
parent28f40672503974bdbf2c83d5174b738dcf45a5e5 (diff)
downloadvirtualenv-d3215e4b3c1db93c7591ed68d20dc3c62fe0b03b.tar.gz
Respect `VIRTUAL_ENV_DISABLE_PROMPT` in nushell activation script (#2458)
Fixes https://github.com/pypa/virtualenv/issues/2461
-rw-r--r--docs/changelog/2461.bugfix.rst1
-rw-r--r--src/virtualenv/activation/nushell/activate.nu80
2 files changed, 53 insertions, 28 deletions
diff --git a/docs/changelog/2461.bugfix.rst b/docs/changelog/2461.bugfix.rst
new file mode 100644
index 0000000..66ea551
--- /dev/null
+++ b/docs/changelog/2461.bugfix.rst
@@ -0,0 +1 @@
+Make ``activate.nu`` respect ``VIRTUAL_ENV_DISABLE_PROMPT`` and not set the prompt if reqeusted - by :user:`m-lima`.
diff --git a/src/virtualenv/activation/nushell/activate.nu b/src/virtualenv/activation/nushell/activate.nu
index c5568c9..7235684 100644
--- a/src/virtualenv/activation/nushell/activate.nu
+++ b/src/virtualenv/activation/nushell/activate.nu
@@ -15,6 +15,21 @@ export-env {
$name in (env).name
}
+ # Emulates a `test -z`, but btter as it handles e.g 'false'
+ def is-env-true [name: string] {
+ if (has-env $name) {
+ # Try to parse 'true', '0', '1', and fail if not convertible
+ let parsed = do -i { $env | get $name | into bool }
+ if ($parsed | describe) == 'bool' {
+ $parsed
+ } else {
+ not ($env | get $name | is-empty)
+ }
+ } else {
+ false
+ }
+ }
+
let is_windows = ($nu.os-info.name | str downcase) == 'windows'
let virtual_env = '__VIRTUAL_ENV__'
let bin = '__BIN_NAME__'
@@ -49,44 +64,53 @@ export-env {
let venv_path = ([$virtual_env $bin] | path join)
let new_path = ($old_path | prepend $venv_path | str collect $path_sep)
- # Creating the new prompt for the session
- let virtual_prompt = if ('__VIRTUAL_PROMPT__' == '') {
- $'(char lparen)($virtual_env | path basename)(char rparen) '
- } else {
- '(__VIRTUAL_PROMPT__) '
+ let new_env = {
+ $path_name : $new_path
+ VIRTUAL_ENV : $virtual_env
}
- # Back up the old prompt builder
- let old_prompt_command = if (has-env 'VIRTUAL_ENV') and (has-env '_OLD_PROMPT_COMMAND') {
- $env._OLD_PROMPT_COMMAND
+ let new_env = if (is-env-true 'VIRTUAL_ENV_DISABLE_PROMPT') {
+ $new_env
} else {
- if (has-env 'PROMPT_COMMAND') {
- $env.PROMPT_COMMAND
- } else {
- ''
- }
- }
+ # Creating the new prompt for the session
+ let virtual_prompt = if ('__VIRTUAL_PROMPT__' == '') {
+ $'(char lparen)($virtual_env | path basename)(char rparen) '
+ } else {
+ '(__VIRTUAL_PROMPT__) '
+ }
- # If there is no default prompt, then only the env is printed in the prompt
- let new_prompt = if (has-env 'PROMPT_COMMAND') {
- if ($old_prompt_command | describe) == 'block' {
- { $'($virtual_prompt)(do $old_prompt_command)' }
- } else {
- { $'($virtual_prompt)($old_prompt_command)' }
- }
- } else {
- { $'($virtual_prompt)' }
- }
+ # Back up the old prompt builder
+ let old_prompt_command = if (has-env 'VIRTUAL_ENV') and (has-env '_OLD_PROMPT_COMMAND') {
+ $env._OLD_PROMPT_COMMAND
+ } else {
+ if (has-env 'PROMPT_COMMAND') {
+ $env.PROMPT_COMMAND
+ } else {
+ ''
+ }
+ }
- # Environment variables that will be loaded as the virtual env
- load-env {
- $path_name : $new_path
- VIRTUAL_ENV : $virtual_env
+ # If there is no default prompt, then only the env is printed in the prompt
+ let new_prompt = if (has-env 'PROMPT_COMMAND') {
+ if ($old_prompt_command | describe) == 'block' {
+ { $'($virtual_prompt)(do $old_prompt_command)' }
+ } else {
+ { $'($virtual_prompt)($old_prompt_command)' }
+ }
+ } else {
+ { $'($virtual_prompt)' }
+ }
+
+ $new_env | merge {
_OLD_VIRTUAL_PATH : ($old_path | str collect $path_sep)
_OLD_PROMPT_COMMAND : $old_prompt_command
PROMPT_COMMAND : $new_prompt
VIRTUAL_PROMPT : $virtual_prompt
+ }
}
+
+ # Environment variables that will be loaded as the virtual env
+ load-env $new_env
}
export alias pydoc = python -m pydoc