summaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorHarrison Jones <harrison@hhj.me>2021-05-20 12:51:26 -0400
committerJesse Duffield <jessedduffield@gmail.com>2021-05-30 13:50:42 +1000
commite478c254d43495ecfa2dad55df1ca2d2726ff974 (patch)
treea5cadd2fa543dd5b4f94474bbbeff14e998139c5 /pkg
parent44f7fc6f7c03a8eeb18e22f3605a384516b31baa (diff)
Handle alternate merge conflict format; add tests
Diffstat (limited to 'pkg')
-rw-r--r--pkg/gui/mergeconflicts/state.go4
-rw-r--r--pkg/gui/mergeconflicts/state_test.go90
2 files changed, 94 insertions, 0 deletions
diff --git a/pkg/gui/mergeconflicts/state.go b/pkg/gui/mergeconflicts/state.go
index 17ac02a0b..383d71a36 100644
--- a/pkg/gui/mergeconflicts/state.go
+++ b/pkg/gui/mergeconflicts/state.go
@@ -104,6 +104,10 @@ func findConflicts(content string) []*mergeConflict {
case "=======":
newConflict.middle = i
default:
+ // Sometimes these lines look like "<<<<<<< HEAD:foo/bar/baz.go" so handle that case as well.
+ if strings.HasPrefix(trimmedLine, "<<<<<<< HEAD:") {
+ newConflict = &mergeConflict{start: i}
+ }
if strings.HasPrefix(trimmedLine, ">>>>>>> ") {
newConflict.end = i
conflicts = append(conflicts, newConflict)
diff --git a/pkg/gui/mergeconflicts/state_test.go b/pkg/gui/mergeconflicts/state_test.go
new file mode 100644
index 000000000..df2e077b4
--- /dev/null
+++ b/pkg/gui/mergeconflicts/state_test.go
@@ -0,0 +1,90 @@
+package mergeconflicts
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestFindConflicts(t *testing.T) {
+ type scenario struct {
+ name string
+ content string
+ expected []*mergeConflict
+ }
+
+ scenarios := []scenario{
+ {
+ name: "empty",
+ content: "",
+ expected: []*mergeConflict{},
+ },
+ {
+ name: "various conflicts",
+ content: `++<<<<<<< HEAD
+foo
+++=======
+bar
+++>>>>>>> branch
+
+<<<<<<< HEAD: foo/bar/baz.go
+foo
+bar
+=======
+baz
+>>>>>>> branch
+
+++<<<<<<< MERGE_HEAD
+foo
+++=======
+bar
+++>>>>>>> branch
+
+++<<<<<<< Updated upstream
+foo
+++=======
+bar
+++>>>>>>> branch
+
+++<<<<<<< ours
+foo
+++=======
+bar
+++>>>>>>> branch
+`,
+ expected: []*mergeConflict{
+ {
+ start: 0,
+ middle: 2,
+ end: 4,
+ },
+ {
+ start: 6,
+ middle: 9,
+ end: 11,
+ },
+ {
+ start: 13,
+ middle: 15,
+ end: 17,
+ },
+ {
+ start: 19,
+ middle: 21,
+ end: 23,
+ },
+ {
+ start: 25,
+ middle: 27,
+ end: 29,
+ },
+ },
+ },
+ }
+
+ for _, s := range scenarios {
+ t.Run(s.name, func(t *testing.T) {
+ assert.EqualValues(t, s.expected, findConflicts(s.content))
+ })
+ }
+}