diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 8c70c76fdf3..4bdca7a1251 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -2036,11 +2036,8 @@ bool GitClient::synchronousFetch(const QString &workingDirectory, const QString return resp.result == Utils::SynchronousProcessResponse::Finished; } -bool GitClient::synchronousPull(const QString &workingDirectory, bool rebase) +bool GitClient::synchronousPullOrRebase(const QString &workingDirectory, const QStringList &arguments, bool rebase) { - QStringList arguments(QLatin1String("pull")); - if (rebase) - arguments << QLatin1String("--rebase"); // Disable UNIX terminals to suppress SSH prompting. const unsigned flags = VcsBase::VcsBasePlugin::SshPasswordPrompt|VcsBase::VcsBasePlugin::ShowStdOutInLogWindow; const Utils::SynchronousProcessResponse resp = synchronousGit(workingDirectory, arguments, flags); @@ -2053,6 +2050,21 @@ bool GitClient::synchronousPull(const QString &workingDirectory, bool rebase) return ok; } +bool GitClient::synchronousPull(const QString &workingDirectory, bool rebase) +{ + QStringList arguments(QLatin1String("pull")); + if (rebase) + arguments << QLatin1String("--rebase"); + return synchronousPullOrRebase(workingDirectory, arguments, rebase); +} + +bool GitClient::synchronousRebaseContinue(const QString &workingDirectory) +{ + QStringList arguments(QLatin1String("rebase")); + arguments << QLatin1String("--continue"); + return synchronousPullOrRebase(workingDirectory, arguments, true); +} + void GitClient::handleMergeConflicts(const QString &workingDir, bool rebase) { QMessageBox mergeOrAbort(QMessageBox::Question, tr("Conflicts detected"), diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index 45cfa70e66c..21179d8dd4c 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -168,6 +168,7 @@ public: QString vcsGetRepositoryURL(const QString &directory); bool synchronousFetch(const QString &workingDirectory, const QString &remote); bool synchronousPull(const QString &workingDirectory, bool rebase); + bool synchronousRebaseContinue(const QString &workingDirectory); bool synchronousPush(const QString &workingDirectory, const QString &remote = QString()); // git svn support (asynchronous). @@ -284,6 +285,7 @@ private: QString *errorMessage, bool revertStaging); void connectRepositoryChanged(const QString & repository, VcsBase::Command *cmd); + bool synchronousPullOrRebase(const QString &workingDirectory, const QStringList &arguments, bool rebase); void handleMergeConflicts(const QString &workingDir, bool rebase); bool tryLauchingGitK(const QProcessEnvironment &env, const QString &workingDirectory, diff --git a/src/plugins/git/mergetool.cpp b/src/plugins/git/mergetool.cpp index a42a47ba9d3..30401cc0ee7 100644 --- a/src/plugins/git/mergetool.cpp +++ b/src/plugins/git/mergetool.cpp @@ -33,6 +33,7 @@ #include +#include #include #include #include @@ -257,10 +258,21 @@ void MergeTool::done() { VcsBase::VcsBaseOutputWindow *outputWindow = VcsBase::VcsBaseOutputWindow::instance(); int exitCode = m_process->exitCode(); - if (!exitCode) + if (!exitCode) { outputWindow->append(tr("Merge tool process finished successully")); - else + QString workingDirectory = m_process->workingDirectory(); + GitClient *client = GitPlugin::instance()->gitClient(); + QString gitDir = client->findGitDirForRepository(workingDirectory); + if (QFile::exists(gitDir + QLatin1String("/rebase-apply/rebasing"))) { + if (QMessageBox::question(0, tr("Continue Rebase"), + tr("Continue rebase?"), + QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes) { + client->synchronousRebaseContinue(workingDirectory); + } + } + } else { outputWindow->append(tr("Merge tool process terminated with exit code %1").arg(exitCode)); + } deleteLater(); }