Git: Show conflicted commit

Change-Id: I398437db96082e8813090b5eb78ae1c8b8158ffe
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@digia.com>
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
Orgad Shaneh
2013-02-08 15:42:13 +02:00
committed by Orgad Shaneh
parent 962ba86d0f
commit bf61858375
2 changed files with 21 additions and 8 deletions

View File

@@ -2091,18 +2091,29 @@ bool GitClient::synchronousFetch(const QString &workingDirectory, const QString
return resp.result == Utils::SynchronousProcessResponse::Finished;
}
bool GitClient::executeAndHandleConflicts(const QString &workingDirectory, const QStringList &arguments, const QString &abortCommand)
bool GitClient::executeAndHandleConflicts(const QString &workingDirectory,
const QStringList &arguments,
const QString &abortCommand)
{
// Disable UNIX terminals to suppress SSH prompting.
const unsigned flags = VcsBase::VcsBasePlugin::SshPasswordPrompt|VcsBase::VcsBasePlugin::ShowStdOutInLogWindow;
const Utils::SynchronousProcessResponse resp = synchronousGit(workingDirectory, arguments, flags);
// Notify about changed files or abort the rebase.
const bool ok = resp.result == Utils::SynchronousProcessResponse::Finished;
if (ok)
if (ok) {
GitPlugin::instance()->gitVersionControl()->emitRepositoryChanged(workingDirectory);
else if (resp.stdOut.contains(QLatin1String("CONFLICT"))
|| resp.stdErr.contains(QLatin1String("conflict")))
handleMergeConflicts(workingDirectory, abortCommand);
} else if (resp.stdOut.contains(QLatin1String("CONFLICT"))) {
// rebase conflict is output to stdOut
QRegExp conflictedCommit(QLatin1String("Patch failed at ([^\\n]*)\\n"));
conflictedCommit.indexIn(resp.stdOut);
qDebug() << conflictedCommit.cap(1);
handleMergeConflicts(workingDirectory, conflictedCommit.cap(1), abortCommand);
} else if (resp.stdErr.contains(QLatin1String("conflict"))) {
// cherry-pick/revert conflict is output to stdErr
QRegExp conflictedCommit(QLatin1String("could not (?:apply|revert) (.*)$"));
conflictedCommit.indexIn(resp.stdErr);
handleMergeConflicts(workingDirectory, conflictedCommit.cap(1), abortCommand);
}
return ok;
}
@@ -2146,10 +2157,12 @@ void GitClient::synchronousAbortCommand(const QString &workingDir, const QString
outwin->appendError(commandOutputFromLocal8Bit(stdErr));
}
void GitClient::handleMergeConflicts(const QString &workingDir, const QString &abortCommand)
void GitClient::handleMergeConflicts(const QString &workingDir, const QString &commit, const QString &abortCommand)
{
QString message = commit.isEmpty() ? tr("Conflicts detected")
: tr("Conflicts detected with commit %1").arg(commit);
QMessageBox mergeOrAbort(QMessageBox::Question, tr("Conflicts Detected"),
tr("Conflicts detected"), QMessageBox::Ignore | QMessageBox::Abort);
message, QMessageBox::Ignore | QMessageBox::Abort);
mergeOrAbort.addButton(tr("Run Merge Tool"), QMessageBox::ActionRole);
switch (mergeOrAbort.exec()) {
case QMessageBox::Abort: {