diff.c: emit_diff_symbol learns about DIFF_SYMBOL_SUMMARY
Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
30b7e1e7ef
commit
146fdb0dfe
71
diff.c
71
diff.c
@ -572,6 +572,7 @@ enum diff_symbol {
|
|||||||
DIFF_SYMBOL_STATS_LINE,
|
DIFF_SYMBOL_STATS_LINE,
|
||||||
DIFF_SYMBOL_WORD_DIFF,
|
DIFF_SYMBOL_WORD_DIFF,
|
||||||
DIFF_SYMBOL_STAT_SEP,
|
DIFF_SYMBOL_STAT_SEP,
|
||||||
|
DIFF_SYMBOL_SUMMARY,
|
||||||
DIFF_SYMBOL_SUBMODULE_ADD,
|
DIFF_SYMBOL_SUBMODULE_ADD,
|
||||||
DIFF_SYMBOL_SUBMODULE_DEL,
|
DIFF_SYMBOL_SUBMODULE_DEL,
|
||||||
DIFF_SYMBOL_SUBMODULE_UNTRACKED,
|
DIFF_SYMBOL_SUBMODULE_UNTRACKED,
|
||||||
@ -648,6 +649,7 @@ static void emit_diff_symbol(struct diff_options *o, enum diff_symbol s,
|
|||||||
case DIFF_SYMBOL_SUBMODULE_ERROR:
|
case DIFF_SYMBOL_SUBMODULE_ERROR:
|
||||||
case DIFF_SYMBOL_SUBMODULE_PIPETHROUGH:
|
case DIFF_SYMBOL_SUBMODULE_PIPETHROUGH:
|
||||||
case DIFF_SYMBOL_STATS_SUMMARY_INSERTS_DELETES:
|
case DIFF_SYMBOL_STATS_SUMMARY_INSERTS_DELETES:
|
||||||
|
case DIFF_SYMBOL_SUMMARY:
|
||||||
case DIFF_SYMBOL_STATS_LINE:
|
case DIFF_SYMBOL_STATS_LINE:
|
||||||
case DIFF_SYMBOL_BINARY_DIFF_BODY:
|
case DIFF_SYMBOL_BINARY_DIFF_BODY:
|
||||||
case DIFF_SYMBOL_CONTEXT_FRAGINFO:
|
case DIFF_SYMBOL_CONTEXT_FRAGINFO:
|
||||||
@ -4717,67 +4719,76 @@ static void flush_one_pair(struct diff_filepair *p, struct diff_options *opt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_file_mode_name(FILE *file, const char *newdelete, struct diff_filespec *fs)
|
static void show_file_mode_name(struct diff_options *opt, const char *newdelete, struct diff_filespec *fs)
|
||||||
{
|
{
|
||||||
|
struct strbuf sb = STRBUF_INIT;
|
||||||
if (fs->mode)
|
if (fs->mode)
|
||||||
fprintf(file, " %s mode %06o ", newdelete, fs->mode);
|
strbuf_addf(&sb, " %s mode %06o ", newdelete, fs->mode);
|
||||||
else
|
else
|
||||||
fprintf(file, " %s ", newdelete);
|
strbuf_addf(&sb, " %s ", newdelete);
|
||||||
write_name_quoted(fs->path, file, '\n');
|
|
||||||
|
quote_c_style(fs->path, &sb, NULL, 0);
|
||||||
|
strbuf_addch(&sb, '\n');
|
||||||
|
emit_diff_symbol(opt, DIFF_SYMBOL_SUMMARY,
|
||||||
|
sb.buf, sb.len, 0);
|
||||||
|
strbuf_release(&sb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void show_mode_change(struct diff_options *opt, struct diff_filepair *p,
|
||||||
static void show_mode_change(FILE *file, struct diff_filepair *p, int show_name,
|
int show_name)
|
||||||
const char *line_prefix)
|
|
||||||
{
|
{
|
||||||
if (p->one->mode && p->two->mode && p->one->mode != p->two->mode) {
|
if (p->one->mode && p->two->mode && p->one->mode != p->two->mode) {
|
||||||
fprintf(file, "%s mode change %06o => %06o%c", line_prefix, p->one->mode,
|
struct strbuf sb = STRBUF_INIT;
|
||||||
p->two->mode, show_name ? ' ' : '\n');
|
strbuf_addf(&sb, " mode change %06o => %06o",
|
||||||
|
p->one->mode, p->two->mode);
|
||||||
if (show_name) {
|
if (show_name) {
|
||||||
write_name_quoted(p->two->path, file, '\n');
|
strbuf_addch(&sb, ' ');
|
||||||
|
quote_c_style(p->two->path, &sb, NULL, 0);
|
||||||
}
|
}
|
||||||
|
emit_diff_symbol(opt, DIFF_SYMBOL_SUMMARY,
|
||||||
|
sb.buf, sb.len, 0);
|
||||||
|
strbuf_release(&sb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_rename_copy(FILE *file, const char *renamecopy, struct diff_filepair *p,
|
static void show_rename_copy(struct diff_options *opt, const char *renamecopy,
|
||||||
const char *line_prefix)
|
struct diff_filepair *p)
|
||||||
{
|
{
|
||||||
|
struct strbuf sb = STRBUF_INIT;
|
||||||
char *names = pprint_rename(p->one->path, p->two->path);
|
char *names = pprint_rename(p->one->path, p->two->path);
|
||||||
|
strbuf_addf(&sb, " %s %s (%d%%)\n",
|
||||||
fprintf(file, " %s %s (%d%%)\n", renamecopy, names, similarity_index(p));
|
renamecopy, names, similarity_index(p));
|
||||||
free(names);
|
free(names);
|
||||||
show_mode_change(file, p, 0, line_prefix);
|
emit_diff_symbol(opt, DIFF_SYMBOL_SUMMARY,
|
||||||
|
sb.buf, sb.len, 0);
|
||||||
|
show_mode_change(opt, p, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void diff_summary(struct diff_options *opt, struct diff_filepair *p)
|
static void diff_summary(struct diff_options *opt, struct diff_filepair *p)
|
||||||
{
|
{
|
||||||
FILE *file = opt->file;
|
|
||||||
const char *line_prefix = diff_line_prefix(opt);
|
|
||||||
|
|
||||||
switch(p->status) {
|
switch(p->status) {
|
||||||
case DIFF_STATUS_DELETED:
|
case DIFF_STATUS_DELETED:
|
||||||
fputs(line_prefix, file);
|
show_file_mode_name(opt, "delete", p->one);
|
||||||
show_file_mode_name(file, "delete", p->one);
|
|
||||||
break;
|
break;
|
||||||
case DIFF_STATUS_ADDED:
|
case DIFF_STATUS_ADDED:
|
||||||
fputs(line_prefix, file);
|
show_file_mode_name(opt, "create", p->two);
|
||||||
show_file_mode_name(file, "create", p->two);
|
|
||||||
break;
|
break;
|
||||||
case DIFF_STATUS_COPIED:
|
case DIFF_STATUS_COPIED:
|
||||||
fputs(line_prefix, file);
|
show_rename_copy(opt, "copy", p);
|
||||||
show_rename_copy(file, "copy", p, line_prefix);
|
|
||||||
break;
|
break;
|
||||||
case DIFF_STATUS_RENAMED:
|
case DIFF_STATUS_RENAMED:
|
||||||
fputs(line_prefix, file);
|
show_rename_copy(opt, "rename", p);
|
||||||
show_rename_copy(file, "rename", p, line_prefix);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (p->score) {
|
if (p->score) {
|
||||||
fprintf(file, "%s rewrite ", line_prefix);
|
struct strbuf sb = STRBUF_INIT;
|
||||||
write_name_quoted(p->two->path, file, ' ');
|
strbuf_addstr(&sb, " rewrite ");
|
||||||
fprintf(file, "(%d%%)\n", similarity_index(p));
|
quote_c_style(p->two->path, &sb, NULL, 0);
|
||||||
|
strbuf_addf(&sb, " (%d%%)\n", similarity_index(p));
|
||||||
|
emit_diff_symbol(opt, DIFF_SYMBOL_SUMMARY,
|
||||||
|
sb.buf, sb.len, 0);
|
||||||
}
|
}
|
||||||
show_mode_change(file, p, !p->score, line_prefix);
|
show_mode_change(opt, p, !p->score);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user