diff --git a/README.md b/README.md index 9b371758..d6b449c4 100644 --- a/README.md +++ b/README.md @@ -128,24 +128,16 @@ easy to fork and contribute any changes back upstream. $ exec $SHELL -l ~~~ -5. Install Ruby versions into `~/.rbenv/versions`. For example, to - manually compile Ruby [from source](https://github.com/ruby/ruby), - download it and run: - - ~~~ sh - $ [ -f ./configure ] || autoconf - $ ./configure --prefix=$HOME/.rbenv/versions/1.9.3-p327 - $ make - $ make install - ~~~ - - The [ruby-build][] project, however, provides an `rbenv install` - command that simplifies the process of installing new Ruby versions: +5. Install [ruby-build][], which provides an `rbenv install` + command that simplifies the process of installing new Ruby versions. ~~~ $ rbenv install 1.9.3-p327 ~~~ + As an alternative, you can download and compile Ruby yourself into + `~/.rbenv/versions/`. + 6. Rebuild the shim binaries. You should do this any time you install a new Ruby binary (for example, when installing a new Ruby version, or when installing a gem that provides a binary). diff --git a/completions/rbenv.bash b/completions/rbenv.bash index e3276016..fe0784ac 100644 --- a/completions/rbenv.bash +++ b/completions/rbenv.bash @@ -5,8 +5,10 @@ _rbenv() { if [ "$COMP_CWORD" -eq 1 ]; then COMPREPLY=( $(compgen -W "$(rbenv commands)" -- "$word") ) else - local command="${COMP_WORDS[1]}" - local completions="$(rbenv completions "$command")" + local words=("${COMP_WORDS[@]}") + unset words[0] + unset words[$COMP_CWORD] + local completions=$(rbenv completions "${words[@]}") COMPREPLY=( $(compgen -W "$completions" -- "$word") ) fi } diff --git a/completions/rbenv.zsh b/completions/rbenv.zsh index 4739ac10..c439c5aa 100644 --- a/completions/rbenv.zsh +++ b/completions/rbenv.zsh @@ -5,14 +5,13 @@ fi compctl -K _rbenv rbenv _rbenv() { - local word words completions + local words completions read -cA words - word="${words[2]}" if [ "${#words}" -eq 2 ]; then completions="$(rbenv commands)" else - completions="$(rbenv completions "${word}")" + completions="$(rbenv completions ${words[2,-1]})" fi reply=("${(ps:\n:)completions}") diff --git a/libexec/rbenv b/libexec/rbenv index d368d459..76928647 100755 --- a/libexec/rbenv +++ b/libexec/rbenv @@ -60,7 +60,7 @@ shopt -u nullglob command="$1" case "$command" in "" | "-h" | "--help" ) - echo -e "rbenv $(rbenv---version)\n$(rbenv-help)" >&2 + echo -e "$(rbenv---version)\n$(rbenv-help)" >&2 ;; "-v" ) exec rbenv---version diff --git a/libexec/rbenv---version b/libexec/rbenv---version index fcf94d69..aa9b829d 100755 --- a/libexec/rbenv---version +++ b/libexec/rbenv---version @@ -2,9 +2,10 @@ set -e [ -n "$RBENV_DEBUG" ] && set -x -version=v0.3.0 +version=0.3.0 cd "$RBENV_ROOT" git_revision="$(git describe --tags HEAD 2>/dev/null || true)" +git_revision="${git_revision#v}" -echo ${git_revision:-$version} +echo "rbenv ${git_revision:-$version}" diff --git a/libexec/rbenv-exec b/libexec/rbenv-exec index 92ecb72b..5c1aacd8 100755 --- a/libexec/rbenv-exec +++ b/libexec/rbenv-exec @@ -7,7 +7,9 @@ if [ "$1" = "--complete" ]; then exec rbenv shims --short fi +export RBENV_VERSION="$(rbenv-version-name)" RBENV_COMMAND="$1" + if [ -z "$RBENV_COMMAND" ]; then echo "usage: rbenv exec COMMAND [arg1 arg2...]" >&2 exit 1 @@ -21,5 +23,7 @@ for script in $(rbenv-hooks exec); do done shift 1 -export PATH="${RBENV_BIN_PATH}:${PATH}" +if [ "$RBENV_VERSION" != "system" ]; then + export PATH="${RBENV_BIN_PATH}:${PATH}" +fi exec -a "$RBENV_COMMAND" "$RBENV_COMMAND_PATH" "$@" diff --git a/libexec/rbenv-init b/libexec/rbenv-init index 95b6c403..16916cd5 100755 --- a/libexec/rbenv-init +++ b/libexec/rbenv-init @@ -86,7 +86,8 @@ commands=(`rbenv-commands --sh`) IFS="|" cat < "$PROTOTYPE_SHIM_PATH" </dev/null 2>&1; then + for shim in *; do rm -f "$shim"; done + fi + break + done +} + # The basename of each argument passed to `make_shims` will be # registered for installation as a shim. In this way, plugins may call # `make_shims` with a glob to register many shims at once. @@ -57,58 +86,27 @@ make_shims() { done } -# Create an empty array for the list of registered shims. +# Create an empty array for the list of registered shims and an empty +# string to use as a search index. registered_shims=() +registered_shims_index="" # We will keep track of shims registered for installation with the -# global `reigstered_shims` array and with a global variable for each -# shim. The array will let us iterate over all registered shims. The -# global variables will let us quickly check whether a shim with the -# given name has been registered or not. +# global `reigstered_shims` array and with a global search index +# string. The array will let us iterate over all registered shims. The +# index string will let us quickly check whether a shim with the given +# name has been registered or not. register_shim() { local shim="$@" - local var="$(shim_variable_name "$shim")" - - if [ -z "${!var}" ]; then - registered_shims[${#registered_shims[*]}]="$shim" - eval "${var}=1" - fi -} - -# To compute the global variable name for a given shim we must first -# escape any non-alphanumeric characters. If the shim name is -# alphanumeric (including a hyphen or underscore) we can take a -# shorter path. Otherwise, we must iterate over each character and -# escape the non-alphanumeric ones using `printf`. -shim_variable_name() { - local shim="$1" - local result="_shim_" - - if [[ ! "$shim" =~ [^[:alnum:]_-] ]]; then - shim="${shim//_/_5f}" - shim="${shim//-/_2d}" - result="$result$shim" - else - local length="${#shim}" - local char i - - for ((i=0; i