From bdb12e05b880ff6d7725ab3742379d7332574168 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Mon, 30 Jan 2012 16:09:21 +0400 Subject: [PATCH] IDEA-80258 Git: sort repositories when performing multi-repo actions Return repositories from the repository manager already sorted. The order matters => change Collection to List in GitBranchPopup and GitBranchOperationsProcessor --- .../branch/GitBranchOperationsProcessor.java | 11 +++--- .../git4idea/repo/GitRepositoryManager.java | 6 ++- .../ui/branch/GitBranchPopupActions.java | 39 +++++++++---------- .../ui/branch/GitMultiRootBranchConfig.java | 5 ++- 4 files changed, 31 insertions(+), 30 deletions(-) diff --git a/plugins/git4idea/src/git4idea/branch/GitBranchOperationsProcessor.java b/plugins/git4idea/src/git4idea/branch/GitBranchOperationsProcessor.java index 392554efbcf8..df1989fdc3de 100644 --- a/plugins/git4idea/src/git4idea/branch/GitBranchOperationsProcessor.java +++ b/plugins/git4idea/src/git4idea/branch/GitBranchOperationsProcessor.java @@ -38,7 +38,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import java.util.Collection; import java.util.Collections; import java.util.List; @@ -52,7 +51,7 @@ public final class GitBranchOperationsProcessor { private static final Logger LOG = Logger.getInstance(GitBranchOperationsProcessor.class); private final Project myProject; - private final Collection myRepositories; + private final List myRepositories; @Nullable private final Runnable myCallInAwtAfterExecution; private final GitRepository mySelectedRepository; @@ -61,16 +60,16 @@ public final class GitBranchOperationsProcessor { } public GitBranchOperationsProcessor(@NotNull GitRepository repository, @Nullable Runnable callInAwtAfterExecution) { - this(repository.getProject(), Collections.singleton(repository), repository, callInAwtAfterExecution); + this(repository.getProject(), Collections.singletonList(repository), repository, callInAwtAfterExecution); } - public GitBranchOperationsProcessor(@NotNull Project project, @NotNull Collection repositories, + public GitBranchOperationsProcessor(@NotNull Project project, @NotNull List repositories, @NotNull GitRepository selectedRepository) { this(project, repositories, selectedRepository, null); } public GitBranchOperationsProcessor(@NotNull Project project, - @NotNull Collection repositories, + @NotNull List repositories, @NotNull GitRepository selectedRepository, @Nullable Runnable callInAwtAfterExecution) { myProject = project; @@ -205,7 +204,7 @@ public final class GitBranchOperationsProcessor { }.runInBackground(); } - private GitCommitCompareInfo loadCommitsToCompare(Collection repositories, String branchName) { + private GitCommitCompareInfo loadCommitsToCompare(List repositories, String branchName) { GitCommitCompareInfo compareInfo = new GitCommitCompareInfo(); for (GitRepository repository : repositories) { compareInfo.put(repository, loadCommitsToCompare(repository, branchName)); diff --git a/plugins/git4idea/src/git4idea/repo/GitRepositoryManager.java b/plugins/git4idea/src/git4idea/repo/GitRepositoryManager.java index fe5fc065c808..eb6276183333 100644 --- a/plugins/git4idea/src/git4idea/repo/GitRepositoryManager.java +++ b/plugins/git4idea/src/git4idea/repo/GitRepositoryManager.java @@ -33,6 +33,8 @@ import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.concurrent.locks.ReentrantReadWriteLock; +import static git4idea.GitUtil.sortRepositories; + /** * GitRepositoryManager initializes and stores {@link GitRepository GitRepositories} for Git roots defined in the project. * @author Kirill Likhodedov @@ -152,10 +154,10 @@ public final class GitRepositoryManager extends AbstractProjectComponent impleme * @return all repositories tracked by the manager. */ @NotNull - public Collection getRepositories() { + public List getRepositories() { try { REPO_LOCK.readLock().lock(); - return myRepositories.values(); + return sortRepositories(myRepositories.values()); } finally { REPO_LOCK.readLock().unlock(); diff --git a/plugins/git4idea/src/git4idea/ui/branch/GitBranchPopupActions.java b/plugins/git4idea/src/git4idea/ui/branch/GitBranchPopupActions.java index 42be940eaf37..8f8bcb176f4f 100644 --- a/plugins/git4idea/src/git4idea/ui/branch/GitBranchPopupActions.java +++ b/plugins/git4idea/src/git4idea/ui/branch/GitBranchPopupActions.java @@ -33,7 +33,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; @@ -56,7 +55,7 @@ class GitBranchPopupActions { DefaultActionGroup popupGroup = new DefaultActionGroup(null, false); popupGroup.addAction(new CurrentBranchAction(GitBranchUiUtil.getDisplayableBranchText(myRepository), "in root " + GitUIUtil.getShortRepositoryName(myRepository))); - popupGroup.addAction(new NewBranchAction(myProject, Collections.singleton(myRepository), myRepository)); + popupGroup.addAction(new NewBranchAction(myProject, Collections.singletonList(myRepository), myRepository)); popupGroup.addAction(new CheckoutRevisionActions(myProject, myRepository)); if (toInsert != null) { @@ -68,7 +67,7 @@ class GitBranchPopupActions { Collections.sort(localBranches); for (GitBranch localBranch : localBranches) { if (!localBranch.equals(myRepository.getCurrentBranch())) { // don't show current branch in the list - popupGroup.add(new LocalBranchActions(myProject, Collections.singleton(myRepository), localBranch.getName(), myRepository)); + popupGroup.add(new LocalBranchActions(myProject, Collections.singletonList(myRepository), localBranch.getName(), myRepository)); } } @@ -76,7 +75,7 @@ class GitBranchPopupActions { List remoteBranches = new ArrayList(myRepository.getBranches().getRemoteBranches()); Collections.sort(remoteBranches); for (GitBranch remoteBranch : remoteBranches) { - popupGroup.add(new RemoteBranchActions(myProject, Collections.singleton(myRepository), remoteBranch.getName(), myRepository)); + popupGroup.add(new RemoteBranchActions(myProject, Collections.singletonList(myRepository), remoteBranch.getName(), myRepository)); } return popupGroup; @@ -101,10 +100,10 @@ class GitBranchPopupActions { static class NewBranchAction extends DumbAwareAction { private final Project myProject; - private final Collection myRepositories; + private final List myRepositories; @NotNull private final GitRepository mySelectedRepository; - NewBranchAction(@NotNull Project project, @NotNull Collection repositories, @NotNull GitRepository selectedRepository) { + NewBranchAction(@NotNull Project project, @NotNull List repositories, @NotNull GitRepository selectedRepository) { super("New Branch", "Create and checkout new branch", IconLoader.getIcon("/general/add.png")); myProject = project; myRepositories = repositories; @@ -175,11 +174,11 @@ class GitBranchPopupActions { static class LocalBranchActions extends ActionGroup { private final Project myProject; - private final Collection myRepositories; + private final List myRepositories; private String myBranchName; @NotNull private final GitRepository mySelectedRepository; - LocalBranchActions(@NotNull Project project, @NotNull Collection repositories, @NotNull String branchName, + LocalBranchActions(@NotNull Project project, @NotNull List repositories, @NotNull String branchName, @NotNull GitRepository selectedRepository) { super("", true); myProject = project; @@ -202,11 +201,11 @@ class GitBranchPopupActions { private static class CheckoutAction extends DumbAwareAction { private final Project myProject; - private final Collection myRepositories; + private final List myRepositories; private final String myBranchName; @NotNull private final GitRepository mySelectedRepository; - CheckoutAction(@NotNull Project project, @NotNull Collection repositories, @NotNull String branchName, + CheckoutAction(@NotNull Project project, @NotNull List repositories, @NotNull String branchName, @NotNull GitRepository selectedRepository) { super("Checkout"); myProject = project; @@ -224,11 +223,11 @@ class GitBranchPopupActions { private static class CheckoutAsNewBranch extends DumbAwareAction { private final Project myProject; - private final Collection myRepositories; + private final List myRepositories; private final String myBranchName; @NotNull private final GitRepository mySelectedRepository; - CheckoutAsNewBranch(@NotNull Project project, @NotNull Collection repositories, @NotNull String branchName, + CheckoutAsNewBranch(@NotNull Project project, @NotNull List repositories, @NotNull String branchName, @NotNull GitRepository selectedRepository) { super("Checkout as new branch"); myProject = project; @@ -254,11 +253,11 @@ class GitBranchPopupActions { */ private static class DeleteAction extends DumbAwareAction { private final Project myProject; - private final Collection myRepositories; + private final List myRepositories; private final String myBranchName; private final GitRepository mySelectedRepository; - DeleteAction(Project project, Collection repositories, String branchName, GitRepository selectedRepository) { + DeleteAction(Project project, List repositories, String branchName, GitRepository selectedRepository) { super("Delete"); myProject = project; myRepositories = repositories; @@ -279,11 +278,11 @@ class GitBranchPopupActions { static class RemoteBranchActions extends ActionGroup { private final Project myProject; - private final Collection myRepositories; + private final List myRepositories; private String myBranchName; @NotNull private final GitRepository mySelectedRepository; - RemoteBranchActions(@NotNull Project project, @NotNull Collection repositories, @NotNull String branchName, + RemoteBranchActions(@NotNull Project project, @NotNull List repositories, @NotNull String branchName, @NotNull GitRepository selectedRepository) { super("", true); myProject = project; @@ -304,11 +303,11 @@ class GitBranchPopupActions { private static class CheckoutRemoteBranchAction extends DumbAwareAction { private final Project myProject; - private final Collection myRepositories; + private final List myRepositories; private final String myRemoteBranchName; @NotNull private final GitRepository mySelectedRepository; - public CheckoutRemoteBranchAction(@NotNull Project project, @NotNull Collection repositories, + public CheckoutRemoteBranchAction(@NotNull Project project, @NotNull List repositories, @NotNull String remoteBranchName, @NotNull GitRepository selectedRepository) { super("Checkout as new local branch"); myProject = project; @@ -339,12 +338,12 @@ class GitBranchPopupActions { private static class CompareAction extends DumbAwareAction { private final Project myProject; - private final Collection myRepositories; + private final List myRepositories; private final String myBranchName; private final GitRepository mySelectedRepository; public CompareAction(@NotNull Project project, - @NotNull Collection repositories, + @NotNull List repositories, @NotNull String branchName, GitRepository selectedRepository) { super("Compare"); diff --git a/plugins/git4idea/src/git4idea/ui/branch/GitMultiRootBranchConfig.java b/plugins/git4idea/src/git4idea/ui/branch/GitMultiRootBranchConfig.java index 4e45aed7a5b4..c45b886bd1f2 100644 --- a/plugins/git4idea/src/git4idea/ui/branch/GitMultiRootBranchConfig.java +++ b/plugins/git4idea/src/git4idea/ui/branch/GitMultiRootBranchConfig.java @@ -24,15 +24,16 @@ import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.Collections; +import java.util.List; /** * @author Kirill Likhodedov */ public class GitMultiRootBranchConfig { - private final Collection myRepositories; + private final List myRepositories; - public GitMultiRootBranchConfig(@NotNull Collection repositories) { + public GitMultiRootBranchConfig(@NotNull List repositories) { myRepositories = repositories; }