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 <pclo...@gmail.com>
---
 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to