The bug that bit me (hard!) and that triggered not only a long series of curses but also my writing a patch and sending it to the list was that `git rev-parse --git-path HEAD` would give *incorrect* output when run in a subdirectory of a regular checkout, but *correct* output when run in a subdirectory of an associated *worktree*. I had tested the script in question quite a bit, but in a worktree. And in production, it quietly did exactly the wrong thing. Changes relative to v2: - the "iffy" test in t1700 was made "uniffy" - clarified in the commit message of 2/2 why we can get away with the "reset then use" pattern Johannes Schindelin (1): rev-parse: fix several options when running in a subdirectory Michael Rappazzo (1): rev-parse tests: add tests executed from a subdirectory builtin/rev-parse.c | 15 +++++++++++---- t/t1500-rev-parse.sh | 28 ++++++++++++++++++++++++++++ t/t1700-split-index.sh | 16 ++++++++++++++++ t/t2027-worktree-list.sh | 10 +++++++++- 4 files changed, 64 insertions(+), 5 deletions(-) base-commit: 076c05393a047247ea723896289b48d6549ed7d0 Published-As: https://github.com/dscho/git/releases/tag/git-path-in-subdir-v3 Fetch-It-Via: git fetch https://github.com/dscho/git git-path-in-subdir-v3 Interdiff vs v2: diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c index 84af2802f6f..2cfd8d2aae4 100644 --- a/builtin/rev-parse.c +++ b/builtin/rev-parse.c @@ -903,6 +903,7 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) continue; verify_filename(prefix, arg, 1); } + strbuf_release(&buf); if (verify) { if (revs_count == 1) { show_rev(type, sha1, name); @@ -912,6 +913,5 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) die_no_single_rev(quiet); } else show_default(); - strbuf_release(&buf); return 0; } diff --git a/t/t1700-split-index.sh b/t/t1700-split-index.sh index 446ff34f966..6096f2c6309 100755 --- a/t/t1700-split-index.sh +++ b/t/t1700-split-index.sh @@ -201,17 +201,16 @@ EOF ' test_expect_success 'rev-parse --shared-index-path' ' - rm -rf .git && - test_create_repo . && - git update-index --split-index && - ls -t .git/sharedindex* | tail -n 1 >expect && - git rev-parse --shared-index-path >actual && - test_cmp expect actual && - mkdir work && - test_when_finished "rm -rf work" && + test_create_repo split-index && ( - cd work && - ls -t ../.git/sharedindex* | tail -n 1 >expect && + cd split-index && + git update-index --split-index && + echo .git/sharedindex* >expect && + git rev-parse --shared-index-path >actual && + test_cmp expect actual && + mkdir subdirectory && + cd subdirectory && + echo ../.git/sharedindex* >expect && git rev-parse --shared-index-path >actual && test_cmp expect actual ) -- 2.11.1.windows.1.2.g87ad093.dirty