From fc8a5873dbb544a6d93cc874993fcceabe32c0d0 Mon Sep 17 00:00:00 2001 From: Robin Rosenberg Date: Sun, 31 Aug 2008 11:38:43 +0200 Subject: [PATCH] Add utilities for figuring out repositories for selected resources We want to go from selected resources to repositories and back to any resource in those repositories Signed-off-by: Robin Rosenberg Signed-off-by: Shawn O. Pearce --- .../egit/ui/internal/actions/RepositoryAction.java | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/RepositoryAction.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/RepositoryAction.java index c4e32569..8c250caa 100644 --- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/RepositoryAction.java +++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/actions/RepositoryAction.java @@ -13,6 +13,8 @@ import java.util.HashSet; import java.util.Set; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.team.internal.ui.actions.TeamAction; @@ -36,6 +38,54 @@ public abstract class RepositoryAction extends TeamAction { } /** + * @return the projects hosting the selected resources + */ + protected IProject[] getProjectsForSelectedResources() { + Set ret = new HashSet(); + for (IResource resource : (IResource[])getSelectedAdaptables(getSelection(), IResource.class)) + ret.add(resource.getProject()); + return ret.toArray(new IProject[ret.size()]); + } + + /** + * @param projects + * a list of projects + * @return the repositories that projects map to iff all projects are mapped + */ + protected Repository[] getRepositoriesFor(final IProject[] projects) { + Set ret = new HashSet(); + for (IProject project : projects) { + RepositoryMapping repositoryMapping = RepositoryMapping.getMapping(project); + if (repositoryMapping == null) + return new Repository[0]; + ret.add(repositoryMapping.getRepository()); + } + return ret.toArray(new Repository[ret.size()]); + } + + /** + * List the projects with selected resources, if all projects are connected + * to a Git repository. + * + * @return the tracked projects affected by the current resource selection + */ + public IProject[] getProjectsInRepositoryOfSelectedResources() { + Set ret = new HashSet(); + Repository[] repositories = getRepositoriesFor(getProjectsForSelectedResources()); + final IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); + for (IProject project : projects) { + RepositoryMapping mapping = RepositoryMapping.getMapping(project); + for (Repository repository : repositories) { + if (mapping != null && mapping.getRepository() == repository) { + ret.add(project); + break; + } + } + } + return ret.toArray(new IProject[ret.size()]); + } + + /** * Figure out which repository to use. All selected * resources must map to the same Git repository. * -- 2.11.4.GIT