Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/sync/CVSSyncCompareInput.java')
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/sync/CVSSyncCompareInput.java57
1 files changed, 51 insertions, 6 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/sync/CVSSyncCompareInput.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/sync/CVSSyncCompareInput.java
index 601470c6d..31812252a 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/sync/CVSSyncCompareInput.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/sync/CVSSyncCompareInput.java
@@ -7,12 +7,16 @@ package org.eclipse.team.internal.ccvs.ui.sync;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import org.eclipse.compare.structuremergeviewer.Differencer;
import org.eclipse.compare.structuremergeviewer.ICompareInput;
import org.eclipse.compare.structuremergeviewer.IDiffContainer;
import org.eclipse.compare.structuremergeviewer.IDiffElement;
+import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceVisitor;
@@ -26,11 +30,13 @@ import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.team.core.RepositoryProvider;
import org.eclipse.team.core.TeamException;
import org.eclipse.team.core.sync.ILocalSyncElement;
import org.eclipse.team.core.sync.IRemoteSyncElement;
import org.eclipse.team.internal.ccvs.core.CVSException;
import org.eclipse.team.internal.ccvs.core.ICVSFile;
+import org.eclipse.team.internal.ccvs.core.ICVSFolder;
import org.eclipse.team.internal.ccvs.core.ICVSRunnable;
import org.eclipse.team.internal.ccvs.core.client.Session;
import org.eclipse.team.internal.ccvs.core.resources.CVSRemoteSyncElement;
@@ -149,7 +155,20 @@ public class CVSSyncCompareInput extends SyncCompareInput {
if (isDirty((IFile)resource)) {
outgoing.add(resource);
}
- }
+ } else {
+ try {
+ ICVSFolder folder = CVSWorkspaceRoot.getCVSFolderFor((IContainer)resource);
+ if (folder.isCVSFolder()) {
+ return true;
+ } else {
+ outgoing.add(resource);
+ return false;
+ }
+ } catch (CVSException e) {
+ CVSUIPlugin.log(e.getStatus());
+ return false;
+ }
+ }
return true;
}
});
@@ -159,16 +178,25 @@ public class CVSSyncCompareInput extends SyncCompareInput {
CVSUIPlugin.log(e.getStatus());
return new IRemoteSyncElement[0];
}
+
final TeamException[] exception = new TeamException[1];
- final IFile[] files = (IFile[])outgoing.toArray(new IFile[outgoing.size()]);
- final IRemoteSyncElement[] trees = new IRemoteSyncElement[files.length];
+ final Map providerMapping = getProviderMapping((IResource[])outgoing.toArray(new IResource[outgoing.size()]));
+ final IRemoteSyncElement[] trees = new IRemoteSyncElement[providerMapping.size()];
Session.run(null, null, true, new ICVSRunnable() {
public void run(IProgressMonitor monitor) throws CVSException {
- int work = 1000 * resources.length;
+ int i = 0;
+ int work = 1000 * trees.length;
monitor.beginTask(null, work);
try {
- for (int i = 0; i < trees.length; i++) {
- trees[i] = CVSWorkspaceRoot.getRemoteSyncTree(files[i], null, Policy.subMonitorFor(monitor, 1000));
+ for (Iterator iter = providerMapping.keySet().iterator(); iter.hasNext();) {
+ RepositoryProvider provider = (RepositoryProvider)iter.next();
+ List resourceList = (List)providerMapping.get(provider);
+ final TeamException[] exception = new TeamException[1];
+ trees[i] = CVSWorkspaceRoot.getRemoteSyncTree(
+ provider.getProject(),
+ (IResource[]) resourceList.toArray(new IResource[resourceList.size()]),
+ null /* tag */,
+ Policy.subMonitorFor(monitor, 1000));
}
} catch (TeamException e) {
exception[0] = e;
@@ -378,4 +406,21 @@ public class CVSSyncCompareInput extends SyncCompareInput {
private static boolean isDirty(IFile file) {
return isDirty(CVSWorkspaceRoot.getCVSFileFor(file));
}
+
+ /*
+ * Method copied from TeamAction. It should be put in a common place
+ */
+ protected Map getProviderMapping(IResource[] resources) {
+ Map result = new HashMap();
+ for (int i = 0; i < resources.length; i++) {
+ RepositoryProvider provider = RepositoryProvider.getProvider(resources[i].getProject());
+ List list = (List)result.get(provider);
+ if (list == null) {
+ list = new ArrayList();
+ result.put(provider, list);
+ }
+ list.add(resources[i]);
+ }
+ return result;
+ }
}

Back to the top