threads / bug / 41846

[Bug] git rev-parse --git-common-dir executed from a sub dir of the main worktree is wrong

Subject: [Bug] git rev-parse --git-common-dir executed from a sub dir of the main worktree is wrong

## tl;dr

2 messages between Mar 28, 2016 and Mar 28, 2016.

replies: 1people: 2as markdown or json

Mike Rappazzo· Mar 28, 2016, 19:43 UTC · lore

I found a case where it seems that the result of `git rev-parse --git-common-dir` is incorrect. If you execute the command from within a subdirectory in the main worktree, it returns the path from the root of the worktree to the current dir + "/.git". (As a refresher, running this command from the root of the worktree returns ".git").

I wrote a quick test to demonstrate the problem:
+test_expect_success 'git-common-dir inside sub-dir' '
+   (
+ mkdir -p path/to/child &&
+ cd path/to/child &&
+ echo "$(git rev-parse --show-toplevel)/.git" >expected &&
+ git rev-parse --git-common-dir >actual &&
+ test_cmp expected actual
+ )
+'
+

I suggest that we change the result of this call to _always_ return an absolute path. I would be willing to code this change, but I didn't want to start anything that may be considered backwards-incompatible.

This seems related to [1]http://thread.gmane.org/gmane.comp.version-control.git/286038

Junio C Hamano· Mar 28, 2016, 19:57 UTC · re: Mike Rappazzo · lore

Re: [Bug] git rev-parse --git-common-dir executed from a sub dir of the main worktree is wrong

Mike Rappazzo <rappazzo@gmail.com> writes:
Show 15 quoted lines
> I found a case where it seems that the result of `git rev-parse
> --git-common-dir` is incorrect.  If you execute the command from
> within a subdirectory in the main worktree, it returns the path from
> the root of the worktree to the current dir + "/.git".  (As a
> refresher, running this command from the root of the worktree returns
> ".git").
>
> I wrote a quick test to demonstrate the problem:
>
>
> +test_expect_success 'git-common-dir inside sub-dir' '
> +   (
> + mkdir -p path/to/child &&
> + cd path/to/child &&
> + echo "$(git rev-parse --show-toplevel)/.git" >expected &&
... or
    "$(git rev-parse --show-cdup).git >expect

i.e. to use relative path, just like the case where you start from the top.

Show 8 quoted lines
> + git rev-parse --git-common-dir >actual &&
> + test_cmp expected actual
> + )
> +'
> +
>
> I suggest that we change the result of this call to _always_ return an
> absolute path.

← back to recent threads