git-blame: refactor code to emit "porcelain format" output
Both the --porcelain and --incremental format shared the same output format but implemented with two identical codepaths. This merges them into one shared function. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
5c283eb13c
commit
9991030c0c
@ -1490,6 +1490,34 @@ static void write_filename_info(const char *path)
|
||||
write_name_quoted(path, stdout, '\n');
|
||||
}
|
||||
|
||||
/*
|
||||
* Porcelain/Incremental format wants to show a lot of details per
|
||||
* commit. Instead of repeating this every line, emit it only once,
|
||||
* the first time each commit appears in the output.
|
||||
*/
|
||||
static int emit_one_suspect_detail(struct origin *suspect)
|
||||
{
|
||||
struct commit_info ci;
|
||||
|
||||
if (suspect->commit->object.flags & METAINFO_SHOWN)
|
||||
return 0;
|
||||
|
||||
suspect->commit->object.flags |= METAINFO_SHOWN;
|
||||
get_commit_info(suspect->commit, &ci, 1);
|
||||
printf("author %s\n", ci.author);
|
||||
printf("author-mail %s\n", ci.author_mail);
|
||||
printf("author-time %lu\n", ci.author_time);
|
||||
printf("author-tz %s\n", ci.author_tz);
|
||||
printf("committer %s\n", ci.committer);
|
||||
printf("committer-mail %s\n", ci.committer_mail);
|
||||
printf("committer-time %lu\n", ci.committer_time);
|
||||
printf("committer-tz %s\n", ci.committer_tz);
|
||||
printf("summary %s\n", ci.summary);
|
||||
if (suspect->commit->object.flags & UNINTERESTING)
|
||||
printf("boundary\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* The blame_entry is found to be guilty for the range. Mark it
|
||||
* as such, and show it in incremental output.
|
||||
@ -1505,22 +1533,7 @@ static void found_guilty_entry(struct blame_entry *ent)
|
||||
printf("%s %d %d %d\n",
|
||||
sha1_to_hex(suspect->commit->object.sha1),
|
||||
ent->s_lno + 1, ent->lno + 1, ent->num_lines);
|
||||
if (!(suspect->commit->object.flags & METAINFO_SHOWN)) {
|
||||
struct commit_info ci;
|
||||
suspect->commit->object.flags |= METAINFO_SHOWN;
|
||||
get_commit_info(suspect->commit, &ci, 1);
|
||||
printf("author %s\n", ci.author);
|
||||
printf("author-mail %s\n", ci.author_mail);
|
||||
printf("author-time %lu\n", ci.author_time);
|
||||
printf("author-tz %s\n", ci.author_tz);
|
||||
printf("committer %s\n", ci.committer);
|
||||
printf("committer-mail %s\n", ci.committer_mail);
|
||||
printf("committer-time %lu\n", ci.committer_time);
|
||||
printf("committer-tz %s\n", ci.committer_tz);
|
||||
printf("summary %s\n", ci.summary);
|
||||
if (suspect->commit->object.flags & UNINTERESTING)
|
||||
printf("boundary\n");
|
||||
}
|
||||
emit_one_suspect_detail(suspect);
|
||||
write_filename_info(suspect->path);
|
||||
maybe_flush_or_die(stdout, "stdout");
|
||||
}
|
||||
@ -1627,24 +1640,8 @@ static void emit_porcelain(struct scoreboard *sb, struct blame_entry *ent)
|
||||
ent->s_lno + 1,
|
||||
ent->lno + 1,
|
||||
ent->num_lines);
|
||||
if (!(suspect->commit->object.flags & METAINFO_SHOWN)) {
|
||||
struct commit_info ci;
|
||||
suspect->commit->object.flags |= METAINFO_SHOWN;
|
||||
get_commit_info(suspect->commit, &ci, 1);
|
||||
printf("author %s\n", ci.author);
|
||||
printf("author-mail %s\n", ci.author_mail);
|
||||
printf("author-time %lu\n", ci.author_time);
|
||||
printf("author-tz %s\n", ci.author_tz);
|
||||
printf("committer %s\n", ci.committer);
|
||||
printf("committer-mail %s\n", ci.committer_mail);
|
||||
printf("committer-time %lu\n", ci.committer_time);
|
||||
printf("committer-tz %s\n", ci.committer_tz);
|
||||
write_filename_info(suspect->path);
|
||||
printf("summary %s\n", ci.summary);
|
||||
if (suspect->commit->object.flags & UNINTERESTING)
|
||||
printf("boundary\n");
|
||||
}
|
||||
else if (suspect->commit->object.flags & MORE_THAN_ONE_PATH)
|
||||
if (emit_one_suspect_detail(suspect) ||
|
||||
(suspect->commit->object.flags & MORE_THAN_ONE_PATH))
|
||||
write_filename_info(suspect->path);
|
||||
|
||||
cp = nth_line(sb, ent->lno);
|
||||
|
Loading…
Reference in New Issue
Block a user