From: "Jayesh Daga via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Derrick Stolee <stolee@gmail.com>,
Jayesh Daga <jayeshdaga99@gmail.com>,
Jayesh Daga <jayeshdaga99@gmail.com>
Subject: [PATCH] repo: add paths.toplevel to repo info
Date: Thu, 02 Apr 2026 17:14:22 +0000 [thread overview]
Message-ID: <pull.2264.git.git.1775150062407.gitgitgadget@gmail.com> (raw)
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
next reply other threads:[~2026-04-02 17:14 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-02 17:14 Jayesh Daga via GitGitGadget [this message]
2026-04-02 17:38 ` [PATCH] repo: add paths.toplevel to repo info 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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.2264.git.git.1775150062407.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=jayeshdaga99@gmail.com \
--cc=stolee@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox