patch ModelGitMergeEditorInput for EGit 5.3.0 compatibility
This applies the same patch as was done for bug 543495 to EMF
Compare's ModelGitMergeEditorInput.
Bug: 544761
Bug: 543495
Change-Id: I7f916e88a0200d8b552dd353c9278f0e619c800c
diff --git a/plugins/org.eclipse.emf.compare.egit.ui/src/org/eclipse/emf/compare/egit/ui/internal/merge/ModelGitMergeEditorInput.java b/plugins/org.eclipse.emf.compare.egit.ui/src/org/eclipse/emf/compare/egit/ui/internal/merge/ModelGitMergeEditorInput.java
index ed5352f..2c3ab1c 100644
--- a/plugins/org.eclipse.emf.compare.egit.ui/src/org/eclipse/emf/compare/egit/ui/internal/merge/ModelGitMergeEditorInput.java
+++ b/plugins/org.eclipse.emf.compare.egit.ui/src/org/eclipse/emf/compare/egit/ui/internal/merge/ModelGitMergeEditorInput.java
@@ -26,6 +26,7 @@
import org.eclipse.compare.CompareConfiguration;
import org.eclipse.compare.CompareEditorInput;
+import org.eclipse.compare.IResourceProvider;
import org.eclipse.compare.ITypedElement;
import org.eclipse.compare.structuremergeviewer.DiffNode;
import org.eclipse.compare.structuremergeviewer.Differencer;
@@ -51,7 +52,6 @@
import org.eclipse.egit.core.internal.indexdiff.IndexDiffData;
import org.eclipse.egit.core.internal.job.RuleUtil;
import org.eclipse.egit.core.internal.storage.GitFileRevision;
-import org.eclipse.egit.core.internal.storage.WorkingTreeFileRevision;
import org.eclipse.egit.core.internal.util.ResourceUtil;
import org.eclipse.egit.core.project.RepositoryMapping;
import org.eclipse.egit.ui.Activator;
@@ -60,9 +60,9 @@
import org.eclipse.egit.ui.internal.revision.EditableRevision;
import org.eclipse.egit.ui.internal.revision.FileRevisionTypedElement;
import org.eclipse.egit.ui.internal.revision.GitCompareFileRevisionEditorInput.EmptyTypedElement;
-import org.eclipse.egit.ui.internal.revision.LocalFileRevision;
import org.eclipse.egit.ui.internal.revision.LocationEditableRevision;
import org.eclipse.egit.ui.internal.revision.ResourceEditableRevision;
+import org.eclipse.egit.ui.internal.synchronize.compare.LocalNonWorkspaceTypedElement;
import org.eclipse.emf.compare.egit.internal.merge.DirCacheResourceVariantTreeProvider;
import org.eclipse.emf.compare.egit.internal.merge.GitResourceVariantTreeProvider;
import org.eclipse.emf.compare.egit.internal.merge.GitResourceVariantTreeSubscriber;
@@ -101,6 +101,7 @@
import org.eclipse.team.core.subscribers.SubscriberResourceMappingContext;
import org.eclipse.team.core.subscribers.SubscriberScopeManager;
import org.eclipse.team.ui.mapping.ISynchronizationCompareAdapter;
+import org.eclipse.team.ui.synchronize.SaveableCompareEditorInput;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE.SharedImages;
@@ -147,9 +148,9 @@
if (selectedEdition instanceof DiffNode) {
DiffNode diffNode = (DiffNode)selectedEdition;
ITypedElement element = diffNode.getLeft();
- if (element instanceof ResourceEditableRevision) {
- ResourceEditableRevision resourceRevision = (ResourceEditableRevision)element;
- return resourceRevision.getFile();
+ if (element instanceof IResourceProvider) {
+ IResource resource = ((IResourceProvider)element).getResource();
+ return resource;
}
}
}
@@ -590,39 +591,41 @@
continue;
}
+ ITypedElement left;
IFileRevision rev;
// if the file is not conflicting (as it was auto-merged)
// we will show the auto-merged (local) version
Path repositoryPath = new Path(repository.getWorkTree().getAbsolutePath());
IPath location = repositoryPath.append(fit.getEntryPathString());
+ assert location != null;
+
IFile file = ResourceUtil.getFileForLocation(location, false);
if (!conflicting || useWorkspace) {
if (file != null) {
- rev = new LocalFileRevision(file);
+ left = SaveableCompareEditorInput.createFileElement(file);
} else {
- rev = new WorkingTreeFileRevision(location.toFile());
+ left = new LocalNonWorkspaceTypedElement(repository, location);
}
} else {
rev = GitFileRevision.inIndex(repository, gitPath, DirCacheEntry.STAGE_2);
- }
- IRunnableContext runnableContext = getContainer();
- if (runnableContext == null) {
- runnableContext = PlatformUI.getWorkbench().getProgressService();
- }
-
- EditableRevision leftEditable;
- if (file != null) {
- leftEditable = new ResourceEditableRevision(rev, file, runnableContext);
- } else {
- leftEditable = new LocationEditableRevision(rev, location, runnableContext);
- }
- // make sure we don't need a round trip later
- try {
- leftEditable.cacheContents(monitor);
- } catch (CoreException e) {
- throw new IOException(e.getMessage());
+ IRunnableContext runnableContext = getContainer();
+ if (runnableContext == null) {
+ runnableContext = PlatformUI.getWorkbench().getProgressService();
+ assert runnableContext != null;
+ }
+ if (file != null) {
+ left = new ResourceEditableRevision(rev, file, runnableContext);
+ } else {
+ left = new LocationEditableRevision(rev, location, runnableContext);
+ }
+ // make sure we don't need a round trip later
+ try {
+ ((EditableRevision)left).cacheContents(monitor);
+ } catch (CoreException e) {
+ throw new IOException(e.getMessage());
+ }
}
int kind = Differencer.NO_CHANGE;
@@ -634,19 +637,17 @@
IDiffContainer fileParent = getFileParent(result, repositoryPath, file, location);
- ITypedElement anc;
+ ITypedElement ancestor = null;
if (ancestorCommit != null) {
- anc = CompareUtils.getFileRevisionTypedElement(gitPath, ancestorCommit, repository);
- } else {
- anc = null;
+ ancestor = CompareUtils.getFileRevisionTypedElement(gitPath, ancestorCommit, repository);
}
// we get an ugly black icon if we have an EmptyTypedElement
// instead of null
- if (anc instanceof EmptyTypedElement) {
- anc = null;
+ if (ancestor instanceof EmptyTypedElement) {
+ ancestor = null;
}
// create the node as child
- new DiffNode(fileParent, kind, anc, leftEditable, right);
+ new DiffNode(fileParent, kind, ancestor, left, right);
}
return result;
}