[GSoC Patch v3 0/7] repo: add more path keys to git repo info
From: K Jayatheerth <hidden>
Date: 2026-07-26 10:44:34
Series adds keys to git repo info.
Keys output paths of repository components:
* path.toplevel: repository tree.
* path.superproject-working-tree: superproject tree from submodules.
* path.objects: repository objects.
* path.hooks: repository hooks.
* path.index: repository index.
* path.grafts: repository grafts.
* path.git-prefix: prefix offset.
Keys support suffixes for format.
Commits contain documentation and tests.
Changes since v2:
* path.index: no functional change; documented that the returned path
reflects the default/configured index location even in a bare
repository or when the file doesn't exist yet, and added a test
covering path.index inside a bare repository.
* path.grafts: no functional change; documented that the path is
returned even if the grafts file doesn't currently exist on disk.
* path.git-prefix: no change since v2 (already addressed the stray
include and misleading "validation" in the subject).
K Jayatheerth (7):
repo: add path.toplevel with absolute and relative suffix formatting
repo: add path.superproject-working-tree with absolute and relative
suffixes
repo: add path.objects with absolute and relative suffix formatting
repo: add path.hooks with absolute and relative suffix formatting
repo: add path.index with absolute and relative suffix formatting
repo: add path.grafts with absolute and relative suffix formatting
repo: add path.git-prefix path key
Documentation/git-repo.adoc | 64 ++++++++++++++
builtin/repo.c | 166 ++++++++++++++++++++++++++++++++++++
t/t1900-repo-info.sh | 125 +++++++++++++++++++++++++++
3 files changed, 355 insertions(+)
Range-diff against v2:
1: 297d625ea1 = 1: 297d625ea1 repo: add path.toplevel with absolute and relative suffix formatting
2: 8a84aaa2a1 = 2: 8a84aaa2a1 repo: add path.superproject-working-tree with absolute and relative suffixes
3: 159166ce85 = 3: 159166ce85 repo: add path.objects with absolute and relative suffix formatting
4: ff5e382043 = 4: ff5e382043 repo: add path.hooks with absolute and relative suffix formatting
5: d906735e3d ! 5: 917d3a5076 repo: add path.index with absolute and relative suffix formatting
@@ Documentation/git-repo.adoc: values that they return:
+`path.index.absolute`::
+ The canonical absolute path to the repository's current index file.
-+ Respects the `GIT_INDEX_FILE` environment override.
++ Respects the `GIT_INDEX_FILE` environment override. The returned path
++ reflects the configured/default index location regardless of whether the
++ repository is bare or whether the file currently exists.
+
+`path.index.relative`::
+ The path to the repository's current index file relative to the current
+ working directory. Respects the `GIT_INDEX_FILE` environment override.
++ The returned path reflects the configured/default index location regardless
++ of whether the repository is bare or whether the file currently exists.
+
`path.objects.absolute`::
The canonical absolute path to the repository's object database directory.
@@ t/t1900-repo-info.sh: test_repo_info_path 'hooks with core.hooksPath override' '
+test_repo_info_path 'index with GIT_INDEX_FILE override' 'index' \
+ 'custom-index-file' \
+ 'GIT_INDEX_FILE="$ROOT/custom-index-file" && export GIT_INDEX_FILE'
++
++test_expect_success 'path.index in a bare repository returns default index location' '
++ test_when_finished "rm -rf bare.git" &&
++ git init --bare bare.git &&
++ (
++ cd bare.git &&
++ ROOT="$(test-tool path-utils real_path .)" &&
++
++ echo "path.index.absolute=$ROOT/index" >expect.abs &&
++ git repo info path.index.absolute >actual.abs &&
++ test_cmp expect.abs actual.abs &&
++
++ echo "path.index.relative=index" >expect.rel &&
++ git repo info path.index.relative >actual.rel &&
++ test_cmp expect.rel actual.rel
++ )
++'
+
test_repo_info_path 'objects standard' 'objects' '.git/objects'
6: 2d21f9536c ! 6: d47a5701d5 repo: add path.grafts with absolute and relative suffix formatting
@@ Documentation/git-repo.adoc: values that they return:
+`path.grafts.absolute`::
+ The canonical absolute path to the repository grafts file.
-+ Respects the `GIT_GRAFT_FILE` environment override.
++ Respects the `GIT_GRAFT_FILE` environment override. The path is returned
++ regardless of whether the file currently exists on disk.
+
+`path.grafts.relative`::
+ The path to the repository grafts file relative to the current working
-+ directory. Respects the `GIT_GRAFT_FILE` environment override.
++ directory. Respects the `GIT_GRAFT_FILE` environment override. The path
++ is returned regardless of whether the file currently exists on disk.
+
`path.hooks.absolute`::
The canonical absolute path to the repository's hooks directory.
7: 1dbe191176 = 7: fd90b0b3b5 repo: add path.git-prefix path key
--
2.55.GIT