Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathias Kinzler2010-05-17 06:29:42 +0000
committerMathias Kinzler2010-05-17 06:29:42 +0000
commitda8d749c2d0f9ea284ee0ec57434da9dff964321 (patch)
treeb204066abc102b0efb9a376a06ffd35e4432b1f8 /org.eclipse.egit.ui/src
parent99ec74c95df70f068c465c46d5726b34333dfbff (diff)
downloadegit-da8d749c2d0f9ea284ee0ec57434da9dff964321.tar.gz
egit-da8d749c2d0f9ea284ee0ec57434da9dff964321.tar.xz
egit-da8d749c2d0f9ea284ee0ec57434da9dff964321.zip
Git Repositories View: allow tag check-out
Tags can now be checked out properly. This fix enables the check-out on tag nodes in the Git Repositories View (also on double-click on a tag node). Signed-off-by: Mathias Kinzler <mathias.kinzler@sap.com>
Diffstat (limited to 'org.eclipse.egit.ui/src')
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java82
1 files changed, 61 insertions, 21 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java
index cfea62bfd1..8133d8298d 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java
@@ -312,7 +312,8 @@ public class RepositoriesView extends ViewPart implements ISelectionProvider,
// if any of the selected elements are not files, ignore
// the open request
if (node.getType() != RepositoryTreeNodeType.FILE
- && node.getType() != RepositoryTreeNodeType.REF) {
+ && node.getType() != RepositoryTreeNodeType.REF
+ && node.getType() != RepositoryTreeNodeType.TAG) {
return;
}
}
@@ -322,12 +323,12 @@ public class RepositoriesView extends ViewPart implements ISelectionProvider,
RepositoryTreeNode node = (RepositoryTreeNode) selectedElement;
if (node.getType() == RepositoryTreeNodeType.FILE)
openFile((File) node.getObject());
- else if (node.getType() == RepositoryTreeNodeType.REF) {
+ else if (node.getType() == RepositoryTreeNodeType.REF
+ || node.getType() == RepositoryTreeNodeType.TAG) {
Ref ref = (Ref) node.getObject();
if (!isBare(node.getRepository())
- && (ref.getName().startsWith(
- Constants.R_HEADS) || ref.getName()
- .startsWith(Constants.R_REMOTES)))
+ && ref.getName().startsWith(
+ Constants.R_REFS))
checkoutBranch(node, ref.getName());
}
}
@@ -509,15 +510,8 @@ public class RepositoriesView extends ViewPart implements ISelectionProvider,
MenuItem checkout = new MenuItem(men, SWT.PUSH);
checkout.setText(UIText.RepositoriesView_CheckOut_MenuItem);
- try {
- if (node.getRepository().getFullBranch().equals(
- ref.getName())) {
- // no checkout on current branch
- checkout.setEnabled(false);
- }
- } catch (IOException e2) {
- // ignore
- }
+ checkout.setEnabled(!isRefCheckedOut(node.getRepository(),
+ ref.getName()));
checkout.addSelectionListener(new SelectionAdapter() {
@@ -536,6 +530,26 @@ public class RepositoriesView extends ViewPart implements ISelectionProvider,
}
}
+ if (node.getType() == RepositoryTreeNodeType.TAG) {
+
+ final Ref ref = (Ref) node.getObject();
+
+ MenuItem checkout = new MenuItem(men, SWT.PUSH);
+ checkout.setText(UIText.RepositoriesView_CheckOut_MenuItem);
+
+ checkout.setEnabled(!isRefCheckedOut(node.getRepository(), ref
+ .getName()));
+
+ checkout.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ checkoutBranch(node, ref.getLeaf().getName());
+ }
+ });
+
+ }
+
if (node.getType() == RepositoryTreeNodeType.LOCALBRANCHES
|| node.getType() == RepositoryTreeNodeType.REMOTEBRANCHES)
createCreateBranchItem(men, node);
@@ -958,6 +972,37 @@ public class RepositoriesView extends ViewPart implements ISelectionProvider,
return repository.getConfig().getBoolean("core", "bare", false); //$NON-NLS-1$ //$NON-NLS-2$
}
+ private boolean isRefCheckedOut(Repository repository, String refName) {
+ String branchName;
+ String compareString;
+
+ try {
+ branchName = repository.getFullBranch();
+ if (branchName == null)
+ return false;
+ if (refName.startsWith(Constants.R_HEADS)) {
+ // local branch: HEAD would be on the branch
+ compareString = refName;
+ } else if (refName.startsWith(Constants.R_TAGS)) {
+ // tag: HEAD would be on the commit id to which the tag is
+ // pointing
+ compareString = repository.mapTag(refName).getObjId().getName();
+ } else if (refName.startsWith(Constants.R_REMOTES)) {
+ // remote branch: HEAD would be on the commit id to which
+ // the branch is pointing
+ compareString = repository.mapCommit(refName).getCommitId()
+ .getName();
+ } else {
+ // some other symbolic reference
+ return false;
+ }
+ } catch (IOException e1) {
+ return false;
+ }
+
+ return compareString.equals(branchName);
+ }
+
private void createCopyPathItem(Menu men, final String path) {
MenuItem copyPath;
@@ -1065,13 +1110,8 @@ public class RepositoriesView extends ViewPart implements ISelectionProvider,
MenuItem deleteBranch = new MenuItem(men, SWT.PUSH);
deleteBranch.setText(UIText.RepositoriesView_DeleteBranchMenu);
- try {
- if (node.getRepository().getFullBranch().equals(ref.getName())) {
- deleteBranch.setEnabled(false);
- }
- } catch (IOException e2) {
- // ignore
- }
+ deleteBranch.setEnabled(!isRefCheckedOut(node.getRepository(), ref
+ .getName()));
deleteBranch.addSelectionListener(new SelectionAdapter() {

Back to the top