package jetbrains.mps.vcs.core.mergedriver;
/*Generated by MPS */
import org.jetbrains.annotations.Nullable;
import jetbrains.mps.baseLanguage.tuples.runtime.Tuples;
import org.tmatesoft.svn.core.wc.SVNDiffOptions;
import org.tmatesoft.svn.core.internal.wc.FSMergerBySequence;
import de.regnis.q.sequence.line.QSequenceLineRAData;
import de.regnis.q.sequence.line.QSequenceLineRAByteData;
import java.io.ByteArrayOutputStream;
import org.tmatesoft.svn.core.internal.wc.SVNDiffConflictChoiceStyle;
import jetbrains.mps.baseLanguage.tuples.runtime.MultiTuple;
import java.io.IOException;
/*package*/ class TextMerger extends AbstractContentMerger {
public TextMerger() {
}
@Nullable
@Override
public Tuples._2<Integer, byte[]> mergeContents(FileContent baseContent, FileContent localContent, FileContent latestContent) {
SVNDiffOptions diffOptions = null;
FSMergerBySequence merger = new FSMergerBySequence(myConflictStart, mySeparator, myConflictEnd);
QSequenceLineRAData baseData = new QSequenceLineRAByteData(baseContent.getData());
QSequenceLineRAData localData = new QSequenceLineRAByteData(localContent.getData());
QSequenceLineRAData latestData = new QSequenceLineRAByteData(latestContent.getData());
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
int mergeResult = merger.merge(baseData, localData, latestData, diffOptions, out, SVNDiffConflictChoiceStyle.CHOOSE_MODIFIED_LATEST);
return MultiTuple.<Integer,byte[]>from((mergeResult == FSMergerBySequence.CONFLICTED ? CONFLICTS : MERGED), out.toByteArray());
} catch (IOException e) {
return null;
}
}
}