diff options
author | Junio C Hamano <junkio@cox.net> | 2005-04-26 17:39:01 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-26 17:39:01 -0700 |
commit | 0b32ff0dd99136719f0977ba1470894d6d3ab430 (patch) | |
tree | 69b59343ff93d3abc4cd696d5b155d5e60f05e53 | |
parent | show-diff: don't print out the full "ce" format for unmerged files (diff) | |
download | tgif-0b32ff0dd99136719f0977ba1470894d6d3ab430.tar.xz |
[PATCH] diff-cache/tree compatible output for show-diff (take 2).
This makes diff-tree-helper handle ("warn about") unmerged path entries
U <path> <record-terminator>
This is emitted once per unmerged path, no matter how many unmerged
stages there are.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | diff-tree-helper.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/diff-tree-helper.c b/diff-tree-helper.c index bcf89a5789..4167d11e00 100644 --- a/diff-tree-helper.c +++ b/diff-tree-helper.c @@ -44,6 +44,9 @@ static int parse_oneside_change(const char *cp, struct diff_spec *one, return 0; } +#define PLEASE_WARN -1 +#define WARNED_OURSELVES -2 + static int parse_diff_tree_output(const char *buf, struct diff_spec *old, struct diff_spec *new, @@ -52,6 +55,9 @@ static int parse_diff_tree_output(const char *buf, int ch; switch (*cp++) { + case 'U': + fprintf(stderr, "warning: unmerged path %s\n", cp+1); + return WARNED_OURSELVES; case '+': old->file_valid = 0; return parse_oneside_change(cp, new, path); @@ -61,7 +67,7 @@ static int parse_diff_tree_output(const char *buf, case '*': break; default: - return -1; + return PLEASE_WARN; } /* This is for '*' entries */ @@ -74,26 +80,26 @@ static int parse_diff_tree_output(const char *buf, cp++; } if (strncmp(cp, "->", 2)) - return -1; + return PLEASE_WARN; cp += 2; while ((ch = *cp) && ('0' <= ch && ch <= '7')) { new->mode = (new->mode << 3) | (ch - '0'); cp++; } if (strncmp(cp, "\tblob\t", 6)) - return -1; + return PLEASE_WARN; cp += 6; if (get_sha1_hex(cp, old->u.sha1)) - return -1; + return PLEASE_WARN; cp += 40; if (strncmp(cp, "->", 2)) - return -1; + return PLEASE_WARN; cp += 2; if (get_sha1_hex(cp, new->u.sha1)) - return -1; + return PLEASE_WARN; cp += 40; if (*cp++ != '\t') - return -1; + return PLEASE_WARN; strcpy(path, cp); return 0; } @@ -120,13 +126,16 @@ int main(int ac, char **av) { /* the remaining parameters are paths patterns */ while (1) { + int status; struct diff_spec old, new; char path[PATH_MAX]; read_line(&sb, stdin, line_termination); if (sb.eof) break; - if (parse_diff_tree_output(sb.buf, &old, &new, path)) { - fprintf(stderr, "cannot parse %s\n", sb.buf); + status = parse_diff_tree_output(sb.buf, &old, &new, path); + if (status) { + if (status == PLEASE_WARN) + fprintf(stderr, "cannot parse %s\n", sb.buf); continue; } if (1 < ac && !matches_pathspec(path, av+1, ac-1)) |