From 0b32ff0dd99136719f0977ba1470894d6d3ab430 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Tue, 26 Apr 2005 17:39:01 -0700 Subject: [PATCH] [PATCH] diff-cache/tree compatible output for show-diff (take 2). This makes diff-tree-helper handle ("warn about") unmerged path entries U This is emitted once per unmerged path, no matter how many unmerged stages there are. Signed-off-by: Junio C Hamano Signed-off-by: Linus Torvalds --- diff-tree-helper.c | 27 ++++++++++++++++++--------- 1 file 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)) -- GitLab