Try to make test output look better
[git.git] / diff-tree-helper.c
index 282b649..51bb658 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2005 Junio C Hamano
  */
+#include <limits.h>
 #include "cache.h"
 #include "strbuf.h"
 #include "diff.h"
@@ -35,7 +36,7 @@ static int parse_oneside_change(const char *cp, struct diff_spec *one,
        if (strncmp(cp, "\tblob\t", 6))
                return -1;
        cp += 6;
-       if (get_sha1_hex(cp, one->u.sha1))
+       if (get_sha1_hex(cp, one->blob_sha1))
                return -1;
        cp += 40;
        if (*cp++ != '\t')
@@ -44,7 +45,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];
@@ -82,13 +84,13 @@ static int parse_diff_tree_output(const char *buf, const char **spec, int cnt)
                if (strncmp(cp, "\tblob\t", 6))
                        return -1;
                cp += 6;
-               if (get_sha1_hex(cp, old.u.sha1))
+               if (get_sha1_hex(cp, old.blob_sha1))
                        return -1;
                cp += 40;
                if (strncmp(cp, "->", 2))
                        return -1;
                cp += 2;
-               if (get_sha1_hex(cp, new.u.sha1))
+               if (get_sha1_hex(cp, new.blob_sha1))
                        return -1;
                cp += 40;
                if (*cp++ != '\t')
@@ -98,8 +100,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 +114,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 +135,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);
        }