From 2f07660e5b160bc1ca100f1c48fa296c823239c5 Mon Sep 17 00:00:00 2001 From: Tobias Hunger <tobias.hunger@nokia.com> Date: Tue, 23 Nov 2010 14:40:52 +0100 Subject: [PATCH] Git: Do not accept invalid commits Do not offer to commit in the dialog opened when closing the commit editor when the commit is not containing all the required information. --- src/libs/utils/submiteditorwidget.h | 3 +- src/plugins/git/gitplugin.cpp | 4 +-- src/plugins/vcsbase/vcsbasesubmiteditor.cpp | 35 +++++++++++++++------ src/plugins/vcsbase/vcsbasesubmiteditor.h | 3 +- 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/libs/utils/submiteditorwidget.h b/src/libs/utils/submiteditorwidget.h index 37d1c8b0bd9..c5bee5e357c 100644 --- a/src/libs/utils/submiteditorwidget.h +++ b/src/libs/utils/submiteditorwidget.h @@ -126,6 +126,8 @@ public: void addSubmitFieldWidget(SubmitFieldWidget *f); QList<SubmitFieldWidget *> submitFieldWidgets() const; + virtual bool canSubmit() const; + signals: void diffSelected(const QStringList &); void fileSelectionChanged(bool someFileSelected); @@ -139,7 +141,6 @@ public slots: protected: virtual void changeEvent(QEvent *e); void insertTopWidget(QWidget *w); - virtual bool canSubmit() const; protected slots: void updateSubmitAction(); diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 25113a7a6de..3f26eaf8f4a 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -756,8 +756,8 @@ bool GitPlugin::submitEditorAboutToClose(VCSBase::VCSBaseSubmitEditor *submitEdi const VCSBase::VCSBaseSubmitEditor::PromptSubmitResult answer = editor->promptSubmit(tr("Closing Git Editor"), tr("Do you want to commit the change?"), - tr("The commit message check failed. Do you want to commit the change?"), - &settings.promptToSubmit, !m_submitActionTriggered); + tr("Git will not accept this commit. Do you want to continue to edit it?"), + &settings.promptToSubmit, !m_submitActionTriggered, false); m_submitActionTriggered = false; switch (answer) { case VCSBase::VCSBaseSubmitEditor::SubmitCanceled: diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp index cfc10e88b88..a3a2b9618a5 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp @@ -464,8 +464,12 @@ VCSBaseSubmitEditor::PromptSubmitResult const QString &question, const QString &checkFailureQuestion, bool *promptSetting, - bool forcePrompt) const + bool forcePrompt, + bool canCommitOnFailure) const { + Utils::SubmitEditorWidget *submitWidget = + static_cast<Utils::SubmitEditorWidget *>(const_cast<VCSBaseSubmitEditor *>(this)->widget()); + raiseSubmitEditor(); QString errorMessage; @@ -476,7 +480,8 @@ VCSBaseSubmitEditor::PromptSubmitResult QWidget *parent = Core::ICore::instance()->mainWindow(); // Pop up a message depending on whether the check succeeded and the // user wants to be prompted - if (checkSubmitMessage(&errorMessage)) { + bool canCommit = checkSubmitMessage(&errorMessage) && submitWidget->canSubmit(); + if (canCommit) { // Check ok, do prompt? if (prompt) { // Provide check box to turn off prompt ONLY if it was not forced @@ -503,14 +508,26 @@ VCSBaseSubmitEditor::PromptSubmitResult msgBox.setMinimumWidth(checkDialogMinimumWidth); answer = static_cast<QMessageBox::StandardButton>(msgBox.exec()); } - switch (answer) { - case QMessageBox::No: - return SubmitDiscarded; - case QMessageBox::Yes: - return SubmitConfirmed; - default: - break; + if (!canCommit && !canCommitOnFailure) { + switch (answer) { + case QMessageBox::No: + return SubmitDiscarded; + case QMessageBox::Yes: + return SubmitCanceled; + default: + break; + } + } else { + switch (answer) { + case QMessageBox::No: + return SubmitDiscarded; + case QMessageBox::Yes: + return SubmitConfirmed; + default: + break; + } } + return SubmitCanceled; } diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h index 2880043c533..a92207b733e 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.h +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h @@ -115,7 +115,8 @@ public: PromptSubmitResult promptSubmit(const QString &title, const QString &question, const QString &checkFailureQuestion, bool *promptSetting, - bool forcePrompt = false) const; + bool forcePrompt = false, + bool canCommitOnFailure = true) const; int fileNameColumn() const; void setFileNameColumn(int c); -- GitLab