forked from qt-creator/qt-creator
Git: Suggest running mergetool if pull fails
Change-Id: Ic2fe525ea9e63a5ecdd1ab23dc07ede810aa192e Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
committed by
Orgad Shaneh
parent
7ba0433b2b
commit
099345d110
@@ -2036,11 +2036,6 @@ bool GitClient::synchronousFetch(const QString &workingDirectory, const QString
|
|||||||
return resp.result == Utils::SynchronousProcessResponse::Finished;
|
return resp.result == Utils::SynchronousProcessResponse::Finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GitClient::synchronousPull(const QString &workingDirectory)
|
|
||||||
{
|
|
||||||
return synchronousPull(workingDirectory, settings()->boolValue(GitSettings::pullRebaseKey));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GitClient::synchronousPull(const QString &workingDirectory, bool rebase)
|
bool GitClient::synchronousPull(const QString &workingDirectory, bool rebase)
|
||||||
{
|
{
|
||||||
QStringList arguments(QLatin1String("pull"));
|
QStringList arguments(QLatin1String("pull"));
|
||||||
@@ -2051,28 +2046,37 @@ bool GitClient::synchronousPull(const QString &workingDirectory, bool rebase)
|
|||||||
const Utils::SynchronousProcessResponse resp = synchronousGit(workingDirectory, arguments, flags);
|
const Utils::SynchronousProcessResponse resp = synchronousGit(workingDirectory, arguments, flags);
|
||||||
// Notify about changed files or abort the rebase.
|
// Notify about changed files or abort the rebase.
|
||||||
const bool ok = resp.result == Utils::SynchronousProcessResponse::Finished;
|
const bool ok = resp.result == Utils::SynchronousProcessResponse::Finished;
|
||||||
if (ok) {
|
if (ok)
|
||||||
GitPlugin::instance()->gitVersionControl()->emitRepositoryChanged(workingDirectory);
|
GitPlugin::instance()->gitVersionControl()->emitRepositoryChanged(workingDirectory);
|
||||||
} else {
|
else
|
||||||
if (rebase)
|
handleMergeConflicts(workingDirectory, rebase);
|
||||||
syncAbortPullRebase(workingDirectory);
|
|
||||||
}
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GitClient::syncAbortPullRebase(const QString &workingDir)
|
void GitClient::handleMergeConflicts(const QString &workingDir, bool rebase)
|
||||||
{
|
{
|
||||||
// Abort rebase to clean if something goes wrong
|
QMessageBox mergeOrAbort(QMessageBox::Question, tr("Conflicts detected"),
|
||||||
VcsBase::VcsBaseOutputWindow *outwin = VcsBase::VcsBaseOutputWindow::instance();
|
tr("Conflicts detected"), QMessageBox::Ignore | QMessageBox::Abort);
|
||||||
outwin->appendError(tr("The command 'git pull --rebase' failed, aborting rebase."));
|
mergeOrAbort.addButton(tr("Run Merge Tool"), QMessageBox::ActionRole);
|
||||||
QStringList arguments;
|
switch (mergeOrAbort.exec()) {
|
||||||
arguments << QLatin1String("rebase") << QLatin1String("--abort");
|
case QMessageBox::Abort: {
|
||||||
QByteArray stdOut;
|
// Abort merge/rebase to clean if something goes wrong
|
||||||
QByteArray stdErr;
|
VcsBase::VcsBaseOutputWindow *outwin = VcsBase::VcsBaseOutputWindow::instance();
|
||||||
const bool rc = fullySynchronousGit(workingDir, arguments, &stdOut, &stdErr, true);
|
QStringList arguments;
|
||||||
outwin->append(commandOutputFromLocal8Bit(stdOut));
|
arguments << QLatin1String(rebase ? "rebase" : "merge") << QLatin1String("--abort");
|
||||||
if (!rc)
|
QByteArray stdOut;
|
||||||
outwin->appendError(commandOutputFromLocal8Bit(stdErr));
|
QByteArray stdErr;
|
||||||
|
const bool rc = fullySynchronousGit(workingDir, arguments, &stdOut, &stdErr, true);
|
||||||
|
outwin->append(commandOutputFromLocal8Bit(stdOut));
|
||||||
|
if (!rc)
|
||||||
|
outwin->appendError(commandOutputFromLocal8Bit(stdErr));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case QMessageBox::Ignore:
|
||||||
|
break;
|
||||||
|
default: // Merge
|
||||||
|
merge(workingDir);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Subversion: git svn
|
// Subversion: git svn
|
||||||
|
|||||||
@@ -167,7 +167,6 @@ public:
|
|||||||
bool cloneRepository(const QString &directory, const QByteArray &url);
|
bool cloneRepository(const QString &directory, const QByteArray &url);
|
||||||
QString vcsGetRepositoryURL(const QString &directory);
|
QString vcsGetRepositoryURL(const QString &directory);
|
||||||
bool synchronousFetch(const QString &workingDirectory, const QString &remote);
|
bool synchronousFetch(const QString &workingDirectory, const QString &remote);
|
||||||
bool synchronousPull(const QString &workingDirectory);
|
|
||||||
bool synchronousPull(const QString &workingDirectory, bool rebase);
|
bool synchronousPull(const QString &workingDirectory, bool rebase);
|
||||||
bool synchronousPush(const QString &workingDirectory, const QString &remote = QString());
|
bool synchronousPush(const QString &workingDirectory, const QString &remote = QString());
|
||||||
|
|
||||||
@@ -285,7 +284,7 @@ private:
|
|||||||
QString *errorMessage,
|
QString *errorMessage,
|
||||||
bool revertStaging);
|
bool revertStaging);
|
||||||
void connectRepositoryChanged(const QString & repository, VcsBase::Command *cmd);
|
void connectRepositoryChanged(const QString & repository, VcsBase::Command *cmd);
|
||||||
void syncAbortPullRebase(const QString &workingDir);
|
void handleMergeConflicts(const QString &workingDir, bool rebase);
|
||||||
bool tryLauchingGitK(const QProcessEnvironment &env,
|
bool tryLauchingGitK(const QProcessEnvironment &env,
|
||||||
const QString &workingDirectory,
|
const QString &workingDirectory,
|
||||||
const QString &gitBinDirectory,
|
const QString &gitBinDirectory,
|
||||||
|
|||||||
Reference in New Issue
Block a user