VCS: Deduplicate some submit editor closing logic

Change-Id: I622f5703c222a48606fcca3b99e87f9398e6a815
Reviewed-by: André Hartmann <aha_1980@gmx.de>
This commit is contained in:
Orgad Shaneh
2022-10-16 05:58:20 +03:00
committed by Orgad Shaneh
parent eaad78547c
commit 9b61e484be
9 changed files with 39 additions and 167 deletions

View File

@@ -206,7 +206,6 @@ public:
void update();
void commit();
void showCommitWidget(const QList<VcsBase::VcsBaseClient::StatusItem> &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

View File

@@ -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<QStringPair> 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<QStringPair> m_activities;
QSharedPointer<StatusMap> 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
{

View File

@@ -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,

View File

@@ -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<RemoteDialog> 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<SubmitFileModel *>(editor->fileModel());
CommitType commitType = editor->commitType();
QString amendSHA1 = editor->amendSHA1();

View File

@@ -161,7 +161,6 @@ private:
void outgoing();
void commit();
void showCommitWidget(const QList<VcsBase::VcsBaseClient::StatusItem> &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<CommitEditor *>(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

View File

@@ -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)) {

View File

@@ -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

View File

@@ -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)
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

View File

@@ -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