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

Re: [PATCH] Make Git accept absolute path names for files within the work tree

From
Jeff King <peff@peff.net>
Date
Dec 6, 2007, 06:12 UTC
Message-ID
<20071206061234.GC23309@coredump.intra.peff.net>
In-Reply-To
<alpine.LFD.0.9999.0712041444090.13796@woody.linux-foundation.org>
On Tue, Dec 04, 2007 at 02:52:15PM -0800, Linus Torvalds wrote:
Show 6 quoted lines
> IOW, that whole thing is simply a bug waiting to happen. The fact that it 
> apparently *always* runs whether needed or not just seems to make it worse 
> (ie if we already know our cwd, and the absolute path we have already has 
> that as a prefix, just strip it off, don't try to do anything complex, and 
> leave the complex and fragile cases for the odd-ball when the simple 
> approach doesn't work)

Fair enough. Something like this then? It gets called only as a last-ditch (though I think the 'return path' should simply be a die -- what is the point of getting a pathspec that isn't in the repo?).

---
diff --git a/setup.c b/setup.c
index 4ee8024..fbb956e 100644
--- a/setup.c
+++ b/setup.c
@@ -5,13 +5,17 @@ static int inside_git_dir = -1;
 static int inside_work_tree = -1;
 
 static
-const char *strip_work_tree_path(const char *prefix, int len, const char *path)
+const char *strip_work_tree_path(const char *prefix, int len, const char *path,
+		int canonicalized)
 {
 	const char *work_tree = get_git_work_tree();
 	int n = strlen(work_tree);
 
 	if (strncmp(path, work_tree, n))
-		return path;
+		return canonicalized ?
+			path :
+			strip_work_tree_path(prefix, len,
+					xstrdup(make_absolute_path(path)), 1);
 
 	if (!prefix && !path[n])
 		return path + n;
@@ -58,7 +62,7 @@ const char *prefix_path(const char *prefix, int len, const char *path)
 {
 	const char *orig = path;
 	if (is_absolute_path(path))
-		path = strip_work_tree_path(prefix, len, path);
+		path = strip_work_tree_path(prefix, len, path, 0);
 
 	for (;;) {
 		char c;
Previous: Linus Torvalds
Message 21 of 21 in “Incorrect git-blame result if I use full path to file”
  1. Anatol PomozovDec 3, 2007
  2. Junio C HamanoDec 3, 2007
  3. Jeff KingDec 3, 2007
  4. Linus TorvaldsDec 3, 2007
  5. Johannes SchindelinDec 3, 2007
  6. Linus TorvaldsDec 3, 2007
  7. Linus TorvaldsDec 3, 2007
  8. Jeff KingDec 3, 2007
  9. Junio C HamanoDec 3, 2007
  10. Jeff KingDec 3, 2007
  11. Robin RosenbergDec 3, 2007
  12. Make Git accept absolute path names for files within the work treeRobin Rosenberg, Dec 3, 2007
  13. Junio C HamanoDec 3, 2007
  14. Jeff KingDec 4, 2007
  15. Johannes SchindelinDec 4, 2007
  16. Robin RosenbergDec 4, 2007
  17. Johannes SchindelinDec 4, 2007
  18. Linus TorvaldsDec 4, 2007
  19. Jeff KingDec 4, 2007
  20. Linus TorvaldsDec 4, 2007
  21. Jeff KingDec 6, 2007

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.