We want to go from selected resources to repositories and back to any resource in those repositories --- .../egit/ui/internal/actions/RepositoryAction.java | 50 ++++++++++++++++++++ 1 files changed, 50 insertions(+), 0 deletions(-) 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 c4e3256..8c250ca 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<IProject> ret = new HashSet<IProject>(); + 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<Repository> ret = new HashSet<Repository>(); + 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<IProject> ret = new HashSet<IProject>(); + 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. * -- 1.5.5.1.178.g1f811 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html