Git development
 help / color / mirror / Atom feed
* [PATCH] repo: add paths.toplevel to repo info
@ 2026-04-02 17:14 Jayesh Daga via GitGitGadget
  2026-04-02 17:38 ` Junio C Hamano
  2026-04-08 17:08 ` [PATCH v2] " Jayesh Daga via GitGitGadget
  0 siblings, 2 replies; 8+ messages in thread
From: Jayesh Daga via GitGitGadget @ 2026-04-02 17:14 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Jayesh Daga, Jayesh Daga

From: Jayesh Daga <jayeshdaga99@gmail.com>

Expose the working tree root via `git repo info` as
paths.toplevel, matching the semantics of
`git rev-parse --show-toplevel`.

For bare repositories, this value is empty, consistent
with other non-applicable fields.

This allows scripts to retrieve the repository root
through a structured interface without invoking
rev-parse.

Signed-off-by: Jayesh Daga <jayeshdaga99@gmail.com>
---
    repo: add paths.toplevel to repo info
    
    repo info currently does not expose the repository's working tree root,
    even though this information is available via repo_get_work_tree().
    
    This makes it harder for scripts to retrieve the repository root through
    a structured interface, often requiring the use of git rev-parse
    --show-toplevel.
    
    Add a new field paths.toplevel to git repo info that returns the working
    tree root. For bare repositories, this value is empty, consistent with
    other non-applicable fields.
    
    This provides a consistent and script-friendly way to query repository
    paths without invoking additional commands.
    
    Signed-off-by: Jayesh Daga jayeshdaga99@gmail.com

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2264%2Fjayesh0104%2Frepo-toplevel-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2264/jayesh0104/repo-toplevel-v1
Pull-Request: https://github.com/git/git/pull/2264

 builtin/repo.c       | 12 ++++++++++++
 t/t1900-repo-info.sh | 16 ++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/builtin/repo.c b/builtin/repo.c
index 71a5c1c29c..d0491f6c66 100644
--- a/builtin/repo.c
+++ b/builtin/repo.c
@@ -62,6 +62,17 @@ static int get_layout_bare(struct repository *repo UNUSED, struct strbuf *buf)
 	return 0;
 }
 
+static int get_paths_toplevel(struct repository *repo, struct strbuf *buf)
+{
+    const char *wt = repo_get_work_tree(repo);
+
+    if (!wt)
+	return -1; /* match existing error style */
+
+    strbuf_addstr(buf, wt);
+    return 0;
+}
+
 static int get_layout_shallow(struct repository *repo, struct strbuf *buf)
 {
 	strbuf_addstr(buf,
@@ -87,6 +98,7 @@ 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.toplevel", get_paths_toplevel },
 	{ "references.format", get_references_format },
 };
 
diff --git a/t/t1900-repo-info.sh b/t/t1900-repo-info.sh
index 39bb77dda0..470e06e8c2 100755
--- a/t/t1900-repo-info.sh
+++ b/t/t1900-repo-info.sh
@@ -155,4 +155,20 @@ test_expect_success 'git repo info -h shows only repo info usage' '
 	test_grep ! "git repo structure" actual
 '
 
+test_expect_success 'repo info paths.toplevel' '
+    git repo info paths.toplevel >actual &&
+    echo "paths.toplevel=$(git rev-parse --show-toplevel)" >expected &&
+    test_cmp expected actual
+'
+
+test_expect_success 'repo info paths.toplevel (bare repo)' '
+    git init --bare bare.git &&
+    (
+	cd bare.git &&
+	git repo info paths.toplevel >actual &&
+	echo "paths.toplevel=" >expected &&
+	test_cmp expected actual
+    )
+'
+
 test_done

base-commit: 256554692df0685b45e60778b08802b720880c50
-- 
gitgitgadget

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] repo: add paths.toplevel to repo info
  2026-04-02 17:14 [PATCH] repo: add paths.toplevel to repo info Jayesh Daga via GitGitGadget
@ 2026-04-02 17:38 ` Junio C Hamano
  2026-04-08 17:08 ` [PATCH v2] " Jayesh Daga via GitGitGadget
  1 sibling, 0 replies; 8+ messages in thread
From: Junio C Hamano @ 2026-04-02 17:38 UTC (permalink / raw)
  To: Jayesh Daga via GitGitGadget; +Cc: git, Derrick Stolee, Jayesh Daga

"Jayesh Daga via GitGitGadget" <gitgitgadget@gmail.com> writes:

> +static int get_paths_toplevel(struct repository *repo, struct strbuf *buf)
> +{
> +    const char *wt = repo_get_work_tree(repo);
> +
> +    if (!wt)
> +	return -1; /* match existing error style */
> +
> +    strbuf_addstr(buf, wt);
> +    return 0;
> +}

Funny indentation.  In our C codebase, one level of indent is one
horizontal tab "\t".

> @@ -87,6 +98,7 @@ 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.toplevel", get_paths_toplevel },
>  	{ "references.format", get_references_format },

Instead of adding yet another one as people think of it, can we
first take an inventory of what is available from the kitchen-sink
options of "git rev-parse" and make a list, to be compared with what
is available in repo_info_field[]?  Add that correspondence table in
a comment before the definition of this array, and it is perfectly
OK if the right hand side on many rows say "missing", like

    /*
     * rev-parse --<opt>	repo info <field>
     *
     * is-bare-repository	layout.bare
     * is-shallow-repository    layout.shallow
     * show-cdup		<missing>
     * show-prefix              <missing>
     * show-object-format       object.format
     * show-ref-format          references.format
     * ... more ...
     */

There can be two classes of <missing>, ones that we want to have but
haven't been implemented eyt, and others that we do not think we
need.

Also, we may not want to limit the existing sources of information
to "rev-parse", in which case lines of such a correspondence table
may need to be grouped by where each piece of information is found
elsewhere.

>  };
>  
> diff --git a/t/t1900-repo-info.sh b/t/t1900-repo-info.sh
> index 39bb77dda0..470e06e8c2 100755
> --- a/t/t1900-repo-info.sh
> +++ b/t/t1900-repo-info.sh
> @@ -155,4 +155,20 @@ test_expect_success 'git repo info -h shows only repo info usage' '
>  	test_grep ! "git repo structure" actual
>  '
>  
> +test_expect_success 'repo info paths.toplevel' '
> +    git repo info paths.toplevel >actual &&
> +    echo "paths.toplevel=$(git rev-parse --show-toplevel)" >expected &&
> +    test_cmp expected actual
> +'
> +
> +test_expect_success 'repo info paths.toplevel (bare repo)' '
> +    git init --bare bare.git &&
> +    (
> +	cd bare.git &&
> +	git repo info paths.toplevel >actual &&
> +	echo "paths.toplevel=" >expected &&
> +	test_cmp expected actual
> +    )
> +'
> +
>  test_done
>
> base-commit: 256554692df0685b45e60778b08802b720880c50

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v2] repo: add paths.toplevel to repo info
  2026-04-02 17:14 [PATCH] repo: add paths.toplevel to repo info Jayesh Daga via GitGitGadget
  2026-04-02 17:38 ` Junio C Hamano
@ 2026-04-08 17:08 ` Jayesh Daga via GitGitGadget
  2026-04-09  6:01   ` [PATCH v3] " Jayesh Daga via GitGitGadget
  1 sibling, 1 reply; 8+ messages in thread
From: Jayesh Daga via GitGitGadget @ 2026-04-08 17:08 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Jayesh Daga, Jayesh Daga

From: Jayesh Daga <jayeshdaga99@gmail.com>

repo info currently does not expose the repository's
working tree root, even though this information is
available via `repo_get_work_tree()` and
`git rev-parse --show-toplevel`.

Add a new field `paths.toplevel` to expose this value.

While doing so, document the correspondence between
`git rev-parse` options and `repo info` fields to make
it easier to identify missing or future additions.

For bare repositories, this value is empty, consistent
with other non-applicable fields.

Signed-off-by: Jayesh Daga [jayeshdaga99@gmail.com](mailto:jayeshdaga99@gmail.com)
---
    repo: add paths.toplevel to repo info
    
    repo info currently does not expose the repository's working tree root,
    even though this information is available via repo_get_work_tree().
    
    This makes it harder for scripts to retrieve the repository root through
    a structured interface, often requiring the use of git rev-parse
    --show-toplevel.
    
    Add a new field paths.toplevel to git repo info that returns the working
    tree root. For bare repositories, this value is empty, consistent with
    other non-applicable fields.
    
    This provides a consistent and script-friendly way to query repository
    paths without invoking additional commands.
    
    Signed-off-by: Jayesh Daga jayeshdaga99@gmail.com

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2264%2Fjayesh0104%2Frepo-toplevel-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2264/jayesh0104/repo-toplevel-v2
Pull-Request: https://github.com/git/git/pull/2264

Range-diff vs v1:

 1:  448dfae6a1 ! 1:  05e34bfe2c repo: add paths.toplevel to repo info
     @@ Metadata
       ## Commit message ##
          repo: add paths.toplevel to repo info
      
     -    Expose the working tree root via `git repo info` as
     -    paths.toplevel, matching the semantics of
     +    repo info currently does not expose the repository's
     +    working tree root, even though this information is
     +    available via `repo_get_work_tree()` and
          `git rev-parse --show-toplevel`.
      
     +    Add a new field `paths.toplevel` to expose this value.
     +
     +    While doing so, document the correspondence between
     +    `git rev-parse` options and `repo info` fields to make
     +    it easier to identify missing or future additions.
     +
          For bare repositories, this value is empty, consistent
          with other non-applicable fields.
      
     -    This allows scripts to retrieve the repository root
     -    through a structured interface without invoking
     -    rev-parse.
     -
     -    Signed-off-by: Jayesh Daga <jayeshdaga99@gmail.com>
     +    Signed-off-by: Jayesh Daga [jayeshdaga99@gmail.com](mailto:jayeshdaga99@gmail.com)
      
       ## builtin/repo.c ##
      @@ builtin/repo.c: static int get_layout_bare(struct repository *repo UNUSED, struct strbuf *buf)


 builtin/repo.c       | 12 ++++++++++++
 t/t1900-repo-info.sh | 16 ++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/builtin/repo.c b/builtin/repo.c
index 71a5c1c29c..d0491f6c66 100644
--- a/builtin/repo.c
+++ b/builtin/repo.c
@@ -62,6 +62,17 @@ static int get_layout_bare(struct repository *repo UNUSED, struct strbuf *buf)
 	return 0;
 }
 
+static int get_paths_toplevel(struct repository *repo, struct strbuf *buf)
+{
+    const char *wt = repo_get_work_tree(repo);
+
+    if (!wt)
+	return -1; /* match existing error style */
+
+    strbuf_addstr(buf, wt);
+    return 0;
+}
+
 static int get_layout_shallow(struct repository *repo, struct strbuf *buf)
 {
 	strbuf_addstr(buf,
@@ -87,6 +98,7 @@ 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.toplevel", get_paths_toplevel },
 	{ "references.format", get_references_format },
 };
 
diff --git a/t/t1900-repo-info.sh b/t/t1900-repo-info.sh
index 39bb77dda0..470e06e8c2 100755
--- a/t/t1900-repo-info.sh
+++ b/t/t1900-repo-info.sh
@@ -155,4 +155,20 @@ test_expect_success 'git repo info -h shows only repo info usage' '
 	test_grep ! "git repo structure" actual
 '
 
+test_expect_success 'repo info paths.toplevel' '
+    git repo info paths.toplevel >actual &&
+    echo "paths.toplevel=$(git rev-parse --show-toplevel)" >expected &&
+    test_cmp expected actual
+'
+
+test_expect_success 'repo info paths.toplevel (bare repo)' '
+    git init --bare bare.git &&
+    (
+	cd bare.git &&
+	git repo info paths.toplevel >actual &&
+	echo "paths.toplevel=" >expected &&
+	test_cmp expected actual
+    )
+'
+
 test_done

base-commit: 256554692df0685b45e60778b08802b720880c50
-- 
gitgitgadget

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v3] repo: add paths.toplevel to repo info
  2026-04-08 17:08 ` [PATCH v2] " Jayesh Daga via GitGitGadget
@ 2026-04-09  6:01   ` Jayesh Daga via GitGitGadget
  2026-04-09 13:13     ` Karthik Nayak
  2026-04-09 14:42     ` Junio C Hamano
  0 siblings, 2 replies; 8+ messages in thread
From: Jayesh Daga via GitGitGadget @ 2026-04-09  6:01 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee, Jayesh Daga, Jayesh Daga

From: Jayesh Daga <jayeshdaga99@gmail.com>

repo info currently does not expose the repository's
working tree root, even though this information is
available via `repo_get_work_tree()` and
`git rev-parse --show-toplevel`.

Add a new field `paths.toplevel` to expose this value.

While doing so, document the correspondence between
`git rev-parse` options and `repo info` fields to make
it easier to identify missing or future additions.

For bare repositories, this value is empty, consistent
with other non-applicable fields.

Signed-off-by: Jayesh Daga jayeshdaga99@gmail.com
---
    repo: add paths.toplevel to repo info
    
    repo info currently does not expose the repository's working tree root,
    even though this information is available via repo_get_work_tree().
    
    This makes it harder for scripts to retrieve the repository root through
    a structured interface, often requiring the use of git rev-parse
    --show-toplevel.
    
    Add a new field paths.toplevel to git repo info that returns the working
    tree root. For bare repositories, this value is empty, consistent with
    other non-applicable fields.
    
    This provides a consistent and script-friendly way to query repository
    paths without invoking additional commands.
    
    Signed-off-by: Jayesh Daga jayeshdaga99@gmail.com

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2264%2Fjayesh0104%2Frepo-toplevel-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2264/jayesh0104/repo-toplevel-v3
Pull-Request: https://github.com/git/git/pull/2264

Range-diff vs v2:

 1:  05e34bfe2c ! 1:  8a58b6ce03 repo: add paths.toplevel to repo info
     @@ Commit message
          For bare repositories, this value is empty, consistent
          with other non-applicable fields.
      
     -    Signed-off-by: Jayesh Daga [jayeshdaga99@gmail.com](mailto:jayeshdaga99@gmail.com)
     +    Signed-off-by: Jayesh Daga jayeshdaga99@gmail.com
      
       ## builtin/repo.c ##
      @@ builtin/repo.c: static int get_layout_bare(struct repository *repo UNUSED, struct strbuf *buf)
     @@ builtin/repo.c: static int get_layout_bare(struct repository *repo UNUSED, struc
       
      +static int get_paths_toplevel(struct repository *repo, struct strbuf *buf)
      +{
     -+    const char *wt = repo_get_work_tree(repo);
     ++	const char *wt = repo_get_work_tree(repo);
      +
     -+    if (!wt)
     -+	return -1; /* match existing error style */
     ++	if (!wt)
     ++		return -1; /* match existing error style */
      +
     -+    strbuf_addstr(buf, wt);
     -+    return 0;
     ++	strbuf_addstr(buf, wt);
     ++	return 0;
      +}
      +
       static int get_layout_shallow(struct repository *repo, struct strbuf *buf)
       {
       	strbuf_addstr(buf,
     -@@ builtin/repo.c: static const struct repo_info_field repo_info_field[] = {
     +@@ builtin/repo.c: static int get_references_format(struct repository *repo, struct strbuf *buf)
     + 	return 0;
     + }
     + 
     ++/*
     ++ * rev-parse --<opt>        repo info <field>
     ++ *
     ++ * is-bare-repository      layout.bare
     ++ * is-shallow-repository   layout.shallow
     ++ * show-object-format      object.format
     ++ * show-ref-format         references.format
     ++ * show-toplevel           paths.toplevel
     ++ *
     ++ * show-cdup               <missing>
     ++ * show-prefix             <missing>
     ++ *
     ++ * Some <missing> entries may be candidates for future
     ++ * implementation, while others may not be needed.
     ++ */
     ++
     + /* 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 },


 builtin/repo.c       | 28 ++++++++++++++++++++++++++++
 t/t1900-repo-info.sh | 16 ++++++++++++++++
 2 files changed, 44 insertions(+)

diff --git a/builtin/repo.c b/builtin/repo.c
index 71a5c1c29c..8c9afc1150 100644
--- a/builtin/repo.c
+++ b/builtin/repo.c
@@ -62,6 +62,17 @@ static int get_layout_bare(struct repository *repo UNUSED, struct strbuf *buf)
 	return 0;
 }
 
+static int get_paths_toplevel(struct repository *repo, struct strbuf *buf)
+{
+	const char *wt = repo_get_work_tree(repo);
+
+	if (!wt)
+		return -1; /* match existing error style */
+
+	strbuf_addstr(buf, wt);
+	return 0;
+}
+
 static int get_layout_shallow(struct repository *repo, struct strbuf *buf)
 {
 	strbuf_addstr(buf,
@@ -82,11 +93,28 @@ static int get_references_format(struct repository *repo, struct strbuf *buf)
 	return 0;
 }
 
+/*
+ * rev-parse --<opt>        repo info <field>
+ *
+ * is-bare-repository      layout.bare
+ * is-shallow-repository   layout.shallow
+ * show-object-format      object.format
+ * show-ref-format         references.format
+ * show-toplevel           paths.toplevel
+ *
+ * show-cdup               <missing>
+ * show-prefix             <missing>
+ *
+ * Some <missing> entries may be candidates for future
+ * implementation, while others may not be needed.
+ */
+
 /* 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.toplevel", get_paths_toplevel },
 	{ "references.format", get_references_format },
 };
 
diff --git a/t/t1900-repo-info.sh b/t/t1900-repo-info.sh
index 39bb77dda0..470e06e8c2 100755
--- a/t/t1900-repo-info.sh
+++ b/t/t1900-repo-info.sh
@@ -155,4 +155,20 @@ test_expect_success 'git repo info -h shows only repo info usage' '
 	test_grep ! "git repo structure" actual
 '
 
+test_expect_success 'repo info paths.toplevel' '
+    git repo info paths.toplevel >actual &&
+    echo "paths.toplevel=$(git rev-parse --show-toplevel)" >expected &&
+    test_cmp expected actual
+'
+
+test_expect_success 'repo info paths.toplevel (bare repo)' '
+    git init --bare bare.git &&
+    (
+	cd bare.git &&
+	git repo info paths.toplevel >actual &&
+	echo "paths.toplevel=" >expected &&
+	test_cmp expected actual
+    )
+'
+
 test_done

base-commit: 256554692df0685b45e60778b08802b720880c50
-- 
gitgitgadget

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] repo: add paths.toplevel to repo info
  2026-04-09  6:01   ` [PATCH v3] " Jayesh Daga via GitGitGadget
@ 2026-04-09 13:13     ` Karthik Nayak
  2026-04-09 14:48       ` Junio C Hamano
  2026-04-09 14:42     ` Junio C Hamano
  1 sibling, 1 reply; 8+ messages in thread
From: Karthik Nayak @ 2026-04-09 13:13 UTC (permalink / raw)
  To: Jayesh Daga via GitGitGadget, git; +Cc: Derrick Stolee, Jayesh Daga

[-- Attachment #1: Type: text/plain, Size: 1080 bytes --]

"Jayesh Daga via GitGitGadget" <gitgitgadget@gmail.com> writes:

> From: Jayesh Daga <jayeshdaga99@gmail.com>
>
> repo info currently does not expose the repository's
> working tree root, even though this information is
> available via `repo_get_work_tree()` and
> `git rev-parse --show-toplevel`.
>
> Add a new field `paths.toplevel` to expose this value.
>
> While doing so, document the correspondence between
> `git rev-parse` options and `repo info` fields to make
> it easier to identify missing or future additions.
>
> For bare repositories, this value is empty, consistent
> with other non-applicable fields.
>

Don't we still have to decide how we want to support relative vs
absolute paths? [1]

Also seeing that you're a GSoC candidate and this is part of the project
that you've (and other potential contributors) applied for, our
recommendation is to not start working on a project before the selection
process.

[snip]

[1]: https://lore.kernel.org/git/CA+rGoLfbzXqP1Tw+94jMmWcSGPoefMv5E_fvwriad-O5CUeKHQ@mail.gmail.com/T/#m1e2b69b6b097c42b06088349947e43831cf5988f

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 690 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] repo: add paths.toplevel to repo info
  2026-04-09  6:01   ` [PATCH v3] " Jayesh Daga via GitGitGadget
  2026-04-09 13:13     ` Karthik Nayak
@ 2026-04-09 14:42     ` Junio C Hamano
  1 sibling, 0 replies; 8+ messages in thread
From: Junio C Hamano @ 2026-04-09 14:42 UTC (permalink / raw)
  To: Jayesh Daga via GitGitGadget; +Cc: git, Derrick Stolee, Jayesh Daga

"Jayesh Daga via GitGitGadget" <gitgitgadget@gmail.com> writes:

> From: Jayesh Daga <jayeshdaga99@gmail.com>
>
> repo info currently does not expose the repository's
> working tree root, even though this information is
> available via `repo_get_work_tree()` and
> `git rev-parse --show-toplevel`.
>
> Add a new field `paths.toplevel` to expose this value.
>
> While doing so, document the correspondence between
> `git rev-parse` options and `repo info` fields to make
> it easier to identify missing or future additions.
>
> For bare repositories, this value is empty, consistent
> with other non-applicable fields.
>
> Signed-off-by: Jayesh Daga jayeshdaga99@gmail.com
> ---

So "document the correspondence" added to the v2 iteration is still
up there.  I expect to see such a change in the patch body.

>     repo: add paths.toplevel to repo info
>     
>     repo info currently does not expose the repository's working tree root,
>     even though this information is available via repo_get_work_tree().
>     
>     This makes it harder for scripts to retrieve the repository root through
>     a structured interface, often requiring the use of git rev-parse
>     --show-toplevel.
>     
>     Add a new field paths.toplevel to git repo info that returns the working
>     tree root. For bare repositories, this value is empty, consistent with
>     other non-applicable fields.
>     
>     This provides a consistent and script-friendly way to query repository
>     paths without invoking additional commands.
>     
>     Signed-off-by: Jayesh Daga jayeshdaga99@gmail.com

This space below the three-dash is not where reiterate what you
already wrote in the commit log message.  Rather, this is a place to
give additional explanation that should not go in the commit log
message, like "the previous iteration botched X and Y which have
been corrected in this version", etc.

I see this mistake often in patches from GGG users---please double
check how to use that tool (I am not a GGG user, but I vaguely
recall that GGG duplicates what you wrote in the pull request
message after the three-dashes, so perhaps you are expected to
rewrite the pull request message every time to summarize the
differences since the last iteration before you submit a new
iteration, or something?).

> Range-diff vs v2:
>
>  1:  05e34bfe2c ! 1:  8a58b6ce03 repo: add paths.toplevel to repo info
>      @@ Commit message
>           For bare repositories, this value is empty, consistent
>           with other non-applicable fields.
>       
>      -    Signed-off-by: Jayesh Daga [jayeshdaga99@gmail.com](mailto:jayeshdaga99@gmail.com)
>      +    Signed-off-by: Jayesh Daga jayeshdaga99@gmail.com

OK.

>      -@@ builtin/repo.c: static const struct repo_info_field repo_info_field[] = {
>      +@@ builtin/repo.c: static int get_references_format(struct repository *repo, struct strbuf *buf)
>      + 	return 0;
>      + }
>      + 
>      ++/*
>      ++ * rev-parse --<opt>        repo info <field>
>      ++ *
>      ++ * is-bare-repository      layout.bare
>      ++ * is-shallow-repository   layout.shallow
>      ++ * show-object-format      object.format
>      ++ * show-ref-format         references.format
>      ++ * show-toplevel           paths.toplevel
>      ++ *
>      ++ * show-cdup               <missing>
>      ++ * show-prefix             <missing>
>      ++ *
>      ++ * Some <missing> entries may be candidates for future
>      ++ * implementation, while others may not be needed.

It is a surprisingly small set.  Did you do your own research, or
did you only copied what I gave as examples?

> +static int get_paths_toplevel(struct repository *repo, struct strbuf *buf)
> +{
> +	const char *wt = repo_get_work_tree(repo);
> +
> +	if (!wt)
> +		return -1; /* match existing error style */

That is not a very helpful comment.  It sounds more like "I do not
understand why I am supposed to return -1 here upon error, but I am
just blindly following what everybody else does" excuse, than "I
return -1 upon an error because the caller is prepared to act on it
and do X, which is what we want to see when repo_get_work_tree(repo)
returns NULL, which signals condition Y that should be reported as
such" explanation.  If the reason why returning -1 is so obvious
that we do not even have to say it (which I suspect is the case),
then future readers would appreciate if you didn't add such a
comment.  If the reason why this needs to return -1 (and not -2 or
-999 or whatever) is so subtle and needs to be explained, then the
comment does not give even a single bit of information to help them
understand why.

> +	strbuf_addstr(buf, wt);
> +	return 0;
> +}

> diff --git a/t/t1900-repo-info.sh b/t/t1900-repo-info.sh
> index 39bb77dda0..470e06e8c2 100755
> --- a/t/t1900-repo-info.sh
> +++ b/t/t1900-repo-info.sh
> @@ -155,4 +155,20 @@ test_expect_success 'git repo info -h shows only repo info usage' '
>  	test_grep ! "git repo structure" actual
>  '
>  
> +test_expect_success 'repo info paths.toplevel' '
> +    git repo info paths.toplevel >actual &&
> +    echo "paths.toplevel=$(git rev-parse --show-toplevel)" >expected &&

These seem to be SP*4 indented; one level of indent is supposed to
be a single tab, not 4-column.

You may have copied it from other tests, but the above is
done in an unusual order and I found it harder to read.

We prepare an expected output in a file called "expect" first, and
then store the output of the command we are testing in a file called
"actual", and then compare "test_cmp expect actual", in this order.

If you deliberately misspell the command to pass "--shaw-toplabel",
does it break this "echo" invocation, or will we only notice the
breakage/mistake when we check the output in the "expect" file
against 

> +    test_cmp expected actual
> +'
> +
> +test_expect_success 'repo info paths.toplevel (bare repo)' '
> +    git init --bare bare.git &&
> +    (
> +	cd bare.git &&
> +	git repo info paths.toplevel >actual &&
> +	echo "paths.toplevel=" >expected &&
> +	test_cmp expected actual
> +    )
> +'
> +
>  test_done
>
> base-commit: 256554692df0685b45e60778b08802b720880c50

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] repo: add paths.toplevel to repo info
  2026-04-09 13:13     ` Karthik Nayak
@ 2026-04-09 14:48       ` Junio C Hamano
  2026-04-09 16:01         ` Karthik Nayak
  0 siblings, 1 reply; 8+ messages in thread
From: Junio C Hamano @ 2026-04-09 14:48 UTC (permalink / raw)
  To: Karthik Nayak
  Cc: Jayesh Daga via GitGitGadget, git, Derrick Stolee, Jayesh Daga

Karthik Nayak <karthik.188@gmail.com> writes:

> Don't we still have to decide how we want to support relative vs
> absolute paths? [1]

I suspect more than just a few requests to this command yield
path-valued response, so do we want an independent boolean "if we
are showing a path, show it in relative (yes) or absolute (no)"
option, or something?

> Also seeing that you're a GSoC candidate and this is part of the project
> that you've (and other potential contributors) applied for, our
> recommendation is to not start working on a project before the selection
> process.

Perhaps I should refrain from commenting on these patches to
discourage the authors if that is the case.  I am not raising an
objection, but do you have a pointer to the rationale behind the
recommendation?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] repo: add paths.toplevel to repo info
  2026-04-09 14:48       ` Junio C Hamano
@ 2026-04-09 16:01         ` Karthik Nayak
  0 siblings, 0 replies; 8+ messages in thread
From: Karthik Nayak @ 2026-04-09 16:01 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: Jayesh Daga via GitGitGadget, git, Derrick Stolee, Jayesh Daga

[-- Attachment #1: Type: text/plain, Size: 1851 bytes --]

Junio C Hamano <gitster@pobox.com> writes:

> Karthik Nayak <karthik.188@gmail.com> writes:
>
>> Don't we still have to decide how we want to support relative vs
>> absolute paths? [1]
>
> I suspect more than just a few requests to this command yield
> path-valued response, so do we want an independent boolean "if we
> are showing a path, show it in relative (yes) or absolute (no)"
> option, or something?
>

I think there was some ideas around this:

  - Have a default mode and a way to swap it. Perhaps a boolean config
    on the command level
  - Output both the relative and absolute paths. So we'd have
    paths.toplevel.absolute
    paths.toplevel.relative
    or something like that.

Either ways, I think we should finalize the decision first, that way we
don't have to have this discussion with each path-valued option.

>> Also seeing that you're a GSoC candidate and this is part of the project
>> that you've (and other potential contributors) applied for, our
>> recommendation is to not start working on a project before the selection
>> process.
>
> Perhaps I should refrain from commenting on these patches to
> discourage the authors if that is the case.  I am not raising an
> objection, but do you have a pointer to the rationale behind the
> recommendation?

Officially the GSoC rules [1] only say:

  Any work done on the Project prior to acceptance of the Project Proposal
  will not be considered for Evaluations.

So there is no rule stopping a contributor from making such changes, and
ultimately, open source projects benefit from contributions regardless
of the contributor's application status.

However it gets confusing for other contributors who have proposals for
the same topic, since they expect a certain status quo and a moving goal
post makes it a lot harder.

[1]: https://summerofcode.withgoogle.com/rules

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 690 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2026-04-09 16:01 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-02 17:14 [PATCH] repo: add paths.toplevel to repo info Jayesh Daga via GitGitGadget
2026-04-02 17:38 ` Junio C Hamano
2026-04-08 17:08 ` [PATCH v2] " Jayesh Daga via GitGitGadget
2026-04-09  6:01   ` [PATCH v3] " Jayesh Daga via GitGitGadget
2026-04-09 13:13     ` Karthik Nayak
2026-04-09 14:48       ` Junio C Hamano
2026-04-09 16:01         ` Karthik Nayak
2026-04-09 14:42     ` Junio C Hamano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox