From 386b37613f7c33d5a9a4c3f0b95fb19c672b79e7 Mon Sep 17 00:00:00 2001 From: Sam Stephenson Date: Thu, 21 Mar 2013 12:40:53 -0500 Subject: [PATCH] `rbenv install 1.9.3` lists matching definitions --- bin/rbenv-install | 31 ++++++++++++++++++++++++++++--- bin/ruby-build | 2 +- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/bin/rbenv-install b/bin/rbenv-install index b35db0ef..4726e687 100755 --- a/bin/rbenv-install +++ b/bin/rbenv-install @@ -37,6 +37,15 @@ usage() { [ -z "$1" ] || exit "$1" } +definitions() { + local query="$1" + ruby-build --definitions | grep -F "$query" || true +} + +indent() { + sed 's/^/ /' +} + unset FORCE unset KEEP unset VERBOSE @@ -49,7 +58,7 @@ for option in "${OPTIONS[@]}"; do ;; "l" | "list" ) echo "Available versions:" - ruby-build --definitions | sed 's/^/ /' + definitions | indent exit ;; "f" | "force" ) @@ -144,11 +153,27 @@ cleanup() { trap cleanup SIGINT -# Invoke `ruby-build` and record the exit status in $STATUS. Run -# `rbenv rehash` after a successful installation. +# Invoke `ruby-build` and record the exit status in $STATUS. STATUS=0 ruby-build $KEEP $VERBOSE "$DEFINITION" "$PREFIX" || STATUS="$?" +# Display a more helpful message if the definition wasn't found. +if [ "$STATUS" == "2" ]; then + { candidates="$(definitions "$DEFINITION")" + if [ -n "$candidates" ]; then + echo + echo "The following versions contain \`$DEFINITION' in the name:" + echo "$candidates" | indent + fi + echo + echo "You can list all available versions with \`rbenv install --list'." + echo + echo "If the version you're looking for is not present, first try upgrading" + echo "ruby-build. If it's still missing, open a request on the ruby-build" + echo "issue tracker: https://github.com/sstephenson/ruby-build/issues" + } >&2 +fi + # Execute `after_install` hooks. for hook in "${after_hooks[@]}"; do eval "$hook"; done diff --git a/bin/ruby-build b/bin/ruby-build index 47914219..e3ae59fa 100755 --- a/bin/ruby-build +++ b/bin/ruby-build @@ -641,7 +641,7 @@ elif [ ! -e "$DEFINITION_PATH" ]; then DEFINITION_PATH="$BUILTIN_DEFINITION_PATH" else echo "ruby-build: definition not found: ${DEFINITION_PATH}" >&2 - exit 1 + exit 2 fi fi