From dcca61c0bc9747a8886bf7a1d790d902c2426ed0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Sun, 25 Oct 2015 16:54:38 +0100 Subject: [PATCH] Improve `rbenv --version` git checkout discovery When `rbenv --version` is called, this now happens: 1. It changes into the directory where `libexec/rbenv--version` resides and checks if it's a checkout of the rbenv repo (as opposed to Homebrew checkout or something else). Then it reads the git revision. 2. If that failed, change to `$RBENV_ROOT` directory and repeat step 1. --- libexec/rbenv---version | 12 ++++++++---- test/--version.bats | 28 ++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) 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"