Signed-off-by: Jeff King <peff@xxxxxxxx> --- 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]; } } -- 1.4.3.3.gc7b7-dirty - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html