Executing `git-rev-parse --git-common-dir` from the root of the main worktree results in '.git', which is the relative path to the git dir. When executed from a subpath of the main tree it returned somthing like: 'sub/path/.git'. Change this to return the proper relative path to the git directory (similar to `--show-cdup`). Add as test to t1500-rev-parse.sh for this case and adjust another test in t2027-worktree-list.sh to use this expectation. Signed-off-by: Michael Rappazzo <rappazzo@xxxxxxxxx> --- builtin/rev-parse.c | 14 ++++++++++++-- t/t1500-rev-parse.sh | 10 ++++++++++ t/t2027-worktree-list.sh | 2 +- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c index c961b74..c2918e1 100644 --- a/builtin/rev-parse.c +++ b/builtin/rev-parse.c @@ -787,8 +787,18 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) continue; } if (!strcmp(arg, "--git-common-dir")) { - const char *pfx = prefix ? prefix : ""; - puts(prefix_filename(pfx, strlen(pfx), get_git_common_dir())); + const char *git_common_dir = get_git_common_dir(); + if (prefix && !is_absolute_path(git_common_dir)) { + const char *pfx = prefix; + while (pfx) { + pfx = strchr(pfx, '/'); + if (pfx) { + pfx++; + printf("../"); + } + } + } + printf("%s\n", git_common_dir); continue; } if (!strcmp(arg, "--is-inside-git-dir")) { diff --git a/t/t1500-rev-parse.sh b/t/t1500-rev-parse.sh index 48ee077..2023208 100755 --- a/t/t1500-rev-parse.sh +++ b/t/t1500-rev-parse.sh @@ -3,6 +3,16 @@ test_description='test git rev-parse' . ./test-lib.sh +test_expect_success 'git-common-dir inside sub-dir' ' + ( + mkdir -p path/to/child && + cd path/to/child && + echo "$(git rev-parse --show-cdup).git" >expect && + git rev-parse --git-common-dir >actual && + test_cmp expect actual + ) +' + test_rev_parse() { name=$1 shift diff --git a/t/t2027-worktree-list.sh b/t/t2027-worktree-list.sh index 1b1b65a..3780b14 100755 --- a/t/t2027-worktree-list.sh +++ b/t/t2027-worktree-list.sh @@ -14,7 +14,7 @@ test_expect_success 'rev-parse --git-common-dir on main worktree' ' test_cmp expected actual && mkdir sub && git -C sub rev-parse --git-common-dir >actual2 && - echo sub/.git >expected2 && + echo ../.git >expected2 && test_cmp expected2 actual2 ' -- 2.8.0 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html