package jetbrains.mps.vcs.core.mergedriver;
/*Generated by MPS */
import java.io.File;
import java.io.OutputStream;
import jetbrains.mps.baseLanguage.tuples.runtime.Tuples;
import jetbrains.mps.baseLanguage.tuples.runtime.MultiTuple;
import java.io.FileOutputStream;
import java.io.IOException;
import jetbrains.mps.util.FileUtil;
public class FileMerger {
private FileMerger() {
}
public static int mergeFiles(AbstractContentMerger contentMerger, File baseFile, File localFile, File latestFile, byte[] conflictStart, byte[] conflictEnd, byte[] separator, boolean overwrite, boolean convertCRLF) {
contentMerger.setConflictMarks(conflictStart, conflictEnd, separator);
OutputStream out = null;
try {
FileContent baseContent = new FileContent(baseFile);
FileContent localContent = new FileContent(localFile);
FileContent latestContent = new FileContent(latestFile);
Tuples._2<Integer, byte[]> mergeResult = contentMerger.mergeContents(baseContent, localContent, latestContent);
if (mergeResult == null) {
mergeResult = MultiTuple.<Integer,byte[]>from(AbstractContentMerger.FATAL_ERROR, localContent.getData());
}
out = (overwrite ? new FileOutputStream(localFile) : System.out);
out.write((convertCRLF ? convert(mergeResult._1()) : mergeResult._1()));
return (int) mergeResult._0();
} catch (IOException e) {
e.printStackTrace();
return AbstractContentMerger.FATAL_ERROR;
} finally {
FileUtil.closeFileSafe(out);
}
}
public static byte[] convert(byte[] array) {
return new String(array, FileUtil.DEFAULT_CHARSET).replace("\r\n", "\n").getBytes(FileUtil.DEFAULT_CHARSET);
}
}