diff options
Diffstat (limited to 'bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSTagElement.java')
-rw-r--r-- | bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSTagElement.java | 41 |
1 files changed, 35 insertions, 6 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 f1e2cc3fb..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 @@ -10,16 +10,24 @@ *******************************************************************************/ package org.eclipse.team.internal.ccvs.ui.model; +import java.lang.reflect.InvocationTargetException; + import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.jface.progress.IElementCollector; import org.eclipse.jface.resource.ImageDescriptor; 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.ICVSRemoteResource; import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation; +import org.eclipse.team.internal.ccvs.core.resources.RemoteFolder; import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants; +import org.eclipse.team.internal.ccvs.ui.Policy; +import org.eclipse.team.internal.ccvs.ui.operations.FetchMembersOperation; +import org.eclipse.team.internal.ccvs.ui.operations.FetchMembersOperation.RemoteFolderFilter; import org.eclipse.ui.progress.IDeferredWorkbenchAdapter; public class CVSTagElement extends CVSModelElement implements IDeferredWorkbenchAdapter { @@ -90,15 +98,36 @@ public class CVSTagElement extends CVSModelElement implements IDeferredWorkbench } public void fetchDeferredChildren(Object o, IElementCollector collector, IProgressMonitor monitor) { - try { - collector.add(fetchChildren(o, monitor), monitor); - } catch (TeamException e) { - CVSUIPlugin.log(e); + if (tag.getType() == CVSTag.HEAD) { + try { + monitor = Policy.monitorFor(monitor); + RemoteFolder folder = new RemoteFolder(null, root, ICVSRemoteFolder.REPOSITORY_ROOT_FOLDER_NAME, tag); + monitor.beginTask(Policy.bind("RemoteFolderElement.fetchingRemoteChildren", root.toString()), 100); //$NON-NLS-1$ + FetchMembersOperation operation = new FetchMembersOperation(null, folder, collector); + operation.setFilter(new RemoteFolderFilter() { + public ICVSRemoteResource[] filter(ICVSRemoteResource[] folders) { + return CVSUIPlugin.getPlugin().getRepositoryManager().filterResources(getWorkingSet(), folders); + } + }); + operation.run(Policy.subMonitorFor(monitor, 100)); + } catch (InvocationTargetException e) { + CVSUIPlugin.log(CVSException.wrapException(e)); + } catch (InterruptedException e) { + // Cancelled by the user; + } finally { + monitor.done(); + } + } else { + try { + collector.add(fetchChildren(o, monitor), monitor); + } catch (TeamException e) { + CVSUIPlugin.log(e); + } } } - 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() { |