Code

[PATCH] Resurrect diff-tree-helper -R
authorJunio C Hamano <junkio@cox.net>
Sun, 1 May 2005 00:59:35 +0000 (17:59 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sun, 1 May 2005 00:59:35 +0000 (17:59 -0700)
Diff-tree-helper take two patch inadvertently dropped the
support of -R option, which is necessary to produce reverse diff
based on diff-cache and diff-files output (diff-tree does not
matter since you can feed two trees in reverse order).  This
patch restores it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
diff-tree-helper.c

index 282b649f318cf3fa19c7f01da94ba590126f5443..621f90ad0919f83a2484d72b9bccdc1ccf564b2b 100644 (file)
@@ -44,7 +44,8 @@ static int parse_oneside_change(const char *cp, struct diff_spec *one,
        return 0;
 }
 
-static int parse_diff_tree_output(const char *buf, const char **spec, int cnt)
+static int parse_diff_tree_output(const char *buf,
+                                 const char **spec, int cnt, int reverse)
 {
        struct diff_spec old, new;
        char path[PATH_MAX];
@@ -98,8 +99,12 @@ static int parse_diff_tree_output(const char *buf, const char **spec, int cnt)
        default:
                return -1;
        }
-       if (!cnt || matches_pathspec(path, spec, cnt))
-               run_external_diff(path, &old, &new);
+       if (!cnt || matches_pathspec(path, spec, cnt)) {
+               if (reverse)
+                       run_external_diff(path, &new, &old);
+               else
+                       run_external_diff(path, &old, &new);
+       }
        return 0;
 }
 
@@ -108,14 +113,14 @@ static const char *diff_tree_helper_usage =
 
 int main(int ac, const char **av) {
        struct strbuf sb;
-       int reverse_diff = 0;
+       int reverse = 0;
        int line_termination = '\n';
 
        strbuf_init(&sb);
 
        while (1 < ac && av[1][0] == '-') {
                if (av[1][1] == 'R')
-                       reverse_diff = 1;
+                       reverse = 1;
                else if (av[1][1] == 'z')
                        line_termination = 0;
                else
@@ -129,7 +134,7 @@ int main(int ac, const char **av) {
                read_line(&sb, stdin, line_termination);
                if (sb.eof)
                        break;
-               status = parse_diff_tree_output(sb.buf, av+1, ac-1);
+               status = parse_diff_tree_output(sb.buf, av+1, ac-1, reverse);
                if (status)
                        fprintf(stderr, "cannot parse %s\n", sb.buf);
        }