So far "prefix" and "prefix_length" in struct diff_options are tied to RELATIVE_NAME flag, making it tricky to add new features that need the prefix. This change essentially follows the foot steps in cd676a5 (diff --relative: output paths as relative to the current subdirectory - 2008-02-12) and makes sure that the prefix stripping/filtering only happens when RELATIVE_NAME flag is set. The stripping is much simpler because all stripping now goes through strip_prefix(). So the patch is mostly about filtering. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- diff.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/diff.c b/diff.c index b4949a2..bd5d190 100644 --- a/diff.c +++ b/diff.c @@ -3153,7 +3153,7 @@ static void strip_prefix(struct diff_options *opt, { int prefix_length = opt->prefix_length; - if (!prefix_length) + if (!prefix_length || !DIFF_OPT_TST(opt, RELATIVE_NAME)) return; /* Strip the prefix but do not molest /dev/null and absolute paths */ @@ -3335,8 +3335,6 @@ void diff_setup_done(struct diff_options *options) if (DIFF_OPT_TST(options, FIND_COPIES_HARDER)) options->detect_rename = DIFF_DETECT_COPY; - if (!DIFF_OPT_TST(options, RELATIVE_NAME)) - options->prefix = NULL; if (options->prefix) options->prefix_length = strlen(options->prefix); else @@ -4976,7 +4974,8 @@ void diff_addremove(struct diff_options *options, addremove = (addremove == '+' ? '-' : addremove == '-' ? '+' : addremove); - if (options->prefix && + if (DIFF_OPT_TST(options, RELATIVE_NAME) && + options->prefix && strncmp(concatpath, options->prefix, options->prefix_length)) return; @@ -5021,7 +5020,8 @@ void diff_change(struct diff_options *options, new_dirty_submodule = tmp; } - if (options->prefix && + if (DIFF_OPT_TST(options, RELATIVE_NAME) && + options->prefix && strncmp(concatpath, options->prefix, options->prefix_length)) return; @@ -5048,7 +5048,8 @@ struct diff_filepair *diff_unmerge(struct diff_options *options, const char *pat struct diff_filepair *pair; struct diff_filespec *one, *two; - if (options->prefix && + if (DIFF_OPT_TST(options, RELATIVE_NAME) && + options->prefix && strncmp(path, options->prefix, options->prefix_length)) return NULL; -- 2.8.2.531.gd073806 -- 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