Bug 267173 [Linked Resources] Data loss when replacing one linked resource with another using drag and drop
Build ID: HEAD Steps To Reproduce: I've got a Group with some links to folders. If I drag and drop a linked folder from another workspace path, into the group, I get the dialog saying: "project/group/linked_folder" already exists. Do you wish to overwrite? Folder contents will be merged existing files will be overwritten. In my case I had selected a bunch of linked resources to drag into the group, (some of which are identical to the links already in the group). So I pressed "Yes To All". The result is an error: "Resource is out of sync with the filesystem: ..." The move operation has actually tried to replace a file with itself, and this fails (and the resulting file is empty...). I find this completely counter-intuitive. If I'm replacing a linked resource with another, I don't want a recursive merge. I want to replace the link, just like aliases in a filesystem...
bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/WorkspaceUndoUtil.java
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
import org.eclipse.ui.internal.ide.undo.ContainerDescription;
import org.eclipse.ui.internal.ide.undo.FileDescription;
import org.eclipse.ui.internal.ide.undo.UndoMessages;
/**
 * WorkspaceUndoUtil defines common utility methods and constants used by
 * clients who create undoable workspace operations.
 * 
 * @since 3.3
 * 
 */
public class WorkspaceUndoUtil {