summaryrefslogtreecommitdiff
path: root/graph.c
diff options
context:
space:
mode:
authorJohn Keeping <john@keeping.me.uk>2013-02-07 20:15:23 +0000
committerJunio C Hamano <gitster@pobox.com>2013-02-07 12:54:26 -0800
commita48ec2415882ae15b8593185d6f9ab2f69555a9d (patch)
treeadaf41c2629490ecc1cc4d689cce755c3dbfff40 /graph.c
parent42f50f8d0150605ab4da32d283cef2df0bcb51ab (diff)
downloadgit-a48ec2415882ae15b8593185d6f9ab2f69555a9d.tar.gz
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>
Diffstat (limited to 'graph.c')
-rw-r--r--graph.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/graph.c b/graph.c
index 391a712e5e..2a3fc5c0ec 100644
--- 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);