graph: output padding for merge subsequent parents

When showing merges in git-log, the same commit is shown once for each parent. Combined with "--graph" this results in graph_show_commit() being called once for each parent without graph_update() being called. Currently graph_show_commit() does not print anything on subsequent invocations for the same commit (this was changed by commit 656197a - "graph.c: infinite loop in git whatchanged --graph -m" from the previous behaviour of looping infinitely). Change this so that if the graph code believes it has already shown the commit it prints a single padding line. Signed-off-by: John Keeping <john@keeping.me.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>

John Keeping committed Feb 7, 2013 at 20:15 UTC a48ec2415882ae15b8593185d6f9ab2f69555a9d
1 file changed +10
graph.c
+10
@@ -1227,6 +1227,16 @@ void graph_show_commit(struct git_graph *graph)
1227 if (!graph)
1228 return;
1229
1230 + /*
1231 + * When showing a diff of a merge against each of its parents, we
1232 + * are called once for each parent without graph_update having been
1233 + * called. In this case, simply output a single padding line.
1234 + */
1235 + if (graph_is_commit_finished(graph)) {
1236 + graph_show_padding(graph);
1237 + shown_commit_line = 1;
1238 + }
1239 +
1240 while (!shown_commit_line && !graph_is_commit_finished(graph)) {
1241 shown_commit_line = graph_next_line(graph, &msgbuf);
1242 fwrite(msgbuf.buf, sizeof(char), msgbuf.len, stdout);