[EGIT PATCH 3/6] Add ref rename support to the branch dialog
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
---
.../src/org/spearce/egit/ui/UIText.java | 9 ++
.../ui/internal/dialogs/BranchSelectionDialog.java | 92 +++++++++++++++----
.../src/org/spearce/egit/ui/uitext.properties | 4 +
3 files changed, 85 insertions(+), 20 deletions(-)
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java
index 654e155..1d52973 100644
--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/UIText.java
@@ -893,6 +893,12 @@
public static String BranchSelectionDialog_ErrorCouldNotRefresh;
/** */
+ public static String BranchSelectionDialog_ErrorCouldNotRenameRef;
+
+ /** */
+ public static String BranchSelectionDialog_ErrorCouldNotRenameRef2;
+
+ /** */
public static String BranchSelectionDialog_BranchSuffix_Current;
/** */
@@ -929,6 +935,9 @@
public static String BranchSelectionDialog_QuestionNewBranchTitle;
/** */
+ public static String BranchSelectionDialog_QuestionNewBranchNameMessage;
+
+ /** */
public static String BranchSelectionDialog_QuestionNewBranchMessage;
/** */
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/dialogs/BranchSelectionDialog.java b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/dialogs/BranchSelectionDialog.java
index 9aad95b..6700768 100644
--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/dialogs/BranchSelectionDialog.java
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/internal/dialogs/BranchSelectionDialog.java
@@ -48,8 +48,10 @@
import org.spearce.egit.ui.UIText;
import org.spearce.jgit.lib.Constants;
import org.spearce.jgit.lib.ObjectId;
+import org.spearce.jgit.lib.RefRename;
import org.spearce.jgit.lib.RefUpdate;
import org.spearce.jgit.lib.Repository;
+import org.spearce.jgit.lib.RefUpdate.Result;
/**
* The branch and reset selection dialog
@@ -277,6 +279,30 @@ private void refNameFromDialog() {
}
}
+ private InputDialog getRefNameInputDialog(String prompt) {
+ InputDialog labelDialog = new InputDialog(
+ getShell(),
+ UIText.BranchSelectionDialog_QuestionNewBranchTitle,
+ prompt,
+ null, new IInputValidator() {
+ public String isValid(String newText) {
+ String testFor = Constants.R_HEADS + newText;
+ try {
+ if (repo.resolve(testFor) != null)
+ return UIText.BranchSelectionDialog_ErrorAlreadyExists;
+ } catch (IOException e1) {
+ Activator.logError(NLS.bind(
+ UIText.BranchSelectionDialog_ErrorCouldNotResolve, testFor), e1);
+ }
+ if (!Repository.isValidRefName(testFor))
+ return UIText.BranchSelectionDialog_ErrorInvalidRefName;
+ return null;
+ }
+ });
+ labelDialog.setBlockOnOpen(true);
+ return labelDialog;
+ }
+
@Override
protected void createButtonsForButtonBar(Composite parent) {
if (!showResetType) {
@@ -284,32 +310,57 @@ protected void createButtonsForButtonBar(Composite parent) {
newButton.setFont(JFaceResources.getDialogFont());
newButton.setText(UIText.BranchSelectionDialog_NewBranch);
((GridLayout)parent.getLayout()).numColumns++;
+ Button renameButton = new Button(parent, SWT.PUSH);
+ renameButton.setText("&Rename");
+ renameButton.addSelectionListener(new SelectionListener() {
+ public void widgetSelected(SelectionEvent e) {
+ // check what ref name the user selected, if any.
+ refNameFromDialog();
+
+ InputDialog labelDialog = getRefNameInputDialog(NLS
+ .bind(
+ UIText.BranchSelectionDialog_QuestionNewBranchNameMessage,
+ refName));
+ if (labelDialog.open() == Window.OK) {
+ String newRefName = Constants.R_HEADS + labelDialog.getValue();
+ try {
+ RefRename renameRef = repo.renameRef(refName, newRefName);
+ if (renameRef.rename() != Result.RENAMED) {
+ MessageDialog.openError(getShell(),
+ "Rename failed",
+ NLS.bind(UIText.BranchSelectionDialog_ErrorCouldNotRenameRef,
+ new Object[] { refName, newRefName, renameRef.getResult() }));
+ Activator.logError(NLS.bind(
+ UIText.BranchSelectionDialog_ErrorCouldNotRenameRef2,
+ new Object[] { refName, newRefName }), null);
+ }
+ // FIXME: Update HEAD
+ } catch (IOException e1) {
+ Activator.logError(NLS.bind(
+ UIText.BranchSelectionDialog_ErrorCouldNotRenameRef2,
+ newRefName), e1);
+ }
+ try {
+ branchTree.removeAll();
+ fillTreeWithBranches(newRefName);
+ } catch (IOException e1) {
+ Activator.logError(
+ UIText.BranchSelectionDialog_ErrorCouldNotRefreshBranchList,
+ e1);
+ }
+ }
+ }
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+ });
newButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
// check what ref name the user selected, if any.
refNameFromDialog();
- InputDialog labelDialog = new InputDialog(
- getShell(),
- UIText.BranchSelectionDialog_QuestionNewBranchTitle,
- UIText.BranchSelectionDialog_QuestionNewBranchMessage,
- null, new IInputValidator() {
- public String isValid(String newText) {
- String testFor = Constants.R_HEADS + newText;
- try {
- if (repo.resolve(testFor) != null)
- return UIText.BranchSelectionDialog_ErrorAlreadyExists;
- } catch (IOException e1) {
- Activator.logError(NLS.bind(
- UIText.BranchSelectionDialog_ErrorCouldNotResolve, testFor), e1);
- }
- if (!Repository.isValidRefName(testFor))
- return UIText.BranchSelectionDialog_ErrorInvalidRefName;
- return null;
- }
- });
- labelDialog.setBlockOnOpen(true);
+ InputDialog labelDialog = getRefNameInputDialog(UIText.BranchSelectionDialog_QuestionNewBranchMessage);
if (labelDialog.open() == Window.OK) {
String newRefName = Constants.R_HEADS + labelDialog.getValue();
RefUpdate updateRef;
@@ -338,6 +389,7 @@ public String isValid(String newText) {
}
}
+
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
diff --git a/org.spearce.egit.ui/src/org/spearce/egit/ui/uitext.properties b/org.spearce.egit.ui/src/org/spearce/egit/ui/uitext.properties
index 1d21c81..2a40439 100644
--- a/org.spearce.egit.ui/src/org/spearce/egit/ui/uitext.properties
+++ b/org.spearce.egit.ui/src/org/spearce/egit/ui/uitext.properties
@@ -340,6 +340,9 @@ BranchSelectionDialog_ErrorCouldNotRefresh=Could not refresh list of branches
BranchSelectionDialog_ErrorCouldNotRefreshBranchList=Could not refresh list of branches
BranchSelectionDialog_ErrorCouldNotResolve=Could not attempt to resolve {0}
BranchSelectionDialog_ErrorInvalidRefName=Invalid ref name
+BranchSelectionDialog_ErrorCouldNotRenameRef=Failed to rename branch {0} -> {1}, status={2}
+BranchSelectionDialog_ErrorCouldNotRenameRef2=Failed to rename branch {0} -> {1}
+
BranchSelectionDialog_LocalBranches=Local Branches
BranchSelectionDialog_NewBranch=&New branch
BranchSelectionDialog_NoBranchSeletectMessage=You must select a valid ref.
@@ -347,6 +350,7 @@ BranchSelectionDialog_NoBranchSeletectTitle=No branch/tag selected
BranchSelectionDialog_OkCheckout=&Checkout
BranchSelectionDialog_OkReset=&Reset
BranchSelectionDialog_QuestionNewBranchMessage=Enter name of new branch. It will branch from the selected branch. refs/heads/ will be prepended to the name you type
+BranchSelectionDialog_QuestionNewBranchNameMessage=Enter new name of the {0} branch. refs/heads/ will be prepended to the name you type
BranchSelectionDialog_QuestionNewBranchTitle=New branch
BranchSelectionDialog_ReallyResetMessage=Resetting will overwrite any changes in your working directory.\n\nDo you wish to continue?
BranchSelectionDialog_ReallyResetTitle=Really reset?
--
1.6.3.dirty