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');
|
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
|
* The blame_entry is found to be guilty for the range. Mark it
|
||||||
* as such, and show it in incremental output.
|
* 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",
|
printf("%s %d %d %d\n",
|
||||||
sha1_to_hex(suspect->commit->object.sha1),
|
sha1_to_hex(suspect->commit->object.sha1),
|
||||||
ent->s_lno + 1, ent->lno + 1, ent->num_lines);
|
ent->s_lno + 1, ent->lno + 1, ent->num_lines);
|
||||||
if (!(suspect->commit->object.flags & METAINFO_SHOWN)) {
|
emit_one_suspect_detail(suspect);
|
||||||
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");
|
|
||||||
}
|
|
||||||
write_filename_info(suspect->path);
|
write_filename_info(suspect->path);
|
||||||
maybe_flush_or_die(stdout, "stdout");
|
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->s_lno + 1,
|
||||||
ent->lno + 1,
|
ent->lno + 1,
|
||||||
ent->num_lines);
|
ent->num_lines);
|
||||||
if (!(suspect->commit->object.flags & METAINFO_SHOWN)) {
|
if (emit_one_suspect_detail(suspect) ||
|
||||||
struct commit_info ci;
|
(suspect->commit->object.flags & MORE_THAN_ONE_PATH))
|
||||||
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)
|
|
||||||
write_filename_info(suspect->path);
|
write_filename_info(suspect->path);
|
||||||
|
|
||||||
cp = nth_line(sb, ent->lno);
|
cp = nth_line(sb, ent->lno);
|
||||||
|
Loading…
Reference in New Issue
Block a user