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); } }