]> git.ipfire.org Git - thirdparty/git.git/commitdiff
graph: add test to demonstrate horizontal line bug
authorDerrick Stolee <dstolee@microsoft.com>
Wed, 8 Jan 2020 04:27:54 +0000 (04:27 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 15 Jan 2020 20:14:51 +0000 (12:14 -0800)
A previous test in t4215-log-skewed-merges.sh was added to demonstrate
exactly the topology of a reported failure in "git log --graph". While
investigating the fix, we realized that multiple edges that could
collapse with horizontal lines were not doing so.

Specifically, examine this section of the graph:

| | | | | | *
| |_|_|_|_|/|\
|/| | | | |/ /
| | | | |/| /
| | | |/| |/
| | |/| |/|
| |/| |/| |
| | |/| | |
| | * | | |

Document this behavior with a test. This behavior is new, as the
behavior in v2.24.1 has the following output:

| | | | | | *-.
| | | | | | |\ \
| |_|_|_|_|/ / /
|/| | | | | / /
| | |_|_|_|/ /
| |/| | | | /
| | | |_|_|/
| | |/| | |
| | * | | |

The behavior changed logically in 479db18b ("graph: smooth appearance
of collapsing edges on commit lines", 2019-10-15), but was actually
broken due to an assert() bug in 458152cc ("graph: example of graph
output that can be simplified", 2019-10-15). A future change could
modify this behavior to do the following instead:

| | | | | | *
| |_|_|_|_|/|\
|/| | | | |/ /
| | |_|_|/| /
| |/| | | |/
| | | |_|/|
| | |/| | |
| | * | | |

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t4215-log-skewed-merges.sh

index 5661ed5881f4831a36637cfd2dd96f1a9c19e504..099e4b89b4053d96a0d5a6ca5a59a9befc00eef5 100755 (executable)
@@ -311,4 +311,66 @@ test_expect_success 'log --graph with multiple tips and colors' '
        test_cmp expect.colors actual.colors
 '
 
+test_expect_failure 'log --graph with multiple tips' '
+       git checkout --orphan 7_1 &&
+       test_commit 7_A &&
+       test_commit 7_B &&
+       test_commit 7_C &&
+       git checkout -b 7_2 7_1~2 &&
+       test_commit 7_D &&
+       test_commit 7_E &&
+       git checkout -b 7_3 7_1~1 &&
+       test_commit 7_F &&
+       test_commit 7_G &&
+       git checkout -b 7_4 7_2~1 &&
+       test_commit 7_H &&
+       git checkout -b 7_5 7_1~2 &&
+       test_commit 7_I &&
+       git checkout -b 7_6 7_3~1 &&
+       test_commit 7_J &&
+       git checkout -b M_1 7_1 &&
+       git merge --no-ff 7_2 -m 7_M1 &&
+       git checkout -b M_3 7_3 &&
+       git merge --no-ff 7_4 -m 7_M2 &&
+       git checkout -b M_5 7_5 &&
+       git merge --no-ff 7_6 -m 7_M3 &&
+       git checkout -b M_7 7_1 &&
+       git merge --no-ff 7_2 7_3 -m 7_M4 &&
+
+       check_graph M_1 M_3 M_5 M_7 <<-\EOF
+       *   7_M1
+       |\
+       | | *   7_M2
+       | | |\
+       | | | * 7_H
+       | | | | *   7_M3
+       | | | | |\
+       | | | | | * 7_J
+       | | | | * | 7_I
+       | | | | | | *   7_M4
+       | |_|_|_|_|/|\
+       |/| | | | |/ /
+       | | |_|_|/| /
+       | |/| | | |/
+       | | | |_|/|
+       | | |/| | |
+       | | * | | | 7_G
+       | | | |_|/
+       | | |/| |
+       | | * | | 7_F
+       | * | | | 7_E
+       | | |/ /
+       | |/| |
+       | * | | 7_D
+       | | |/
+       | |/|
+       * | | 7_C
+       | |/
+       |/|
+       * | 7_B
+       |/
+       * 7_A
+       EOF
+'
+
 test_done