From 386b37613f7c33d5a9a4c3f0b95fb19c672b79e7 Mon Sep 17 00:00:00 2001
From: Sam Stephenson <sam@37signals.com>
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