From ec959ebbed53df2e4aaf3d971ee33b1c5e1b943c Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Mon, 27 Jan 2020 23:28:13 +0100 Subject: [PATCH] Add a helper file to resolve merge conflicts I'm not sure how to integrate this into our merging code. --- lib/utils/merge_conflict_resolver.dart | 36 ++++++++++++++++++++++++++ test/merge_conflcts_resolver_test.dart | 35 +++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 lib/utils/merge_conflict_resolver.dart create mode 100644 test/merge_conflcts_resolver_test.dart diff --git a/lib/utils/merge_conflict_resolver.dart b/lib/utils/merge_conflict_resolver.dart new file mode 100644 index 00000000..6976b269 --- /dev/null +++ b/lib/utils/merge_conflict_resolver.dart @@ -0,0 +1,36 @@ +import 'dart:convert'; + +String resolveMergeConflict(String fileContents) { + var lines = const LineSplitter().convert(fileContents); + var newLines = []; + + var inMergeConflict = false; + var seenStartMarker = false; + var seenMiddleMarker = false; + + lines.forEach((line) { + if (line.startsWith("<<<<<<<") && !inMergeConflict) { + inMergeConflict = true; + seenStartMarker = true; + return; + } + if (line == "=======" && inMergeConflict && seenStartMarker) { + seenMiddleMarker = true; + return; + } + if (line.startsWith(">>>>>>>") && inMergeConflict && seenMiddleMarker) { + inMergeConflict = false; + seenStartMarker = false; + seenMiddleMarker = false; + return; + } + + if (inMergeConflict && seenMiddleMarker) { + return; + } + + newLines.add(line); + }); + + return newLines.join('\n'); +} diff --git a/test/merge_conflcts_resolver_test.dart b/test/merge_conflcts_resolver_test.dart new file mode 100644 index 00000000..5fae17ef --- /dev/null +++ b/test/merge_conflcts_resolver_test.dart @@ -0,0 +1,35 @@ +import 'package:test/test.dart'; +import 'package:gitjournal/utils/merge_conflict_resolver.dart'; + +void main() { + test("Body only conflict", () { + String input = '''--- +title: Foo +--- + +<<<<<<< HEAD +This is the body in GitJournal +======= +This is the body from the remote/origin +>>>>>>> remote/origin + +Some more text.'''; + + String expectedOutput = '''--- +title: Foo +--- + +This is the body in GitJournal + +Some more text.'''; + + expect(resolveMergeConflict(input), equals(expectedOutput)); + }); + + /* + test("YAML Conflict", () {}); + test("YAML Conflict from 1st line", () {}); + test("YAML Conflict different modified", () {}); + test("YAML and body conflict", () {}); + */ +}