forked from qt-creator/qt-creator
		
	... and update users of that functionality accordingly. Unexpected plus: Now every supported VCS actually saves their setting when requested. Change-Id: I02db7b2ce14e5f52d26409b2a01aea290c2a294a Reviewed-by: Orgad Shaneh <orgads@gmail.com>
		
			
				
	
	
		
			214 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			214 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/****************************************************************************
 | 
						|
**
 | 
						|
** Copyright (C) 2015 The Qt Company Ltd.
 | 
						|
** Contact: http://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 http://www.qt.io/terms-conditions.  For further information
 | 
						|
** use the contact form at http://www.qt.io/contact-us.
 | 
						|
**
 | 
						|
** GNU Lesser General Public License Usage
 | 
						|
** Alternatively, this file may be used under the terms of the GNU Lesser
 | 
						|
** General Public License version 2.1 or version 3 as published by the Free
 | 
						|
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
 | 
						|
** LICENSE.LGPLv3 included in the packaging of this file.  Please review the
 | 
						|
** following information to ensure the GNU Lesser General Public License
 | 
						|
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
 | 
						|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 | 
						|
**
 | 
						|
** In addition, as a special exception, The Qt Company gives you certain additional
 | 
						|
** rights.  These rights are described in The Qt Company LGPL Exception
 | 
						|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
 | 
						|
**
 | 
						|
****************************************************************************/
 | 
						|
 | 
						|
#ifndef CVSPLUGIN_H
 | 
						|
#define CVSPLUGIN_H
 | 
						|
 | 
						|
#include "cvssettings.h"
 | 
						|
#include "cvsutils.h"
 | 
						|
 | 
						|
#include <vcsbase/vcsbaseplugin.h>
 | 
						|
 | 
						|
QT_BEGIN_NAMESPACE
 | 
						|
class QDir;
 | 
						|
class QAction;
 | 
						|
class QTextCodec;
 | 
						|
QT_END_NAMESPACE
 | 
						|
 | 
						|
namespace Core {
 | 
						|
class CommandLocator;
 | 
						|
class IVersionControl;
 | 
						|
}
 | 
						|
 | 
						|
namespace Utils { class ParameterAction; }
 | 
						|
namespace VcsBase { class VcsBaseSubmitEditor; }
 | 
						|
 | 
						|
namespace Cvs {
 | 
						|
namespace Internal {
 | 
						|
 | 
						|
struct CvsDiffParameters;
 | 
						|
class CvsSubmitEditor;
 | 
						|
class CvsControl;
 | 
						|
class CvsClient;
 | 
						|
 | 
						|
struct CvsResponse
 | 
						|
{
 | 
						|
    enum Result { Ok, NonNullExitCode, OtherError };
 | 
						|
    CvsResponse() : result(Ok) {}
 | 
						|
 | 
						|
    Result result;
 | 
						|
    QString stdOut;
 | 
						|
    QString stdErr;
 | 
						|
    QString message;
 | 
						|
};
 | 
						|
 | 
						|
class CvsPlugin : public VcsBase::VcsBasePlugin
 | 
						|
{
 | 
						|
    Q_OBJECT
 | 
						|
    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "CVS.json")
 | 
						|
 | 
						|
public:
 | 
						|
    CvsPlugin();
 | 
						|
    ~CvsPlugin();
 | 
						|
 | 
						|
    CvsClient *client() const;
 | 
						|
 | 
						|
    bool initialize(const QStringList &arguments, QString *errorMessage);
 | 
						|
 | 
						|
    CvsSubmitEditor *openCVSSubmitEditor(const QString &fileName);
 | 
						|
 | 
						|
    // IVersionControl
 | 
						|
    bool vcsAdd(const QString &workingDir, const QString &fileName);
 | 
						|
    bool vcsDelete(const QString &workingDir, const QString &fileName);
 | 
						|
    bool managesDirectory(const QString &directory, QString *topLevel = 0) const;
 | 
						|
    bool managesFile(const QString &workingDirectory, const QString &fileName) const;
 | 
						|
    // cvs 'edit' is used to implement 'open' (cvsnt).
 | 
						|
    bool edit(const QString &topLevel, const QStringList &files);
 | 
						|
 | 
						|
    static CvsPlugin *instance();
 | 
						|
 | 
						|
public slots:
 | 
						|
    void vcsAnnotate(const QString &workingDirectory, const QString &file,
 | 
						|
                     const QString &revision, int lineNumber);
 | 
						|
 | 
						|
private slots:
 | 
						|
    void addCurrentFile();
 | 
						|
    void revertCurrentFile();
 | 
						|
    void diffProject();
 | 
						|
    void diffCurrentFile();
 | 
						|
    void revertAll();
 | 
						|
    void startCommitAll();
 | 
						|
    void startCommitDirectory();
 | 
						|
    void startCommitCurrentFile();
 | 
						|
    void filelogCurrentFile();
 | 
						|
    void annotateCurrentFile();
 | 
						|
    void projectStatus();
 | 
						|
    void slotDescribe(const QString &source, const QString &changeNr);
 | 
						|
    void updateDirectory();
 | 
						|
    void updateProject();
 | 
						|
    void submitCurrentLog();
 | 
						|
    void diffCommitFiles(const QStringList &);
 | 
						|
    void logProject();
 | 
						|
    void logRepository();
 | 
						|
    void commitProject();
 | 
						|
    void diffRepository();
 | 
						|
    void statusRepository();
 | 
						|
    void updateRepository();
 | 
						|
    void editCurrentFile();
 | 
						|
    void uneditCurrentFile();
 | 
						|
    void uneditCurrentRepository();
 | 
						|
#ifdef WITH_TESTS
 | 
						|
    void testDiffFileResolving_data();
 | 
						|
    void testDiffFileResolving();
 | 
						|
    void testLogResolving();
 | 
						|
#endif
 | 
						|
 | 
						|
protected:
 | 
						|
    void updateActions(VcsBase::VcsBasePlugin::ActionState);
 | 
						|
    bool submitEditorAboutToClose();
 | 
						|
 | 
						|
private:
 | 
						|
    bool isCommitEditorOpen() const;
 | 
						|
    Core::IEditor *showOutputInEditor(const QString& title, const QString &output,
 | 
						|
                                      int editorType, const QString &source,
 | 
						|
                                      QTextCodec *codec);
 | 
						|
 | 
						|
    CvsResponse runCvs(const QString &workingDirectory,
 | 
						|
                       const QStringList &arguments,
 | 
						|
                       int timeOut,
 | 
						|
                       unsigned flags,
 | 
						|
                       QTextCodec *outputCodec = 0) const;
 | 
						|
 | 
						|
    void annotate(const QString &workingDir, const QString &file,
 | 
						|
                  const QString &revision = QString(), int lineNumber= -1);
 | 
						|
    bool describe(const QString &source, const QString &changeNr, QString *errorMessage);
 | 
						|
    bool describe(const QString &toplevel, const QString &source, const QString &changeNr, QString *errorMessage);
 | 
						|
    bool describe(const QString &repository, QList<CvsLogEntry> entries, QString *errorMessage);
 | 
						|
    void filelog(const QString &workingDir,
 | 
						|
                 const QString &file = QString(),
 | 
						|
                 bool enableAnnotationContextMenu = false);
 | 
						|
    bool unedit(const QString &topLevel, const QStringList &files);
 | 
						|
    bool status(const QString &topLevel, const QString &file, const QString &title);
 | 
						|
    bool update(const QString &topLevel, const QString &file);
 | 
						|
    bool checkCVSDirectory(const QDir &directory) const;
 | 
						|
    // Quick check if files are modified
 | 
						|
    bool diffCheckModified(const QString &topLevel, const QStringList &files, bool *modified);
 | 
						|
    QString findTopLevelForDirectoryI(const QString &directory) const;
 | 
						|
    void startCommit(const QString &workingDir, const QString &file = QString());
 | 
						|
    bool commit(const QString &messageFile, const QStringList &subVersionFileList);
 | 
						|
    void cleanCommitMessageFile();
 | 
						|
    inline CvsControl *cvsVersionControl() const;
 | 
						|
 | 
						|
    CvsSettings m_settings;
 | 
						|
    CvsClient *m_client;
 | 
						|
 | 
						|
    QString m_commitMessageFileName;
 | 
						|
    QString m_commitRepository;
 | 
						|
 | 
						|
    Core::CommandLocator *m_commandLocator;
 | 
						|
    Utils::ParameterAction *m_addAction;
 | 
						|
    Utils::ParameterAction *m_deleteAction;
 | 
						|
    Utils::ParameterAction *m_revertAction;
 | 
						|
    Utils::ParameterAction *m_editCurrentAction;
 | 
						|
    Utils::ParameterAction *m_uneditCurrentAction;
 | 
						|
    QAction *m_uneditRepositoryAction;
 | 
						|
    Utils::ParameterAction *m_diffProjectAction;
 | 
						|
    Utils::ParameterAction *m_diffCurrentAction;
 | 
						|
    Utils::ParameterAction *m_logProjectAction;
 | 
						|
    QAction *m_logRepositoryAction;
 | 
						|
    QAction *m_commitAllAction;
 | 
						|
    QAction *m_revertRepositoryAction;
 | 
						|
    Utils::ParameterAction *m_commitCurrentAction;
 | 
						|
    Utils::ParameterAction *m_filelogCurrentAction;
 | 
						|
    Utils::ParameterAction *m_annotateCurrentAction;
 | 
						|
    Utils::ParameterAction *m_statusProjectAction;
 | 
						|
    Utils::ParameterAction *m_updateProjectAction;
 | 
						|
    Utils::ParameterAction *m_commitProjectAction;
 | 
						|
    Utils::ParameterAction *m_updateDirectoryAction;
 | 
						|
    Utils::ParameterAction *m_commitDirectoryAction;
 | 
						|
    QAction *m_diffRepositoryAction;
 | 
						|
    QAction *m_updateRepositoryAction;
 | 
						|
    QAction *m_statusRepositoryAction;
 | 
						|
 | 
						|
    QAction *m_submitCurrentLogAction;
 | 
						|
    QAction *m_submitDiffAction;
 | 
						|
    QAction *m_submitUndoAction;
 | 
						|
    QAction *m_submitRedoAction;
 | 
						|
    QAction *m_menuAction;
 | 
						|
    bool    m_submitActionTriggered;
 | 
						|
 | 
						|
    static CvsPlugin *m_cvsPluginInstance;
 | 
						|
};
 | 
						|
 | 
						|
} // namespace Cvs
 | 
						|
} // namespace Internal
 | 
						|
 | 
						|
#endif // CVSPLUGIN_H
 |