X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=diff-tree-helper.c;h=a68328321aac9585d59fa8f4f939fccbcdb6c638;hb=20d37ef67286e5131d2333d7b4662bc70f9d4937;hp=282b649f318cf3fa19c7f01da94ba590126f5443;hpb=91a6eaa05da5627b1238b7168be1d8ae69516383;p=git.git diff --git a/diff-tree-helper.c b/diff-tree-helper.c index 282b649f..a6832832 100644 --- a/diff-tree-helper.c +++ b/diff-tree-helper.c @@ -35,7 +35,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 +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]; @@ -82,13 +83,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 +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); }