Files
qt-creator/src/plugins/git/gitplugin.h
Laurent Montel ac6055eeb0 Git: clean forward declaration
Change-Id: Ic8e988d9fa27f9e92fdcfe111220a5c929998afb
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
2017-09-28 07:05:19 +00:00

221 lines
7.9 KiB
C++

/****************************************************************************
**
** 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 <coreplugin/id.h>
#include <vcsbase/vcsbaseplugin.h>
#include <QStringList>
#include <QPointer>
#include <QKeySequence>
#include <QVector>
#include <functional>
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 RemoteDialog;
typedef void (GitClient::*GitClientMemberFunc)(const QString &);
class GitPlugin : public VcsBase::VcsBasePlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Git.json")
public:
GitPlugin();
~GitPlugin();
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);
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();
#endif
private:
void diffCurrentFile();
void diffCurrentProject();
void submitCurrentLog();
void logFile();
void blameFile();
void logProject();
void logRepository();
void undoFileChanges(bool revertStaging);
void resetRepository();
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 remoteList();
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 (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<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_submitCurrentAction = nullptr;
QAction *m_diffSelectedFilesAction = nullptr;
QAction *m_undoAction = nullptr;
QAction *m_redoAction = 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;
GitClient *m_gitClient = nullptr;
QPointer<StashDialog> m_stashDialog;
QPointer<BranchDialog> m_branchDialog;
QPointer<RemoteDialog> m_remoteDialog;
QString m_submitRepository;
QString m_commitMessageFileName;
bool m_submitActionTriggered = false;
};
} // namespace Internal
} // namespace Git