From 21ab4c427c160eafd5550ff46944ee5be23bd7a5 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 8 Sep 2017 12:52:35 +0200 Subject: [PATCH] VCS: Offer to save-all before commit Task-number: QTCREATORBUG-3857 Change-Id: I3ff3d90803eec4134b9da4af5567753ad7bffafb Reviewed-by: Orgad Shaneh --- src/plugins/bazaar/bazaarplugin.cpp | 3 +++ src/plugins/clearcase/clearcaseplugin.cpp | 8 ++++++++ src/plugins/clearcase/clearcaseplugin.h | 1 + src/plugins/cvs/cvsplugin.cpp | 3 +++ src/plugins/git/gitplugin.cpp | 3 +++ src/plugins/mercurial/mercurialplugin.cpp | 5 ++++- src/plugins/perforce/perforceplugin.cpp | 7 +++++++ src/plugins/perforce/perforceplugin.h | 1 + src/plugins/subversion/subversionplugin.cpp | 3 +++ src/plugins/vcsbase/vcsbaseplugin.cpp | 10 ++++++++++ src/plugins/vcsbase/vcsbaseplugin.h | 5 +++++ 11 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/plugins/bazaar/bazaarplugin.cpp b/src/plugins/bazaar/bazaarplugin.cpp index a441b5e78fc..426c55bfc30 100644 --- a/src/plugins/bazaar/bazaarplugin.cpp +++ b/src/plugins/bazaar/bazaarplugin.cpp @@ -509,6 +509,9 @@ void BazaarPlugin::createSubmitEditorActions() void BazaarPlugin::commit() { + if (!promptBeforeCommit())) + return; + if (raiseSubmitEditor()) return; diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp index 8f215be159e..03f570d9814 100644 --- a/src/plugins/clearcase/clearcaseplugin.cpp +++ b/src/plugins/clearcase/clearcaseplugin.cpp @@ -837,6 +837,11 @@ void ClearCasePlugin::updateActions(VcsBasePlugin::ActionState as) updateStatusActions(); } +QString ClearCasePlugin::commitDisplayName() const +{ + return tr("check in", "\"commit\" action for ClearCase."); +} + void ClearCasePlugin::checkOutCurrentFile() { const VcsBasePluginState state = currentState(); @@ -1206,6 +1211,9 @@ void ClearCasePlugin::startCheckInActivity() * check in will start. */ void ClearCasePlugin::startCheckIn(const QString &workingDir, const QStringList &files) { + if (!promptBeforeCommit()) + return; + if (raiseSubmitEditor()) return; diff --git a/src/plugins/clearcase/clearcaseplugin.h b/src/plugins/clearcase/clearcaseplugin.h index d2db83a8ac8..70c18334263 100644 --- a/src/plugins/clearcase/clearcaseplugin.h +++ b/src/plugins/clearcase/clearcaseplugin.h @@ -199,6 +199,7 @@ private: void syncSlot(); Q_INVOKABLE void updateStatusActions(); + QString commitDisplayName() const final; void checkOutCurrentFile(); void addCurrentFile(); void undoCheckOutCurrent(); diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp index 16a0fa211dd..e312cda6398 100644 --- a/src/plugins/cvs/cvsplugin.cpp +++ b/src/plugins/cvs/cvsplugin.cpp @@ -651,6 +651,9 @@ void CvsPlugin::startCommitAll() * commit will start. */ void CvsPlugin::startCommit(const QString &workingDir, const QString &file) { + if (!promptBeforeCommit()) + return; + if (raiseSubmitEditor()) return; if (isCommitEditorOpen()) { diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 311127aaa7e..a310e132cb4 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -926,6 +926,9 @@ void GitPlugin::gitGui() void GitPlugin::startCommit(CommitType commitType) { + if (!promptBeforeCommit()) + return; + if (raiseSubmitEditor()) return; if (isCommitEditorOpen()) { diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp index e982b51cdf4..5c12b42c519 100644 --- a/src/plugins/mercurial/mercurialplugin.cpp +++ b/src/plugins/mercurial/mercurialplugin.cpp @@ -37,12 +37,12 @@ #include #include #include +#include #include #include #include #include #include -#include #include #include @@ -494,6 +494,9 @@ void MercurialPlugin::createSubmitEditorActions() void MercurialPlugin::commit() { + if (!promptBeforeCommit()) + return; + if (raiseSubmitEditor()) return; diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp index c4a1e50ac46..0278cd6403c 100644 --- a/src/plugins/perforce/perforceplugin.cpp +++ b/src/plugins/perforce/perforceplugin.cpp @@ -556,6 +556,8 @@ void PerforcePlugin::printOpenedFileList() void PerforcePlugin::startSubmitProject() { + if (!promptBeforeCommit()) + return; if (raiseSubmitEditor()) return; @@ -1225,6 +1227,11 @@ void PerforceDiffConfig::triggerReRun() emit reRunDiff(effectiveParameters); } +QString PerforcePlugin::commitDisplayName() const +{ + return tr("submit", "\"commit\" action for perforce"); +} + void PerforcePlugin::p4Diff(const QString &workingDir, const QStringList &files) { PerforceDiffParameters p; diff --git a/src/plugins/perforce/perforceplugin.h b/src/plugins/perforce/perforceplugin.h index ae90276f977..814969537ad 100644 --- a/src/plugins/perforce/perforceplugin.h +++ b/src/plugins/perforce/perforceplugin.h @@ -113,6 +113,7 @@ private slots: #endif private: + QString commitDisplayName() const final; void p4Diff(const PerforceDiffParameters &p); void openCurrentFile(); diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp index c72dbf703d3..d35d027b57e 100644 --- a/src/plugins/subversion/subversionplugin.cpp +++ b/src/plugins/subversion/subversionplugin.cpp @@ -642,6 +642,9 @@ void SubversionPlugin::startCommitProject() * commit will start. */ void SubversionPlugin::startCommit(const QString &workingDir, const QStringList &files) { + if (!promptBeforeCommit()) + return; + if (raiseSubmitEditor()) return; if (isCommitEditorOpen()) { diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp index edc68b2a0cf..dcf648a4e7c 100644 --- a/src/plugins/vcsbase/vcsbaseplugin.cpp +++ b/src/plugins/vcsbase/vcsbaseplugin.cpp @@ -641,6 +641,16 @@ bool VcsBasePlugin::enableMenuAction(ActionState as, QAction *menuAction) const return true; } +QString VcsBasePlugin::commitDisplayName() const +{ + return tr("commit", "name of \"commit\" action of the VCS."); +} + +bool VcsBasePlugin::promptBeforeCommit() +{ + return DocumentManager::saveAllModifiedDocuments(tr("Save before %1?").arg(commitDisplayName()); +} + void VcsBasePlugin::promptToDeleteCurrentFile() { const VcsBasePluginState state = currentState(); diff --git a/src/plugins/vcsbase/vcsbaseplugin.h b/src/plugins/vcsbase/vcsbaseplugin.h index 0312d637242..72b2c5a46eb 100644 --- a/src/plugins/vcsbase/vcsbaseplugin.h +++ b/src/plugins/vcsbase/vcsbaseplugin.h @@ -178,6 +178,11 @@ public: const QProcessEnvironment &env = QProcessEnvironment()); protected: + // Display name of the commit action: + virtual QString commitDisplayName() const; + // Prompt to save all files before commit: + bool promptBeforeCommit(); + // Convenience slot for "Delete current file" action. Prompts to // delete the file via VcsManager. void promptToDeleteCurrentFile();