git-blame: show lines attributed to boundary commits differently.
When blaming with revision ranges, often many lines are attributed to different commits at the boundary, but they are not interesting for the purpose of finding project history during that revision range. This outputs the lines blamed on boundary commits differently. When showing "human format" output, their SHA-1 are shown with '^' prefixed. In "porcelain format", the commit will be shown with an extra attribute line "boundary". Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
f388cec3d7
commit
b11121d9e3
@ -1090,6 +1090,11 @@ static void assign_blame(struct scoreboard *sb, struct rev_info *revs, int opt)
|
|||||||
if (!(commit->object.flags & UNINTERESTING) &&
|
if (!(commit->object.flags & UNINTERESTING) &&
|
||||||
!(revs->max_age != -1 && commit->date < revs->max_age))
|
!(revs->max_age != -1 && commit->date < revs->max_age))
|
||||||
pass_blame(sb, suspect, opt);
|
pass_blame(sb, suspect, opt);
|
||||||
|
else {
|
||||||
|
commit->object.flags |= UNINTERESTING;
|
||||||
|
if (commit->object.parsed)
|
||||||
|
mark_parents_uninteresting(commit);
|
||||||
|
}
|
||||||
|
|
||||||
/* Take responsibility for the remaining entries */
|
/* Take responsibility for the remaining entries */
|
||||||
for (ent = sb->ent; ent; ent = ent->next)
|
for (ent = sb->ent; ent; ent = ent->next)
|
||||||
@ -1273,6 +1278,8 @@ static void emit_porcelain(struct scoreboard *sb, struct blame_entry *ent)
|
|||||||
printf("committer-tz %s\n", ci.committer_tz);
|
printf("committer-tz %s\n", ci.committer_tz);
|
||||||
printf("filename %s\n", suspect->path);
|
printf("filename %s\n", suspect->path);
|
||||||
printf("summary %s\n", ci.summary);
|
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)
|
else if (suspect->commit->object.flags & MORE_THAN_ONE_PATH)
|
||||||
printf("filename %s\n", suspect->path);
|
printf("filename %s\n", suspect->path);
|
||||||
@ -1308,8 +1315,14 @@ static void emit_other(struct scoreboard *sb, struct blame_entry *ent, int opt)
|
|||||||
cp = nth_line(sb, ent->lno);
|
cp = nth_line(sb, ent->lno);
|
||||||
for (cnt = 0; cnt < ent->num_lines; cnt++) {
|
for (cnt = 0; cnt < ent->num_lines; cnt++) {
|
||||||
char ch;
|
char ch;
|
||||||
|
int length = (opt & OUTPUT_LONG_OBJECT_NAME) ? 40 : 8;
|
||||||
|
|
||||||
printf("%.*s", (opt & OUTPUT_LONG_OBJECT_NAME) ? 40 : 8, hex);
|
if (suspect->commit->object.flags & UNINTERESTING) {
|
||||||
|
length--;
|
||||||
|
putchar('^');
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%.*s", length, hex);
|
||||||
if (opt & OUTPUT_ANNOTATE_COMPAT)
|
if (opt & OUTPUT_ANNOTATE_COMPAT)
|
||||||
printf("\t(%10s\t%10s\t%d)", ci.author,
|
printf("\t(%10s\t%10s\t%d)", ci.author,
|
||||||
format_time(ci.author_time, ci.author_tz,
|
format_time(ci.author_time, ci.author_tz,
|
||||||
|
Loading…
Reference in New Issue
Block a user