From f2ac8825797458709a8f2bb9ab94e9a0f2ac61d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Mon, 29 Apr 2024 14:20:21 +0200 Subject: [PATCH] rbenv shell: properly declare global variables for zsh (#1566) With zsh `setopt warn_create_global` the "shell" command used to cause a warning message: scalar parameter RBENV_VERSION_OLD created globally in function rbenv. By using `typeset -g` specifically for zsh, this warning goes away. --- libexec/rbenv-sh-shell | 26 ++++++++++++++++++++++++++ test/shell.bats | 10 ++++++++++ 2 files changed, 36 insertions(+) diff --git a/libexec/rbenv-sh-shell b/libexec/rbenv-sh-shell index c44c74f5..dc4c3f92 100755 --- a/libexec/rbenv-sh-shell +++ b/libexec/rbenv-sh-shell @@ -48,6 +48,10 @@ if [ "$version" = "--unset" ]; then echo 'set -gu RBENV_VERSION_OLD "$RBENV_VERSION"' echo "set -e RBENV_VERSION" ;; + zsh ) + echo "typeset -g RBENV_VERSION_OLD=\"\${RBENV_VERSION-}\"" + echo "unset RBENV_VERSION" + ;; * ) echo 'RBENV_VERSION_OLD="${RBENV_VERSION-}"' echo "unset RBENV_VERSION" @@ -74,6 +78,24 @@ else echo "rbenv: RBENV_VERSION_OLD is not set" >&2 false end +EOS + ;; + zsh ) + cat <&2 + false +fi EOS ;; * ) @@ -106,6 +128,10 @@ if rbenv-prefix "$version" >/dev/null; then echo 'set -gu RBENV_VERSION_OLD "$RBENV_VERSION"' echo "set -gx RBENV_VERSION \"$version\"" ;; + zsh ) + echo "typeset -g RBENV_VERSION_OLD=\"\${RBENV_VERSION-}\"" + echo "export RBENV_VERSION=\"$version\"" + ;; * ) echo 'RBENV_VERSION_OLD="${RBENV_VERSION-}"' echo "export RBENV_VERSION=\"$version\"" diff --git a/test/shell.bats b/test/shell.bats index 38b0f426..1c409636 100644 --- a/test/shell.bats +++ b/test/shell.bats @@ -80,6 +80,16 @@ export RBENV_VERSION="1.2.3" OUT } +@test "shell change version (zsh)" { + mkdir -p "${RBENV_ROOT}/versions/1.2.3" + RBENV_SHELL=zsh run rbenv-sh-shell 1.2.3 + assert_success + assert_output <