Merge pull request #302 from sstephenson/ruby-version

Support for .ruby-version files
This commit is contained in:
Sam Stephenson 2013-01-03 07:32:02 -08:00
commit 80750f730f
5 changed files with 40 additions and 14 deletions

View file

@ -230,7 +230,7 @@ first argument. The most common subcommands are:
Sets the global version of Ruby to be used in all shells by writing Sets the global version of Ruby to be used in all shells by writing
the version name to the `~/.rbenv/version` file. This version can be the version name to the `~/.rbenv/version` file. This version can be
overridden by a per-project `.rbenv-version` file, or by setting the overridden by a per-project `.ruby-version` file, or by setting the
`RBENV_VERSION` environment variable. `RBENV_VERSION` environment variable.
$ rbenv global 1.9.3-p327 $ rbenv global 1.9.3-p327
@ -244,7 +244,7 @@ currently configured global version.
### rbenv local ### ### rbenv local ###
Sets a local per-project Ruby version by writing the version name to Sets a local per-project Ruby version by writing the version name to
an `.rbenv-version` file in the current directory. This version a `.ruby-version` file in the current directory. This version
overrides the global, and can be overridden itself by setting the overrides the global, and can be overridden itself by setting the
`RBENV_VERSION` environment variable or with the `rbenv shell` `RBENV_VERSION` environment variable or with the `rbenv shell`
command. command.
@ -256,6 +256,11 @@ configured local version. You can also unset the local version:
$ rbenv local --unset $ rbenv local --unset
Previous versions of rbenv stored local version specifications in a
file named `.rbenv-version`. For backwards compatibility, rbenv will
read a local version specified in an `.rbenv-version` file, but a
`.ruby-version` file in the same directory will take precedence.
### rbenv shell ### ### rbenv shell ###
Sets a shell-specific Ruby version by setting the `RBENV_VERSION` Sets a shell-specific Ruby version by setting the `RBENV_VERSION`
@ -284,7 +289,7 @@ the currently active version.
$ rbenv versions $ rbenv versions
1.8.7-p352 1.8.7-p352
1.9.2-p290 1.9.2-p290
* 1.9.3-p327 (set by /Users/sam/.rbenv/global) * 1.9.3-p327 (set by /Users/sam/.rbenv/version)
jruby-1.7.1 jruby-1.7.1
rbx-1.2.4 rbx-1.2.4
ree-1.8.7-2011.03 ree-1.8.7-2011.03
@ -295,7 +300,7 @@ Displays the currently active Ruby version, along with information on
how it was set. how it was set.
$ rbenv version $ rbenv version
1.8.7-p352 (set by /Volumes/37signals/basecamp/.rbenv-version) 1.8.7-p352 (set by /Volumes/37signals/basecamp/.ruby-version)
### rbenv rehash ### ### rbenv rehash ###

View file

@ -6,14 +6,18 @@
# rbenv local --unset # rbenv local --unset
# #
# Sets the local directory-specific Ruby version by writing the version # Sets the local directory-specific Ruby version by writing the version
# name to a file named `.rbenv-version'. # name to a file named `.ruby-version'.
# #
# When you run a Ruby command, rbenv will look for an `.rbenv-version' # When you run a Ruby command, rbenv will look for a `.ruby-version'
# file in the current directory and each parent directory. If no such # file in the current directory and each parent directory. If no such
# file is found in the tree, rbenv will use the global Ruby version # file is found in the tree, rbenv will use the global Ruby version
# specified with `rbenv global', or the version specified in the # specified with `rbenv global', or the version specified in the
# RBENV_VERSION environment variable. # RBENV_VERSION environment variable.
# #
# For backwards compatibility, rbenv will also read version
# specifications from `.rbenv-version' files, but a `.ruby-version'
# file in the same directory takes precedence.
#
# <version> should be a string matching a Ruby version known to rbenv. # <version> should be a string matching a Ruby version known to rbenv.
# The special version string `system' will use your default system Ruby. # The special version string `system' will use your default system Ruby.
# Run `rbenv versions' for a list of available Ruby versions. # Run `rbenv versions' for a list of available Ruby versions.
@ -29,14 +33,20 @@ if [ "$1" = "--complete" ]; then
fi fi
RBENV_VERSION="$1" RBENV_VERSION="$1"
RBENV_VERSION_FILE=".rbenv-version"
if [ "$RBENV_VERSION" = "--unset" ]; then if [ "$RBENV_VERSION" = "--unset" ]; then
rm -f "$RBENV_VERSION_FILE" rm -f .ruby-version .rbenv-version
elif [ -n "$RBENV_VERSION" ]; then elif [ -n "$RBENV_VERSION" ]; then
rbenv-version-file-write "$RBENV_VERSION_FILE" "$RBENV_VERSION" if [ "$(RBENV_VERSION= rbenv-version-origin)" -ef .rbenv-version ]; then
rm -f .rbenv-version
{ echo "rbenv: removed existing \`.rbenv-version' file and migrated"
echo " local version specification to \`.ruby-version' file"
} >&2
fi
rbenv-version-file-write .ruby-version "$RBENV_VERSION"
else else
rbenv-version-file-read "$RBENV_VERSION_FILE" || rbenv-version-file-read .ruby-version ||
rbenv-version-file-read .rbenv-version ||
{ echo "rbenv: no local version configured for this directory" { echo "rbenv: no local version configured for this directory"
exit 1 exit 1
} >&2 } >&2

View file

@ -6,7 +6,10 @@ set -e
find_local_version_file() { find_local_version_file() {
local root="$1" local root="$1"
while [ -n "$root" ]; do while [ -n "$root" ]; do
if [ -e "${root}/.rbenv-version" ]; then if [ -e "${root}/.ruby-version" ]; then
echo "${root}/.ruby-version"
exit
elif [ -e "${root}/.rbenv-version" ]; then
echo "${root}/.rbenv-version" echo "${root}/.rbenv-version"
exit exit
fi fi

View file

@ -13,10 +13,18 @@ if [ -z "$RBENV_VERSION" ] || [ "$RBENV_VERSION" = "system" ]; then
exit exit
fi fi
RBENV_VERSION_PATH="${RBENV_ROOT}/versions/${RBENV_VERSION}" version_exists() {
local version="$1"
[ -d "${RBENV_ROOT}/versions/${version}" ]
}
if [ -d "$RBENV_VERSION_PATH" ]; then if version_exists "$RBENV_VERSION"; then
echo "$RBENV_VERSION" echo "$RBENV_VERSION"
elif version_exists "${RBENV_VERSION#ruby-}"; then
{ echo "warning: ignoring extraneous \`ruby-' prefix in version \`${RBENV_VERSION}'"
echo " (set by $(rbenv-version-origin))"
} >&2
echo "${RBENV_VERSION#ruby-}"
else else
echo "rbenv: version \`$RBENV_VERSION' is not installed" >&2 echo "rbenv: version \`$RBENV_VERSION' is not installed" >&2
exit 1 exit 1

View file

@ -21,7 +21,7 @@ fi
print_version() { print_version() {
if [ "$1" == "$current_version" ]; then if [ "$1" == "$current_version" ]; then
echo "${hit_prefix}$(rbenv-version)" echo "${hit_prefix}$(rbenv-version 2>/dev/null)"
else else
echo "${miss_prefix}$1" echo "${miss_prefix}$1"
fi fi