path: root/t/
diff options
authorJeff King <>2019-11-19 08:05:43 (GMT)
committerJunio C Hamano <>2019-11-20 01:19:58 (GMT)
commit2d92ab32fd624349d308334befbf07adf9f179b9 (patch)
tree03c48980c4a44bb537b12b3736334eb83b276bd8 /t/
parentd9f6f3b6195a0ca35642561e530798ad1469bd41 (diff)
rev-parse: make --show-toplevel without a worktree an error
Ever since it was introduced in 7cceca5ccc (Add 'git rev-parse --show-toplevel' option., 2010-01-12), the --show-toplevel option has treated a missing working tree as a quiet success: it neither prints a toplevel path, but nor does it report any kind of error. While a caller could distinguish this case by looking for an empty response, the behavior is rather confusing. We're better off complaining that there is no working tree, as other internal commands would do in similar cases (e.g., "git status" or any builtin with NEED_WORK_TREE set would just die()). So let's do the same here. While we're at it, let's clarify the documentation and add some tests, both for the new behavior and for the more mundane case (which was not covered). Signed-off-by: Jeff King <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 't/')
1 files changed, 10 insertions, 0 deletions
diff --git a/t/ b/t/
index 0177fd8..603019b 100755
--- a/t/
+++ b/t/
@@ -146,6 +146,16 @@ test_expect_success 'rev-parse --show-object-format in repo' '
grep "unknown mode for --show-object-format: squeamish-ossifrage" err
+test_expect_success '--show-toplevel from subdir of working tree' '
+ pwd >expect &&
+ git -C sub/dir rev-parse --show-toplevel >actual &&
+ test_cmp expect actual
+test_expect_success '--show-toplevel from inside .git' '
+ test_must_fail git -C .git rev-parse --show-toplevel
test_expect_success 'showing the superproject correctly' '
git rev-parse --show-superproject-working-tree >out &&
test_must_be_empty out &&