From 9b61e484bed797f0424440bce5c87172a832eda4 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sun, 16 Oct 2022 05:58:20 +0300 Subject: [PATCH] VCS: Deduplicate some submit editor closing logic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I622f5703c222a48606fcca3b99e87f9398e6a815 Reviewed-by: André Hartmann --- src/plugins/bazaar/bazaarplugin.cpp | 23 --------------- src/plugins/clearcase/clearcaseplugin.cpp | 25 +--------------- src/plugins/cvs/cvsplugin.cpp | 24 +--------------- src/plugins/git/gitplugin.cpp | 27 +---------------- src/plugins/mercurial/mercurialplugin.cpp | 24 ---------------- src/plugins/perforce/perforceplugin.cpp | 23 ++------------- src/plugins/subversion/subversionplugin.cpp | 24 +--------------- src/plugins/vcsbase/vcsbaseplugin.cpp | 32 +++++++++++++++++++-- src/plugins/vcsbase/vcsbaseplugin.h | 4 ++- 9 files changed, 39 insertions(+), 167 deletions(-) diff --git a/src/plugins/bazaar/bazaarplugin.cpp b/src/plugins/bazaar/bazaarplugin.cpp index 9383aa175f1..4f417ddc5e7 100644 --- a/src/plugins/bazaar/bazaarplugin.cpp +++ b/src/plugins/bazaar/bazaarplugin.cpp @@ -206,7 +206,6 @@ public: void update(); void commit(); void showCommitWidget(const QList &status); - void commitFromEditor() override; void uncommit(); void diffFromEditorSelected(const QStringList &files); @@ -242,7 +241,6 @@ public: QAction *m_menuAction = nullptr; FilePath m_submitRepository; - bool m_submitActionTriggered = false; VcsEditorFactory logEditorFactory { &logEditorParameters, @@ -776,14 +774,6 @@ void BazaarPlugin::testLogResolving() } #endif -void BazaarPluginPrivate::commitFromEditor() -{ - // Close the submit editor - m_submitActionTriggered = true; - QTC_ASSERT(submitEditor(), return); - EditorManager::closeDocuments({submitEditor()->document()}); -} - void BazaarPluginPrivate::uncommit() { const VcsBasePluginState state = currentState(); @@ -801,19 +791,6 @@ bool BazaarPluginPrivate::submitEditorAboutToClose() IDocument *editorDocument = commitEditor->document(); QTC_ASSERT(editorDocument, return true); - const VcsBaseSubmitEditor::PromptSubmitResult response = - commitEditor->promptSubmit(this, !m_submitActionTriggered); - m_submitActionTriggered = false; - - switch (response) { - case VcsBaseSubmitEditor::SubmitCanceled: - return false; - case VcsBaseSubmitEditor::SubmitDiscarded: - return true; - default: - break; - } - QStringList files = commitEditor->checkedFiles(); if (!files.empty()) { //save the commit message diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp index e4aacaf86f9..6be0bc3d9e9 100644 --- a/src/plugins/clearcase/clearcaseplugin.cpp +++ b/src/plugins/clearcase/clearcaseplugin.cpp @@ -219,6 +219,7 @@ public: protected: void updateActions(VcsBase::VcsBasePluginPrivate::ActionState) override; bool submitEditorAboutToClose() override; + void discardCommit() override { cleanCheckInMessageFile(); } QString ccGet(const FilePath &workingDir, const QString &file, const QString &prefix = {}); QList ccGetActivities() const; @@ -239,7 +240,6 @@ private: void historyCurrentFile(); void annotateCurrentFile(); void viewStatus(); - void commitFromEditor() override; void diffCheckInFiles(const QStringList &); void updateIndex(); void updateView(); @@ -311,7 +311,6 @@ private: QAction *m_statusAction = nullptr; QAction *m_menuAction = nullptr; - bool m_submitActionTriggered = false; QMutex m_activityMutex; QList m_activities; QSharedPointer m_statusMap; @@ -752,21 +751,6 @@ bool ClearCasePluginPrivate::submitEditorAboutToClose() if (editorFile.absoluteFilePath() != changeFile.absoluteFilePath()) return true; // Oops?! - // Prompt user. Force a prompt unless submit was actually invoked (that - // is, the editor was closed or shutdown). - const VcsBaseSubmitEditor::PromptSubmitResult answer = - editor->promptSubmit(this, !m_submitActionTriggered); - m_submitActionTriggered = false; - switch (answer) { - case VcsBaseSubmitEditor::SubmitCanceled: - return false; // Keep editing and change file - case VcsBaseSubmitEditor::SubmitDiscarded: - cleanCheckInMessageFile(); - return true; // Cancel all - default: - break; - } - const QStringList fileList = editor->checkedFiles(); bool closeEditor = true; if (!fileList.empty()) { @@ -1604,13 +1588,6 @@ void ClearCasePluginPrivate::vcsDescribe(const FilePath &source, const QString & } } -void ClearCasePluginPrivate::commitFromEditor() -{ - m_submitActionTriggered = true; - QTC_ASSERT(submitEditor(), return); - EditorManager::closeDocuments({submitEditor()->document()}); -} - CommandResult ClearCasePluginPrivate::runCleartoolProc(const FilePath &workingDir, const QStringList &arguments) const { diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp index cbf8b26ef72..39cbf561fa4 100644 --- a/src/plugins/cvs/cvsplugin.cpp +++ b/src/plugins/cvs/cvsplugin.cpp @@ -239,6 +239,7 @@ public: protected: void updateActions(ActionState) final; bool submitEditorAboutToClose() final; + void discardCommit() override { cleanCommitMessageFile(); } private: void addCurrentFile(); @@ -254,7 +255,6 @@ private: void projectStatus(); void updateDirectory(); void updateProject(); - void commitFromEditor() final; void diffCommitFiles(const QStringList &); void logProject(); void logRepository(); @@ -327,7 +327,6 @@ private: QAction *m_statusRepositoryAction = nullptr; QAction *m_menuAction = nullptr; - bool m_submitActionTriggered = false; CvsSettingsPage m_settingsPage{&m_settings}; @@ -724,20 +723,6 @@ bool CvsPluginPrivate::submitEditorAboutToClose() if (editorFile.absoluteFilePath() != changeFile.absoluteFilePath()) return true; // Oops?! - // Prompt user. Force a prompt unless submit was actually invoked (that - // is, the editor was closed or shutdown). - const VcsBaseSubmitEditor::PromptSubmitResult answer = - editor->promptSubmit(this, !m_submitActionTriggered); - m_submitActionTriggered = false; - switch (answer) { - case VcsBaseSubmitEditor::SubmitCanceled: - return false; // Keep editing and change file - case VcsBaseSubmitEditor::SubmitDiscarded: - cleanCommitMessageFile(); - return true; // Cancel all - default: - break; - } const QStringList fileList = editor->checkedFiles(); bool closeEditor = true; if (!fileList.empty()) { @@ -1342,13 +1327,6 @@ bool CvsPluginPrivate::describe(const FilePath &repositoryPath, return true; } -void CvsPluginPrivate::commitFromEditor() -{ - m_submitActionTriggered = true; - QTC_ASSERT(submitEditor(), return); - EditorManager::closeDocuments({submitEditor()->document()}); -} - // Run CVS. At this point, file arguments must be relative to // the working directory (see above). CommandResult CvsPluginPrivate::runCvs(const FilePath &workingDirectory, diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index b71a50694c3..e269dc386ee 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -251,10 +251,10 @@ public: void updateActions(VcsBasePluginPrivate::ActionState) override; bool submitEditorAboutToClose() override; + void discardCommit() override { cleanCommitMessageFile(); } void diffCurrentFile(); void diffCurrentProject(); - void commitFromEditor() override; void logFile(); void blameFile(); void logProject(); @@ -363,7 +363,6 @@ public: QPointer m_remoteDialog; FilePath m_submitRepository; QString m_commitMessageFileName; - bool m_submitActionTriggered = false; GitSettingsPage settingPage{&m_settings}; @@ -1381,14 +1380,6 @@ IEditor *GitPluginPrivate::openSubmitEditor(const QString &fileName, const Commi return editor; } -void GitPluginPrivate::commitFromEditor() -{ - // Close the submit editor - m_submitActionTriggered = true; - QTC_ASSERT(submitEditor(), return); - EditorManager::closeDocuments({submitEditor()->document()}); -} - bool GitPluginPrivate::submitEditorAboutToClose() { if (!isCommitEditorOpen()) @@ -1404,23 +1395,7 @@ bool GitPluginPrivate::submitEditorAboutToClose() // Paranoia! if (editorFile.absoluteFilePath() != changeFile.absoluteFilePath()) return true; - // Prompt user. Force a prompt unless submit was actually invoked (that - // is, the editor was closed or shutdown). - const VcsBaseSubmitEditor::PromptSubmitResult answer - = editor->promptSubmit(this, !m_submitActionTriggered, false); - m_submitActionTriggered = false; - switch (answer) { - case VcsBaseSubmitEditor::SubmitCanceled: - return false; // Keep editing and change file - case VcsBaseSubmitEditor::SubmitDiscarded: - cleanCommitMessageFile(); - return true; // Cancel all - default: - break; - } - - // Go ahead! auto model = qobject_cast(editor->fileModel()); CommitType commitType = editor->commitType(); QString amendSHA1 = editor->amendSHA1(); diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp index 02f7023fccd..e4882006f16 100644 --- a/src/plugins/mercurial/mercurialplugin.cpp +++ b/src/plugins/mercurial/mercurialplugin.cpp @@ -161,7 +161,6 @@ private: void outgoing(); void commit(); void showCommitWidget(const QList &status); - void commitFromEditor() override; void diffFromEditorSelected(const QStringList &files); void createMenu(const Core::Context &context); @@ -193,8 +192,6 @@ private: FilePath m_submitRepository; - bool m_submitActionTriggered = false; - public: VcsSubmitEditorFactory submitEditorFactory { submitEditorParameters, @@ -647,14 +644,6 @@ void MercurialPluginPrivate::diffFromEditorSelected(const QStringList &files) m_client.diff(m_submitRepository, files); } -void MercurialPluginPrivate::commitFromEditor() -{ - // Close the submit editor - m_submitActionTriggered = true; - QTC_ASSERT(submitEditor(), return); - Core::EditorManager::closeDocuments({submitEditor()->document()}); -} - bool MercurialPluginPrivate::submitEditorAboutToClose() { auto commitEditor = qobject_cast(submitEditor()); @@ -662,19 +651,6 @@ bool MercurialPluginPrivate::submitEditorAboutToClose() Core::IDocument *editorFile = commitEditor->document(); QTC_ASSERT(editorFile, return true); - const VcsBaseSubmitEditor::PromptSubmitResult response = - commitEditor->promptSubmit(this, !m_submitActionTriggered); - m_submitActionTriggered = false; - - switch (response) { - case VcsBaseSubmitEditor::SubmitCanceled: - return false; - case VcsBaseSubmitEditor::SubmitDiscarded: - return true; - default: - break; - } - const QStringList files = commitEditor->checkedFiles(); if (!files.empty()) { //save the commit message diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp index 65693295663..9033afe2745 100644 --- a/src/plugins/perforce/perforceplugin.cpp +++ b/src/plugins/perforce/perforceplugin.cpp @@ -223,6 +223,7 @@ public: void updateActions(ActionState) override; bool submitEditorAboutToClose() override; + void discardCommit() override { cleanCommitMessageFile(); } QString commitDisplayName() const final; void p4Diff(const PerforceDiffParameters &p); @@ -247,7 +248,6 @@ public: void logProject(); void logRepository(); - void commitFromEditor() override; void printPendingChanges(); void slotSubmitDiff(const QStringList &files); void setTopLevel(const Utils::FilePath &); @@ -332,7 +332,6 @@ public: ParameterAction *m_logProjectAction = nullptr; QAction *m_logRepositoryAction = nullptr; QAction *m_updateAllAction = nullptr; - bool m_submitActionTriggered = false; QString m_commitMessageFileName; mutable QString m_tempFilePattern; QAction *m_menuAction = nullptr; @@ -1514,13 +1513,6 @@ void PerforcePluginPrivate::vcsDescribe(const FilePath &source, const QString &n showOutputInEditor(tr("p4 describe %1").arg(n), result.stdOut, diffEditorParameters.id, source.toString(), codec); } -void PerforcePluginPrivate::commitFromEditor() -{ - m_submitActionTriggered = true; - QTC_ASSERT(submitEditor(), return); - EditorManager::closeDocuments({submitEditor()->document()}); -} - void PerforcePluginPrivate::cleanCommitMessageFile() { if (!m_commitMessageFileName.isEmpty()) { @@ -1542,21 +1534,10 @@ bool PerforcePluginPrivate::submitEditorAboutToClose() QTC_ASSERT(perforceEditor, return true); IDocument *editorDocument = perforceEditor->document(); QTC_ASSERT(editorDocument, return true); - // Prompt the user. Force a prompt unless submit was actually invoked (that - // is, the editor was closed or shutdown). - const VcsBaseSubmitEditor::PromptSubmitResult answer = - perforceEditor->promptSubmit(this, !m_submitActionTriggered); - m_submitActionTriggered = false; - - if (answer == VcsBaseSubmitEditor::SubmitCanceled) - return false; if (!DocumentManager::saveDocument(editorDocument)) return false; - if (answer == VcsBaseSubmitEditor::SubmitDiscarded) { - cleanCommitMessageFile(); - return true; - } + // Pipe file into p4 submit -i FileReader reader; if (!reader.fetch(Utils::FilePath::fromString(m_commitMessageFileName), QIODevice::Text)) { diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp index 144262ca808..c11eb3901e6 100644 --- a/src/plugins/subversion/subversionplugin.cpp +++ b/src/plugins/subversion/subversionplugin.cpp @@ -223,6 +223,7 @@ public: protected: void updateActions(VcsBase::VcsBasePluginPrivate::ActionState) override; bool submitEditorAboutToClose() override; + void discardCommit() override { cleanCommitMessageFile(); } private: void addCurrentFile(); @@ -239,7 +240,6 @@ private: void projectStatus(); void slotDescribe(); void updateProject(); - void commitFromEditor() override; void diffCommitFiles(const QStringList &); void logProject(); void logRepository(); @@ -289,7 +289,6 @@ private: QAction *m_describeAction = nullptr; QAction *m_menuAction = nullptr; - bool m_submitActionTriggered = false; SubversionSettingsPage m_settingsPage{&m_settings}; @@ -561,20 +560,6 @@ bool SubversionPluginPrivate::submitEditorAboutToClose() if (editorFile.absoluteFilePath() != changeFile.absoluteFilePath()) return true; // Oops?! - // Prompt user. Force a prompt unless submit was actually invoked (that - // is, the editor was closed or shutdown). - const VcsBaseSubmitEditor::PromptSubmitResult answer = - editor->promptSubmit(this, !m_submitActionTriggered); - m_submitActionTriggered = false; - switch (answer) { - case VcsBaseSubmitEditor::SubmitCanceled: - return false; // Keep editing and change file - case VcsBaseSubmitEditor::SubmitDiscarded: - cleanCommitMessageFile(); - return true; // Cancel all - default: - break; - } const QStringList fileList = editor->checkedFiles(); bool closeEditor = true; if (!fileList.empty()) { @@ -967,13 +952,6 @@ void SubversionPluginPrivate::slotDescribe() vcsDescribe(state.topLevel(), QString::number(revision)); } -void SubversionPluginPrivate::commitFromEditor() -{ - m_submitActionTriggered = true; - QTC_ASSERT(submitEditor(), return); - EditorManager::closeDocuments({submitEditor()->document()}); -} - CommandResult SubversionPluginPrivate::runSvn(const FilePath &workingDir, const QStringList &arguments, RunFlags flags, QTextCodec *outputCodec, int timeoutMutiplier) const diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp index f09ad1c903d..9a6383ea708 100644 --- a/src/plugins/vcsbase/vcsbaseplugin.cpp +++ b/src/plugins/vcsbase/vcsbaseplugin.cpp @@ -528,8 +528,24 @@ void VcsBasePluginPrivate::slotSubmitEditorAboutToClose(VcsBaseSubmitEditor *sub << (m_submitEditor ? m_submitEditor->document()->id().name() : QByteArray()) << "closing submit editor" << submitEditor << (submitEditor ? submitEditor->document()->id().name() : QByteArray()); - if (submitEditor == m_submitEditor) - *result = submitEditorAboutToClose(); + if (submitEditor == m_submitEditor) { + const VcsBaseSubmitEditor::PromptSubmitResult response = + submitEditor->promptSubmit(this, !m_submitActionTriggered); + m_submitActionTriggered = false; + + switch (response) { + case VcsBaseSubmitEditor::SubmitCanceled: + *result = false; + break; + case VcsBaseSubmitEditor::SubmitDiscarded: + discardCommit(); + *result = true; + break; + default: + *result = submitEditorAboutToClose(); + break; + } + } } void VcsBasePluginPrivate::slotStateChanged(const Internal::State &newInternalState, Core::IVersionControl *vc) @@ -597,6 +613,14 @@ QString VcsBasePluginPrivate::commitDisplayName() const return tr("Commit", "name of \"commit\" action of the VCS."); } +void VcsBasePluginPrivate::commitFromEditor() +{ + // Close the submit editor + m_submitActionTriggered = true; + QTC_ASSERT(m_submitEditor, return); + EditorManager::closeDocuments({m_submitEditor->document()}); +} + bool VcsBasePluginPrivate::promptBeforeCommit() { return DocumentManager::saveAllModifiedDocuments(tr("Save before %1?") @@ -677,6 +701,10 @@ bool VcsBasePluginPrivate::raiseSubmitEditor() const return true; } +void VcsBasePluginPrivate::discardCommit() +{ +} + // Find top level for version controls like git/Mercurial that have // a directory at the top of the repository. // Note that checking for the existence of files is preferred over directories diff --git a/src/plugins/vcsbase/vcsbaseplugin.h b/src/plugins/vcsbase/vcsbaseplugin.h index aaaa80d7f92..a1ec06d9339 100644 --- a/src/plugins/vcsbase/vcsbaseplugin.h +++ b/src/plugins/vcsbase/vcsbaseplugin.h @@ -136,7 +136,7 @@ public: // Display name of the commit action virtual QString commitDisplayName() const; - virtual void commitFromEditor() = 0; + void commitFromEditor(); protected: // Prompt to save all files before commit: @@ -165,6 +165,7 @@ protected: virtual void updateActions(ActionState as) = 0; // Implement to start the submit process, use submitEditor() to get the submit editor instance. virtual bool submitEditorAboutToClose() = 0; + virtual void discardCommit(); // A helper to enable the VCS menu action according to state: // NoVcsEnabled -> visible, enabled if repository creation is supported @@ -183,6 +184,7 @@ private: Core::Context m_context; VcsBasePluginState m_state; int m_actionState = -1; + bool m_submitActionTriggered = false; }; } // namespace VcsBase