git/list[1] front-page[2] threads[3] people[4] search[5] about
wed 2026-10-07 16:53 UTC

[GSoC Patch v5 5/7] repo: add path.grafts with absolute and relative suffixes

From
K Jayatheerth <jayatheerthkulkarni2005@gmail.com>
Date
Aug 25, 2026, 17:58 UTC
Message-ID
<20260825175818.645579-6-jayatheerthkulkarni2005@gmail.com>
In-Reply-To
<20260825175818.645579-1-jayatheerthkulkarni2005@gmail.com>

The repository grafts file specifies alternate parent relationships for commits and may be used by repository tooling that needs to inspect or manage grafts. Scripts currently retrieve its location by invoking `git rev-parse --git-path info/grafts`.

Introduce `path.grafts.absolute` and `path.grafts.relative` keys to `git repo info`. This exposes the grafts file location as a scriptable config-like key using standard format rules, allowing scripts to retrieve it through the same interface as other repository path information.

Mentored-by: Justin Tobler <jltobler@gmail.com>
Mentored-by: Lucas Seiki Oshiro <lucasseikioshiro@gmail.com>
Signed-off-by: K Jayatheerth <jayatheerthkulkarni2005@gmail.com>
---
 Documentation/git-repo.adoc | 11 +++++++++++
 builtin/repo.c              | 24 ++++++++++++++++++++++++
 t/t1900-repo-info.sh        |  6 ++++++
 3 files changed, 41 insertions(+)
diff --git a/Documentation/git-repo.adoc b/Documentation/git-repo.adoc
index 08ef47750c..868ab0ed9f 100644
--- a/Documentation/git-repo.adoc
+++ b/Documentation/git-repo.adoc
@@ -119,6 +119,17 @@ values that they return:
 `path.gitdir.relative`::
 	The path to the Git repository directory relative to the current working directory.
 
+`path.grafts.absolute`::
+	The canonical absolute path to the repository's graft file.
+	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's graft file relative to the current
+	working 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.
 	Respects the `core.hooksPath` configuration. If `core.hooksPath` is
diff --git a/builtin/repo.c b/builtin/repo.c
index 2a15327094..779240109d 100644
--- a/builtin/repo.c
+++ b/builtin/repo.c
@@ -122,6 +122,28 @@ static int get_path_gitdir_relative(struct repository *repo, struct strbuf *buf)
 	return 0;
 }
 
+static int get_path_grafts_absolute(struct repository *repo, struct strbuf *buf)
+{
+	const char *graft_file = repo_get_graft_file(repo);
+
+	if (!graft_file)
+		return error(_("unable to get graft file"));
+
+	format_path(buf, graft_file, "", PATH_FORMAT_CANONICAL);
+	return 0;
+}
+
+static int get_path_grafts_relative(struct repository *repo, struct strbuf *buf)
+{
+	const char *graft_file = repo_get_graft_file(repo);
+
+	if (!graft_file)
+		return error(_("unable to get graft file"));
+
+	format_path(buf, graft_file, repo->prefix, PATH_FORMAT_RELATIVE);
+	return 0;
+}
+
 static int get_path_hooks_absolute(struct repository *repo, struct strbuf *buf)
 {
 	struct strbuf hooks_path = STRBUF_INIT;
@@ -230,6 +252,8 @@ static const struct repo_info_field repo_info_field[] = {
 	{ "path.commondir.relative", get_path_commondir_relative },
 	{ "path.gitdir.absolute", get_path_gitdir_absolute },
 	{ "path.gitdir.relative", get_path_gitdir_relative },
+	{ "path.grafts.absolute", get_path_grafts_absolute },
+	{ "path.grafts.relative", get_path_grafts_relative },
 	{ "path.hooks.absolute", get_path_hooks_absolute },
 	{ "path.hooks.relative", get_path_hooks_relative },
 	{ "path.index.absolute", get_path_index_absolute },
diff --git a/t/t1900-repo-info.sh b/t/t1900-repo-info.sh
index 431a4842d4..adc4a92487 100755
--- a/t/t1900-repo-info.sh
+++ b/t/t1900-repo-info.sh
@@ -221,6 +221,12 @@ test_repo_info_path 'gitdir with explicit GIT_DIR' 'gitdir' \
 	'.git' \
 	'GIT_DIR="../.git" && export GIT_DIR'
 
+test_repo_info_path 'grafts standard' 'grafts' '.git/info/grafts'
+
+test_repo_info_path 'grafts with GIT_GRAFT_FILE override' 'grafts' \
+	'custom-graft-file' \
+	'GIT_GRAFT_FILE="$ROOT/custom-graft-file" && export GIT_GRAFT_FILE'
+
 test_repo_info_path 'hooks standard' 'hooks' '.git/hooks'
 
 test_repo_info_path 'hooks with core.hooksPath override' 'hooks' \
-- 
2.55.GIT
Previous: K JayatheerthNext: K Jayatheerth
Message 63 of 94 in “repo: add more path keys to git repo info”
  1. 0/7 repo: add more path keys to git repo infoK Jayatheerth, Jul 16, 2026
  2. 1/7 repo: add path.toplevel with absolute and relative suffix formattingK Jayatheerth, Jul 16, 2026
  3. 2/7 repo: add path.superproject-working-tree with absolute and relative suffixesK Jayatheerth, Jul 16, 2026
  4. 3/7 repo: add path.objects with absolute and relative suffix formattingK Jayatheerth, Jul 16, 2026
  5. 4/7 repo: add path.hooks with absolute and relative suffix formattingK Jayatheerth, Jul 16, 2026
  6. 5/7 repo: add path.index with absolute and relative suffix formattingK Jayatheerth, Jul 16, 2026
  7. 6/7 repo: add path.grafts with absolute and relative suffix formattingK Jayatheerth, Jul 16, 2026
  8. 7/7 repo: add path.git-prefix path key validationK Jayatheerth, Jul 16, 2026
  9. Junio C HamanoJul 16, 2026
  10. K JayatheerthJul 16, 2026
  11. 0/7 repo: add more path keys to git repo infoK Jayatheerth, Jul 17, 2026
  12. 1/7 repo: add path.toplevel with absolute and relative suffix formattingK Jayatheerth, Jul 17, 2026
  13. 2/7 repo: add path.superproject-working-tree with absolute and relative suffixesK Jayatheerth, Jul 17, 2026
  14. 3/7 repo: add path.objects with absolute and relative suffix formattingK Jayatheerth, Jul 17, 2026
  15. 4/7 repo: add path.hooks with absolute and relative suffix formattingK Jayatheerth, Jul 17, 2026
  16. 5/7 repo: add path.index with absolute and relative suffix formattingK Jayatheerth, Jul 17, 2026
  17. 6/7 repo: add path.grafts with absolute and relative suffix formattingK Jayatheerth, Jul 17, 2026
  18. 7/7 repo: add path.git-prefix path keyK Jayatheerth, Jul 17, 2026
  19. Lucas Seiki OshiroJul 20, 2026
  20. Lucas Seiki OshiroJul 20, 2026
  21. Junio C HamanoJul 20, 2026
  22. K JayatheerthJul 21, 2026
  23. K JayatheerthJul 24, 2026
  24. Junio C HamanoJul 24, 2026
  25. 0/7 repo: add more path keys to git repo infoK Jayatheerth, Jul 26, 2026
  26. 1/7 repo: add path.toplevel with absolute and relative suffix formattingK Jayatheerth, Jul 26, 2026
  27. 2/7 repo: add path.superproject-working-tree with absolute and relative suffixesK Jayatheerth, Jul 26, 2026
  28. 3/7 repo: add path.objects with absolute and relative suffix formattingK Jayatheerth, Jul 26, 2026
  29. 4/7 repo: add path.hooks with absolute and relative suffix formattingK Jayatheerth, Jul 26, 2026
  30. 5/7 repo: add path.index with absolute and relative suffix formattingK Jayatheerth, Jul 26, 2026
  31. 6/7 repo: add path.grafts with absolute and relative suffix formattingK Jayatheerth, Jul 26, 2026
  32. 7/7 repo: add path.git-prefix path keyK Jayatheerth, Jul 26, 2026
  33. Junio C HamanoJul 26, 2026
  34. K JayatheerthJul 26, 2026
  35. Lucas Seiki OshiroJul 27, 2026
  36. Junio C HamanoJul 27, 2026
  37. Junio C HamanoJul 27, 2026
  38. K JayatheerthJul 28, 2026
  39. Justin ToblerJul 28, 2026
  40. Justin ToblerJul 28, 2026
  41. Justin ToblerJul 28, 2026
  42. Justin ToblerJul 28, 2026
  43. K JayatheerthJul 29, 2026
  44. 0/7 repo: add more path keys to git repo infoK Jayatheerth, Aug 6, 2026
  45. 1/7 repo: add path.toplevel with absolute and relative suffix formattingK Jayatheerth, Aug 6, 2026
  46. 2/7 repo: add path.superproject-root with absolute and relative suffixesK Jayatheerth, Aug 6, 2026
  47. 3/7 repo: add path.hooks with absolute and relative suffixesK Jayatheerth, Aug 6, 2026
  48. 4/7 repo: add path.index with absolute and relative suffixesK Jayatheerth, Aug 6, 2026
  49. 5/7 repo: add path.grafts with absolute and relative suffixesK Jayatheerth, Aug 6, 2026
  50. 6/7 repo: add path.git-prefixK Jayatheerth, Aug 6, 2026
  51. 7/7 repo: remove unused setup.h includeK Jayatheerth, Aug 6, 2026
  52. Lucas Seiki OshiroAug 15, 2026
  53. Lucas Seiki OshiroAug 16, 2026
  54. K JayatheerthAug 18, 2026
  55. K JayatheerthAug 18, 2026
  56. Junio C HamanoAug 18, 2026
  57. K JayatheerthAug 21, 2026
  58. 0/7 add more path keys to git repo infoK Jayatheerth, Aug 25, 2026
  59. 1/7 repo: add path.toplevel with absolute and relative suffix formattingK Jayatheerth, Aug 25, 2026
  60. 2/7 repo: add path.superproject-root with absolute and relative suffixesK Jayatheerth, Aug 25, 2026
  61. 3/7 repo: add path.hooks with absolute and relative suffixesK Jayatheerth, Aug 25, 2026
  62. 4/7 repo: add path.index with absolute and relative suffixesK Jayatheerth, Aug 25, 2026
  63. 5/7 repo: add path.grafts with absolute and relative suffixesK Jayatheerth, Aug 25, 2026
  64. 6/7 repo: add path.git-prefixK Jayatheerth, Aug 25, 2026
  65. 7/7 repo: add path.cdupK Jayatheerth, Aug 25, 2026
  66. Junio C HamanoAug 25, 2026
  67. SZEDER GáborAug 26, 2026
  68. Junio C HamanoAug 26, 2026
  69. K JayatheerthSep 4, 2026
  70. Junio C HamanoSep 4, 2026
  71. K JayatheerthSep 5, 2026
  72. 0/7 add more path keys to git repo infoK Jayatheerth, Sep 11, 2026
  73. 1/7 repo: add path.toplevel with absolute and relative suffix formattingK Jayatheerth, Sep 11, 2026
  74. 2/7 repo: add path.superproject-root with absolute and relative suffixesK Jayatheerth, Sep 11, 2026
  75. 3/7 repo: add path.hooks with absolute and relative suffixesK Jayatheerth, Sep 11, 2026
  76. 4/7 repo: add path.index with absolute and relative suffixesK Jayatheerth, Sep 11, 2026
  77. 5/7 repo: add path.grafts with absolute and relative suffixesK Jayatheerth, Sep 11, 2026
  78. 6/7 repo: add path.git-prefixK Jayatheerth, Sep 11, 2026
  79. 7/7 repo: add path.cdupK Jayatheerth, Sep 11, 2026
  80. Junio C HamanoSep 11, 2026
  81. Junio C HamanoSep 11, 2026
  82. Junio C HamanoSep 11, 2026
  83. K JayatheerthSep 23, 2026
  84. K JayatheerthSep 23, 2026
  85. K JayatheerthSep 23, 2026
  86. 0/8 add more path keys to git repo infoK Jayatheerth, Sep 27, 2026
  87. 1/8 repo: add path.toplevel with absolute and relative suffix formattingK Jayatheerth, Sep 27, 2026
  88. 2/8 submodule: use repository to find superprojectK Jayatheerth, Sep 27, 2026
  89. 3/8 repo: add path.superproject-root with absolute and relative suffixesK Jayatheerth, Sep 27, 2026
  90. 4/8 repo: add path.hooks with absolute and relative suffixesK Jayatheerth, Sep 27, 2026
  91. 5/8 repo: add path.index with absolute and relative suffixesK Jayatheerth, Sep 27, 2026
  92. 6/8 repo: add path.grafts with absolute and relative suffixesK Jayatheerth, Sep 27, 2026
  93. 7/8 repo: add path.git-prefixK Jayatheerth, Sep 27, 2026
  94. 8/8 repo: add path.cdupK Jayatheerth, Sep 27, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.