From 34fd5ca532554c62fcf667ad94733929007f19b1 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh <orgad.shaneh@audiocodes.com> Date: Sat, 9 Feb 2013 20:33:50 +0200 Subject: [PATCH] Git: Handle "no changes" case on conflict resolving Change-Id: I75bb18c9564ffac3de2654bd388465794481b487 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com> --- src/plugins/git/gitclient.cpp | 4 ++-- src/plugins/git/gitclient.h | 2 +- src/plugins/git/mergetool.cpp | 33 +++++++++++++++++++-------------- src/plugins/git/mergetool.h | 2 +- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 48fde2be1e1..0e8f5af0ed8 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -2132,10 +2132,10 @@ bool GitClient::synchronousPull(const QString &workingDirectory, bool rebase) return executeAndHandleConflicts(workingDirectory, arguments, abortCommand); } -bool GitClient::synchronousCommandContinue(const QString &workingDirectory, const QString &command) +bool GitClient::synchronousCommandContinue(const QString &workingDirectory, const QString &command, bool hasChanges) { QStringList arguments; - arguments << command << QLatin1String("--continue"); + arguments << command << QLatin1String(hasChanges ? "--continue" : "--skip"); return executeAndHandleConflicts(workingDirectory, arguments, command); } diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index 956fcb460bc..66be621f2a2 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -198,7 +198,7 @@ public: QString vcsGetRepositoryURL(const QString &directory); bool synchronousFetch(const QString &workingDirectory, const QString &remote); bool synchronousPull(const QString &workingDirectory, bool rebase); - bool synchronousCommandContinue(const QString &workingDirectory, const QString &command); + bool synchronousCommandContinue(const QString &workingDirectory, const QString &command, bool hasChanges); bool synchronousPush(const QString &workingDirectory, const QString &remote = QString()); bool synchronousMerge(const QString &workingDirectory, const QString &branch); bool synchronousRebase(const QString &workingDirectory, diff --git a/src/plugins/git/mergetool.cpp b/src/plugins/git/mergetool.cpp index 45bec25742b..c44bbfe4f97 100644 --- a/src/plugins/git/mergetool.cpp +++ b/src/plugins/git/mergetool.cpp @@ -255,26 +255,31 @@ void MergeTool::readData() } } -void MergeTool::continuePreviousGitCommand(const QString &msgBoxTitle, const QString &msgBoxText, +void MergeTool::continuePreviousGitCommand(const QString &msgBoxTitle, QString msgBoxText, const QString &buttonName, const QString &gitCommand) { QString workingDirectory = m_process->workingDirectory(); - QMessageBox msgBox; - QPushButton *commandButton = msgBox.addButton(buttonName, QMessageBox::AcceptRole); - QPushButton *abortButton = msgBox.addButton(QMessageBox::Abort); + bool isRebase = gitCommand == QLatin1String("rebase"); + bool hasChanges = m_gitClient->gitStatus(m_process->workingDirectory(), + StatusMode(NoUntracked | NoSubmodules)) == GitClient::StatusChanged; + if (!hasChanges) + msgBoxText.prepend(tr("No changes found. ")); + QMessageBox msgBox(QMessageBox::Question, msgBoxTitle, msgBoxText); + if (hasChanges || isRebase) + msgBox.addButton(hasChanges ? buttonName : tr("Skip"), QMessageBox::AcceptRole); + msgBox.addButton(QMessageBox::Abort); msgBox.addButton(QMessageBox::Ignore); - msgBox.setIcon(QMessageBox::Question); - msgBox.setWindowTitle(msgBoxTitle); - msgBox.setText(msgBoxText); - msgBox.exec(); - - if (msgBox.clickedButton() == commandButton) { // Continue - if (gitCommand == QLatin1String("rebase")) - m_gitClient->synchronousCommandContinue(workingDirectory, gitCommand); + switch (msgBox.exec()) { + case QMessageBox::Ignore: + break; + case QMessageBox::Abort: + m_gitClient->synchronousAbortCommand(workingDirectory, gitCommand); + break; + default: // Continue/Skip + if (isRebase) + m_gitClient->synchronousCommandContinue(workingDirectory, gitCommand, hasChanges); else GitPlugin::instance()->startCommit(); - } else if (msgBox.clickedButton() == abortButton) { // Abort - m_gitClient->synchronousAbortCommand(workingDirectory, gitCommand); } } diff --git a/src/plugins/git/mergetool.h b/src/plugins/git/mergetool.h index edb5658cc49..093b7ab4c9b 100644 --- a/src/plugins/git/mergetool.h +++ b/src/plugins/git/mergetool.h @@ -78,7 +78,7 @@ private: QString stateName(FileState state, const QString &extraInfo); void chooseAction(); void addButton(QMessageBox *msgBox, const QString &text, char key); - void continuePreviousGitCommand(const QString &msgBoxTitle, const QString &msgBoxText, + void continuePreviousGitCommand(const QString &msgBoxTitle, QString msgBoxText, const QString &buttonName, const QString &gitCommand); MergeToolProcess *m_process; -- GitLab