OSDN Git Service

Git: Do not accept invalid commits
authorTobias Hunger <tobias.hunger@nokia.com>
Tue, 23 Nov 2010 13:40:52 +0000 (14:40 +0100)
committerTobias Hunger <tobias.hunger@nokia.com>
Tue, 23 Nov 2010 15:01:47 +0000 (16:01 +0100)
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
src/plugins/git/gitplugin.cpp
src/plugins/vcsbase/vcsbasesubmiteditor.cpp
src/plugins/vcsbase/vcsbasesubmiteditor.h

index 37d1c8b..c5bee5e 100644 (file)
@@ -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();
index 25113a7..3f26eaf 100644 (file)
@@ -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:
index cfc10e8..a3a2b96 100644 (file)
@@ -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;
 }
 
index 2880043..a92207b 100644 (file)
@@ -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);