[PATCH] git-pickaxe: look for files relative to current path
From: Jeff King <hidden>
Date: 2016-08-11 19:17:06
Subsystem:
the rest · Maintainer:
Linus Torvalds
Signed-off-by: Jeff King <redacted> --- 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(-)
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]; } }
--