threads / patch / 43084

patchgit-pickaxe: look for files relative to current path

Subject: [PATCH] git-pickaxe: look for files relative to current path

## tl;dr

2 messages between Nov 2, 2006 and Nov 2, 2006. Diffs are folded; open one to read it.

replies: 1people: 2as markdown or json

Andy Whitcroft· Nov 2, 2006, 03:21 UTC · lore

git pickaxe -- problems with relative filenames

We seem to have a difference in the handling of relative filenames within a repository between git blame and git pickaxe. Specifically git pickaxe seems to always require names as if it were run in the top of the project:

apw@pinky$ pwd /home/apw/git/git/Documentation apw@pinky$ git blame git.txt | head -2 7984eabe (Sebastian Kuzminsky 2005-05-19 10:24:54 -0600 1) git(7) 2cf565c5 (David Greaves 2005-05-10 22:32:30 +0100 2) ====== apw@pinky$ git pickaxe git.txt | head -2 fatal: cannot stat path git.txt: No such file or directory apw@pinky$ git pickaxe Documentation/git.txt | head -2 7984eabe (Sebastian Kuzminsky 2005-05-19 10:24:54 -0600 1) git(7) 2cf565c5 (David Greaves 2005-05-10 22:32:30 +0100 2) ======

This seems inconsistent? Is this expected behaviour?
Jeff King· Nov 2, 2006, 07:22 UTC · re: Andy Whitcroft · lore
Signed-off-by: Jeff King <peff@peff.net>
---
Andy Whitcroft writes:
> We seem to have a difference in the handling of relative filenames
> within a repository between git blame and git pickaxe.  Specifically git
> pickaxe seems to always require names as if it were run in the top of
> the project:
This simple patch seems to fix it (but is not extensively tested).
 builtin-pickaxe.c |   15 +++++++++++----
 1 files changed, 11 insertions(+), 4 deletions(-)
Show changes to builtin-pickaxe.c +11 −4
diff --git a/builtin-pickaxe.c b/builtin-pickaxe.c
index c9405e9..3e76258 100644
--- a/builtin-pickaxe.c
+++ b/builtin-pickaxe.c
@@ -1413,6 +1413,13 @@ static void sanity_check_refcnt(struct s
 	}
 }
 
+static const char *add_prefix(const char *prefix, const char *path)
+{
+	if (!prefix || !prefix[0])
+		return path;
+	return prefix_path(prefix, strlen(prefix), path);
+}
+
 static int has_path_in_work_tree(const char *path)
 {
 	struct stat st;
@@ -1548,7 +1555,7 @@ int cmd_pickaxe(int argc, const char **a
 		/* (1) */
 		if (argc <= i)
 			usage(pickaxe_usage);
-		path = argv[i];
+		path = add_prefix(prefix, argv[i]);
 		if (i + 1 == argc - 1) {
 			if (unk != 1)
 				usage(pickaxe_usage);
@@ -1566,13 +1573,13 @@ int cmd_pickaxe(int argc, const char **a
 		if (seen_dashdash) {
 			if (seen_dashdash + 1 != argc - 1)
 				usage(pickaxe_usage);
-			path = argv[seen_dashdash + 1];
+			path = add_prefix(prefix, argv[seen_dashdash + 1]);
 			for (j = i; j < seen_dashdash; j++)
 				argv[unk++] = argv[j];
 		}
 		else {
 			/* (3) */
-			path = argv[i];
+			path = add_prefix(prefix, argv[i]);
 			if (i + 1 == argc - 1) {
 				final_commit_name = argv[i + 1];
 
@@ -1580,7 +1587,7 @@ int cmd_pickaxe(int argc, const char **a
 				 * old-style
 				 */
 				if (unk == 1 && !has_path_in_work_tree(path)) {
-					path = argv[i + 1];
+					path = add_prefix(prefix, argv[i + 1]);
 					final_commit_name = argv[i];
 				}
 			}

← back to recent threads