From: James Coglan <jcog...@gmail.com>

The commits following this one introduce a series of improvements to the
layout of graphs, tidying up a few edge cases, namely:

- merge whose first parent fuses with an existing column to the left
- merge whose last parent fuses with its immediate neighbor on the right
- edges that collapse to the left above and below a commit line

This test case exemplifies these cases and provides a motivating example
of the kind of history I'm aiming to clear up.

The first parent of merge E is the same as the parent of H, so those
edges fuse together.

        * H
        |
        | *-.   E
        | |\ \
        |/ / /
        |
        * B

We can "skew" the display of this merge so that it doesn't introduce
additional columns that immediately collapse:

        * H
        |
        | *   E
        |/|\
        |
        * B

The last parent of E is D, the same as the parent of F which is the edge
to the right of the merge.

            * F
            |
             \
          *-. \   E
          |\ \ \
         / / / /
            | /
            |/
            * D

The two edges leading to D could be fused sooner: rather than expanding
the F edge around the merge and then letting the edges collapse, the F
edge could fuse with the E edge in the post-merge line:

            * F
            |
             \
          *-. | E
          |\ \|
         / / /
            |
            * D

If this is combined with the "skew" effect above, we get a much cleaner
graph display for these edges:

            * F
            |
          * | E
         /|\|
            |
            * D

Finally, the edge leading from C to A appears jagged as it passes
through the commit line for B:

        | * | C
        | |/
        * | B
        |/
        * A

This can be smoothed out so that such edges are easier to read:

        | * | C
        | |/
        * / B
        |/
        * A
---
 t/t4215-log-skewed-merges.sh | 43 ++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)
 create mode 100755 t/t4215-log-skewed-merges.sh

diff --git a/t/t4215-log-skewed-merges.sh b/t/t4215-log-skewed-merges.sh
new file mode 100755
index 0000000000..4582ba066a
--- /dev/null
+++ b/t/t4215-log-skewed-merges.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+test_description='git log --graph of skewed merges'
+
+. ./test-lib.sh
+
+test_expect_success 'log --graph with merge fusing with its left and right 
neighbors' '
+       cat >expect <<-\EOF &&
+       *   H
+       |\
+       | *   G
+       | |\
+       | | * F
+       | | |
+       | |  \
+       | *-. \   E
+       | |\ \ \
+       |/ / / /
+       | | | /
+       | | |/
+       | | * D
+       | * | C
+       | |/
+       * | B
+       |/
+       * A
+       EOF
+
+       git checkout --orphan _p &&
+       test_commit A &&
+       test_commit B &&
+       git checkout -b _q @^ && test_commit C &&
+       git checkout -b _r @^ && test_commit D &&
+       git checkout _p && git merge --no-ff _q _r -m E &&
+       git checkout _r && test_commit F &&
+       git checkout _p && git merge --no-ff _r -m G &&
+       git checkout @^^ && git merge --no-ff _p -m H &&
+
+       git log --graph --pretty=tformat:%s | sed "s/ *$//" >actual &&
+       test_cmp expect actual
+'
+
+test_done
-- 
gitgitgadget

Reply via email to