package jetbrains.mps.vcs; /*Generated by MPS */ import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import jetbrains.mps.tool.environment.Environment; import com.intellij.openapi.Disposable; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.mock.MockProjectEx; import jetbrains.mps.project.MPSProject; import jetbrains.mps.ide.bookmark.BookmarkManager; import jetbrains.mps.project.StandaloneMPSProject; import org.jdom.JDOMException; import java.io.IOException; import jetbrains.mps.smodel.persistence.def.ModelReadException; import java.util.Scanner; import jetbrains.mps.tool.environment.IdeaEnvironment; import jetbrains.mps.tool.environment.EnvironmentConfig; import com.intellij.openapi.util.IconLoader; import jetbrains.mps.vcs.platform.util.MergeBackupUtil; import java.io.File; import jetbrains.mps.vcs.util.MergeVersion; import jetbrains.mps.project.MPSExtentions; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; import jetbrains.mps.ide.vfs.VirtualFileUtils; import java.util.List; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import com.intellij.diff.merge.MergeRequest; import com.intellij.diff.DiffRequestFactory; import jetbrains.mps.fileTypes.MPSFileTypeFactory; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.diff.DiffManager; import com.intellij.diff.InvalidDiffRequestException; import org.apache.log4j.Level; /** * Class for analyzing merge driver dumps */ public class TestMergeDialog { private static final Logger LOG = LogManager.getLogger(TestMergeDialog.class); private static Environment ENV; private static Disposable myParentDisposable = Disposer.newDisposable(); private static Object ___init = new Object() { { Extensions.registerAreaClass("IDEA_PROJECT", null); } }; private static Project ourProject = new MockProjectEx(TestMergeDialog.myParentDisposable) { @Override public <T> T getComponent(Class<T> interfaceClass) { if (interfaceClass == MPSProject.class) { return (T) TestMergeDialog.ourMPSProject; } if (interfaceClass == BookmarkManager.class) { return (T) new BookmarkManager(TestMergeDialog.ourMPSProject, null); } return null; } }; private static MPSProject ourMPSProject = new StandaloneMPSProject(TestMergeDialog.ourProject, null, null); public TestMergeDialog() { } public static void main(String[] args) throws JDOMException, IOException, ModelReadException { if (args.length == 0) { System.out.print("Input path to model zip: "); String line = new Scanner(System.in).nextLine(); args = new String[]{((line == null ? null : line.trim()))}; } TestMergeDialog.ENV = IdeaEnvironment.getOrCreate(EnvironmentConfig.defaultConfig()); IconLoader.activate(); final String[] models = new String[3]; String resultFile; if (args.length == 2 || args.length == 1) { final String[] zipped = MergeBackupUtil.loadZippedModelsAsText(new File(args[0]), new MergeVersion[]{MergeVersion.BASE, MergeVersion.MINE, MergeVersion.REPOSITORY}); models[0] = zipped[0]; models[1] = zipped[1]; models[2] = zipped[2]; if (args.length == 1) { resultFile = File.createTempFile("mpstmd", MPSExtentions.DOT_MODEL).getAbsolutePath(); } else { resultFile = args[1]; } } else if (args.length == 4 || args.length == 3) { models[0] = FileUtil.loadFile(new File(args[0])); models[1] = FileUtil.loadFile(new File(args[1])); models[2] = FileUtil.loadFile(new File(args[2])); if (args.length == 3) { resultFile = File.createTempFile("", MPSExtentions.DOT_MODEL).getAbsolutePath(); } else { resultFile = args[3]; } } else { System.err.println("There must be 1-4 parameters"); return; } VirtualFile resFile = VirtualFileUtils.getVirtualFile(resultFile); List<String> contents = ListSequence.fromListAndArray(new ArrayList<String>(), models); List<String> titles = ListSequence.fromListAndArray(new ArrayList<String>(), "Local Version", "Merge Result", "Remote Version"); try { MergeRequest request = DiffRequestFactory.getInstance().createMergeRequest(ourProject, MPSFileTypeFactory.MPS_FILE_TYPE, FileDocumentManager.getInstance().getDocument(resFile), contents, "Merge files and save result to " + resultFile, titles, null); DiffManager.getInstance().showMerge(ourProject, request); } catch (InvalidDiffRequestException e) { if (LOG.isEnabledFor(Level.ERROR)) { LOG.error("", e); } } } }