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;