[PATCH v3 0/2] Fix bugs in rev-parse's output when run in a subdirectory
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Feb 17, 2017, 16:58 UTC
- Message-ID
- <cover.1487350582.git.johannes.schindelin@gmx.de>
- In-Reply-To
- <cover.1486740772.git.johannes.schindelin@gmx.de>
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