diff --git a/libexec/rbenv-version-file b/libexec/rbenv-version-file
index 5e38c695..1e70539f 100755
--- a/libexec/rbenv-version-file
+++ b/libexec/rbenv-version-file
@@ -1,35 +1,45 @@
#!/usr/bin/env bash
+# Usage: rbenv version-file [
]
# Summary: Detect the file that sets the current rbenv version
set -e
[ -n "$RBENV_DEBUG" ] && set -x
+target_dir="$1"
+
find_local_version_file() {
local root="$1"
- while true; do
- [[ "$root" =~ ^//[^/]*$ ]] && break
+ while ! [[ "$root" =~ ^//[^/]*$ ]]; do
if [ -e "${root}/.ruby-version" ]; then
echo "${root}/.ruby-version"
- exit
+ return 0
elif [ -e "${root}/.rbenv-version" ]; then
echo "${root}/.rbenv-version"
- exit
+ return 0
fi
[ -n "$root" ] || break
root="${root%/*}"
done
+ return 1
}
-find_local_version_file "$RBENV_DIR"
-[ "$RBENV_DIR" = "$PWD" ] || find_local_version_file "$PWD"
+find_global_version_file() {
+ local global_version_file="${RBENV_ROOT}/version"
-global_version_file="${RBENV_ROOT}/version"
+ if [ -e "$global_version_file" ]; then
+ echo "$global_version_file"
+ elif [ -e "${RBENV_ROOT}/global" ]; then
+ echo "${RBENV_ROOT}/global"
+ elif [ -e "${RBENV_ROOT}/default" ]; then
+ echo "${RBENV_ROOT}/default"
+ else
+ echo "$global_version_file"
+ fi
+}
-if [ -e "$global_version_file" ]; then
- echo "$global_version_file"
-elif [ -e "${RBENV_ROOT}/global" ]; then
- echo "${RBENV_ROOT}/global"
-elif [ -e "${RBENV_ROOT}/default" ]; then
- echo "${RBENV_ROOT}/default"
+if [ -n "$target_dir" ]; then
+ find_local_version_file "$target_dir"
else
- echo "$global_version_file"
+ find_local_version_file "$RBENV_DIR" || {
+ [ "$RBENV_DIR" != "$PWD" ] && find_local_version_file "$PWD"
+ } || find_global_version_file
fi
diff --git a/test/version-file.bats b/test/version-file.bats
index ed84c484..ef7901f4 100644
--- a/test/version-file.bats
+++ b/test/version-file.bats
@@ -97,3 +97,14 @@ create_file() {
RBENV_DIR="${RBENV_TEST_DIR}/widget/blank" run rbenv-version-file
assert_success "${RBENV_TEST_DIR}/project/.ruby-version"
}
+
+@test "finds version file in target directory" {
+ create_file "project/.ruby-version"
+ run rbenv-version-file "${PWD}/project"
+ assert_success "${RBENV_TEST_DIR}/project/.ruby-version"
+}
+
+@test "fails when no version file in target directory" {
+ run rbenv-version-file "$PWD"
+ assert_failure ""
+}