File indexing completed on 2024-04-14 05:34:14

0001 /*
0002     SPDX-FileCopyrightText: 2011 Vishesh Yadav <vishesh3y@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef FILEVIEWHGPLUGIN_H
0008 #define FILEVIEWHGPLUGIN_H
0009 
0010 #include "hgwrapper.h"
0011 
0012 #include <KFileItem>
0013 #include <Dolphin/KVersionControlPlugin>
0014 #include <QHash>
0015 #include <QString>
0016 #include <QProcess>
0017 
0018 class QAction;
0019 class QMenu;
0020 
0021 class FileViewHgPlugin : public KVersionControlPlugin
0022 {
0023     Q_OBJECT
0024 
0025 public:
0026     FileViewHgPlugin(QObject *parent, const QList<QVariant> &args);
0027     ~FileViewHgPlugin() override;
0028     QString fileName() const override;
0029     QString localRepositoryRoot(const QString& directory) const override;
0030     bool beginRetrieval(const QString& directory) override;
0031     void endRetrieval() override;
0032     KVersionControlPlugin::ItemVersion itemVersion(const KFileItem& item) const override;
0033     QList<QAction*> versionControlActions(const KFileItemList& items) const override;
0034     virtual QList<QAction*> outOfVersionControlActions(const KFileItemList& items) const override;
0035 
0036 
0037 private: 
0038     /**
0039      * Check if HgWrapper is created and connect some signals/slots. Created
0040      * to ensure that HgWrapper singleton is instantiated not during
0041      * plugin construction hence not in other thread which ends up giving 
0042      * a lot of warnings. 
0043      */
0044     void createHgWrapper() const;
0045 
0046     /**
0047      * Simply clear status messages ie m_errorMsg and m_operationCompletedMsg
0048      */
0049     void clearMessages() const;
0050 
0051     /**
0052      * Read executable file path to open diff patches with from 
0053      * $HOME/.dolphin-hg file in INI format
0054      */
0055     QString visualDiffExecPath();
0056 
0057     QList<QAction*> itemContextMenu(const KFileItemList &items) const;
0058     QList<QAction*> directoryContextMenu(const QString &directory) const;
0059     QList<QAction*> universalContextMenuActions(const QString &directory) const;
0060 
0061 private Q_SLOTS:
0062     void addFiles();
0063     void removeFiles();
0064     void renameFile();
0065     void commit();
0066     void branch();
0067     void tag();
0068     void update();
0069     void clone();
0070     void create();
0071     void global_config();
0072     void repo_config();
0073     void push();
0074     void pull();
0075     void revert();
0076     void revertAll();
0077     void rollback();
0078     void backout();
0079     void diff();
0080     void serve();
0081     void merge();
0082     void bundle();
0083     void unbundle();
0084     void exportChangesets();
0085     void importChangesets();
0086 
0087     void slotOperationCompleted(int exitCode, QProcess::ExitStatus exitStatus);
0088     void slotOperationError();
0089 
0090 private:
0091     QHash<QString, ItemVersion> m_versionInfoHash;
0092 
0093     QMenu *m_mainContextMenu;
0094 
0095     QAction *m_menuAction;
0096     QAction *m_addAction;
0097     QAction *m_removeAction;
0098     QAction *m_renameAction;
0099     QAction *m_commitAction;
0100     QAction *m_branchAction;
0101     QAction *m_tagAction;
0102     QAction *m_updateAction;
0103     QAction *m_cloneAction;
0104     QAction *m_createAction;
0105     QAction *m_configAction;
0106     QAction *m_globalConfigAction;
0107     QAction *m_repoConfigAction;
0108     QAction *m_pushAction;
0109     QAction *m_pullAction;
0110     QAction *m_revertAction;
0111     QAction *m_revertAllAction;
0112     QAction *m_rollbackAction;
0113     QAction *m_mergeAction;
0114     QAction *m_bundleAction;
0115     QAction *m_exportAction;
0116     QAction *m_unbundleAction;
0117     QAction *m_importAction;
0118     QAction *m_diffAction;
0119     QAction *m_serveAction;
0120     QAction *m_backoutAction;
0121 
0122     QWidget* m_parentWidget;
0123 
0124     mutable KFileItemList m_contextItems;
0125     mutable QString m_universalCurrentDirectory;
0126     mutable QString m_currentDir;
0127     bool m_isCommitable;
0128 
0129     mutable QString m_operationCompletedMsg;
0130     mutable QString m_errorMsg;
0131     mutable HgWrapper *m_hgWrapper;
0132     HgWrapper *m_retrievalHgw;
0133 };
0134 
0135 #endif // FILEVIEWHGPLUGIN_H
0136