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);
}