diff --git a/Makefile b/Makefile
index 4a2ceb6..a517404 100644
--- a/Makefile
+++ b/Makefile
@@ -13,7 +13,7 @@ CMD = $(CURDIR)/grawkit
# Default executables to use.
SHELL = /bin/bash
-DIFF = $(shell which colordiff || which diff)
+DIFF = $(shell which colordiff 2> /dev/null || which diff)
# Test files to execute.
TESTS ?= $(shell find tests/*)
diff --git a/grawkit b/grawkit
index d5d40bd..51ae258 100755
--- a/grawkit
+++ b/grawkit
@@ -25,9 +25,9 @@ function add_branch(name) {
# Branches created before the first commit is established extend to the
# beginning of time.
if (state["HEAD"] != "") {
- branches[len["branches"],"merges"] = state["branch"] "|" state["HEAD"]
+ branches[len["branches"],"merges"] = state["branch"] "||" state["HEAD"]
} else {
- branches[len["branches"],"merges"] = len["branches"] "|0"
+ branches[len["branches"],"merges"] = len["branches"] "||0"
}
len["branches"] += 1
@@ -131,7 +131,7 @@ function render_label(idx, class, name, _, buf, tw, w, h, hspc, vspc) {
# > Function `render_merge` renders merge paths for a branch pointed to by `idx`.
function render_merge(idx, _, buf, tmp, refs, fields, m, i, hspc) {
# Do not render merge paths for branch with no commits.
- if (branches[idx,"merges"] == "") {
+ if (branches[idx,"refs"] == "") {
return
}
@@ -148,24 +148,15 @@ function render_merge(idx, _, buf, tmp, refs, fields, m, i, hspc) {
for (i in fields) {
split(fields[i], m, "|")
- if(length(m) == 2) {
- # this is actually added by "git branch" command
- # Add starting point to source branch ending point.
- tmp = "M" m[1] * style["branch/spacing"] "," m[2] * style["commit/spacing"]
+ # Add starting point to target branch ending point.
+ tmp = "M" m[1] * style["branch/spacing"] "," m[3] * style["commit/spacing"]
- # Add Bezier curve leading to target branch starting point.
- tmp = tmp " C" hspc "," m[2] * style["commit/spacing"]
- tmp = tmp " " hspc "," m[2] * style["commit/spacing"]
- tmp = tmp " " hspc "," refs[1] * style["commit/spacing"]
- } else {
- # Add starting point to target branch ending point.
- tmp = "M" m[1] * style["branch/spacing"] "," m[3] * style["commit/spacing"]
+ # Add Bezier curve leading to specific commit from source branch.
+ tmp = tmp " C" hspc "," m[3] * style["commit/spacing"]
+ tmp = tmp " " hspc "," m[3] * style["commit/spacing"]
- # Add Bezier curve leading to specific commit from source branch.
- tmp = tmp " C" hspc "," m[3] * style["commit/spacing"]
- tmp = tmp " " hspc "," m[3] * style["commit/spacing"]
- tmp = tmp " " hspc "," m[2] * style["commit/spacing"]
- }
+ # Set default starting point for merge to beginning of branch, if none is set.
+ tmp = tmp " " hspc "," ((m[2] == "") ? refs[1] : m[2]) * style["commit/spacing"]
# Draw the path.
buf = buf "\n\t\t" sprintf(svg["path"], tmp)
@@ -240,7 +231,7 @@ BEGIN {
# Branch definitions.
branches[0,"name"] = "master"
branches[0,"refs"] = ""
- branches[0,"merges"] = "0|0"
+ branches[0,"merges"] = "0||0"
branches[0,"tags"] = ""
len["branches"] = 1
@@ -352,9 +343,10 @@ $0 ~ rule["merge"] {
add_commit("merge", "Merge commit")
# Add merge reference from last commit in source branch to target branch.
- # branch|from-commit|to-commit
+ # Format: to-branch|from-commit|to-commit
split(branches[i,"refs"], refs, ",")
merge = state["branch"] "|" refs[length(refs)] "|" state["HEAD"]
+
if (branches[i,"merges"] == "") {
branches[i,"merges"] = merge
} else {
diff --git a/tests/01-initial.svg b/tests/01-initial.svg
index 176a0fc..c18a018 100644
--- a/tests/01-initial.svg
+++ b/tests/01-initial.svg
@@ -29,9 +29,5 @@
}
.branch-master {stroke: #002b36; fill: #002b36}
]]>
-
-
-
-
-
+
diff --git a/tests/05-multi-branch.svg b/tests/05-multi-branch.svg
index 735b1ac..9b5271a 100644
--- a/tests/05-multi-branch.svg
+++ b/tests/05-multi-branch.svg
@@ -62,7 +62,7 @@ git commit
-
+
diff --git a/tests/06-feature-branch.svg b/tests/06-feature-branch.svg
index f6a1787..45fcd12 100644
--- a/tests/06-feature-branch.svg
+++ b/tests/06-feature-branch.svg
@@ -66,14 +66,11 @@ git merge feature/ZZ-704_take-it-to-the-limit
-
+
-
-
-
diff --git a/tests/07-multi-merge.svg b/tests/07-multi-merge.svg
new file mode 100644
index 0000000..6e98fb6
--- /dev/null
+++ b/tests/07-multi-merge.svg
@@ -0,0 +1,95 @@
+
+
+