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 4, 2007, 22:08 UTC
Message-ID
<20071204220840.GA3340@coredump.intra.peff.net>
In-Reply-To
<alpine.LFD.0.9999.0712040756370.2981@woody.linux-foundation.org>
On Tue, Dec 04, 2007 at 07:59:43AM -0800, Linus Torvalds wrote:
Show 6 quoted lines
> > I do remember the hassles I went through with get_relative_cwd() until I 
> > broke down and used chdir() two times (ugly).
> 
> It really is a pretty heavy and complex operation in UNIX in general (and 
> open to various races too), which is why I'd generally suggest avoiding it 
> if you at all can.

It is more expensive, though we will be doing it once per user-supplied pathspec, so I don't know that it will actually have an impact.

I am concerned that not supporting symlinks will make this feature unusably annoying for some users. I used to have a home directory that had a symlink in it, and I frequently ran into these sorts of path comparison issues ($HOME was /home/peff, so typing ~/repo/file pointed there, but /home was a symlink to /mnt/data/home, so any routines that normalize the cwd used /mnt/data/home/repo, and the two never matched up).

Hrm. Looks like somebody has already helpfully implemented make_absolute_path, so it would just require calling that on each argument. Something like this on top of Robin's patch:

diff --git a/setup.c b/setup.c
index 4ee8024..e76c83c 100644
--- a/setup.c
+++ b/setup.c
@@ -58,7 +58,8 @@ 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,
+				xstrdup(make_absolute_path(path)));
 
 	for (;;) {
 		char c;

-Peff
Previous: Linus TorvaldsNext: Linus Torvalds
Message 19 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.