Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Rosenberg2011-01-15 23:21:10 +0000
committerMatthias Sohn2011-01-18 22:56:42 +0000
commit7d56679922146f2532f46fbf27141a303b14e526 (patch)
tree7410a6362e0e14b37d579547900eff1e25c294db
parent0ae335d84ceb351901dfbc28e19d1d005b765968 (diff)
downloadegit-7d56679922146f2532f46fbf27141a303b14e526.tar.gz
egit-7d56679922146f2532f46fbf27141a303b14e526.tar.xz
egit-7d56679922146f2532f46fbf27141a303b14e526.zip
Refactor a utility to get a list of RefNodes from a commit
Change-Id: Id3d6ef20a309051ff084cef088b2c71e2a83ed3d Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/command/AbstractHistoryCommanndHandler.java34
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/command/CheckoutCommitHandler.java33
2 files changed, 39 insertions, 28 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/command/AbstractHistoryCommanndHandler.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/command/AbstractHistoryCommanndHandler.java
index 950754760b..c94d1516b1 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/command/AbstractHistoryCommanndHandler.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/command/AbstractHistoryCommanndHandler.java
@@ -13,6 +13,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.Map;
import org.eclipse.compare.CompareEditorInput;
import org.eclipse.core.commands.AbstractHandler;
@@ -26,12 +27,15 @@ import org.eclipse.egit.ui.UIText;
import org.eclipse.egit.ui.internal.CompareUtils;
import org.eclipse.egit.ui.internal.history.GitHistoryPage;
import org.eclipse.egit.ui.internal.history.HistoryPageInput;
+import org.eclipse.egit.ui.internal.repository.tree.RefNode;
+import org.eclipse.egit.ui.internal.repository.tree.RepositoryNode;
import org.eclipse.egit.ui.internal.repository.tree.RepositoryTreeNode;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevTag;
import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.team.ui.history.IHistoryPage;
@@ -128,4 +132,34 @@ abstract class AbstractHistoryCommanndHandler extends AbstractHandler {
} else
return new StructuredSelection();
}
+
+ /**
+ * Utility to get a list of Refs from a commit in order to handle ambiguous
+ * selections when a Ref is preferred over a commit.
+ *
+ * @param commit
+ * @param repo
+ * @param refPrefix
+ * e.g. "refs/heads/" or ""
+ * @return a list of RefNodes
+ */
+ protected List<RefNode> getRefNodes(RevCommit commit, Repository repo, String refPrefix) {
+ List<Ref> availableBranches = new ArrayList<Ref>();
+ List<RefNode> nodes = new ArrayList<RefNode>();
+ try {
+ Map<String, Ref> branches = repo.getRefDatabase().getRefs(
+ refPrefix);
+ for (Ref branch : branches.values()) {
+ if (branch.getLeaf().getObjectId().equals(commit.getId()))
+ availableBranches.add(branch);
+ }
+ RepositoryNode repoNode = new RepositoryNode(null, repo);
+ for (Ref ref : availableBranches)
+ nodes.add(new RefNode(repoNode, repo, ref));
+
+ } catch (IOException e) {
+ // ignore here
+ }
+ return nodes;
+ }
}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/command/CheckoutCommitHandler.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/command/CheckoutCommitHandler.java
index 2b0e1dc053..c68bbed2f2 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/command/CheckoutCommitHandler.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/command/CheckoutCommitHandler.java
@@ -8,10 +8,7 @@
*******************************************************************************/
package org.eclipse.egit.ui.internal.history.command;
-import java.io.IOException;
-import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
@@ -19,13 +16,10 @@ import org.eclipse.egit.ui.UIText;
import org.eclipse.egit.ui.internal.branch.BranchOperationUI;
import org.eclipse.egit.ui.internal.history.GitHistoryPage;
import org.eclipse.egit.ui.internal.repository.tree.RefNode;
-import org.eclipse.egit.ui.internal.repository.tree.RepositoryNode;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.jgit.lib.Constants;
-import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
-import org.eclipse.jgit.revplot.PlotCommit;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.handlers.HandlerUtil;
@@ -42,35 +36,18 @@ public class CheckoutCommitHandler extends AbstractHistoryCommanndHandler {
}
public Object execute(ExecutionEvent event) throws ExecutionException {
- PlotCommit commit = (PlotCommit) getSelection(getPage())
- .getFirstElement();
+ RevCommit commit = (RevCommit) getSelection(getPage()).getFirstElement();
Repository repo = getRepository(event);
- List<Ref> availableBranches = new ArrayList<Ref>();
final BranchOperationUI op;
- try {
- Map<String, Ref> localBranches = repo.getRefDatabase().getRefs(
- Constants.R_HEADS);
- for (Ref branch : localBranches.values()) {
- if (branch.getLeaf().getObjectId().equals(commit.getId())) {
- availableBranches.add(branch);
- }
- }
- } catch (IOException e) {
- // ignore here
- }
+ List<RefNode> nodes = getRefNodes(commit, repo, Constants.R_HEADS);
- if (availableBranches.isEmpty())
+ if (nodes.isEmpty())
op = new BranchOperationUI(repo, commit.getId());
- else if (availableBranches.size() == 1)
- op = new BranchOperationUI(repo, availableBranches.get(0).getName());
+ else if (nodes.size() == 1)
+ op = new BranchOperationUI(repo, nodes.get(0).getObject().getName());
else {
- List<RefNode> nodes = new ArrayList<RefNode>();
- RepositoryNode repoNode = new RepositoryNode(null, repo);
- for (Ref ref : availableBranches) {
- nodes.add(new RefNode(repoNode, repo, ref));
- }
BranchMessageDialog dlg = new BranchMessageDialog(HandlerUtil
.getActiveShellChecked(event), nodes);
if (dlg.open() == Window.OK) {

Back to the top