/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ****************************************************************************/ #pragma once #include "gitsettings.h" #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE class QAction; QT_END_NAMESPACE 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 Git { namespace Internal { class GitVersionControl; class GitClient; class CommitData; class StashDialog; class BranchDialog; class BranchViewFactory; class RemoteDialog; using GitClientMemberFunc = void (GitClient::*)(const QString &); class GitPlugin : public VcsBase::VcsBasePlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Git.json") public: GitPlugin(); ~GitPlugin() override; static GitPlugin *instance(); static GitClient *client(); bool initialize(const QStringList &arguments, QString *errorMessage) override; GitVersionControl *gitVersionControl() const; 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); QObject *remoteCommand(const QStringList &options, const QString &workingDirectory, const QStringList &args) override; void manageRemotes(); void initRepository(); protected: void updateActions(VcsBase::VcsBasePlugin::ActionState) override; bool submitEditorAboutToClose() override; #ifdef WITH_TESTS private slots: void testStatusParsing_data(); void testStatusParsing(); void testDiffFileResolving_data(); void testDiffFileResolving(); void testLogResolving(); void testGitRemote_data(); void testGitRemote(); #endif 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 &callback, const QKeySequence &keys); Utils::ParameterAction *createParameterAction(Core::ActionContainer *ac, const QString &defaultText, const QString ¶meterText, Core::Id id, const Core::Context &context, bool addToLocator, const std::function &callback, const QKeySequence &keys = QKeySequence()); QAction *createFileAction(Core::ActionContainer *ac, const QString &defaultText, const QString ¶meterText, Core::Id id, const Core::Context &context, bool addToLocator, const std::function &callback, const QKeySequence &keys = QKeySequence()); QAction *createProjectAction(Core::ActionContainer *ac, const QString &defaultText, const QString ¶meterText, Core::Id id, const Core::Context &context, bool addToLocator, void (GitPlugin::*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 &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 m_fileActions; QVector m_projectActions; QVector m_repositoryActions; Utils::ParameterAction *m_applyCurrentFilePatchAction = nullptr; Gerrit::Internal::GerritPlugin *m_gerritPlugin = nullptr; GitClient *m_gitClient = nullptr; QPointer m_stashDialog; QPointer m_branchViewFactory; QPointer m_remoteDialog; QString m_submitRepository; QString m_commitMessageFileName; bool m_submitActionTriggered = false; }; } // namespace Internal } // namespace Git