Changes in preparation for heterogeneous selection
diff --git a/bundles/org.eclipse.team.cvs.ui/plugin.xml b/bundles/org.eclipse.team.cvs.ui/plugin.xml
index 69fb605..82fa02f 100644
--- a/bundles/org.eclipse.team.cvs.ui/plugin.xml
+++ b/bundles/org.eclipse.team.cvs.ui/plugin.xml
@@ -253,7 +253,7 @@
             id="org.eclipse.team.ccvs.ui.ResourceMapperContributions">
 		 <enablement>
            <adapt type="org.eclipse.core.resources.mapping.ResourceMapping">
-              <test property="org.eclipse.ui.ide.projectPersistentProperty" args="org.eclipse.team.core.repository=org.eclipse.team.cvs.core.cvsnature" />
+              <test property="org.eclipse.ui.ide.projectPersistentProperty" args="org.eclipse.team.core.repository=org.eclipse.team.cvs.core.cvsnature,allowUnsetProjects" />
            </adapt>
          </enablement>
          <action
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceTraversalAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceTraversalAction.java
index 36e156b..08735d0 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceTraversalAction.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceTraversalAction.java
@@ -18,6 +18,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.team.core.RepositoryProvider;
 import org.eclipse.team.core.TeamException;
 import org.eclipse.team.core.subscribers.Subscriber;
 import org.eclipse.team.core.subscribers.SubscriberResourceMappingContext;
@@ -50,7 +51,14 @@
             Set resources = new HashSet();
             for (int i = 0; i < traversals.length; i++) {
                 ResourceTraversal traversal = traversals[i];
-                resources.addAll(Arrays.asList(traversal.getResources()));
+                IResource[] resourceArray = traversal.getResources();
+                for (int j = 0; j < resourceArray.length; j++) {
+                    IResource resource = resourceArray[j];
+                    // Only include resources in projects that are shared with CVS
+                    if (RepositoryProvider.getProvider(resource.getProject(), CVSProviderPlugin.getTypeId()) != null) {
+                        resources.add(resource);
+                    }
+                }
             }
             return (IResource[]) resources.toArray(new IResource[resources.size()]);
         } catch (TeamException e) {
@@ -77,7 +85,13 @@
             ResourceTraversal[] traversals = mapping.getTraversals(context, monitor);
             for (int j = 0; j < traversals.length; j++) {
                 ResourceTraversal traversal = traversals[j];
-                result.addAll(Arrays.asList(traversal.getResources()));
+                IResource[] resources = traversal.getResources();
+                for (int k = 0; k < resources.length; k++) {
+                    IResource resource = resources[k];
+                    if (RepositoryProvider.getProvider(resource.getProject(), CVSProviderPlugin.getTypeId()) != null) {
+                        result.add(resource);
+                    }
+                }
             }
         }
         return (IResource[]) result.toArray(new IResource[result.size()]);