From: Phillip Wood <phillip.wood123@gmail.com>
To: Eslam reda ragheb via GitGitGadget <gitgitgadget@gmail.com>,
git@vger.kernel.org
Cc: eslam reda <eslam.reda.div@gmail.com>
Subject: Re: [PATCH v5 11/11] repo: refine path keys for repo info
Date: Sun, 1 Mar 2026 10:33:46 +0000 [thread overview]
Message-ID: <40a256b0-81fc-435b-b4b4-7ae1144d3672@gmail.com> (raw)
In-Reply-To: <8af17ad83115882ed174434e566523cf0bc376d9.1772220640.git.gitgitgadget@gmail.com>
Hi Eslam
On 27/02/2026 19:30, Eslam reda ragheb via GitGitGadget wrote:
> From: Eslam reda ragheb <eslam.reda.div@gmail.com>
>
> Rename path.git-prefix to path.prefix, add path.work-tree as an alias
> for path.toplevel, and drop reflog/ref-file-oriented path keys.
>
> This narrows the path surface to keys that are less tied to direct
> file access while keeping tests and documentation in sync.
>
> Also normalize prefix handling in repo_info context so path.prefix has
> a stable empty-string behavior.
When you change a patch series based on a reviewer's feedback, you
should use "git rebase -i" to edit or fixup the existing commits rather
than adding new changes on top. That keeps the history cleaner as we
don't need to know "I implemented it like this and than changed it to
that". It also makes the patch series easier to review as reviewers
don't waste their time commenting on changes in one patch that are then
deleted in a later patch.
Thanks
Phillip
> Signed-off-by: Eslam reda ragheb <eslam.reda.div@gmail.com>
> ---
> Documentation/git-repo.adoc | 14 ++++-------
> builtin/repo.c | 45 ++++++++--------------------------
> t/t1900-repo.sh | 48 +++++++++++++++++--------------------
> 3 files changed, 36 insertions(+), 71 deletions(-)
>
> diff --git a/Documentation/git-repo.adoc b/Documentation/git-repo.adoc
> index b575977a4b..3d34c6edca 100644
> --- a/Documentation/git-repo.adoc
> +++ b/Documentation/git-repo.adoc
> @@ -114,7 +114,7 @@ Here's a list of the available keys and the values that they return:
> `path.git-dir`::
> The path to the git directory.
>
> -`path.git-prefix`::
> +`path.prefix`::
> The path of the current working directory relative to the top-level
> directory.
>
> @@ -127,18 +127,9 @@ Here's a list of the available keys and the values that they return:
> `path.index-file`::
> The path to the index file.
>
> -`path.logs-directory`::
> - The path to the `logs` directory.
> -
> `path.objects-directory`::
> The path to the objects directory.
>
> -`path.packed-refs-file`::
> - The path to the `packed-refs` file.
> -
> -`path.refs-directory`::
> - The path to the `refs` directory.
> -
> `path.shallow-file`::
> The path to the `shallow` file.
>
> @@ -150,6 +141,9 @@ Here's a list of the available keys and the values that they return:
> The path to the top-level working tree directory, or an empty string
> for bare repositories.
>
> +`path.work-tree`::
> + Alias for `path.toplevel`.
> +
> `references.format`::
> The reference storage format. The valid values are:
> +
> diff --git a/builtin/repo.c b/builtin/repo.c
> index ecd9d3aee5..9fbd13a358 100644
> --- a/builtin/repo.c
> +++ b/builtin/repo.c
> @@ -109,10 +109,9 @@ static int get_path_git_dir(struct repo_info *info, struct strbuf *buf)
> return 0;
> }
>
> -static int get_path_git_prefix(struct repo_info *info, struct strbuf *buf)
> +static int get_path_prefix(struct repo_info *info, struct strbuf *buf)
> {
> - if (info->prefix)
> - strbuf_addstr(buf, info->prefix);
> + strbuf_addstr(buf, info->prefix);
> return 0;
> }
>
> @@ -137,39 +136,12 @@ static int get_path_index_file(struct repo_info *info, struct strbuf *buf)
> return 0;
> }
>
> -static int get_path_logs_directory(struct repo_info *info, struct strbuf *buf)
> -{
> - struct strbuf path = STRBUF_INIT;
> -
> - repo_info_add_path(info, buf, repo_git_path_replace(info->repo, &path, "logs"));
> - strbuf_release(&path);
> - return 0;
> -}
> -
> static int get_path_objects_directory(struct repo_info *info, struct strbuf *buf)
> {
> repo_info_add_path(info, buf, repo_get_object_directory(info->repo));
> return 0;
> }
>
> -static int get_path_packed_refs_file(struct repo_info *info, struct strbuf *buf)
> -{
> - struct strbuf path = STRBUF_INIT;
> -
> - repo_info_add_path(info, buf, repo_git_path_replace(info->repo, &path, "packed-refs"));
> - strbuf_release(&path);
> - return 0;
> -}
> -
> -static int get_path_refs_directory(struct repo_info *info, struct strbuf *buf)
> -{
> - struct strbuf path = STRBUF_INIT;
> -
> - repo_info_add_path(info, buf, repo_git_path_replace(info->repo, &path, "refs"));
> - strbuf_release(&path);
> - return 0;
> -}
> -
> static int get_path_shallow_file(struct repo_info *info, struct strbuf *buf)
> {
> struct strbuf path = STRBUF_INIT;
> @@ -201,6 +173,11 @@ static int get_path_toplevel(struct repo_info *info, struct strbuf *buf)
> return 0;
> }
>
> +static int get_path_work_tree(struct repo_info *info, struct strbuf *buf)
> +{
> + return get_path_toplevel(info, buf);
> +}
> +
> static int get_references_format(struct repo_info *info, struct strbuf *buf)
> {
> struct repository *repo = info->repo;
> @@ -217,17 +194,15 @@ static const struct field repo_info_fields[] = {
> { "path.common-dir", get_path_common_dir },
> { "path.config-file", get_path_config_file },
> { "path.git-dir", get_path_git_dir },
> - { "path.git-prefix", get_path_git_prefix },
> { "path.grafts-file", get_path_grafts_file },
> { "path.hooks-directory", get_path_hooks_directory },
> { "path.index-file", get_path_index_file },
> - { "path.logs-directory", get_path_logs_directory },
> { "path.objects-directory", get_path_objects_directory },
> - { "path.packed-refs-file", get_path_packed_refs_file },
> - { "path.refs-directory", get_path_refs_directory },
> + { "path.prefix", get_path_prefix },
> { "path.shallow-file", get_path_shallow_file },
> { "path.superproject-working-tree", get_path_superproject_working_tree },
> { "path.toplevel", get_path_toplevel },
> + { "path.work-tree", get_path_work_tree },
> { "references.format", get_references_format },
> };
>
> @@ -378,7 +353,7 @@ static int cmd_repo_info(int argc, const char **argv, const char *prefix,
> enum output_format format = FORMAT_KEYVALUE;
> struct repo_info info = {
> .repo = repo,
> - .prefix = prefix,
> + .prefix = prefix ? prefix : "",
> .path_format = PATH_FORMAT_ABSOLUTE,
> };
> int all_keys = 0;
> diff --git a/t/t1900-repo.sh b/t/t1900-repo.sh
> index dcacf84cc3..2351b772b2 100755
> --- a/t/t1900-repo.sh
> +++ b/t/t1900-repo.sh
> @@ -13,17 +13,15 @@ REPO_INFO_KEYS='
> path.common-dir
> path.config-file
> path.git-dir
> - path.git-prefix
> path.grafts-file
> path.hooks-directory
> path.index-file
> - path.logs-directory
> path.objects-directory
> - path.packed-refs-file
> - path.refs-directory
> + path.prefix
> path.shallow-file
> path.superproject-working-tree
> path.toplevel
> + path.work-tree
> references.format
> '
>
> @@ -31,17 +29,15 @@ REPO_INFO_PATH_KEYS='
> path.common-dir
> path.config-file
> path.git-dir
> - path.git-prefix
> path.grafts-file
> path.hooks-directory
> path.index-file
> - path.logs-directory
> path.objects-directory
> - path.packed-refs-file
> - path.refs-directory
> + path.prefix
> path.shallow-file
> path.superproject-working-tree
> path.toplevel
> + path.work-tree
> '
>
> # Test whether a key-value pair is correctly returned
> @@ -172,12 +168,12 @@ test_expect_success 'path.toplevel is empty in bare repository' '
> test_cmp expect actual
> '
>
> -test_expect_success 'path.git-prefix matches rev-parse --show-prefix' '
> +test_expect_success 'path.prefix matches rev-parse --show-prefix' '
> git init path-prefix &&
> mkdir -p path-prefix/a/b &&
> expected_value=$(git -C path-prefix/a/b rev-parse --show-prefix) &&
> - echo "path.git-prefix=$expected_value" >expect &&
> - git -C path-prefix/a/b repo info path.git-prefix >actual &&
> + echo "path.prefix=$expected_value" >expect &&
> + git -C path-prefix/a/b repo info path.prefix >actual &&
> test_cmp expect actual
> '
>
> @@ -209,27 +205,27 @@ test_expect_success 'git-path style keys match rev-parse --git-path' '
> git -C path-git-path repo info path.config-file >actual &&
> test_cmp expect actual &&
>
> - expected_value=$(git -C path-git-path rev-parse --path-format=absolute --git-path logs) &&
> - echo "path.logs-directory=$expected_value" >expect &&
> - git -C path-git-path repo info path.logs-directory >actual &&
> - test_cmp expect actual &&
> -
> - expected_value=$(git -C path-git-path rev-parse --path-format=absolute --git-path packed-refs) &&
> - echo "path.packed-refs-file=$expected_value" >expect &&
> - git -C path-git-path repo info path.packed-refs-file >actual &&
> - test_cmp expect actual &&
> -
> - expected_value=$(git -C path-git-path rev-parse --path-format=absolute --git-path refs) &&
> - echo "path.refs-directory=$expected_value" >expect &&
> - git -C path-git-path repo info path.refs-directory >actual &&
> - test_cmp expect actual &&
> -
> expected_value=$(git -C path-git-path rev-parse --path-format=absolute --git-path shallow) &&
> echo "path.shallow-file=$expected_value" >expect &&
> git -C path-git-path repo info path.shallow-file >actual &&
> test_cmp expect actual
> '
>
> +test_expect_success 'path.work-tree matches path.toplevel' '
> + git init path-work-tree &&
> + expected_value=$(git -C path-work-tree rev-parse --show-toplevel) &&
> + echo "path.work-tree=$expected_value" >expect &&
> + git -C path-work-tree repo info path.work-tree >actual &&
> + test_cmp expect actual
> +'
> +
> +test_expect_success 'path.work-tree is empty in bare repository' '
> + git init --bare bare-path-work-tree &&
> + echo "path.work-tree=" >expect &&
> + git -C bare-path-work-tree repo info path.work-tree >actual &&
> + test_cmp expect actual
> +'
> +
> test_expect_success 'path.superproject-working-tree is empty when not a submodule' '
> git init path-superproject &&
> echo "path.superproject-working-tree=" >expect &&
next prev parent reply other threads:[~2026-03-01 10:33 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-22 18:28 [PATCH 0/3] repo: extend info path reporting and structure statistics eslam reda via GitGitGadget
2026-02-22 18:28 ` [PATCH 1/3] repo: extend info paths " eslam-reda-div via GitGitGadget
2026-02-22 20:35 ` Lucas Seiki Oshiro
2026-02-23 3:02 ` Justin Tobler
2026-02-22 18:28 ` [PATCH 2/3] t1900,t1901: make repo tests hash-agnostic and wc-portable Eslam reda ragheb via GitGitGadget
2026-02-22 20:46 ` Lucas Seiki Oshiro
2026-02-22 18:28 ` [PATCH 3/3] t1900,t1901: fix test portability issues Eslam reda ragheb via GitGitGadget
2026-02-22 22:37 ` [PATCH 0/3] repo: extend info path reporting and structure statistics Junio C Hamano
2026-02-23 14:21 ` [PATCH v2 0/9] " eslam reda via GitGitGadget
2026-02-23 14:21 ` [PATCH v2 1/9] repo: teach info context and category keys Eslam reda ragheb via GitGitGadget
2026-02-23 14:21 ` [PATCH v2 2/9] repo: add path keys to repo info Eslam reda ragheb via GitGitGadget
2026-02-23 14:21 ` [PATCH v2 4/9] repo: add structure max object size metrics Eslam reda ragheb via GitGitGadget
2026-02-23 14:21 ` [PATCH v2 5/9] repo: add structure topology and path-depth metrics Eslam reda ragheb via GitGitGadget
2026-02-23 14:21 ` [PATCH v2 6/9] repo: add aggregate structure totals to keyvalue output Eslam reda ragheb via GitGitGadget
2026-02-23 14:21 ` [PATCH v2 7/9] t1900: cover repo info path keys and path-format Eslam reda ragheb via GitGitGadget
2026-02-23 14:21 ` [PATCH v2 8/9] t1901: extend structure metric coverage and portability Eslam reda ragheb via GitGitGadget
2026-02-23 14:21 ` [PATCH v2 9/9] docs: describe repo info path keys and structure metrics Eslam reda ragheb via GitGitGadget
2026-02-23 19:43 ` [PATCH v3 0/5] repo: extend info path reporting and structure statistics eslam reda via GitGitGadget
2026-02-23 19:43 ` [PATCH v3 1/5] repo: teach info context and category keys Eslam reda ragheb via GitGitGadget
2026-02-23 19:43 ` [PATCH v3 2/5] repo: add path keys to repo info Eslam reda ragheb via GitGitGadget
2026-02-23 19:43 ` [PATCH v3 3/5] repo: add --path-format for info path output Eslam reda ragheb via GitGitGadget
2026-02-23 19:43 ` [PATCH v3 4/5] t1900: cover repo info path keys and path-format Eslam reda ragheb via GitGitGadget
2026-02-23 19:43 ` [PATCH v3 5/5] docs: describe repo info path keys Eslam reda ragheb via GitGitGadget
2026-02-26 21:14 ` [PATCH v4 00/10] repo info: add category/path keys and --path-format eslam reda via GitGitGadget
2026-02-26 21:14 ` [PATCH v4 01/10] repo: teach info context and category keys Eslam reda ragheb via GitGitGadget
2026-02-26 23:21 ` Junio C Hamano
2026-02-26 21:14 ` [PATCH v4 02/10] repo: add path keys to repo info Eslam reda ragheb via GitGitGadget
2026-02-26 23:29 ` Junio C Hamano
2026-02-27 9:04 ` Phillip Wood
2026-02-27 19:51 ` Junio C Hamano
2026-03-01 10:36 ` Phillip Wood
2026-03-02 6:42 ` Junio C Hamano
2026-02-26 21:14 ` [PATCH v4 03/10] repo: add --path-format for info path output Eslam reda ragheb via GitGitGadget
2026-02-26 21:14 ` [PATCH v4 04/10] repo: add structure max object size metrics Eslam reda ragheb via GitGitGadget
2026-02-26 21:14 ` [PATCH v4 05/10] repo: add structure topology and path-depth metrics Eslam reda ragheb via GitGitGadget
2026-02-26 21:14 ` [PATCH v4 06/10] repo: add aggregate structure totals to keyvalue output Eslam reda ragheb via GitGitGadget
2026-02-26 21:14 ` [PATCH v4 07/10] t1900: cover repo info path keys and path-format Eslam reda ragheb via GitGitGadget
2026-02-26 21:14 ` [PATCH v4 08/10] t1901: extend structure metric coverage and portability Eslam reda ragheb via GitGitGadget
2026-02-26 21:14 ` [PATCH v4 09/10] docs: describe repo info path keys and structure metrics Eslam reda ragheb via GitGitGadget
2026-02-26 21:14 ` [PATCH v4 10/10] repo: reduce repetition in structure keyvalue output Eslam reda ragheb via GitGitGadget
2026-02-27 19:30 ` [PATCH v5 00/11] repo info: add category/path keys and --path-format eslam reda via GitGitGadget
2026-02-27 19:30 ` [PATCH v5 01/11] repo: teach info context and category keys Eslam reda ragheb via GitGitGadget
2026-02-27 21:42 ` Lucas Seiki Oshiro
2026-02-27 19:30 ` [PATCH v5 02/11] repo: add path keys to repo info Eslam reda ragheb via GitGitGadget
2026-02-27 19:30 ` [PATCH v5 03/11] repo: add --path-format for info path output Eslam reda ragheb via GitGitGadget
2026-02-27 19:30 ` [PATCH v5 04/11] repo: add structure max object size metrics Eslam reda ragheb via GitGitGadget
2026-02-27 19:30 ` [PATCH v5 05/11] repo: add structure topology and path-depth metrics Eslam reda ragheb via GitGitGadget
2026-02-27 19:30 ` [PATCH v5 06/11] repo: add aggregate structure totals to keyvalue output Eslam reda ragheb via GitGitGadget
2026-02-27 19:30 ` [PATCH v5 07/11] t1900: cover repo info path keys and path-format Eslam reda ragheb via GitGitGadget
2026-02-27 19:30 ` [PATCH v5 08/11] t1901: extend structure metric coverage and portability Eslam reda ragheb via GitGitGadget
2026-02-27 19:30 ` [PATCH v5 09/11] docs: describe repo info path keys and structure metrics Eslam reda ragheb via GitGitGadget
2026-02-27 19:30 ` [PATCH v5 10/11] repo: reduce repetition in structure keyvalue output Eslam reda ragheb via GitGitGadget
2026-02-27 19:30 ` [PATCH v5 11/11] repo: refine path keys for repo info Eslam reda ragheb via GitGitGadget
2026-03-01 10:33 ` Phillip Wood [this message]
2026-02-27 21:52 ` [PATCH v5 00/11] repo info: add category/path keys and --path-format Lucas Seiki Oshiro
2026-03-02 5:15 ` [PATCH v6 0/6] " eslam reda via GitGitGadget
2026-03-02 5:15 ` [PATCH v6 1/6] repo: introduce repo_info context plumbing Eslam reda ragheb via GitGitGadget
2026-03-02 5:15 ` [PATCH v6 2/6] repo: support category requests in repo info Eslam reda ragheb via GitGitGadget
2026-03-02 5:15 ` [PATCH v6 3/6] repo: add path keys to " Eslam reda ragheb via GitGitGadget
2026-03-02 5:15 ` [PATCH v6 4/6] repo: add --path-format for info path output Eslam reda ragheb via GitGitGadget
2026-03-02 5:15 ` [PATCH v6 5/6] t1900: cover repo info path keys and path-format Eslam reda ragheb via GitGitGadget
2026-03-02 5:15 ` [PATCH v6 6/6] docs: describe repo info path keys Eslam reda ragheb via GitGitGadget
2026-03-18 20:44 ` [PATCH v6 0/6] repo info: add category/path keys and --path-format Jialong Wang
2026-03-19 3:36 ` K Jayatheerth
2026-03-19 20:32 ` Jerry Wang
2026-03-20 1:49 ` K Jayatheerth
2026-03-19 20:58 ` [PATCH v6 5/6] t1900: cover repo info path keys and path-format Jialong Wang
2026-03-19 20:59 ` [PATCH] t1900: cover repo info path keys in non-default layouts Jialong Wang
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=40a256b0-81fc-435b-b4b4-7ae1144d3672@gmail.com \
--to=phillip.wood123@gmail.com \
--cc=eslam.reda.div@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=phillip.wood@dunelm.org.uk \
/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