diff options
| author | Andre Hartmann <aha_1980@gmx.de> | 2018-02-18 17:12:55 +0100 |
|---|---|---|
| committer | André Hartmann <aha_1980@gmx.de> | 2018-03-01 21:20:42 +0000 |
| commit | a2edfda1ca1e2beaba29398793fbae638e5df7d8 (patch) | |
| tree | 42b21f3e606788e29c5e627c272872a49889960f /src/plugins/git/branchdialog.cpp | |
| parent | 205c930592ce32d5fe98eb68f1100052dbe96b92 (diff) | |
| download | qt-creator-a2edfda1ca1e2beaba29398793fbae638e5df7d8.tar.gz | |
Git: Extract BranchUtils for re-use in Branches Side Panel
Done-with: Orgad Shaneh <orgad.shaneh@audiocodes.com>
Change-Id: I1f48ffb3d9bb9b8d743ab6891c472fcfab778cf6
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: André Hartmann <aha_1980@gmx.de>
Diffstat (limited to 'src/plugins/git/branchdialog.cpp')
| -rw-r--r-- | src/plugins/git/branchdialog.cpp | 237 |
1 files changed, 13 insertions, 224 deletions
diff --git a/src/plugins/git/branchdialog.cpp b/src/plugins/git/branchdialog.cpp index 8935a4ce9f..86d11751d9 100644 --- a/src/plugins/git/branchdialog.cpp +++ b/src/plugins/git/branchdialog.cpp @@ -27,6 +27,7 @@ #include "branchadddialog.h" #include "branchcheckoutdialog.h" #include "branchmodel.h" +#include "branchutils.h" #include "gitclient.h" #include "gitplugin.h" #include "gitutils.h" @@ -55,14 +56,15 @@ namespace Internal { BranchDialog::BranchDialog(QWidget *parent) : QDialog(parent), - m_ui(new Ui::BranchDialog), - m_model(new BranchModel(GitPlugin::client(), this)) + BranchUtils(this), + m_ui(new Ui::BranchDialog) { setModal(false); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setAttribute(Qt::WA_DeleteOnClose, true); // Do not update unnecessarily m_ui->setupUi(this); + setBranchView(m_ui->branchView); m_ui->includeOldCheckBox->setToolTip( tr("Include branches and tags that have not been active for %n days.", 0, Constants::OBSOLETE_COMMIT_AGE_IN_DAYS)); @@ -70,16 +72,16 @@ BranchDialog::BranchDialog(QWidget *parent) : GitSettings::showTagsKey)); connect(m_ui->refreshButton, &QAbstractButton::clicked, this, &BranchDialog::refreshCurrentRepository); - connect(m_ui->addButton, &QAbstractButton::clicked, this, &BranchDialog::add); - connect(m_ui->checkoutButton, &QAbstractButton::clicked, this, &BranchDialog::checkout); - connect(m_ui->removeButton, &QAbstractButton::clicked, this, &BranchDialog::remove); + connect(m_ui->addButton, &QAbstractButton::clicked, this, [this] { add(); }); + connect(m_ui->checkoutButton, &QAbstractButton::clicked, this, [this] { checkout(); }); + connect(m_ui->removeButton, &QAbstractButton::clicked, this, [this] { remove(); }); connect(m_ui->renameButton, &QAbstractButton::clicked, this, &BranchDialog::rename); connect(m_ui->diffButton, &QAbstractButton::clicked, this, &BranchDialog::diff); connect(m_ui->logButton, &QAbstractButton::clicked, this, &BranchDialog::log); - connect(m_ui->resetButton, &QAbstractButton::clicked, this, &BranchDialog::reset); + connect(m_ui->resetButton, &QAbstractButton::clicked, this, [this] { reset(); }); connect(m_ui->mergeButton, &QAbstractButton::clicked, this, &BranchDialog::merge); - connect(m_ui->rebaseButton, &QAbstractButton::clicked, this, &BranchDialog::rebase); - connect(m_ui->cherryPickButton, &QAbstractButton::clicked, this, &BranchDialog::cherryPick); + connect(m_ui->rebaseButton, &QAbstractButton::clicked, this, [this] { rebase(); }); + connect(m_ui->cherryPickButton, &QAbstractButton::clicked, this, [this] { cherryPick(); }); connect(m_ui->trackButton, &QAbstractButton::clicked, this, &BranchDialog::setRemoteTracking); connect(m_ui->includeOldCheckBox, &QCheckBox::toggled, this, [this](bool value) { m_model->setOldBranchesIncluded(value); @@ -168,170 +170,10 @@ void BranchDialog::refreshCurrentRepository() refresh(m_repository, true); } -void BranchDialog::add() -{ - QModelIndex trackedIndex = selectedIndex(); - QString trackedBranch = m_model->fullName(trackedIndex); - if (trackedBranch.isEmpty()) { - trackedIndex = m_model->currentBranch(); - trackedBranch = m_model->fullName(trackedIndex); - } - const bool isLocal = m_model->isLocal(trackedIndex); - const bool isTag = m_model->isTag(trackedIndex); - - QStringList localNames = m_model->localBranchNames(); - - QString suggestedName; - if (!isTag) { - const QString suggestedNameBase = trackedBranch.mid(trackedBranch.lastIndexOf('/') + 1); - suggestedName = suggestedNameBase; - int i = 2; - while (localNames.contains(suggestedName)) { - suggestedName = suggestedNameBase + QString::number(i); - ++i; - } - } - - BranchAddDialog branchAddDialog(localNames, true, this); - branchAddDialog.setBranchName(suggestedName); - branchAddDialog.setTrackedBranchName(isTag ? QString() : trackedBranch, !isLocal); - - if (branchAddDialog.exec() == QDialog::Accepted) { - QModelIndex idx = m_model->addBranch(branchAddDialog.branchName(), branchAddDialog.track(), trackedIndex); - if (!idx.isValid()) - return; - m_ui->branchView->selectionModel()->select(idx, QItemSelectionModel::Clear - | QItemSelectionModel::Select - | QItemSelectionModel::Current); - m_ui->branchView->scrollTo(idx); - if (QMessageBox::question(this, tr("Checkout"), tr("Checkout branch?"), - QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) - checkout(); - } -} - -void BranchDialog::checkout() -{ - if (!Core::DocumentManager::saveAllModifiedDocuments()) - return; - QModelIndex idx = selectedIndex(); - - const QString currentBranch = m_model->fullName(m_model->currentBranch()); - const QString nextBranch = m_model->fullName(idx); - const QString popMessageStart = QCoreApplication::applicationName() + - ' ' + nextBranch + "-AutoStash "; - - BranchCheckoutDialog branchCheckoutDialog(this, currentBranch, nextBranch); - GitClient *client = GitPlugin::client(); - - if (client->gitStatus(m_repository, StatusMode(NoUntracked | NoSubmodules)) != GitClient::StatusChanged) - branchCheckoutDialog.foundNoLocalChanges(); - - QList<Stash> stashes; - client->synchronousStashList(m_repository, &stashes); - for (const Stash &stash : Utils::asConst(stashes)) { - if (stash.message.startsWith(popMessageStart)) { - branchCheckoutDialog.foundStashForNextBranch(); - break; - } - } - - if (!branchCheckoutDialog.hasLocalChanges() && - !branchCheckoutDialog.hasStashForNextBranch()) { - // No local changes and no Auto Stash - no need to open dialog - m_model->checkoutBranch(idx); - } else if (branchCheckoutDialog.exec() == QDialog::Accepted) { - - if (branchCheckoutDialog.makeStashOfCurrentBranch()) { - if (client->synchronousStash(m_repository, currentBranch + "-AutoStash").isEmpty()) - return; - } else if (branchCheckoutDialog.moveLocalChangesToNextBranch()) { - if (!client->beginStashScope(m_repository, "Checkout", NoPrompt)) - return; - } else if (branchCheckoutDialog.discardLocalChanges()) { - if (!client->synchronousReset(m_repository)) - return; - } - - m_model->checkoutBranch(idx); - - QString stashName; - client->synchronousStashList(m_repository, &stashes); - for (const Stash &stash : Utils::asConst(stashes)) { - if (stash.message.startsWith(popMessageStart)) { - stashName = stash.name; - break; - } - } - - if (branchCheckoutDialog.moveLocalChangesToNextBranch()) - client->endStashScope(m_repository); - else if (branchCheckoutDialog.popStashOfNextBranch()) - client->synchronousStashRestore(m_repository, stashName, true); - } - m_ui->branchView->selectionModel()->clear(); -} - -/* Prompt to delete a local branch and do so. */ -void BranchDialog::remove() -{ - QModelIndex selected = selectedIndex(); - QTC_CHECK(selected != m_model->currentBranch()); // otherwise the button would not be enabled! - - QString branchName = m_model->fullName(selected); - if (branchName.isEmpty()) - return; - - const bool isTag = m_model->isTag(selected); - const bool wasMerged = isTag ? true : m_model->branchIsMerged(selected); - QString message; - if (isTag) - message = tr("Would you like to delete the tag \"%1\"?").arg(branchName); - else if (wasMerged) - message = tr("Would you like to delete the branch \"%1\"?").arg(branchName); - else - message = tr("Would you like to delete the <b>unmerged</b> branch \"%1\"?").arg(branchName); - - if (QMessageBox::question(this, isTag ? tr("Delete Tag") : tr("Delete Branch"), - message, QMessageBox::Yes | QMessageBox::No, - wasMerged ? QMessageBox::Yes : QMessageBox::No) == QMessageBox::Yes) { - if (isTag) - m_model->removeTag(selected); - else - m_model->removeBranch(selected); - } -} - void BranchDialog::rename() { - QModelIndex selected = selectedIndex(); - QTC_CHECK(selected != m_model->currentBranch()); // otherwise the button would not be enabled! - const bool isTag = m_model->isTag(selected); - QTC_CHECK(m_model->isLocal(selected) || isTag); - - QString oldName = m_model->fullName(selected); - QStringList localNames; - if (!isTag) - localNames = m_model->localBranchNames(); - - BranchAddDialog branchAddDialog(localNames, false, this); - if (isTag) - branchAddDialog.setWindowTitle(tr("Rename Tag")); - branchAddDialog.setBranchName(oldName); - branchAddDialog.setTrackedBranchName(QString(), false); - - branchAddDialog.exec(); - - if (branchAddDialog.result() == QDialog::Accepted) { - if (branchAddDialog.branchName() == oldName) - return; - if (isTag) - m_model->renameTag(oldName, branchAddDialog.branchName()); - else - m_model->renameBranch(oldName, branchAddDialog.branchName()); + if (BranchUtils::rename()) refreshCurrentRepository(); - } - m_ui->branchView->selectionModel()->clear(); } void BranchDialog::diff() @@ -350,31 +192,10 @@ void BranchDialog::log() GitPlugin::client()->log(m_repository, QString(), false, {branchName}); } -void BranchDialog::reset() -{ - QString currentName = m_model->fullName(m_model->currentBranch()); - QString branchName = m_model->fullName(selectedIndex()); - if (currentName.isEmpty() || branchName.isEmpty()) - return; - - if (QMessageBox::question(this, tr("Git Reset"), tr("Hard reset branch \"%1\" to \"%2\"?") - .arg(currentName).arg(branchName), - QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes) { - GitPlugin::client()->reset(m_repository, "--hard", branchName); - } -} - void BranchDialog::merge() { - if (!Core::DocumentManager::saveAllModifiedDocuments()) - return; - QModelIndex idx = selectedIndex(); - QTC_CHECK(idx != m_model->currentBranch()); // otherwise the button would not be enabled! - - const QString branch = m_model->fullName(idx, true); - GitClient *client = GitPlugin::client(); bool allowFastForward = true; - if (client->isFastForwardMerge(m_repository, branch)) { + if (isFastForwardMerge()) { QMenu popup; QAction *fastForward = popup.addAction(tr("Fast-Forward")); popup.addAction(tr("No Fast-Forward")); @@ -383,32 +204,8 @@ void BranchDialog::merge() return; allowFastForward = (chosen == fastForward); } - if (client->beginStashScope(m_repository, "merge", AllowUnstashed)) - client->synchronousMerge(m_repository, branch, allowFastForward); -} - -void BranchDialog::rebase() -{ - if (!Core::DocumentManager::saveAllModifiedDocuments()) - return; - QModelIndex idx = selectedIndex(); - QTC_CHECK(idx != m_model->currentBranch()); // otherwise the button would not be enabled! - - const QString baseBranch = m_model->fullName(idx, true); - GitClient *client = GitPlugin::client(); - if (client->beginStashScope(m_repository, "rebase")) - client->rebase(m_repository, baseBranch); -} - -void BranchDialog::cherryPick() -{ - if (!Core::DocumentManager::saveAllModifiedDocuments()) - return; - QModelIndex idx = selectedIndex(); - QTC_CHECK(idx != m_model->currentBranch()); // otherwise the button would not be enabled! - const QString branch = m_model->fullName(idx, true); - GitPlugin::client()->synchronousCherryPick(m_repository, branch); + BranchUtils::merge(allowFastForward); } void BranchDialog::setRemoteTracking() @@ -416,13 +213,5 @@ void BranchDialog::setRemoteTracking() m_model->setRemoteTracking(selectedIndex()); } -QModelIndex BranchDialog::selectedIndex() -{ - QModelIndexList selected = m_ui->branchView->selectionModel()->selectedIndexes(); - if (selected.isEmpty()) - return QModelIndex(); - return selected.at(0); -} - } // namespace Internal } // namespace Git |
