Fix fo problem when merging conflicts
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/UpdateMergableOnly.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/UpdateMergableOnly.java
index 7abf169..407cfd3 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/UpdateMergableOnly.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/UpdateMergableOnly.java
@@ -51,7 +51,7 @@
 				adjustedFileName = ".##" + adjustedFileName;
 				skippedFiles.add(((IContainer)mParent.getIResource()).getFile(new Path(fileName)));
 			}
-			return super.getTargetFile(mParent, fileName, entryBytes);
+			return super.getTargetFile(mParent, adjustedFileName, entryBytes);
 		}
 		
 		/* (non-Javadoc)
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/UpdateListener.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/UpdateListener.java
index bb2801f..0a510ca 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/UpdateListener.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/UpdateListener.java
@@ -93,6 +93,8 @@
 	 *    cvs server: nothing known about ...
 	 * Tag error that really means there are no files in a directory
 	 *    cvs [server aborted]: no such tag
+	 * Merge contained conflicts
+	 *    rcsmerge: warning: conflicts during merge
 	 */
 	public IStatus errorLine(String line, ICVSRepositoryLocation location, ICVSFolder commandRoot,
 		IProgressMonitor monitor) {
@@ -174,6 +176,9 @@
 				} else {
 					return super.errorLine(line, location, commandRoot, monitor);
 				}
+			} else if (line.equals("rcsmerge: warning: conflicts during merge")) {
+				// There were conflicts in the merge
+				return new CVSStatus(CVSStatus.WARNING, CVSStatus.CONFLICT, commandRoot, line);
 			}
 		}
 		return super.errorLine(line, location, commandRoot, monitor);
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java
index 04d4286..3305c64 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java
@@ -179,7 +179,14 @@
 	 */
 	public void copyTo(String filename) throws CVSException {
 		try {
-			getIFile().copy(new Path(filename), true /*force*/, null);
+			IPath targetPath = new Path(filename);
+			IFile targetFile = getIFile().getParent().getFile(targetPath);
+			if (targetFile.exists()) {
+				// There is a file in the target location. 
+				// Delete it and keep the history just in case
+				targetFile.delete(false /* force */, true /* keep history */, null);
+			}
+			getIFile().copy(targetPath, true /*force*/, null);
 		} catch(CoreException e) {
 			throw new CVSException(e.getStatus());
 		}
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/UpdateOnlyMergableOperation.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/UpdateOnlyMergableOperation.java
index 71f3f5d..efd7400 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/UpdateOnlyMergableOperation.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/operations/UpdateOnlyMergableOperation.java
@@ -69,7 +69,7 @@
 						getCVSArguments(resources),
 						null, 
 						monitor);
-					if (status.isOK()) {
+					if (status.getCode() != IStatus.ERROR) {
 						addSkippedFiles(update.getSkippedFiles());
 					} else {
 						addError(status);
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/MergeUpdateAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/MergeUpdateAction.java
index 297d370..b9b172d 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/MergeUpdateAction.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/MergeUpdateAction.java
@@ -74,7 +74,7 @@
 			// It is possible that some of the conflicting changes were not auto-mergable
 			SyncResourceSet failedSet = createFailedSet(syncSet, willFail, (IFile[]) skippedFiles.toArray(new IFile[skippedFiles.size()]));
 			if (failedSet.isEmpty()) return;
-			promptForOverwrite(failedSet);
+			if (!promptForOverwrite(failedSet)) return;
 			runOverwrite(failedSet.getSyncResources(), Policy.subMonitorFor(monitor, willFail.length * 100));
 		} finally {
 			monitor.done();
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/AllTestsTeamSubscriber.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/AllTestsTeamSubscriber.java
index a950979..d84295e 100644
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/AllTestsTeamSubscriber.java
+++ b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/AllTestsTeamSubscriber.java
@@ -26,7 +26,7 @@
 
 	public static Test suite() {
 		TestSuite suite = new TestSuite();
-		//suite.addTest(CVSMergeSubscriberTest.suite());
+		suite.addTest(CVSMergeSubscriberTest.suite());
 		suite.addTest(CVSWorkspaceSubscriberTest.suite());
 		return new CVSTestSetup(suite);
 	}