assertEquals(t("aZcYe"), merge("abcde", "aZcde", "abcYe"));
}
+ /**
+ * Test merging two contents which do one similar modification and one
+ * insertion is only done by one side. Between modification and insertion is
+ * a block which is common between the two contents and the common base
+ *
+ * @throws IOException
+ */
+ public void testTwoSimilarModsAndOneInsert() throws IOException {
+ assertEquals(t("IAAJ"), merge("iA", "IA", "IAAJ"));
+ assertEquals(t("aBcDde"), merge("abcde", "aBcde", "aBcDde"));
+ assertEquals(t("IAJ"), merge("iA", "IA", "IAJ"));
+ assertEquals(t("IAAAJ"), merge("iA", "IA", "IAAAJ"));
+ assertEquals(t("IAAAJCAB"), merge("iACAB", "IACAB", "IAAAJCAB"));
+ assertEquals(t("HIAAAJCAB"), merge("HiACAB", "HIACAB", "HIAAAJCAB"));
+ assertEquals(t("AGADEFHIAAAJCAB"),
+ merge("AGADEFHiACAB", "AGADEFHIACAB", "AGADEFHIAAAJCAB"));
+
+ }
+
private String merge(String commonBase, String ours, String theirs) throws IOException {
MergeResult r = new MergeAlgorithm().merge(RawTextComparator.DEFAULT,
T(commonBase), T(ours), T(theirs));
import org.eclipse.jgit.diff.DiffAlgorithm;
import org.eclipse.jgit.diff.Edit;
import org.eclipse.jgit.diff.EditList;
-import org.eclipse.jgit.diff.MyersDiff;
+import org.eclipse.jgit.diff.HistogramDiff;
import org.eclipse.jgit.diff.Sequence;
import org.eclipse.jgit.diff.SequenceComparator;
import org.eclipse.jgit.merge.MergeChunk.ConflictState;
/**
* Provides the merge algorithm which does a three-way merge on content provided
- * as RawText. By default {@link MyersDiff} is used as diff algorithm.
+ * as RawText. By default {@link HistogramDiff} is used as diff algorithm.
*/
public final class MergeAlgorithm {
private final DiffAlgorithm diffAlg;
/**
- * Creates a new MergeAlgorithm which uses {@link MyersDiff} as diff
+ * Creates a new MergeAlgorithm which uses {@link HistogramDiff} as diff
* algorithm
*/
public MergeAlgorithm() {
- this(MyersDiff.INSTANCE);
+ this(new HistogramDiff());
}
/**