git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 1/4] rev-parse: fix some options when executed from subpath of main tree

From
Michael Rappazzo <rappazzo@gmail.com>
Date
Apr 22, 2016, 21:53 UTC
Message-ID
<1461361992-91918-2-git-send-email-rappazzo@gmail.com>
In-Reply-To
<1461361992-91918-1-git-send-email-rappazzo@gmail.com>

Executing `git-rev-parse` with `--git-common-dir`, `--git-path <path>`, or `--shared-index-path` from the root of the main worktree results in a relative path to the git dir.

When executed from a subdirectory of the main tree, however, it incorrectly returns a path which starts 'sub/path/.git'. Change this to return the proper relative path to the git directory.

Signed-off-by: Michael Rappazzo <rappazzo@gmail.com>
---
 builtin/rev-parse.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index c961b74..1da2e10 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -564,10 +564,13 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
 		}
 
 		if (!strcmp(arg, "--git-path")) {
+			struct strbuf sb = STRBUF_INIT;
 			if (!argv[i + 1])
 				die("--git-path requires an argument");
-			puts(git_path("%s", argv[i + 1]));
-			i++;
+
+			puts(relative_path(xstrfmt("%s/%s", get_git_dir(), argv[++i]),
+				prefix, &sb));
+			strbuf_release(&sb);
 			continue;
 		}
 		if (as_is) {
@@ -787,8 +790,9 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
 				continue;
 			}
 			if (!strcmp(arg, "--git-common-dir")) {
-				const char *pfx = prefix ? prefix : "";
-				puts(prefix_filename(pfx, strlen(pfx), get_git_common_dir()));
+				struct strbuf sb = STRBUF_INIT;
+				puts(relative_path(get_git_common_dir(), prefix, &sb));
+				strbuf_release(&sb);
 				continue;
 			}
 			if (!strcmp(arg, "--is-inside-git-dir")) {
@@ -811,7 +815,12 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
 					die(_("Could not read the index"));
 				if (the_index.split_index) {
 					const unsigned char *sha1 = the_index.split_index->base_sha1;
-					puts(git_path("sharedindex.%s", sha1_to_hex(sha1)));
+					struct strbuf sb = STRBUF_INIT;
+
+					puts(relative_path(
+						xstrfmt("%s/sharedindex.%s", get_git_dir(), sha1_to_hex(sha1)),
+						prefix, &sb));
+					strbuf_release(&sb);
 				}
 				continue;
 			}
-- 
2.8.0
Previous: Michael RappazzoNext: SZEDER Gábor
Message 2 of 12 in “rev-parse: adjust results when they should be relative”
  1. 0/4 rev-parse: adjust results when they should be relativeMichael Rappazzo, Apr 22, 2016
  2. 1/4 rev-parse: fix some options when executed from subpath of main treeMichael Rappazzo, Apr 22, 2016
  3. SZEDER GáborApr 29, 2016
  4. 2/4 t1500-rev-parse: add tests executed from sub path of the main worktreeMichael Rappazzo, Apr 22, 2016
  5. SZEDER GáborApr 29, 2016
  6. 3/4 t2027-worktree-list: add and adjust tests related to git-rev-parseMichael Rappazzo, Apr 22, 2016
  7. SZEDER GáborApr 29, 2016
  8. 4/4 t1700-split-index: add test for rev-parse --shared-index-pathMichael Rappazzo, Apr 22, 2016
  9. Mike RappazzoMay 6, 2016
  10. SZEDER GáborMay 6, 2016
  11. Junio C HamanoMay 6, 2016
  12. Eric SunshineMay 10, 2016

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.