graph: output padding for merge subsequent parents
authorJohn Keeping <john@keeping.me.uk>
Thu, 7 Feb 2013 20:15:23 +0000 (20:15 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 7 Feb 2013 20:54:26 +0000 (12:54 -0800)
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>
graph.c

diff --git a/graph.c b/graph.c
index 391a712e5eafbc05b8d4b739d96aaca0dd481460..2a3fc5c0ec128ba2b6d024b3172bd3a110e361fd 100644 (file)
--- a/graph.c
+++ b/graph.c
@@ -1227,6 +1227,16 @@ void graph_show_commit(struct git_graph *graph)
        if (!graph)
                return;
 
+       /*
+        * When showing a diff of a merge against each of its parents, we
+        * are called once for each parent without graph_update having been
+        * called.  In this case, simply output a single padding line.
+        */
+       if (graph_is_commit_finished(graph)) {
+               graph_show_padding(graph);
+               shown_commit_line = 1;
+       }
+
        while (!shown_commit_line && !graph_is_commit_finished(graph)) {
                shown_commit_line = graph_next_line(graph, &msgbuf);
                fwrite(msgbuf.buf, sizeof(char), msgbuf.len, stdout);