@ -618,7 +618,7 @@ static void reuse_combine_diff(struct sline *sline, unsigned long cnt,
sline->p_lno[i] = sline->p_lno[j];
sline->p_lno[i] = sline->p_lno[j];
}
}
int show_combined_diff(struct combine_diff_path *elem, int num_parent,
static int show_patch_diff(struct combine_diff_path *elem, int num_parent,
int dense, const char *header)
int dense, const char *header)
{
{
unsigned long size, cnt, lno;
unsigned long size, cnt, lno;
@ -791,6 +791,15 @@ static void show_raw_diff(struct combine_diff_path *p, int num_parent, const cha
if (header)
if (header)
puts(header);
puts(header);
for (i = 0; i < num_parent; i++) {
if (p->parent[i].mode)
mod_type = 'M';
}
if (!p->mode)
mod_type = 'D';
if (opt->output_format == DIFF_FORMAT_RAW) {
offset = strlen(COLONS) - num_parent;
offset = strlen(COLONS) - num_parent;
if (offset < 0)
if (offset < 0)
offset = 0;
offset = 0;
@ -798,25 +807,53 @@ static void show_raw_diff(struct combine_diff_path *p, int num_parent, const cha
/* Show the modes */
/* Show the modes */
for (i = 0; i < num_parent; i++) {
for (i = 0; i < num_parent; i++) {
int mode = p->parent[i].mode;
printf("%s%06o", prefix, p->parent[i].mode);
if (mode)
mod_type = 'M';
printf("%s%06o", prefix, mode);
prefix = " ";
prefix = " ";
}
}
printf("%s%06o", prefix, p->mode);
printf("%s%06o", prefix, p->mode);
if (!p->mode)
mod_type = 'D';
/* Show sha1's */
/* Show sha1's */
for (i = 0; i < num_parent; i++) {
for (i = 0; i < num_parent; i++)
printf("%s%s", prefix, diff_unique_abbrev(p->parent[i].sha1, opt->abbrev));
printf(" %s", diff_unique_abbrev(p->parent[i].sha1,
prefix = " ";
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);
}
}
printf("%s%s", prefix, diff_unique_abbrev(p->sha1, opt->abbrev));
else {
printf("%s%c", p->path, line_termination);
}
}
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 */
default:
printf(" %c%c%s%c", mod_type, inter_name_termination, p->path, line_termination);
case DIFF_FORMAT_PATCH:
return show_patch_diff(p, num_parent, dense, header);
}
}
}
const char *diff_tree_combined_merge(const unsigned char *sha1,
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) {
if (num_paths) {
for (p = paths; p; p = p->next) {
for (p = paths; p; p = p->next) {
if (!p->len)
if (show_combined_diff(p, num_parent, dense,
continue;
header, opt))
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))
header = NULL;
header = NULL;
}
}
}
}