From 0d251c3291e4618325465a06186556b18be26adf Mon Sep 17 00:00:00 2001 From: Derrick Stolee Date: Tue, 7 Jan 2020 21:27:01 +0000 Subject: graph: drop assert() for merge with two collapsing parents When "git log --graph" shows a merge commit that has two collapsing lines, like: | | | | * | |_|_|/| |/| | |/ | | |/| | |/| | | * | | * | | | we trigger an assert(): graph.c:1228: graph_output_collapsing_line: Assertion `graph->mapping[i - 3] == target' failed. The assert was introduced by eaf158f8 ("graph API: Use horizontal lines for more compact graphs", 2009-04-21), which is quite old. This assert is trying to say that when we complete a horizontal line with a single slash, it is because we have reached our target. It is actually the _second_ collapsing line that hits this assert. The reason we are in this code path is because we are collapsing the first line, and in that case we are hitting our target now that the horizontal line is complete. However, the second line cannot be a horizontal line, so it will collapse without horizontal lines. In this case, it is inappropriate to assert that we have reached our target, as we need to continue for another column before reaching the target. Dropping the assert is safe here. The new behavior in 0f0f389f12 (graph: tidy up display of left-skewed merges, 2019-10-15) caused the behavior change that made this assertion failure possible. In addition to making the assert possible, it also changed how multiple edges collapse. In a larger example, the current code will output a collapse as follows: | | | | | | * | |_|_|_|_|/|\ |/| | | | |/ / | | | | |/| / | | | |/| |/ | | |/| |/| | |/| |/| | | | |/| | | | | * | | | However, the intended collapse should allow multiple horizontal lines as follows: | | | | | | * | |_|_|_|_|/|\ |/| | | | |/ / | | |_|_|/| / | |/| | | |/ | | | |_|/| | | |/| | | | | * | | | This behavior is not corrected by this change, but is noted for a later update. Helped-by: Jeff King Reported-by: Bradley Smith Signed-off-by: Derrick Stolee Signed-off-by: Junio C Hamano --- graph.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'graph.c') diff --git a/graph.c b/graph.c index 66ae18add8..f514ed3efa 100644 --- a/graph.c +++ b/graph.c @@ -1219,13 +1219,9 @@ static void graph_output_collapsing_line(struct git_graph *graph, struct graph_l * * The space just to the left of this * branch should always be empty. - * - * The branch to the left of that space - * should be our eventual target. */ assert(graph->mapping[i - 1] > target); assert(graph->mapping[i - 2] < 0); - assert(graph->mapping[i - 3] == target); graph->mapping[i - 2] = target; /* * Mark this branch as the horizontal edge to -- cgit v1.2.3