Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Valenta2002-04-16 17:57:19 +0000
committerMichael Valenta2002-04-16 17:57:19 +0000
commitf4bc8abc553a7b6948206d5186bcdc35262e79e1 (patch)
tree2eac1f02cef8a3972fc7c86e86015c1152186fae
parent89cd769e231597832f459e9fc545526383e0ddb9 (diff)
downloadeclipse.platform.team-f4bc8abc553a7b6948206d5186bcdc35262e79e1.tar.gz
eclipse.platform.team-f4bc8abc553a7b6948206d5186bcdc35262e79e1.tar.xz
eclipse.platform.team-f4bc8abc553a7b6948206d5186bcdc35262e79e1.zip
Added project configure/deconfigure notification to resource state
change notification. This allows the removal of all cvs markers when a project is deconfigured
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/AddDeleteMoveListener.java144
1 files changed, 104 insertions, 40 deletions
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/AddDeleteMoveListener.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/AddDeleteMoveListener.java
index 247269814..d8336a4cc 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/AddDeleteMoveListener.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/AddDeleteMoveListener.java
@@ -25,6 +25,7 @@ import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
import org.eclipse.team.internal.ccvs.core.ICVSFile;
import org.eclipse.team.internal.ccvs.core.ICVSFolder;
import org.eclipse.team.internal.ccvs.core.ICVSResource;
+import org.eclipse.team.internal.ccvs.core.ICVSResourceVisitor;
import org.eclipse.team.internal.ccvs.core.ICVSRunnable;
import org.eclipse.team.internal.ccvs.core.IResourceStateChangeListener;
import org.eclipse.team.internal.ccvs.core.Policy;
@@ -37,11 +38,19 @@ import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
*/
public class AddDeleteMoveListener implements IResourceDeltaVisitor, IResourceChangeListener, IResourceStateChangeListener {
+ public static final String CVS_MARKER = "org.eclipse.team.cvs.core.cvsmarker";//$NON-NLS-1$
public static final String DELETION_MARKER = "org.eclipse.team.cvs.core.cvsremove";//$NON-NLS-1$
public static final String ADDITION_MARKER = "org.eclipse.team.cvs.core.cvsadd";//$NON-NLS-1$
public static final String NAME_ATTRIBUTE = "name";//$NON-NLS-1$
+ private void clearCVSMarkers(IResource resource) throws CoreException {
+ IMarker[] markers = resource.findMarkers(CVS_MARKER, true, IResource.DEPTH_INFINITE);
+ for (int i = 0; i < markers.length; i++) {
+ markers[i].delete();
+ }
+ }
+
protected IMarker createDeleteMarker(IResource resource) {
if (! CVSProviderPlugin.getPlugin().getShowTasksOnAddAndDelete()) {
return null;
@@ -143,6 +152,7 @@ public class AddDeleteMoveListener implements IResourceDeltaVisitor, IResourceCh
if (movedFrom)
return ! handleOrphanedSubtree((IContainer)resource);
}
+ handleChangedResource(resource);
break;
}
return true;
@@ -241,6 +251,15 @@ public class AddDeleteMoveListener implements IResourceDeltaVisitor, IResourceCh
}
}
+ private void handleChangedResource(IResource resource) {
+ if (resource.getType() == IResource.PROJECT) return;
+ ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource);
+ // Make sure that unmanaged resources whose parent is a cvs folder have an addition task on them
+ if ( ! cvsResource.isManaged() && ! cvsResource.isIgnored() && cvsResource.getParent().isCVSFolder()) {
+ createAdditonMarker(resource);
+ }
+ }
+
public void resourceChanged(IResourceChangeEvent event) {
try {
IResourceDelta root = event.getDelta();
@@ -273,54 +292,58 @@ public class AddDeleteMoveListener implements IResourceDeltaVisitor, IResourceCh
for (int i = 0; i < changedResources.length; i++) {
try {
final IResource resource = changedResources[i];
- if (resource.getType() == IResource.FILE) {
- ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource);
- if (cvsResource.isManaged() || cvsResource.isIgnored()) {
- if (cvsResource.exists()) {
- IMarker marker = getAdditionMarker(resource);
- if (marker != null)
- marker.delete();
- }
- } else if ( ! cvsResource.exists()) {
- IMarker marker = getDeletionMarker(resource);
+ // Only update markers for projects with a provider
+ RepositoryProvider provider = RepositoryProvider.getProvider(resource.getProject(), CVSProviderPlugin.getTypeId());
+ if (provider == null) break;
+ ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource);
+ // Handle addition markers
+ if (cvsResource.isManaged() || cvsResource.isIgnored()) {
+ if (cvsResource.exists()) {
+ // Remove the addition marker for managed or ignored resources
+ IMarker marker = getAdditionMarker(resource);
if (marker != null)
marker.delete();
- cvsResource.getParent().run(new ICVSRunnable() {
- public void run(IProgressMonitor monitor) throws CVSException {
- pruneEmptyParents(resource);
- }
-
- }, Policy.monitorFor(null));
- } else {
- // The resource is not managed or ignored. Make sure there is an addition marker on it
- // Only add the marker if the parent is under CVS control
- if (cvsResource.getParent().isCVSFolder()) {
- IMarker marker = getAdditionMarker(resource);
- if (marker == null) {
- createAdditonMarker(resource);
+ // For managed folders, add addition markers to unmanaged/unignored children
+ if (cvsResource.isManaged() && cvsResource.isFolder()) {
+ IResource[] children = ((IFolder)resource).members();
+ for (int j = 0; j < children.length; j++) {
+ IResource iResource = children[j];
+ ICVSResource child = CVSWorkspaceRoot.getCVSResourceFor(iResource);
+ if ( ! child.isManaged() && ! child.isIgnored()) {
+ createAdditonMarker(iResource);
+ }
}
}
}
- } else if (resource.getType() == IResource.FOLDER) {
- ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource);
- if (cvsResource.isManaged() || cvsResource.isIgnored()) {
- IMarker marker = getAdditionMarker(resource);
- if (marker != null) {
+ } else if (cvsResource.getParent().isCVSFolder()) {
+ // If the parent is a CVS folder, place an addition marker on the resource
+ IMarker marker = getAdditionMarker(resource);
+ if (marker == null) {
+ createAdditonMarker(resource);
+ }
+ }
+
+ // Handle deletion markers
+ if (resource.getType() == IResource.FILE) {
+ if (cvsResource.exists()) {
+ IMarker marker = getDeletionMarker(resource);
+ if (marker != null)
marker.delete();
- // Check to see if there are unmanaged, unignored children
- // If there are, mark them
- if (cvsResource.isManaged()) {
- IResource[] children = ((IFolder)resource).members();
- for (int j = 0; j < children.length; j++) {
- IResource iResource = children[j];
- ICVSResource child = CVSWorkspaceRoot.getCVSResourceFor(iResource);
- if ( ! child.isManaged() && ! child.isIgnored()) {
- createAdditonMarker(iResource);
- }
+ } else {
+ if (cvsResource.isManaged()) {
+ createDeleteMarker(resource);
+ } else {
+ IMarker marker = getDeletionMarker(resource);
+ if (marker != null)
+ marker.delete();
+ cvsResource.getParent().run(new ICVSRunnable() {
+ public void run(IProgressMonitor monitor) throws CVSException {
+ pruneEmptyParents(resource);
}
- }
+
+ }, Policy.monitorFor(null));
}
- }
+ }
}
} catch (CVSException e) {
Util.logError(Policy.bind("AddDeleteMoveListener.Error_updating_marker_state_4"), e); //$NON-NLS-1$
@@ -351,4 +374,45 @@ public class AddDeleteMoveListener implements IResourceDeltaVisitor, IResourceCh
pruneEmptyParents(parent);
}
}
+
+ /**
+ * @see IResourceStateChangeListener#projectConfigured(IProject)
+ */
+ public void projectConfigured(final IProject project) {
+ try {
+ final ICVSFolder root = CVSWorkspaceRoot.getCVSFolderFor(project);
+ root.accept(new ICVSResourceVisitor() {
+ public void visitFile(ICVSFile file) throws CVSException {
+ if (file.getParent().isCVSFolder()) {
+ if (file.isManaged() && file.getSyncInfo().isDeleted()) {
+ createDeleteMarker(project.getFile(file.getRelativePath(root)));
+ } else if ( ! file.isManaged() && ! file.isIgnored()) {
+ createAdditonMarker(project.getFile(file.getRelativePath(root)));
+ }
+ }
+ }
+ public void visitFolder(ICVSFolder folder) throws CVSException {
+ if (folder.isCVSFolder()) {
+ folder.acceptChildren(this);
+ } else if ( ! folder.isIgnored() && folder.getParent().isCVSFolder()) {
+ createAdditonMarker(project.getFolder(folder.getRelativePath(root)));
+ }
+ }
+ });
+ } catch (CVSException e) {
+ CVSProviderPlugin.log(e.getStatus());
+ }
+ }
+
+ /**
+ * @see IResourceStateChangeListener#projectDeconfigured(IProject)
+ */
+ public void projectDeconfigured(IProject project) {
+ try {
+ clearCVSMarkers(project);
+ } catch (CoreException e) {
+ CVSProviderPlugin.log(e.getStatus());
+ }
+ }
+
} \ No newline at end of file

Back to the top