diff --git a/libexec/rbenv---version b/libexec/rbenv---version index 79cb64d8..1254a2fd 100755 --- a/libexec/rbenv---version +++ b/libexec/rbenv---version @@ -13,10 +13,14 @@ set -e [ -n "$RBENV_DEBUG" ] && set -x version="0.4.0" +git_revision="" -if cd "$RBENV_ROOT" 2>/dev/null; then - git_revision="$(git describe --tags HEAD 2>/dev/null || true)" - git_revision="${git_revision#v}" -fi +for source_dir in "${BASH_SOURCE%/*}" "$RBENV_ROOT"; do + if cd "$source_dir" 2>/dev/null && git remote -v 2>/dev/null | grep -q rbenv; then + git_revision="$(git describe --tags HEAD 2>/dev/null || true)" + git_revision="${git_revision#v}" + [ -z "$git_revision" ] || break + fi +done echo "rbenv ${git_revision:-$version}" diff --git a/test/--version.bats b/test/--version.bats index 4e0e452d..9993e6dc 100644 --- a/test/--version.bats +++ b/test/--version.bats @@ -6,6 +6,18 @@ setup() { mkdir -p "$HOME" git config --global user.name "Tester" git config --global user.email "tester@test.local" + + mkdir -p "${RBENV_TEST_DIR}/bin" + cat > "${RBENV_TEST_DIR}/bin/git" <&2 + exit 1 +else + exec $(which git) "\$@" +fi +CMD + chmod +x "${RBENV_TEST_DIR}/bin/git" } git_commit() { @@ -19,10 +31,25 @@ git_commit() { [[ $output == "rbenv 0."* ]] } +@test "doesn't read version from non-rbenv repo" { + mkdir -p "$RBENV_ROOT" + cd "$RBENV_ROOT" + git init + git remote add origin https://github.com/homebrew/homebrew.git + git_commit + git tag v1.0 + + cd "$RBENV_TEST_DIR" + run rbenv---version + assert_success + [[ $output == "rbenv 0."* ]] +} + @test "reads version from git repo" { mkdir -p "$RBENV_ROOT" cd "$RBENV_ROOT" git init + git remote add origin https://github.com/sstephenson/rbenv.git git_commit git tag v0.4.1 git_commit @@ -38,6 +65,7 @@ git_commit() { mkdir -p "$RBENV_ROOT" cd "$RBENV_ROOT" git init + git remote add origin https://github.com/sstephenson/rbenv.git git_commit cd "$RBENV_TEST_DIR"