Subject: Re: [PATCH] repo: add paths.git_dir repo info key

From: Tian Yuchen <[email-masked]>
Date: Sun, 22 Mar 2026 11:27:32 +0800

Hi Jayesh,

On 3/18/26 00:55, Jayesh Daga via GitGitGadget wrote:
> From: jayesh0104 <[email-masked]>
> 
> 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 <[email-masked]>
> ---
>      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