From 1f7ff4789115be952d3b662aa53ec0dabda237e7 Mon Sep 17 00:00:00 2001 From: Thomas Wolf Date: Sun, 8 Sep 2019 16:54:26 +0200 Subject: Fix saving in the merge editor Somehow the local file elements in the GitMergeEditorInput got flushed only, but not saved. Add a listener that saves the item when flushed. Bug: 550870 Change-Id: Ifcb22182baa85007de20f3e7cf0d375959c79593 Signed-off-by: Thomas Wolf --- .../ui/internal/merge/GitMergeEditorInput.java | 49 ++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/merge/GitMergeEditorInput.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/merge/GitMergeEditorInput.java index 887f52da4a..e57e0cdc81 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/merge/GitMergeEditorInput.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/merge/GitMergeEditorInput.java @@ -71,6 +71,8 @@ import org.eclipse.osgi.util.NLS; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import org.eclipse.team.core.history.IFileRevision; +import org.eclipse.team.internal.ui.synchronize.EditableSharedDocumentAdapter.ISharedDocumentAdapterListener; +import org.eclipse.team.internal.ui.synchronize.LocalResourceTypedElement; import org.eclipse.team.ui.synchronize.SaveableCompareEditorInput; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; @@ -79,6 +81,7 @@ import org.eclipse.ui.ide.IDE.SharedImages; /** * A Git-specific {@link CompareEditorInput} */ +@SuppressWarnings("restriction") public class GitMergeEditorInput extends CompareEditorInput { private static final String LABELPATTERN = "{0} - {1}"; //$NON-NLS-1$ @@ -374,6 +377,12 @@ public class GitMergeEditorInput extends CompareEditorInput { left = new LocalNonWorkspaceTypedElement(repository, location); } + if (left instanceof LocalResourceTypedElement) { + ((LocalResourceTypedElement) left) + .setSharedDocumentListener( + new LocalResourceSaver( + (LocalResourceTypedElement) left)); + } } else { rev = GitFileRevision.inIndex(repository, gitPath, DirCacheEntry.STAGE_2); @@ -488,4 +497,44 @@ public class GitMergeEditorInput extends CompareEditorInput { public boolean canRunAsJob() { return true; } + + private static class LocalResourceSaver + implements ISharedDocumentAdapterListener { + + LocalResourceTypedElement element; + + public LocalResourceSaver(LocalResourceTypedElement element) { + this.element = element; + } + + @Override + public void handleDocumentConnected() { + // Nothing + } + + @Override + public void handleDocumentDisconnected() { + // Nothing + } + + @Override + public void handleDocumentFlushed() { + try { + element.saveDocument(true, null); + } catch (CoreException e) { + Activator.handleStatus(e.getStatus(), true); + } + } + + @Override + public void handleDocumentDeleted() { + // Nothing + } + + @Override + public void handleDocumentSaved() { + // Nothing + } + + } } -- cgit v1.2.3