From 04e45d1bd9a0a5910a9a9f40e655fb71d1570be4 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 30 Jan 2020 17:02:30 +0100 Subject: Subversion: Move plugin pimpl to .cpp Change-Id: I457747564bbe0bc71d009d08b27e2375dd4c073f Reviewed-by: Orgad Shaneh --- src/plugins/subversion/settingspage.cpp | 15 +-- src/plugins/subversion/settingspage.h | 4 +- src/plugins/subversion/subversionclient.cpp | 21 ++-- src/plugins/subversion/subversionclient.h | 2 +- src/plugins/subversion/subversionplugin.cpp | 164 ++++++++++++++++++++++++++-- src/plugins/subversion/subversionplugin.h | 155 +------------------------- 6 files changed, 175 insertions(+), 186 deletions(-) (limited to 'src/plugins/subversion') diff --git a/src/plugins/subversion/settingspage.cpp b/src/plugins/subversion/settingspage.cpp index 8e16081c10b..9a31ce18100 100644 --- a/src/plugins/subversion/settingspage.cpp +++ b/src/plugins/subversion/settingspage.cpp @@ -49,18 +49,19 @@ class SubversionSettingsPageWidget final : public Core::IOptionsPageWidget Q_DECLARE_TR_FUNCTIONS(Subversion::Internal::SettingsPageWidget) public: - SubversionSettingsPageWidget(Core::IVersionControl *control, SubversionSettings *settings); + SubversionSettingsPageWidget(const std::function &onApply, SubversionSettings *settings); void apply() final; private: Ui::SettingsPage m_ui; - Core::IVersionControl *m_control; + std::function m_onApply; SubversionSettings *m_settings; }; -SubversionSettingsPageWidget::SubversionSettingsPageWidget(Core::IVersionControl *control, SubversionSettings *settings) - : m_control(control), m_settings(settings) +SubversionSettingsPageWidget::SubversionSettingsPageWidget(const std::function &onApply, + SubversionSettings *settings) + : m_onApply(onApply), m_settings(settings) { m_ui.setupUi(this); m_ui.pathChooser->setExpectedKind(PathChooser::ExistingCommand); @@ -98,16 +99,16 @@ void SubversionSettingsPageWidget::apply() return; *m_settings = rc; - m_control->configurationChanged(); + m_onApply(); } -SubversionSettingsPage::SubversionSettingsPage(Core::IVersionControl *control, SubversionSettings *settings, QObject *parent) : +SubversionSettingsPage::SubversionSettingsPage(const std::function &onApply, SubversionSettings *settings, QObject *parent) : Core::IOptionsPage(parent) { setId(VcsBase::Constants::VCS_ID_SUBVERSION); setDisplayName(SubversionSettingsPageWidget::tr("Subversion")); setCategory(VcsBase::Constants::VCS_SETTINGS_CATEGORY); - setWidgetCreator([control, settings] { return new SubversionSettingsPageWidget(control, settings); }); + setWidgetCreator([onApply, settings] { return new SubversionSettingsPageWidget(onApply, settings); }); } } // Internal diff --git a/src/plugins/subversion/settingspage.h b/src/plugins/subversion/settingspage.h index 6de99983d38..d4dad730b1b 100644 --- a/src/plugins/subversion/settingspage.h +++ b/src/plugins/subversion/settingspage.h @@ -27,8 +27,6 @@ #include -namespace Core { class IVersionControl; } - namespace Subversion { namespace Internal { @@ -37,7 +35,7 @@ class SubversionSettings; class SubversionSettingsPage final : public Core::IOptionsPage { public: - SubversionSettingsPage(Core::IVersionControl *control, SubversionSettings *settings, QObject *parent); + SubversionSettingsPage(const std::function &onApply, SubversionSettings *settings, QObject *parent); }; } // namespace Subversion diff --git a/src/plugins/subversion/subversionclient.cpp b/src/plugins/subversion/subversionclient.cpp index 55fbd6d1963..48dd15e7aee 100644 --- a/src/plugins/subversion/subversionclient.cpp +++ b/src/plugins/subversion/subversionclient.cpp @@ -172,7 +172,12 @@ class SubversionDiffEditorController : public VcsBaseDiffEditorController Q_OBJECT public: SubversionDiffEditorController(IDocument *document, - const QString &workingDirectory); + VcsBaseClient *client, + const QString &workingDirectory) + : VcsBaseDiffEditorController(document, client, workingDirectory) + { + forceContextLineCount(3); // SVN cannot change that when using internal diff + } void setFilesList(const QStringList &filesList); void setChangeNumber(int changeNumber); @@ -186,19 +191,11 @@ private: void requestDiff(); enum State { Idle, GettingDescription, GettingDiff }; - State m_state; + State m_state = Idle; QStringList m_filesList; int m_changeNumber = 0; }; -SubversionDiffEditorController::SubversionDiffEditorController( - IDocument *document, - const QString &workingDirectory) - : VcsBaseDiffEditorController(document, SubversionPluginPrivate::instance()->client(), workingDirectory) - , m_state(Idle) -{ - forceContextLineCount(3); // SVN cannot change that when using internal diff -} void SubversionDiffEditorController::setFilesList(const QStringList &filesList) { @@ -271,13 +268,13 @@ void SubversionDiffEditorController::processCommandOutput(const QString &output) SubversionDiffEditorController *SubversionClient::findOrCreateDiffEditor(const QString &documentId, const QString &source, const QString &title, - const QString &workingDirectory) const + const QString &workingDirectory) { IDocument *document = DiffEditorController::findOrCreateDocument(documentId, title); auto controller = qobject_cast( DiffEditorController::controller(document)); if (!controller) - controller = new SubversionDiffEditorController(document, workingDirectory); + controller = new SubversionDiffEditorController(document, this, workingDirectory); VcsBase::setSource(document, source); EditorManager::activateEditorForDocument(document); return controller; diff --git a/src/plugins/subversion/subversionclient.h b/src/plugins/subversion/subversionclient.h index ca67b731bf4..c93445d76aa 100644 --- a/src/plugins/subversion/subversionclient.h +++ b/src/plugins/subversion/subversionclient.h @@ -79,7 +79,7 @@ protected: private: SubversionDiffEditorController *findOrCreateDiffEditor(const QString &documentId, const QString &source, - const QString &title, const QString &workingDirectory) const; + const QString &title, const QString &workingDirectory); mutable Utils::FilePath m_svnVersionBinary; mutable QString m_svnVersion; diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp index a26b2e44dc6..d1577daaf8b 100644 --- a/src/plugins/subversion/subversionplugin.cpp +++ b/src/plugins/subversion/subversionplugin.cpp @@ -31,6 +31,7 @@ #include "subversionsubmiteditor.h" #include "subversionclient.h" #include "subversionconstants.h" +#include "subversionsettings.h" #include #include @@ -38,6 +39,7 @@ #include #include #include +#include #include @@ -107,6 +109,14 @@ const char CMD_ID_UPDATE[] = "Subversion.Update"; const char CMD_ID_COMMIT_PROJECT[] = "Subversion.CommitProject"; const char CMD_ID_DESCRIBE[] = "Subversion.Describe"; +struct SubversionResponse +{ + bool error = false; + QString stdOut; + QString stdErr; + QString message; +}; + const VcsBaseEditorParameters editorParameters[] = { { LogOutput, @@ -167,6 +177,8 @@ static inline QStringList svnDirectories() return rc; } +class SubversionPluginPrivate; + class SubversionTopicCache : public Core::IVersionControl::TopicCache { public: @@ -175,20 +187,142 @@ public: { } protected: - QString trackFile(const QString &repository) override - { - return m_plugin->monitorFile(repository); - } + QString trackFile(const QString &repository) override; - QString refreshTopic(const QString &repository) override - { - return m_plugin->synchronousTopic(repository); - } + QString refreshTopic(const QString &repository) override; private: SubversionPluginPrivate *m_plugin; }; +class SubversionPluginPrivate final : public VcsBase::VcsBasePluginPrivate +{ + Q_DECLARE_TR_FUNCTIONS(Subversion::Internal::SubversionPlugin) + +public: + SubversionPluginPrivate(); + ~SubversionPluginPrivate() final; + + // IVersionControl + QString displayName() const final; + Core::Id id() const final; + bool isVcsFileOrDirectory(const Utils::FilePath &fileName) const final; + + bool managesDirectory(const QString &directory, QString *topLevel) const final; + bool managesFile(const QString &workingDirectory, const QString &fileName) const final; + + bool isConfigured() const final; + bool supportsOperation(Operation operation) const final; + bool vcsOpen(const QString &fileName) final; + bool vcsAdd(const QString &fileName) final; + bool vcsDelete(const QString &filename) final; + bool vcsMove(const QString &from, const QString &to) final; + bool vcsCreateRepository(const QString &directory) final; + + bool vcsAnnotate(const QString &file, int line) final; + + Core::ShellCommand *createInitialCheckoutCommand(const QString &url, + const Utils::FilePath &baseDirectory, + const QString &localName, + const QStringList &extraArgs) final; + + bool isVcsDirectory(const Utils::FilePath &fileName) const; + + /// + SubversionClient *client(); + + SubversionSubmitEditor *openSubversionSubmitEditor(const QString &fileName); + + // IVersionControl + bool vcsAdd(const QString &workingDir, const QString &fileName); + bool vcsDelete(const QString &workingDir, const QString &fileName); + bool vcsMove(const QString &workingDir, const QString &from, const QString &to); + bool vcsCheckout(const QString &directory, const QByteArray &url); + + static SubversionPluginPrivate *instance(); + + QString monitorFile(const QString &repository) const; + QString synchronousTopic(const QString &repository) const; + SubversionResponse runSvn(const QString &workingDir, + const QStringList &arguments, int timeOutS, + unsigned flags, QTextCodec *outputCodec = nullptr) const; + void describe(const QString &source, const QString &changeNr); + void vcsAnnotateHelper(const QString &workingDir, const QString &file, + const QString &revision = QString(), int lineNumber = -1); + +protected: + void updateActions(VcsBase::VcsBasePluginPrivate::ActionState) override; + bool submitEditorAboutToClose() override; + +private: + void addCurrentFile(); + void revertCurrentFile(); + void diffProject(); + void diffCurrentFile(); + void cleanCommitMessageFile(); + void startCommitAll(); + void startCommitProject(); + void startCommitCurrentFile(); + void revertAll(); + void filelogCurrentFile(); + void annotateCurrentFile(); + void projectStatus(); + void slotDescribe(); + void updateProject(); + void commitFromEditor() override; + void diffCommitFiles(const QStringList &); + void logProject(); + void logRepository(); + void diffRepository(); + void statusRepository(); + void updateRepository(); + + inline bool isCommitEditorOpen() const; + Core::IEditor *showOutputInEditor(const QString &title, const QString &output, + int editorType, const QString &source, + QTextCodec *codec); + + void filelog(const QString &workingDir, + const QString &file = QString(), + bool enableAnnotationContextMenu = false); + void svnStatus(const QString &workingDir, const QString &relativePath = QString()); + void svnUpdate(const QString &workingDir, const QString &relativePath = QString()); + bool checkSVNSubDir(const QDir &directory) const; + void startCommit(const QString &workingDir, const QStringList &files = QStringList()); + + const QStringList m_svnDirectories; + + SubversionSettings m_settings; + SubversionClient *m_client = nullptr; + QString m_commitMessageFileName; + QString m_commitRepository; + + Core::CommandLocator *m_commandLocator = nullptr; + Utils::ParameterAction *m_addAction = nullptr; + Utils::ParameterAction *m_deleteAction = nullptr; + Utils::ParameterAction *m_revertAction = nullptr; + Utils::ParameterAction *m_diffProjectAction = nullptr; + Utils::ParameterAction *m_diffCurrentAction = nullptr; + Utils::ParameterAction *m_logProjectAction = nullptr; + QAction *m_logRepositoryAction = nullptr; + QAction *m_commitAllAction = nullptr; + QAction *m_revertRepositoryAction = nullptr; + QAction *m_diffRepositoryAction = nullptr; + QAction *m_statusRepositoryAction = nullptr; + QAction *m_updateRepositoryAction = nullptr; + Utils::ParameterAction *m_commitCurrentAction = nullptr; + Utils::ParameterAction *m_filelogCurrentAction = nullptr; + Utils::ParameterAction *m_annotateCurrentAction = nullptr; + Utils::ParameterAction *m_statusProjectAction = nullptr; + Utils::ParameterAction *m_updateProjectAction = nullptr; + Utils::ParameterAction *m_commitProjectAction = nullptr; + QAction *m_describeAction = nullptr; + + QAction *m_menuAction = nullptr; + bool m_submitActionTriggered = false; +}; + + // ------------- SubversionPlugin static SubversionPluginPrivate *dd = nullptr; @@ -252,7 +386,7 @@ SubversionPluginPrivate::SubversionPluginPrivate() using namespace Core::Constants; Context context(SUBVERSION_CONTEXT); - new SubversionSettingsPage(this, &m_settings, this); + new SubversionSettingsPage([this] { configurationChanged(); }, &m_settings, this); new VcsSubmitEditorFactory(&submitParameters, []() { return new SubversionSubmitEditor(&submitParameters); }, this); @@ -1166,6 +1300,17 @@ Core::ShellCommand *SubversionPluginPrivate::createInitialCheckoutCommand(const return command; } +QString SubversionTopicCache::trackFile(const QString &repository) +{ + return m_plugin->monitorFile(repository); +} + +QString SubversionTopicCache::refreshTopic(const QString &repository) +{ + return m_plugin->synchronousTopic(repository); +} + + #ifdef WITH_TESTS void SubversionPlugin::testLogResolving() { @@ -1187,6 +1332,7 @@ void SubversionPlugin::testLogResolving() ); VcsBaseEditorWidget::testLogResolving(editorParameters[0].id, data, "r1439551", "r1439540"); } + #endif } // Internal diff --git a/src/plugins/subversion/subversionplugin.h b/src/plugins/subversion/subversionplugin.h index a9c357f8b6c..31a2d9b9096 100644 --- a/src/plugins/subversion/subversionplugin.h +++ b/src/plugins/subversion/subversionplugin.h @@ -25,169 +25,16 @@ #pragma once -#include "subversionsettings.h" - -#include -#include - -QT_BEGIN_NAMESPACE -class QDir; -class QAction; -class QTextCodec; -QT_END_NAMESPACE - -namespace Core { - class CommandLocator; - class IEditor; -} -namespace Utils { class ParameterAction; } +#include namespace Subversion { namespace Internal { -class SubversionSubmitEditor; -class SubversionClient; - -struct SubversionResponse -{ - bool error = false; - QString stdOut; - QString stdErr; - QString message; -}; - const char FileAddedC[] = "A"; const char FileConflictedC[] = "C"; const char FileDeletedC[] = "D"; const char FileModifiedC[] = "M"; -class SubversionPluginPrivate final : public VcsBase::VcsBasePluginPrivate -{ - Q_OBJECT - -public: - SubversionPluginPrivate(); - ~SubversionPluginPrivate() final; - - // IVersionControl - QString displayName() const final; - Core::Id id() const final; - bool isVcsFileOrDirectory(const Utils::FilePath &fileName) const final; - - bool managesDirectory(const QString &directory, QString *topLevel) const final; - bool managesFile(const QString &workingDirectory, const QString &fileName) const final; - - bool isConfigured() const final; - bool supportsOperation(Operation operation) const final; - bool vcsOpen(const QString &fileName) final; - bool vcsAdd(const QString &fileName) final; - bool vcsDelete(const QString &filename) final; - bool vcsMove(const QString &from, const QString &to) final; - bool vcsCreateRepository(const QString &directory) final; - - bool vcsAnnotate(const QString &file, int line) final; - - Core::ShellCommand *createInitialCheckoutCommand(const QString &url, - const Utils::FilePath &baseDirectory, - const QString &localName, - const QStringList &extraArgs) final; - - bool isVcsDirectory(const Utils::FilePath &fileName) const; - - /// - SubversionClient *client(); - - SubversionSubmitEditor *openSubversionSubmitEditor(const QString &fileName); - - // IVersionControl - bool vcsAdd(const QString &workingDir, const QString &fileName); - bool vcsDelete(const QString &workingDir, const QString &fileName); - bool vcsMove(const QString &workingDir, const QString &from, const QString &to); - bool vcsCheckout(const QString &directory, const QByteArray &url); - - static SubversionPluginPrivate *instance(); - - QString monitorFile(const QString &repository) const; - QString synchronousTopic(const QString &repository) const; - SubversionResponse runSvn(const QString &workingDir, - const QStringList &arguments, int timeOutS, - unsigned flags, QTextCodec *outputCodec = nullptr) const; - void describe(const QString &source, const QString &changeNr); - void vcsAnnotateHelper(const QString &workingDir, const QString &file, - const QString &revision = QString(), int lineNumber = -1); - -protected: - void updateActions(VcsBase::VcsBasePluginPrivate::ActionState) override; - bool submitEditorAboutToClose() override; - -private: - void addCurrentFile(); - void revertCurrentFile(); - void diffProject(); - void diffCurrentFile(); - void cleanCommitMessageFile(); - void startCommitAll(); - void startCommitProject(); - void startCommitCurrentFile(); - void revertAll(); - void filelogCurrentFile(); - void annotateCurrentFile(); - void projectStatus(); - void slotDescribe(); - void updateProject(); - void commitFromEditor() override; - void diffCommitFiles(const QStringList &); - void logProject(); - void logRepository(); - void diffRepository(); - void statusRepository(); - void updateRepository(); - - inline bool isCommitEditorOpen() const; - Core::IEditor *showOutputInEditor(const QString &title, const QString &output, - int editorType, const QString &source, - QTextCodec *codec); - - void filelog(const QString &workingDir, - const QString &file = QString(), - bool enableAnnotationContextMenu = false); - void svnStatus(const QString &workingDir, const QString &relativePath = QString()); - void svnUpdate(const QString &workingDir, const QString &relativePath = QString()); - bool checkSVNSubDir(const QDir &directory) const; - void startCommit(const QString &workingDir, const QStringList &files = QStringList()); - - const QStringList m_svnDirectories; - - SubversionSettings m_settings; - SubversionClient *m_client = nullptr; - QString m_commitMessageFileName; - QString m_commitRepository; - - Core::CommandLocator *m_commandLocator = nullptr; - Utils::ParameterAction *m_addAction = nullptr; - Utils::ParameterAction *m_deleteAction = nullptr; - Utils::ParameterAction *m_revertAction = nullptr; - Utils::ParameterAction *m_diffProjectAction = nullptr; - Utils::ParameterAction *m_diffCurrentAction = nullptr; - Utils::ParameterAction *m_logProjectAction = nullptr; - QAction *m_logRepositoryAction = nullptr; - QAction *m_commitAllAction = nullptr; - QAction *m_revertRepositoryAction = nullptr; - QAction *m_diffRepositoryAction = nullptr; - QAction *m_statusRepositoryAction = nullptr; - QAction *m_updateRepositoryAction = nullptr; - Utils::ParameterAction *m_commitCurrentAction = nullptr; - Utils::ParameterAction *m_filelogCurrentAction = nullptr; - Utils::ParameterAction *m_annotateCurrentAction = nullptr; - Utils::ParameterAction *m_statusProjectAction = nullptr; - Utils::ParameterAction *m_updateProjectAction = nullptr; - Utils::ParameterAction *m_commitProjectAction = nullptr; - QAction *m_describeAction = nullptr; - - QAction *m_menuAction = nullptr; - bool m_submitActionTriggered = false; -}; - class SubversionPlugin final : public ExtensionSystem::IPlugin { Q_OBJECT -- cgit v1.2.3