From 6a912bf104a1585978d1f79d39642d042853277f Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Tue, 12 Jan 2016 11:03:50 -0800 Subject: [PATCH] add support for rbenv shell - `rbenv shell -` allows you to switch to the previously activated ruby version. Similar to `cd -` or `git checkout -`. This tries to implement `rbenv shell -` as proposed in #854. However, adding support seemed to break the "shell change version" test. I'm not very good at Bash programming, can someone tell me what is wrong with what I'm doing? I'd like to add a bit more functionality to this, but I'm really just cargo cult programming Bash. Thank you! fix tests --- libexec/rbenv-sh-shell | 41 ++++++++++++++++++++++++------ test/shell.bats | 57 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 87 insertions(+), 11 deletions(-) diff --git a/libexec/rbenv-sh-shell b/libexec/rbenv-sh-shell index f4e0098f..9c885e93 100755 --- a/libexec/rbenv-sh-shell +++ b/libexec/rbenv-sh-shell @@ -39,25 +39,50 @@ fi if [ "$version" = "--unset" ]; then case "$shell" in fish ) + echo "set -e OLD_RBENV_VERSION" echo "set -e RBENV_VERSION" ;; * ) + echo "unset OLD_RBENV_VERSION" echo "unset RBENV_VERSION" ;; esac exit fi +if [ "$version" = "-" ]; then + if [ -z "$OLD_RBENV_VERSION" ]; then + echo "rbenv: OLD_RBENV_VERSION not set" >&2 + exit 1; + fi + case "$shell" in + fish ) + rbenv_version=$RBENV_VERSION + echo "set -e OLD_RBENV_VERSION \"$rbenv_version\"" + echo "set -e RBENV_VERSION \"$OLD_RBENV_VERSION\"" + ;; + * ) + rbenv_version=$RBENV_VERSION + echo "export OLD_RBENV_VERSION=\"$rbenv_version\"" + echo "export RBENV_VERSION=\"$OLD_RBENV_VERSION\"" + ;; + esac + exit +fi + # Make sure the specified version is installed. if rbenv-prefix "$version" >/dev/null; then - case "$shell" in - fish ) - echo "setenv RBENV_VERSION \"${version}\"" - ;; - * ) - echo "export RBENV_VERSION=\"${version}\"" - ;; - esac + if [ "$version" != "$RBENV_VERSION" ]; then + case "$shell" in + fish ) + echo "setenv RBENV_VERSION \"${version}\"" + ;; + * ) + echo "export OLD_RBENV_VERSION=\"$RBENV_VERSION\"" + echo "export RBENV_VERSION=\"${version}\"" + ;; + esac + fi else echo "false" exit 1 diff --git a/test/shell.bats b/test/shell.bats index 0f776745..3c7313c1 100644 --- a/test/shell.bats +++ b/test/shell.bats @@ -22,12 +22,18 @@ load test_helper @test "shell unset" { RBENV_SHELL=bash run rbenv-sh-shell --unset - assert_success "unset RBENV_VERSION" + assert_output <