From 0dee89bac12c015f34e7cb51c44a79c43e1c3365 Mon Sep 17 00:00:00 2001 From: Petar Perisin <petar.perisin@gmail.com> Date: Fri, 5 Apr 2013 14:31:58 +0200 Subject: [PATCH] Git: added rename branch Change-Id: I327a2bc91b871dc03797d9af52bb2d32be8e76d2 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com> --- src/plugins/git/branchadddialog.cpp | 3 ++- src/plugins/git/branchadddialog.h | 2 +- src/plugins/git/branchadddialog.ui | 2 +- src/plugins/git/branchdialog.cpp | 32 +++++++++++++++++++++++++++++ src/plugins/git/branchdialog.h | 1 + src/plugins/git/branchdialog.ui | 7 +++++++ 6 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/plugins/git/branchadddialog.cpp b/src/plugins/git/branchadddialog.cpp index bcb16b39255..1beab9c93b2 100644 --- a/src/plugins/git/branchadddialog.cpp +++ b/src/plugins/git/branchadddialog.cpp @@ -95,11 +95,12 @@ private: }; -BranchAddDialog::BranchAddDialog(QWidget *parent) : +BranchAddDialog::BranchAddDialog(QWidget *parent, bool addBranch) : QDialog(parent), m_ui(new Ui::BranchAddDialog) { m_ui->setupUi(this); + setWindowTitle(addBranch ? tr("Add Branch") : tr("Rename Branch")); m_ui->branchNameEdit->setValidator(new BranchNameValidator(this)); connect(m_ui->branchNameEdit, SIGNAL(textChanged(QString)), this, SLOT(updateButtonStatus())); } diff --git a/src/plugins/git/branchadddialog.h b/src/plugins/git/branchadddialog.h index ef1088795ed..7c50d80c2a4 100644 --- a/src/plugins/git/branchadddialog.h +++ b/src/plugins/git/branchadddialog.h @@ -45,7 +45,7 @@ class BranchAddDialog : public QDialog Q_OBJECT public: - explicit BranchAddDialog(QWidget *parent = 0); + explicit BranchAddDialog(QWidget *parent = 0, bool addBranch = true); ~BranchAddDialog(); void setBranchName(const QString &); diff --git a/src/plugins/git/branchadddialog.ui b/src/plugins/git/branchadddialog.ui index b891a7d4efe..d319d79afba 100644 --- a/src/plugins/git/branchadddialog.ui +++ b/src/plugins/git/branchadddialog.ui @@ -11,7 +11,7 @@ </rect> </property> <property name="windowTitle"> - <string>Add Branch</string> + <string/> </property> <layout class="QGridLayout" name="gridLayout"> <item row="0" column="0"> diff --git a/src/plugins/git/branchdialog.cpp b/src/plugins/git/branchdialog.cpp index e902223734e..99d315dd003 100644 --- a/src/plugins/git/branchdialog.cpp +++ b/src/plugins/git/branchdialog.cpp @@ -64,6 +64,7 @@ BranchDialog::BranchDialog(QWidget *parent) : connect(m_ui->addButton, SIGNAL(clicked()), this, SLOT(add())); connect(m_ui->checkoutButton, SIGNAL(clicked()), this, SLOT(checkout())); connect(m_ui->removeButton, SIGNAL(clicked()), this, SLOT(remove())); + connect(m_ui->renameButton, SIGNAL(clicked()), this, SLOT(rename())); connect(m_ui->diffButton, SIGNAL(clicked()), this, SLOT(diff())); connect(m_ui->logButton, SIGNAL(clicked()), this, SLOT(log())); connect(m_ui->mergeButton, SIGNAL(clicked()), this, SLOT(merge())); @@ -106,6 +107,7 @@ void BranchDialog::enableButtons() const bool currentLocal = m_model->isLocal(m_model->currentBranch()); m_ui->removeButton->setEnabled(hasSelection && !currentSelected && isLocal && isLeaf); + m_ui->renameButton->setEnabled(hasSelection && isLocal && isLeaf); m_ui->logButton->setEnabled(hasSelection && isLeaf); m_ui->diffButton->setEnabled(hasSelection && isLeaf); m_ui->checkoutButton->setEnabled(hasSelection && !currentSelected && isLeaf); @@ -230,6 +232,36 @@ void BranchDialog::remove() m_model->removeBranch(selected); } +void BranchDialog::rename() +{ + QModelIndex selected = selectedIndex(); + QTC_CHECK(selected != m_model->currentBranch()); // otherwise the button would not be enabled! + QTC_CHECK(m_model->isLocal(selected)); // otherwise the button would not be enabled! + + QString oldBranchName = m_model->branchName(selected); + QStringList localNames = m_model->localBranchNames(); + + QPointer<BranchAddDialog> branchAddDialog = new BranchAddDialog(this, false); + branchAddDialog->setBranchName(oldBranchName); + branchAddDialog->setTrackedBranchName(QString(), false); + + branchAddDialog->exec(); + + if (!branchAddDialog.isNull() && branchAddDialog->result() == QDialog::Accepted && m_model) { + if (branchAddDialog->branchName() == oldBranchName) + return; + if (localNames.contains(branchAddDialog->branchName())) { + QMessageBox::critical(this, tr("Branch exists"), + tr("Local Branch \'%1\' already exists.") + .arg(branchAddDialog->branchName())); + return; + } + m_model->renameBranch(oldBranchName, branchAddDialog->branchName()); + refresh(); + } + enableButtons(); +} + void BranchDialog::diff() { QString branchName = m_model->branchName(selectedIndex()); diff --git a/src/plugins/git/branchdialog.h b/src/plugins/git/branchdialog.h index 0725d00dfc5..34afa8aa559 100644 --- a/src/plugins/git/branchdialog.h +++ b/src/plugins/git/branchdialog.h @@ -68,6 +68,7 @@ private slots: void add(); void checkout(); void remove(); + void rename(); void diff(); void log(); void merge(); diff --git a/src/plugins/git/branchdialog.ui b/src/plugins/git/branchdialog.ui index 5c9f1fd462f..e23889a3424 100644 --- a/src/plugins/git/branchdialog.ui +++ b/src/plugins/git/branchdialog.ui @@ -95,6 +95,13 @@ </property> </widget> </item> + <item> + <widget class="QPushButton" name="renameButton"> + <property name="text"> + <string>Re&name</string> + </property> + </widget> + </item> <item> <widget class="QPushButton" name="checkoutButton"> <property name="text"> -- GitLab