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
} else
								folder.createLink(createRelativePath(
										source.getLocationURI(), relativeToVariable, folder),
										0, new SubProgressMonitor(monitor, 1));
						}
						resourcesAtDestination.add(getWorkspace().getRoot()
								.findMember(destinationPath));
						for (int j = 0; j < deleted.length; j++) {
							overwrittenResources.add(deleted[j]);
						}
					} else {
						if (source.isLinked() == existing.isLinked()) {
							overwrittenResources.add(copyOverExistingResource(
									source, existing, new SubProgressMonitor(
											monitor, 1), uiInfo, false));
							
							resourcesAtDestination.add(existing);
						} else {
							
							
							
							ResourceDescription[] deleted = delete(
									new IResource[] { existing },
									new SubProgressMonitor(monitor, 0), uiInfo,
									false);
							source.copy(destinationPath, IResource.SHALLOW,
									new SubProgressMonitor(monitor, 1));
							
							resourcesAtDestination.add(getWorkspace().getRoot()
									.findMember(destinationPath));