28170: [CVS Sync View] Dirty flag from CVS decorator does not go away
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Session.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Session.java
index a22d00b..c74f245 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Session.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Session.java
@@ -111,6 +111,9 @@
private Collection /* of ICVSFile */ textTransferOverrideSet = null;
private boolean hasBeenConnected = false;
private Map caseMappings;
+
+ // state need to indicate whether
+ private boolean ignoringLocalChanges = false;
// The resource bundle key that provides the file sending message
private String sendFileTitleKey;
@@ -1122,4 +1125,19 @@
}
return globalOptions;
}
+ /**
+ * Method setIgnoringLocalChanges.
+ * @param b
+ */
+ protected void setIgnoringLocalChanges(boolean b) {
+ ignoringLocalChanges = b;
+ }
+ /**
+ * Returns the ignoringLocalChanges.
+ * @return boolean
+ */
+ protected boolean isIgnoringLocalChanges() {
+ return ignoringLocalChanges;
+ }
+
}
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Update.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Update.java
index 7222d68..9971058 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Update.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Update.java
@@ -194,4 +194,31 @@
}
}
+ /**
+ * @see org.eclipse.team.internal.ccvs.core.client.Command#doExecute(org.eclipse.team.internal.ccvs.core.client.Session, org.eclipse.team.internal.ccvs.core.client.Command.GlobalOption, org.eclipse.team.internal.ccvs.core.client.Command.LocalOption, java.lang.String, org.eclipse.team.internal.ccvs.core.client.listeners.ICommandOutputListener, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ protected IStatus doExecute(
+ Session session,
+ GlobalOption[] globalOptions,
+ LocalOption[] localOptions,
+ String[] arguments,
+ ICommandOutputListener listener,
+ IProgressMonitor monitor)
+ throws CVSException {
+
+ session.setIgnoringLocalChanges(IGNORE_LOCAL_CHANGES.isElementOf(localOptions));
+ try {
+ return super.doExecute(
+ session,
+ globalOptions,
+ localOptions,
+ arguments,
+ listener,
+ monitor);
+ } finally {
+ session.setIgnoringLocalChanges(false);
+ }
+
+ }
+
}
\ No newline at end of file
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/UpdatedHandler.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/UpdatedHandler.java
index 763ca80..9da88b7 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/UpdatedHandler.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/UpdatedHandler.java
@@ -125,7 +125,7 @@
newInfoWithTimestamp.setTimeStamp(modTime);
if(handlerType==HANDLE_MERGED) {
newInfoWithTimestamp.setMerged();
- } else if(handlerType==HANDLE_UPDATE_EXISTING || handlerType==HANDLE_CREATED) {
+ } else if (!session.isIgnoringLocalChanges() && (handlerType==HANDLE_UPDATE_EXISTING || handlerType==HANDLE_CREATED)) {
// both these cases result in an unmodified file.
// reporting is handled by the FileModificationManager
newInfoWithTimestamp.reported();
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/IsModifiedTests.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/IsModifiedTests.java
index 6a1a4fa..909a644 100644
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/IsModifiedTests.java
+++ b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/IsModifiedTests.java
@@ -37,6 +37,7 @@
import org.eclipse.team.internal.ccvs.core.ICVSResourceVisitor;
import org.eclipse.team.internal.ccvs.core.IResourceStateChangeListener;
import org.eclipse.team.internal.ccvs.core.client.Command;
+import org.eclipse.team.internal.ccvs.core.client.Update;
import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
import org.eclipse.team.tests.ccvs.core.CVSTestSetup;
import org.eclipse.team.tests.ccvs.core.EclipseTest;
@@ -125,7 +126,7 @@
public static Test suite() {
TestSuite suite = new TestSuite(IsModifiedTests.class);
return new CVSTestSetup(suite);
- //return new CVSTestSetup(new IsModifiedTests("testFileAdditions"));
+ //return new CVSTestSetup(new IsModifiedTests("testUpdateIgnoreLocal"));
}
/**
@@ -506,6 +507,19 @@
// assertModificationState(project, null, false);
}
+ public void testUpdateIgnoreLocal() throws TeamException, CoreException, IOException {
+ // Create a test project, import it into cvs and check it out
+ IProject project = createProject("testUpdateIgnoreLocal", new String[] { "changed.txt", "merged.txt", "deleted.txt", "folder1/", "folder1/a.txt" });
+
+ // modifiy a file
+ setContentsAndEnsureModified(project.getFile("changed.txt"));
+ assertModificationState(project, new String[] {".", "changed.txt"}, true);
+
+ // peform un update -C
+ getProvider(project).update(new IResource[] {project}, new Command.LocalOption[] {Update.IGNORE_LOCAL_CHANGES}, null, true /*createBackups*/, DEFAULT_MONITOR);
+ assertModificationState(project, null, false);
+ }
+
public void testExternalModifications() {
}