10871: RemoveEntryHandler fails on delete+rename to deleted+release
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/OrphanedFolderListener.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/OrphanedFolderListener.java
index d2fe073..93407ed 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/OrphanedFolderListener.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/OrphanedFolderListener.java
@@ -13,6 +13,8 @@
 import org.eclipse.team.ccvs.core.ICVSFile;
 import org.eclipse.team.ccvs.core.ICVSFolder;
 import org.eclipse.team.internal.ccvs.core.CVSException;
+import org.eclipse.team.internal.ccvs.core.Policy;
+import org.eclipse.team.internal.ccvs.core.client.Session;
 import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
 import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
 
@@ -56,11 +58,35 @@
 	}
 	
 	/*
+	 * Handle the case where an added file has the same name as a "cvs removed" file
+	 * by restoring the sync info to what it was before the delete
+	 */
+	private void handleReplacedDeletion(IResource resource) {
+		if (resource.getType() == IResource.FILE) {
+			try {
+				ICVSFile mFile = CVSWorkspaceRoot.getCVSFileFor((IFile)resource);
+				if (mFile.isManaged()) {
+					ResourceSyncInfo info = mFile.getSyncInfo();
+					if (info.isDeleted()) {
+						mFile.setSyncInfo(new ResourceSyncInfo(info.getName(), info.getRevision(), info.getTimeStamp(), info.getKeywordMode(), info.getTag(), info.getPermissions()));
+					}
+				}
+			} catch (CVSException e) {
+				CVSProviderPlugin.log(e);
+			}
+		}
+	}
+	
+	/*
 	 * @see ResourceDeltaVisitor#handleAdded(IResource[])
 	 */
 	protected void handleAdded(IResource[] resources) {
 		for (int i = 0; i < resources.length; i++) {
-			handleOrphanedSubtree(resources[i]);
+			if (resources[i].getType() == IResource.FOLDER) {
+				handleOrphanedSubtree(resources[i]);
+			} else if (resources[i].getType() == IResource.FILE) {
+				handleReplacedDeletion(resources[i]);
+			}
 		}
 	}