diff --git a/src/plugins/git/branchadddialog.cpp b/src/plugins/git/branchadddialog.cpp index bcb16b392556ca0182f2936b37a692d406b6c56b..1beab9c93b2ab3fedcd0e29c1f6ca2c4b9ad315b 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 ef1088795ed73a69be3366ff63c0183f0e7287ab..7c50d80c2a41b924c4cf41372d5c0c465e20aecd 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 b891a7d4efe00a6fffb96bf52f930fbf02e8a04f..d319d79afba6fc773e0a509e1a4d144f24e1d350 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 e902223734e8297a43c8b83f459cd8aead546d0c..99d315dd0035f143ba9abdcd69bed126c4d7cd54 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 0725d00dfc5fd4366377cacf1807163979606f10..34afa8aa559632f2b3cf8a38e0942e1d10dec188 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 5c9f1fd462fcc3e09ad37c6dc6dfebfd43b042cf..e23889a3424deeda5bcdfcd78367c831fcadb2b8 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">