diff options
author | Michael Valenta | 2003-09-12 14:14:52 +0000 |
---|---|---|
committer | Michael Valenta | 2003-09-12 14:14:52 +0000 |
commit | 75977c98b8a5603f4ca18aaf139e7ce37822e915 (patch) | |
tree | 8ef5c3edd2b98bd19e85a7dd44c2d19b6720d808 | |
parent | 47f1ae02d708b621d78bc04f3e303176dc507ff4 (diff) | |
download | eclipse.platform.team-75977c98b8a5603f4ca18aaf139e7ce37822e915.tar.gz eclipse.platform.team-75977c98b8a5603f4ca18aaf139e7ce37822e915.tar.xz eclipse.platform.team-75977c98b8a5603f4ca18aaf139e7ce37822e915.zip |
41578: Error fetching children of HEAD
9 files changed, 61 insertions, 23 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSTagElement.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSTagElement.java index e6c80080c..61cfffadf 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSTagElement.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSTagElement.java @@ -126,8 +126,8 @@ public class CVSTagElement extends CVSModelElement implements IDeferredWorkbench } } - public ISchedulingRule getRule() { - return new BatchSimilarSchedulingRule("org.eclipse.team.cvs.ui.model.tagelement"); //$NON-NLS-1$ + public ISchedulingRule getRule(Object element) { + return new RepositoryLocationSchedulingRule(root); //$NON-NLS-1$ } public boolean isContainer() { diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteContentProvider.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteContentProvider.java index 4fdc69a5c..a67476ca8 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteContentProvider.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteContentProvider.java @@ -14,10 +14,12 @@ import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.team.internal.ccvs.core.ICVSRemoteFolder; import org.eclipse.team.internal.ccvs.core.ICVSRemoteResource; +import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation; import org.eclipse.team.internal.ccvs.core.ICVSResource; import org.eclipse.team.internal.ccvs.core.resources.RemoteResource; import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants; +import org.eclipse.team.internal.ccvs.ui.repo.RepositoryRoot; import org.eclipse.ui.IWorkingSet; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.progress.DeferredTreeContentManager; @@ -113,4 +115,21 @@ public class RemoteContentProvider extends WorkbenchContentProvider { } return children; } + + public void cancelJobs(RepositoryRoot[] roots) { + if (manager != null) { + for (int i = 0; i < roots.length; i++) { + RepositoryRoot root = roots[i]; + cancelJobs(root.getRoot()); + } + } + } + + /** + * Cancel any jobs that are fetching content from the given location. + * @param location + */ + public void cancelJobs(ICVSRepositoryLocation location) { + manager.cancel(location); + } } diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteFolderElement.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteFolderElement.java index 36f0f893f..18f5520d0 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteFolderElement.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteFolderElement.java @@ -20,6 +20,7 @@ import org.eclipse.team.core.TeamException; import org.eclipse.team.internal.ccvs.core.CVSException; import org.eclipse.team.internal.ccvs.core.CVSTag; import org.eclipse.team.internal.ccvs.core.ICVSRemoteFolder; +import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation; import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants; import org.eclipse.team.internal.ccvs.ui.Policy; @@ -30,7 +31,6 @@ import org.eclipse.ui.progress.IDeferredWorkbenchAdapter; public class RemoteFolderElement extends RemoteResourceElement implements IDeferredWorkbenchAdapter { - /** * Overridden to append the version name to remote folders which * have version tags and are top-level folders. @@ -83,11 +83,18 @@ public class RemoteFolderElement extends RemoteResourceElement implements IDefer } } - public ISchedulingRule getRule() { - return new BatchSimilarSchedulingRule("org.eclipse.team.ui.cvs.remotefolderelement"); //$NON-NLS-1$ + public ISchedulingRule getRule(Object element) { + ICVSRepositoryLocation location = getRepositoryLocation(element); + return new RepositoryLocationSchedulingRule(location); //$NON-NLS-1$ } - public boolean isContainer() { + private ICVSRepositoryLocation getRepositoryLocation(Object o) { + if (!(o instanceof ICVSRemoteFolder)) + return null; + return ((ICVSRemoteFolder)o).getRepository(); + } + + public boolean isContainer() { return true; } }
\ No newline at end of file diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteModule.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteModule.java index e381d2cf1..db9a1e698 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteModule.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteModule.java @@ -146,7 +146,7 @@ public class RemoteModule return true; } - public ISchedulingRule getRule() { - return new BatchSimilarSchedulingRule("org.eclipse.team.ui.cvs.remotemodule"); //$NON-NLS-1$ + public ISchedulingRule getRule(Object element) { + return new RepositoryLocationSchedulingRule(folder.getRepository()); //$NON-NLS-1$ } } diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/BatchSimilarSchedulingRule.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RepositoryLocationSchedulingRule.java index 9a461b979..94228114f 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/BatchSimilarSchedulingRule.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RepositoryLocationSchedulingRule.java @@ -11,19 +11,19 @@ package org.eclipse.team.internal.ccvs.ui.model; import org.eclipse.core.runtime.jobs.ISchedulingRule; +import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation; /** - * A simple job scheduling rule for serializing jobs that shouldn't be run - * concurrently. + * A simple job scheduling rule for serializing jobs for an ICVSRepositoryLocation */ -public class BatchSimilarSchedulingRule implements ISchedulingRule { - public String id; - public BatchSimilarSchedulingRule(String id) { - this.id = id; +public class RepositoryLocationSchedulingRule implements ISchedulingRule { + ICVSRepositoryLocation location; + public RepositoryLocationSchedulingRule(ICVSRepositoryLocation location) { + this.location = location; } public boolean isConflicting(ISchedulingRule rule) { - if(rule instanceof BatchSimilarSchedulingRule) { - return ((BatchSimilarSchedulingRule)rule).id.equals(id); + if(rule instanceof RepositoryLocationSchedulingRule) { + return ((RepositoryLocationSchedulingRule)rule).location.equals(location); } return false; } diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/VersionCategory.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/VersionCategory.java index 5a947514f..f18977a7d 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/VersionCategory.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/VersionCategory.java @@ -169,7 +169,7 @@ public class VersionCategory return true; } - public ISchedulingRule getRule() { - return new BatchSimilarSchedulingRule("org.eclipse.team.cvs.ui.versioncategory"); //$NON-NLS-1$ + public ISchedulingRule getRule(Object element) { + return new RepositoryLocationSchedulingRule(repository); //$NON-NLS-1$ } } diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RemoteViewPart.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RemoteViewPart.java index 4313af511..15227fd16 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RemoteViewPart.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RemoteViewPart.java @@ -367,7 +367,7 @@ public abstract class RemoteViewPart extends ViewPart implements ISelectionListe protected void refreshViewer() { if (viewer == null) return; - //((RemoteContentProvider)viewer.getContentProvider()).clearCache(); + ((RemoteContentProvider)viewer.getContentProvider()).cancelJobs(CVSUIPlugin.getPlugin().getRepositoryManager().getKnownRepositoryRoots()); CVSUIPlugin.getPlugin().getRepositoryManager().purgeCache(); updateWorkingSetMenu(); viewer.refresh(); diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RemoveRootAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RemoveRootAction.java index 954501adb..6a1b436d5 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RemoveRootAction.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RemoveRootAction.java @@ -13,8 +13,10 @@ package org.eclipse.team.internal.ccvs.ui.repo; import java.util.ArrayList; import java.util.Iterator; +import org.eclipse.core.internal.jobs.JobManager; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.RepositoryProvider; @@ -24,6 +26,7 @@ import org.eclipse.team.internal.ccvs.core.CVSTeamProvider; import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation; import org.eclipse.team.internal.ccvs.ui.Policy; import org.eclipse.team.internal.ccvs.ui.actions.CVSAction; +import org.eclipse.team.internal.ccvs.ui.model.RepositoryLocationSchedulingRule; import org.eclipse.team.internal.ui.dialogs.DetailsDialogWithProjects; import org.eclipse.ui.actions.SelectionListenerAction; import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; @@ -34,10 +37,12 @@ import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; */ public class RemoveRootAction extends SelectionListenerAction { private IStructuredSelection selection; - private Shell shell; + /* internal use only */ Shell shell; + private RepositoriesView view; - public RemoveRootAction(Shell shell) { + public RemoveRootAction(Shell shell, RepositoriesView view) { super(Policy.bind("RemoteRootAction.label")); //$NON-NLS-1$ + this.view = view; this.shell = shell; } @@ -104,7 +109,14 @@ public class RemoveRootAction extends SelectionListenerAction { } }); } else { - provider.disposeRepository(roots[i]); + ISchedulingRule rule = new RepositoryLocationSchedulingRule(roots[i]); + JobManager.getInstance().beginRule(rule); + try { + view.getContentProvider().cancelJobs(roots[i]); + provider.disposeRepository(roots[i]); + } finally { + JobManager.getInstance().endRule(rule); + } } } catch (CVSException e) { CVSUIPlugin.log(e); diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RepositoriesView.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RepositoriesView.java index 505993ba8..6ab0637d7 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RepositoriesView.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RepositoriesView.java @@ -155,7 +155,7 @@ public class RepositoriesView extends RemoteViewPart { propertiesAction.setEnabled(enabled); } }); - removeRootAction = new RemoveRootAction(viewer.getControl().getShell()); + removeRootAction = new RemoveRootAction(viewer.getControl().getShell(), this); removeRootAction.selectionChanged((IStructuredSelection)null); WorkbenchHelp.setHelp(removeRootAction, IHelpContextIds.REMOVE_REPOSITORY_LOCATION_ACTION); IActionBars bars = getViewSite().getActionBars(); |