From: Tian Yuchen Date: Sun, 22 Mar 2026 03:27:32 GMT Subject: Re: [PATCH] repo: add paths.git_dir repo info key Message-ID: <90c5b9a9-b77b-43ad-9c04-a0addc058aa8@gmail.com> In-Reply-To: Hi Jayesh, On 3/18/26 00:55, Jayesh Daga via GitGitGadget wrote: > From: jayesh0104 > > Introduce a new repo info key `paths.git_dir` to expose the > repository's gitdir path, equivalent to `git rev-parse --git-dir`. Here you promise in the commit message that paths.git_dir and git rev-parse --git-dir are equivalent... > > This improves consistency and allows tools to retrieve the gitdir > path without invoking external commands. > > The implementation adds support in repo.c and integrates it into > the repo info reporting mechanism. Documentation is updated to > describe the new key, and tests are added to verify that the value > matches the output of `git rev-parse --git-dir`. > > Signed-off-by: jayesh0104 > --- > repo: add paths.git_dir to 'git repo info' > > Teach git repo info a new key, paths.git_dir, which reports the > repository’s gitdir path (equivalent to git rev-parse --git-dir). > > Documentation and tests are included. > > Tests: > > * make test T=t1900-repo-info.sh > > Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2242%2Fjayesh0104%2Fmaster-v1 > Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2242/jayesh0104/master-v1 > Pull-Request: https://github.com/git/git/pull/2242 > > Documentation/git-repo.adoc | 5 +++++ > builtin/repo.c | 7 +++++++ > t/t1900-repo-info.sh | 10 ++++++++++ > 3 files changed, 22 insertions(+) > > diff --git a/Documentation/git-repo.adoc b/Documentation/git-repo.adoc > index 42262c1983..d17d911ec6 100644 > --- a/Documentation/git-repo.adoc > +++ b/Documentation/git-repo.adoc > @@ -95,6 +95,11 @@ In order to obtain a set of values from `git repo info`, you should provide > the keys that identify them. Here's a list of the available keys and the > values that they return: > > +`paths.git_dir`:: > + The path to the Git directory for the repository (equivalent to > + `git rev-parse --git-dir`). > + > + > `layout.bare`:: > `true` if this is a bare repository, otherwise `false`. > > diff --git a/builtin/repo.c b/builtin/repo.c > index 55f9b9095c..3067107cad 100644 > --- a/builtin/repo.c > +++ b/builtin/repo.c > @@ -66,11 +66,18 @@ static int get_references_format(struct repository *repo, struct strbuf *buf) > return 0; > } > ... > +static int get_paths_git_dir(struct repository *repo, struct strbuf *buf) > +{ > + strbuf_addstr(buf, repo_get_git_dir(repo)); > + return 0; > +} > + ...But your implementation here doesn't quite feel right. Check the git-rev-parse documentation: the output of the --git-dir argument is context-aware and depends on your current directory. If you are in the root directory of the repository, it gives '.git'; And if you are in some subdirectory of the repository , it gives '/home/user/.../repo-root/.../.git'. I don't think simply calling 'repo_get_git_dir(repo)' will achieve this functionality. > /* repo_info_field keys must be in lexicographical order */ > static const struct repo_info_field repo_info_field[] = { > { "layout.bare", get_layout_bare }, > { "layout.shallow", get_layout_shallow }, > { "object.format", get_object_format }, > + { "paths.git_dir", get_paths_git_dir }, > { "references.format", get_references_format }, > }; > > diff --git a/t/t1900-repo-info.sh b/t/t1900-repo-info.sh > index a9eb07abe8..63be0849c4 100755 > --- a/t/t1900-repo-info.sh > +++ b/t/t1900-repo-info.sh > @@ -149,4 +149,14 @@ test_expect_success 'git repo info --keys uses lines as its default output forma > test_cmp expect actual > ' > ... > +test_expect_success 'paths.git_dir matches rev-parse --git-dir' ' > + git init repo && > + ( > + cd repo && > + git repo info paths.git_dir >actual && > + echo "paths.git_dir=$(git rev-parse --git-dir)" >expect && > + test_cmp expect actual > + ) > +' > + > test_done And you’ve only provided tests for the root directory here, which I don’t think is sufficient. That said, considering that you’ve likely misunderstood how to use the --git-dir parameter, this is understandable. Next time you create a similar patch, I think you should take a close look at the documentation and source code first, and try using the existing commands a few times on your own to understand how they work, right? ;) Regards, Yuchen