diff options
Diffstat (limited to 'combine-diff.c')
-rw-r--r-- | combine-diff.c | 85 |
1 files changed, 58 insertions, 27 deletions
diff --git a/combine-diff.c b/combine-diff.c index 6d783054d5..9aa099b061 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -618,8 +618,8 @@ static void reuse_combine_diff(struct sline *sline, unsigned long cnt, sline->p_lno[i] = sline->p_lno[j]; } -int show_combined_diff(struct combine_diff_path *elem, int num_parent, - int dense, const char *header) +static int show_patch_diff(struct combine_diff_path *elem, int num_parent, + int dense, const char *header) { unsigned long size, cnt, lno; char *result, *cp, *ep; @@ -791,32 +791,69 @@ static void show_raw_diff(struct combine_diff_path *p, int num_parent, const cha if (header) puts(header); - offset = strlen(COLONS) - num_parent; - if (offset < 0) - offset = 0; - prefix = COLONS + offset; - /* Show the modes */ for (i = 0; i < num_parent; i++) { - int mode = p->parent[i].mode; - if (mode) + if (p->parent[i].mode) mod_type = 'M'; - printf("%s%06o", prefix, mode); - prefix = " "; } - printf("%s%06o", prefix, p->mode); if (!p->mode) mod_type = 'D'; - /* Show sha1's */ - for (i = 0; i < num_parent; i++) { - printf("%s%s", prefix, diff_unique_abbrev(p->parent[i].sha1, opt->abbrev)); - prefix = " "; + if (opt->output_format == DIFF_FORMAT_RAW) { + offset = strlen(COLONS) - num_parent; + if (offset < 0) + offset = 0; + prefix = COLONS + offset; + + /* Show the modes */ + for (i = 0; i < num_parent; i++) { + printf("%s%06o", prefix, p->parent[i].mode); + prefix = " "; + } + printf("%s%06o", prefix, p->mode); + + /* Show sha1's */ + for (i = 0; i < num_parent; i++) + printf(" %s", diff_unique_abbrev(p->parent[i].sha1, + opt->abbrev)); + printf(" %s ", diff_unique_abbrev(p->sha1, opt->abbrev)); + } + + if (opt->output_format == DIFF_FORMAT_RAW || + opt->output_format == DIFF_FORMAT_NAME_STATUS) + printf("%c%c", mod_type, inter_name_termination); + + if (line_termination) { + if (quote_c_style(p->path, NULL, NULL, 0)) + quote_c_style(p->path, NULL, stdout, 0); + else + printf("%s", p->path); + putchar(line_termination); + } + else { + printf("%s%c", p->path, line_termination); } - printf("%s%s", prefix, diff_unique_abbrev(p->sha1, opt->abbrev)); +} + +int show_combined_diff(struct combine_diff_path *p, + int num_parent, + int dense, + const char *header, + struct diff_options *opt) +{ + if (!p->len) + return 0; + switch (opt->output_format) { + case DIFF_FORMAT_RAW: + case DIFF_FORMAT_NAME_STATUS: + case DIFF_FORMAT_NAME: + show_raw_diff(p, num_parent, header, opt); + return 1; - /* Modification type, terminations, filename */ - printf(" %c%c%s%c", mod_type, inter_name_termination, p->path, line_termination); + default: + case DIFF_FORMAT_PATCH: + return show_patch_diff(p, num_parent, dense, header); + } } const char *diff_tree_combined_merge(const unsigned char *sha1, @@ -858,14 +895,8 @@ const char *diff_tree_combined_merge(const unsigned char *sha1, } if (num_paths) { for (p = paths; p; p = p->next) { - if (!p->len) - continue; - if (opt->output_format == DIFF_FORMAT_RAW) { - show_raw_diff(p, num_parent, header, opt); - header = NULL; - continue; - } - if (show_combined_diff(p, num_parent, dense, header)) + if (show_combined_diff(p, num_parent, dense, + header, opt)) header = NULL; } } |