Git: Partially move plugin pimpl to .cpp

Same procedure as for ClearCase.
Unfortuately, some deep accesses are not easy to get rid of. Make them
available by static functions in the plugin itself. Definitely not the
favorite setup, but allows to proceed with the QObject removals.

Change-Id: Id85ed07bc7a6c1c053431a14dd7f68892f7ebea0
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
hjk
2020-02-07 11:24:32 +01:00
parent 4e357e84c0
commit eb1226df68
21 changed files with 377 additions and 345 deletions

View File

@@ -28,215 +28,20 @@
#include "gitsettings.h"
#include <coreplugin/id.h>
#include <coreplugin/iversioncontrol.h>
#include <vcsbase/vcsbaseplugin.h>
#include <QStringList>
#include <QPointer>
#include <QKeySequence>
#include <QVector>
#include <extensionsystem/iplugin.h>
#include <functional>
QT_BEGIN_NAMESPACE
class QAction;
QT_END_NAMESPACE
#include <vcsbase/vcsbaseplugin.h>
namespace Core {
class IEditor;
class Command;
class CommandLocator;
class Context;
class ActionContainer;
} // namespace Core
namespace Utils { class ParameterAction; }
namespace Gerrit {
namespace Internal { class GerritPlugin; }
} // namespace Gerrit
namespace VcsBase { class VcsBasePluginState; }
namespace Git {
namespace Internal {
class GitClient;
class CommitData;
class StashDialog;
class BranchDialog;
class BranchViewFactory;
class RemoteDialog;
using GitClientMemberFunc = void (GitClient::*)(const QString &);
class GitPluginPrivate final : public VcsBase::VcsBasePluginPrivate
{
Q_OBJECT
public:
GitPluginPrivate();
~GitPluginPrivate() 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;
QStringList unmanagedFiles(const QString &workingDir, const QStringList &filePaths) 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;
QString vcsTopic(const QString &directory) final;
Core::ShellCommand *createInitialCheckoutCommand(const QString &url,
const Utils::FilePath &baseDirectory,
const QString &localName,
const QStringList &extraArgs) final;
RepoUrl getRepoUrl(const QString &location) const override;
QStringList additionalToolsPath() const final;
void emitFilesChanged(const QStringList &);
void emitRepositoryChanged(const QString &);
///
static GitPluginPrivate *instance();
static GitClient *client();
Gerrit::Internal::GerritPlugin *gerritPlugin() const;
bool isCommitEditorOpen() const;
static QString msgRepositoryLabel(const QString &repository);
static QString invalidBranchAndRemoteNamePattern();
void startCommit(CommitType commitType = SimpleCommit);
void updateBranches(const QString &repository);
void updateCurrentBranch();
void manageRemotes();
void initRepository();
void startRebaseFromCommit(const QString &workingDirectory, QString commit);
protected:
void updateActions(VcsBase::VcsBasePluginPrivate::ActionState) override;
bool submitEditorAboutToClose() override;
private:
void diffCurrentFile();
void diffCurrentProject();
void commitFromEditor() override;
void logFile();
void blameFile();
void logProject();
void logRepository();
void undoFileChanges(bool revertStaging);
void resetRepository();
void recoverDeletedFiles();
void startRebase();
void startChangeRelatedAction(const Core::Id &id);
void stageFile();
void unstageFile();
void gitkForCurrentFile();
void gitkForCurrentFolder();
void gitGui();
void cleanProject();
void cleanRepository();
void updateSubmodules();
void applyCurrentFilePatch();
void promptApplyPatch();
void stash(bool unstagedOnly = false);
void stashUnstaged();
void stashSnapshot();
void stashPop();
void branchList();
void stashList();
void fetch();
void pull();
void push();
void startMergeTool();
void continueOrAbortCommand();
void updateContinueAndAbortCommands();
void delayedPushToGerrit();
Core::Command *createCommand(QAction *action, Core::ActionContainer *ac, Core::Id id,
const Core::Context &context, bool addToLocator,
const std::function<void()> &callback, const QKeySequence &keys);
Utils::ParameterAction *createParameterAction(Core::ActionContainer *ac,
const QString &defaultText, const QString &parameterText,
Core::Id id, const Core::Context &context, bool addToLocator,
const std::function<void()> &callback,
const QKeySequence &keys = QKeySequence());
QAction *createFileAction(Core::ActionContainer *ac,
const QString &defaultText, const QString &parameterText,
Core::Id id, const Core::Context &context, bool addToLocator,
const std::function<void()> &callback,
const QKeySequence &keys = QKeySequence());
QAction *createProjectAction(Core::ActionContainer *ac,
const QString &defaultText, const QString &parameterText,
Core::Id id, const Core::Context &context, bool addToLocator,
void (GitPluginPrivate::*func)(),
const QKeySequence &keys = QKeySequence());
QAction *createRepositoryAction(Core::ActionContainer *ac, const QString &text, Core::Id id,
const Core::Context &context, bool addToLocator,
const std::function<void()> &callback,
const QKeySequence &keys = QKeySequence());
QAction *createRepositoryAction(Core::ActionContainer *ac, const QString &text, Core::Id id,
const Core::Context &context, bool addToLocator,
GitClientMemberFunc, const QKeySequence &keys = QKeySequence());
QAction *createChangeRelatedRepositoryAction(const QString &text, Core::Id id,
const Core::Context &context);
void updateRepositoryBrowserAction();
Core::IEditor *openSubmitEditor(const QString &fileName, const CommitData &cd);
void cleanCommitMessageFile();
void cleanRepository(const QString &directory);
void applyPatch(const QString &workingDirectory, QString file = QString());
void updateVersionWarning();
Core::CommandLocator *m_commandLocator = nullptr;
QAction *m_menuAction = nullptr;
QAction *m_repositoryBrowserAction = nullptr;
QAction *m_mergeToolAction = nullptr;
QAction *m_submoduleUpdateAction = nullptr;
QAction *m_abortMergeAction = nullptr;
QAction *m_abortRebaseAction = nullptr;
QAction *m_abortCherryPickAction = nullptr;
QAction *m_abortRevertAction = nullptr;
QAction *m_skipRebaseAction = nullptr;
QAction *m_continueRebaseAction = nullptr;
QAction *m_continueCherryPickAction = nullptr;
QAction *m_continueRevertAction = nullptr;
QAction *m_fixupCommitAction = nullptr;
QAction *m_interactiveRebaseAction = nullptr;
QVector<Utils::ParameterAction *> m_fileActions;
QVector<Utils::ParameterAction *> m_projectActions;
QVector<QAction *> m_repositoryActions;
Utils::ParameterAction *m_applyCurrentFilePatchAction = nullptr;
Gerrit::Internal::GerritPlugin *m_gerritPlugin = nullptr;
GitSettings m_settings;
GitClient *m_gitClient = nullptr;
QPointer<StashDialog> m_stashDialog;
QPointer<BranchViewFactory> m_branchViewFactory;
QPointer<RemoteDialog> m_remoteDialog;
QString m_submitRepository;
QString m_commitMessageFileName;
bool m_submitActionTriggered = false;
};
class GitPlugin final : public ExtensionSystem::IPlugin
{
@@ -252,6 +57,25 @@ public:
QObject *remoteCommand(const QStringList &options, const QString &workingDirectory,
const QStringList &args) final;
static GitClient *client();
static Core::IVersionControl *versionControl();
static const GitSettings &settings();
static const VcsBase::VcsBasePluginState &currentState();
static QString msgRepositoryLabel(const QString &repository);
static QString invalidBranchAndRemoteNamePattern();
static bool isCommitEditorOpen();
static void emitFilesChanged(const QStringList &);
static void emitRepositoryChanged(const QString &);
static void startRebaseFromCommit(const QString &workingDirectory, const QString &commit);
static void manageRemotes();
static void initRepository();
static void startCommit();
static void updateCurrentBranch();
static void updateBranches(const QString &repository);
static void gerritPush(const QString &topLevel);
#ifdef WITH_TESTS
private slots:
void testStatusParsing_data();