summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Fonseca <jonas.fonseca@gmail.com>2017-07-03 22:20:18 -0400
committerGitHub <noreply@github.com>2017-07-03 22:20:18 -0400
commit440d03db3d5d8bd835206772c8e5a2309faa4836 (patch)
tree7d712ae2acadde419192f138dbacf382bad720a7
parent2b384f69b45d00a9310d276fad2dfbfc0aabcc67 (diff)
parent156d339d08579b55b3a91ff45494b9f0ec1c4040 (diff)
Merge pull request #638 from swegener/graph-fixes
Fix graph display issues Fixes #419
-rw-r--r--src/graph-v2.c78
-rwxr-xr-xtest/graph/00-simple-test10
-rwxr-xr-xtest/graph/06-extra-bars-test14
-rwxr-xr-xtest/graph/10-shorter-merge-than-branch-test2
-rwxr-xr-xtest/graph/11-new-branch-in-middle-test6
-rwxr-xr-xtest/graph/15-many-merges-test31
-rwxr-xr-xtest/graph/17-more-merges-test4
-rwxr-xr-xtest/graph/18-tig-test12
-rwxr-xr-xtest/graph/20-tig-all-long-test4
-rwxr-xr-xtest/graph/regression/horizontal-artifact-test41
-rwxr-xr-xtest/graph/regression/horizontal-bar-wrong-2-test41
11 files changed, 176 insertions, 67 deletions
diff --git a/src/graph-v2.c b/src/graph-v2.c
index 69463a58..ab95dbe2 100644
--- a/src/graph-v2.c
+++ b/src/graph-v2.c
@@ -364,7 +364,7 @@ graph_insert_parents(struct graph_v2 *graph)
if (graph_column_has_commit(new)) {
size_t match = graph_find_free_column(next_row);
- if (match == next_row->size && *next_row->columns[next_row->size - 1].id) {
+ if (match == next_row->size && graph_column_has_commit(&next_row->columns[next_row->size - 1])) {
graph_insert_column(graph, next_row, next_row->size, new->id);
graph_insert_column(graph, row, row->size, "");
graph_insert_column(graph, prev_row, prev_row->size, "");
@@ -759,6 +759,51 @@ graph_symbol_forks(const struct graph_symbol *symbol)
}
static const bool
+graph_symbol_cross_merge(const struct graph_symbol *symbol)
+{
+ if (symbol->empty)
+ return false;
+
+ if (!symbol->continued_up && !symbol->new_column && !symbol->below_commit)
+ return false;
+
+ if (symbol->shift_left && symbol->continued_up_left)
+ return false;
+
+ if (symbol->next_right)
+ return false;
+
+ if (symbol->merge && symbol->continued_up && symbol->continued_right && symbol->continued_left && symbol->parent_down && !symbol->next_right)
+ return true;
+
+ return false;
+}
+
+static const bool
+graph_symbol_vertical_merge(const struct graph_symbol *symbol)
+{
+ if (symbol->empty)
+ return false;
+
+ if (!symbol->continued_up && !symbol->new_column && !symbol->below_commit)
+ return false;
+
+ if (symbol->shift_left && symbol->continued_up_left)
+ return false;
+
+ if (symbol->next_right)
+ return false;
+
+ if (!symbol->matches_commit)
+ return false;
+
+ if (symbol->merge && symbol->continued_up && symbol->continued_left && symbol->parent_down && !symbol->continued_right)
+ return true;
+
+ return false;
+}
+
+static const bool
graph_symbol_cross_over(const struct graph_symbol *symbol)
{
if (symbol->empty)
@@ -811,6 +856,9 @@ graph_symbol_turn_down_cross_over(const struct graph_symbol *symbol)
if (!symbol->continued_right)
return false;
+ if (!symbol->parent_right && !symbol->flanked)
+ return false;
+
if (symbol->flanked)
return true;
@@ -844,6 +892,9 @@ graph_symbol_merge(const struct graph_symbol *symbol)
if (symbol->parent_right)
return false;
+ if (symbol->continued_right)
+ return false;
+
return true;
}
@@ -853,7 +904,7 @@ graph_symbol_multi_merge(const struct graph_symbol *symbol)
if (!symbol->parent_down)
return false;
- if (!symbol->parent_right)
+ if (!symbol->parent_right && !symbol->continued_right)
return false;
return true;
@@ -889,6 +940,9 @@ graph_symbol_vertical_bar(const struct graph_symbol *symbol)
static const bool
graph_symbol_horizontal_bar(const struct graph_symbol *symbol)
{
+ if (!symbol->next_right)
+ return false;
+
if (symbol->shift_left)
return true;
@@ -943,6 +997,12 @@ graph_symbol_to_utf8(const struct graph_symbol *symbol)
return " ●";
}
+ if (graph_symbol_cross_merge(symbol))
+ return "─┼";
+
+ if (graph_symbol_vertical_merge(symbol))
+ return "─┤";
+
if (graph_symbol_cross_over(symbol))
return "─│";
@@ -993,6 +1053,14 @@ graph_symbol_to_chtype(const struct graph_symbol *symbol)
graphics[1] = 'o'; //ACS_DIAMOND; //'*';
return graphics;
+ } else if (graph_symbol_cross_merge(symbol)) {
+ graphics[0] = ACS_HLINE;
+ graphics[1] = ACS_PLUS;
+
+ } else if (graph_symbol_vertical_merge(symbol)) {
+ graphics[0] = ACS_HLINE;
+ graphics[1] = ACS_RTEE;
+
} else if (graph_symbol_cross_over(symbol)) {
graphics[0] = ACS_HLINE;
graphics[1] = ACS_VLINE;
@@ -1052,6 +1120,12 @@ graph_symbol_to_ascii(const struct graph_symbol *symbol)
return " *";
}
+ if (graph_symbol_cross_merge(symbol))
+ return "-+";
+
+ if (graph_symbol_vertical_merge(symbol))
+ return "-|";
+
if (graph_symbol_cross_over(symbol))
return "-|";
diff --git a/test/graph/00-simple-test b/test/graph/00-simple-test
index 72c6cf33..9639b79d 100755
--- a/test/graph/00-simple-test
+++ b/test/graph/00-simple-test
@@ -17,16 +17,6 @@ commit b a
branch1
commit a
init
-* 5ce4f7f (HEAD, master) Merge branch 'branch3'
-|\
-| * b47bfd8 (branch3) branch3
-* | ecc01c0 Merge branch 'branch2'
-|\ \
-| * | 814336c (branch2) branch2
-| |/
-* | e51b810 (branch1) branch1
-|/
-* de1bd54 init
EOF
assert_equals stdout <<EOF
diff --git a/test/graph/06-extra-bars-test b/test/graph/06-extra-bars-test
index c9160154..4fae2374 100755
--- a/test/graph/06-extra-bars-test
+++ b/test/graph/06-extra-bars-test
@@ -136,31 +136,31 @@ assert_equals stdout <<EOF
│ │ │ ● Commit M - after N
│ │ │ ● Commit N - after O
│ │ │ ● Commit O - after P
-●─┴─╯ │ Commit B - merge Q and R
+●─┼─╯ │ Commit B - merge Q and R
│ ● ╭─╯ Commit R - after Q
-●─╯ │ Commit Q - merge S and T
+●─┤ │ Commit Q - merge S and T
│ ● │ Commit T - after S
│ │ ● Commit P - after U
│ │ ● Commit U - after V
│ │ ● Commit V - after W
-●─╯ │ Commit S - merge X and Y
+●─┤ │ Commit S - merge X and Y
│ │ │ ● Commit Z - after 1
│ ● │ │ Commit Y - after X
-●─╯ │ │ Commit X - merge 2 and 3
+●─┤ │ │ Commit X - merge 2 and 3
│ ● │ │ Commit 3 - after 2
│ │ │ │ ● Commit 4 - after 5
│ │ │ │ ● Commit 5 - after 6
│ │ ● │ │ Commit W - after 7
│ │ │ │ ● Commit 6 - after 8
│ │ ● │ │ Commit 7 - after 9
-●─╯ │ │ │ Commit 2 - merge 0 and a
+●─┤ │ │ │ Commit 2 - merge 0 and a
│ ● │ │ │ Commit a - after b
│ ● │ │ │ Commit b - after c
│ ●─│─│─│─╮ Commit c - merge d and 0
│ │ │ │ ● │ Commit 8 - after e
│ │ │ │ ● │ Commit e - after f
│ │ │ │ ● │ Commit f - after g
-●─│─│─│─│─╯ Commit 0 - merge h and i
+●─│─│─│─│─┤ Commit 0 - merge h and i
│ │ │ │ ● │ Commit g - after j
│ │ │ │ ● │ Commit j - after k
│ │ │ │ ● │ Commit k - after l
@@ -174,7 +174,7 @@ assert_equals stdout <<EOF
│ │ │ │ ●─╯ Commit i - after h
│ ● │ │ │ Commit d - after h
│ │ │ ● │ Commit r - after s
-●─┴─│─│─╯ Commit h - merge t and u
+●─┼─│─│─╯ Commit h - merge t and u
│ │ │ ● Commit s - after v
│ ● │ │ Commit u - after t
│ │ │ │ ● Commit w - after x
diff --git a/test/graph/10-shorter-merge-than-branch-test b/test/graph/10-shorter-merge-than-branch-test
index ba4c1b25..10771944 100755
--- a/test/graph/10-shorter-merge-than-branch-test
+++ b/test/graph/10-shorter-merge-than-branch-test
@@ -37,7 +37,7 @@ assert_equals stdout <<EOF
│ │ │ ● │ │ Commit D - after K
│ │ │ │ │ ● Commit E - after F
│ ●─│─╯ │ │ Commit K - after F
-│ ●─│─╭─╯─╯ Commit F - merge G and H
+│ ●─│─╭─╯─┤ Commit F - merge G and H
│ ● │ │ ╭─╯ Commit G - after I
●─│─┴─│─╯ Commit H - after I
◎─┴───╯ Commit I
diff --git a/test/graph/11-new-branch-in-middle-test b/test/graph/11-new-branch-in-middle-test
index 4671ad5a..c2ee7d7d 100755
--- a/test/graph/11-new-branch-in-middle-test
+++ b/test/graph/11-new-branch-in-middle-test
@@ -16,7 +16,7 @@ commit E Z
commit F G I
Commit F - merge G and I
commit G H I
- Commit F - merge H and I
+ Commit G - merge H and I
commit H I
Commit H - after I
commit I Z
@@ -30,8 +30,8 @@ assert_equals stdout <<EOF
● │ │ Commit B - after F
│ ● │ Commit C - after F
│ │ ● Commit E - after Z
-●─╯ │ Commit F - merge G and I
-●─│─│─╮ Commit F - merge H and I
+●─┤ │ Commit F - merge G and I
+●─│─│─╮ Commit G - merge H and I
● │ │ │ Commit H - after I
●─┴─│─╯ Commit I - after Z
◎───╯ Commit Z
diff --git a/test/graph/15-many-merges-test b/test/graph/15-many-merges-test
index c7437b05..734d5e55 100755
--- a/test/graph/15-many-merges-test
+++ b/test/graph/15-many-merges-test
@@ -45,31 +45,6 @@ commit U V
Commit U after V
commit V W
Commit V after W
-* b132970 (HEAD) Merge pull request #22 in COM/compliance_checks from feature/6963/fireeye to master
-|\
-| * a300155 (origin/feature/6963/fireeye, feature/6963/fireeye) When no lines found for info report, say so
-* | acdad90 Merge pull request #21 in COM/compliance_checks from feature/6963/fireeye to master
-|\ \
-| |/
-| * 27ea95d Reduce output lines on failure and improve status messages
-* | 1c4f527 Merge pull request #10 in COM/compliance_checks from feature/6963/fireeye to master
-|\ \
-| |/
-| * bcad23b Merge branch 'master' into feature/6963/fireeye
-| |\
-| |/
-|/|
-* | 4d124b1 Merge pull request #19 in COM/compliance_checks from pa_typo to master
-|\ \
-| * | 6648aeb fix typo
-* | | 8bba33d Merge pull request #20 in COM/compliance_checks from 2012typo to master
-|\ \ \
-| |/ /
-|/| |
-| * | 0b7d81c fixed typo
-* | | 04d6735 Merge pull request #18 in COM/compliance_checks from procurve_naid to master
-|\ \ \
-| * | | d6c83d9 Cleaned up the reference field indentation.
EOF
assert_equals stdout <<EOF
@@ -78,18 +53,18 @@ assert_equals stdout <<EOF
●─│─╮ Commit N - Merge M into L
│ ●─╯ Commit M after K
●─│─╮ Commit L - Merge K into J
-│ ●─╯ Commit K - Merge J into E
+│ ●─┤ Commit K - Merge J into E
●─│─╯ Commit J - Merge F into I
●─│─│─╮ Commit I - Merge H into C
│ │ │ ● Commit H after G
│ │ ● │ Commit F after C
│ ● │ │ Commit E after D
-●─│─╯ │ Commit C - Merge B into A
+●─│─┤ │ Commit C - Merge B into A
│ ● │ │ Commit D after Q
│ │ ● │ Commit B after R
│ │ ● │ Commit R after A
│ ● │ │ Commit Q after X
-●─│─╯ │ Commit A - Merge T into S
+●─│─┤ │ Commit A - Merge T into S
│ │ ● │ Commit T after U
│ │ ● │ Commit U after V
│ │ ● │ Commit V after W
diff --git a/test/graph/17-more-merges-test b/test/graph/17-more-merges-test
index 0a3226ae..801b3c2a 100755
--- a/test/graph/17-more-merges-test
+++ b/test/graph/17-more-merges-test
@@ -84,7 +84,7 @@ assert_equals stdout <<EOF
│ │ ● │ Commit D - after B
│ ● │ │ Commit C - after F
│ │ │ ● Commit E - after H
-●─│─╯ │ Commit B - merge H and F
+●─│─┤ │ Commit B - merge H and F
│ ●─╯ │ Commit F - after G
│ ● ╭─╯ Commit G - after H
●─┴─╯ Commit H - after I
@@ -109,7 +109,7 @@ assert_equals stdout <<EOF
●─│───╯ Commit U - after 3
●─│─┬─╮ Commit 3 - merge 4, 5, and 8
●─│─│─│─╮ Commit 4 - merge 6 and 5
-│ │ ●─│─╯ Commit 5 - merge 7 and 9
+│ │ ●─│─┤ Commit 5 - merge 7 and 9
●─│─│─│─│─╮ Commit 6 - merge A and 9
◎ │ │ │ │ │ Commit A
◎─╯ │ │ │ │ Commit L
diff --git a/test/graph/18-tig-test b/test/graph/18-tig-test
index 30d8eb05..aed4fad4 100755
--- a/test/graph/18-tig-test
+++ b/test/graph/18-tig-test
@@ -21,18 +21,6 @@ commit c b
Remove enforced diff move/copy detection
commit b a
Optionally show commit IDs for branches and tree entries
-* d10dcd8 (HEAD) Do not include merges in the announcement's change log
-* 7cdab00 Merge pull request #81 from esc/fix/reading_git_colors_256
-|\
-| * 54e8c4d fix: reading git colors in rang 0 255
-* | 7368b5b Merge pull request #80 from esc/fix/option_name_mismatch
-|\ \
-| * | 0431cd2 fix: the manpage says 'read-git-colors'
-| |/
-* | 82458a4 Reenable copy/rename detection in the status view
-|/
-* 6d276a6 Remove enforced diff move/copy detection
-* c5aaa84 Optionally show commit IDs for branches and tree entries
EOF
assert_equals stdout <<EOF
diff --git a/test/graph/20-tig-all-long-test b/test/graph/20-tig-all-long-test
index af3482bf..c4bf5e59 100755
--- a/test/graph/20-tig-all-long-test
+++ b/test/graph/20-tig-all-long-test
@@ -742,10 +742,10 @@ assert_equals stdout <<EOF
● │ Fix mistake in tigrc: line-graphic expects utf8, not utf-8
●─│─╮ Merge pull request #37 from v0n/abbrev_commit_hash
│ │ ● string_copy_rev: chop rev on first space (if any)
-●─│─╯ Merge pull request #36 from tsibley/reload-diff-view-on-toggle
+●─│─┤ Merge pull request #36 from tsibley/reload-diff-view-on-toggle
│ │ ● Reload the view on a diff-like option change
│ │ ● Doc typo
-●─│─╯ Merge pull request #34 from tsibley/combined-diff-coloring
+●─│─┤ Merge pull request #34 from tsibley/combined-diff-coloring
│ │ ● [GH #32] Only color +/- in the second column when in a combined diff
●─│─╯ Only reload the view after changing diff options for diff-like views
● │ Document how to submit bugs
diff --git a/test/graph/regression/horizontal-artifact-test b/test/graph/regression/horizontal-artifact-test
new file mode 100755
index 00000000..5902a549
--- /dev/null
+++ b/test/graph/regression/horizontal-artifact-test
@@ -0,0 +1,41 @@
+#!/bin/sh
+#
+# Graph test: regression test for "─╭" instead of " ╭"
+
+. libtest.sh
+
+test_graph <<EOF
+commit A3 A1 A2
+ Commit A3 - merge A1 and A2
+commit B2 A1 B1
+ Commit B2 - merge A1 and B1
+commit C2 A1 C1
+ Commit C2 - merge A1 and C1
+commit A1 R
+ Commit A1 - after R
+commit D2 R D1
+ Commit D2 - merge R and D1
+commit D1 R
+ Commit D1 - after R
+commit A2 R
+ Commit A2 - after R
+commit B1 R
+ Commit B1 - after R
+commit C1 R
+ Commit C1 - after R
+commit R
+ Commit R
+EOF
+
+assert_equals stdout <<EOF
+●─╮ Commit A3 - merge A1 and A2
+│ │ ●─╮ Commit B2 - merge A1 and B1
+│ │ │ │ ●─╮ Commit C2 - merge A1 and C1
+●─│─┴─│─╯ │ Commit A1 - after R
+│ │ ╭─╯ ╭─╯ ●─╮ Commit D2 - merge R and D1
+│ │ │ ╭─╯ ╭─╯ ● Commit D1 - after R
+│ ● │ │ ╭─╯ ╭─╯ Commit A2 - after R
+│ │ ● │ │ ╭─╯ Commit B1 - after R
+│ │ │ ● │ │ Commit C1 - after R
+◎─┴─┴─┴─┴─╯ Commit R
+EOF
diff --git a/test/graph/regression/horizontal-bar-wrong-2-test b/test/graph/regression/horizontal-bar-wrong-2-test
new file mode 100755
index 00000000..8fdeaf30
--- /dev/null
+++ b/test/graph/regression/horizontal-bar-wrong-2-test
@@ -0,0 +1,41 @@
+#!/bin/sh
+#
+# Graph test: regression test for "─┬" instead of "──"
+
+. libtest.sh
+
+test_graph <<EOF
+commit A4 A3
+ Commit A4 - after A3
+commit B A3
+ Commit B - after A3
+commit C A3
+ Commit C - after A3
+commit D A2
+ Commit D - after A2
+commit E A2
+ Commit E - after A2
+commit A3 A2
+ Commit A3 - after A2
+commit A2 A1 F
+ Commit A2 - merge A1 and F
+commit F R
+ Commit F - after R
+commit A1 R
+ Commit A1 - after R
+commit R
+ Commit R
+EOF
+
+assert_equals stdout <<EOF
+● Commit A4 - after A3
+│ ● Commit B - after A3
+│ │ ● Commit C - after A3
+│ │ │ ● Commit D - after A2
+│ │ │ │ ● Commit E - after A2
+●─┴─╯ │ │ Commit A3 - after A2
+●─┬───┴─╯ Commit A2 - merge A1 and F
+│ ● Commit F - after R
+● │ Commit A1 - after R
+◎─╯ Commit R
+EOF