File indexing completed on 2024-05-05 16:46:07
0001 /* 0002 SPDX-FileCopyrightText: 2010 Morten Danielsen Volden 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef KDEVPERFORCEPLUGIN_H 0008 #define KDEVPERFORCEPLUGIN_H 0009 0010 #include <vcs/interfaces/icentralizedversioncontrol.h> 0011 #include <interfaces/iplugin.h> 0012 #include <outputview/outputjob.h> 0013 0014 0015 #include <QVariantList> 0016 #include <QString> 0017 0018 #include <memory> 0019 0020 class QFileInfo; 0021 0022 0023 namespace KDevelop 0024 { 0025 class VcsPluginHelper; 0026 class DVcsJob; 0027 } 0028 0029 0030 class PerforcePlugin : public KDevelop::IPlugin, public KDevelop::ICentralizedVersionControl 0031 { 0032 Q_OBJECT 0033 Q_INTERFACES(KDevelop::IBasicVersionControl KDevelop::ICentralizedVersionControl) 0034 0035 friend class PerforcePluginTest; 0036 public: 0037 explicit PerforcePlugin(QObject* parent, const QVariantList & = QVariantList()); 0038 ~PerforcePlugin() override; 0039 0040 //@{ 0041 /** Methods inherited from KDevelop::IBasicVersionControl */ 0042 QString name() const override; 0043 0044 KDevelop::VcsImportMetadataWidget* createImportMetadataWidget(QWidget* parent) override; 0045 0046 bool isValidRemoteRepositoryUrl(const QUrl& remoteLocation) override; 0047 bool isVersionControlled(const QUrl& localLocation) override; 0048 0049 KDevelop::VcsJob* repositoryLocation(const QUrl& localLocation) override; 0050 0051 KDevelop::VcsJob* add(const QList<QUrl>& localLocations, 0052 RecursionMode recursion = IBasicVersionControl::Recursive) override; 0053 KDevelop::VcsJob* remove(const QList<QUrl>& localLocations) override; 0054 0055 KDevelop::VcsJob* copy(const QUrl& localLocationSrc, 0056 const QUrl& localLocationDstn) override; 0057 KDevelop::VcsJob* move(const QUrl& localLocationSrc, 0058 const QUrl& localLocationDst) override; 0059 KDevelop::VcsJob* status(const QList<QUrl>& localLocations, 0060 RecursionMode recursion = IBasicVersionControl::Recursive) override; 0061 0062 KDevelop::VcsJob* revert(const QList<QUrl>& localLocations, 0063 RecursionMode recursion = IBasicVersionControl::Recursive) override; 0064 0065 KDevelop::VcsJob* update(const QList<QUrl>& localLocations, 0066 const KDevelop::VcsRevision& rev = KDevelop::VcsRevision::createSpecialRevision(KDevelop::VcsRevision::Head), 0067 KDevelop::IBasicVersionControl::RecursionMode recursion = KDevelop::IBasicVersionControl::Recursive) override; 0068 0069 KDevelop::VcsJob* commit(const QString& message, 0070 const QList<QUrl>& localLocations, 0071 KDevelop::IBasicVersionControl::RecursionMode recursion = KDevelop::IBasicVersionControl::Recursive) override; 0072 0073 KDevelop::VcsJob* diff(const QUrl& fileOrDirectory, 0074 const KDevelop::VcsRevision& srcRevision, 0075 const KDevelop::VcsRevision& dstRevision, 0076 KDevelop::IBasicVersionControl::RecursionMode recursion = KDevelop::IBasicVersionControl::Recursive) override; 0077 0078 KDevelop::VcsJob* log(const QUrl& localLocation, 0079 const KDevelop::VcsRevision& rev, 0080 unsigned long limit = 0) override; 0081 0082 KDevelop::VcsJob* log(const QUrl& localLocation, 0083 const KDevelop::VcsRevision& rev = KDevelop::VcsRevision::createSpecialRevision(KDevelop::VcsRevision::Base), 0084 const KDevelop::VcsRevision& limit = KDevelop::VcsRevision::createSpecialRevision(KDevelop::VcsRevision::Start)) override; 0085 0086 KDevelop::VcsJob* annotate(const QUrl& localLocation, 0087 const KDevelop::VcsRevision& rev = KDevelop::VcsRevision::createSpecialRevision(KDevelop::VcsRevision::Head)) override; 0088 0089 KDevelop::VcsJob* resolve(const QList<QUrl>& localLocations, 0090 KDevelop::IBasicVersionControl::RecursionMode recursion) override; 0091 0092 KDevelop::VcsJob* createWorkingCopy(const KDevelop::VcsLocation & sourceRepository, 0093 const QUrl & destinationDirectory, 0094 KDevelop::IBasicVersionControl::RecursionMode recursion = IBasicVersionControl::Recursive) override; 0095 0096 0097 KDevelop::VcsLocationWidget* vcsLocation(QWidget* parent) const override; 0098 //@} 0099 0100 //@{ 0101 /** Methods inherited from KDevelop::ICentralizedVersionControl */ 0102 KDevelop::VcsJob* edit(const QUrl& localLocation) override; 0103 0104 KDevelop::VcsJob* unedit(const QUrl& localLocation) override; 0105 0106 KDevelop::VcsJob* localRevision(const QUrl& localLocation, 0107 KDevelop::VcsRevision::RevisionType) override; 0108 0109 KDevelop::VcsJob* import(const QString & commitMessage, 0110 const QUrl & sourceDirectory, 0111 const KDevelop::VcsLocation & destinationRepository) override; 0112 //@} 0113 0114 /// This plugin implements its own edit method 0115 KDevelop::VcsJob* edit(const QList<QUrl>& localLocations); 0116 0117 0118 KDevelop::ContextMenuExtension contextMenuExtension(KDevelop::Context* context, QWidget* parent) override; 0119 0120 0121 public Q_SLOTS: 0122 0123 /// invoked by context-menu 0124 void ctxEdit(); 0125 // void ctxUnedit(); 0126 // void ctxLocalRevision(); 0127 // void ctxImport(); 0128 0129 private Q_SLOTS: 0130 void parseP4StatusOutput(KDevelop::DVcsJob* job); 0131 void parseP4DiffOutput(KDevelop::DVcsJob* job); 0132 void parseP4LogOutput(KDevelop::DVcsJob* job); 0133 void parseP4AnnotateOutput(KDevelop::DVcsJob* job); 0134 0135 0136 0137 private: 0138 bool isValidDirectory(const QUrl & dirPath); 0139 KDevelop::DVcsJob* p4fstatJob(const QFileInfo& curFile, 0140 KDevelop::OutputJob::OutputJobVerbosity verbosity = KDevelop::OutputJob::Verbose); 0141 0142 bool parseP4fstat(const QFileInfo& curFile, 0143 KDevelop::OutputJob::OutputJobVerbosity verbosity = KDevelop::OutputJob::Verbose); 0144 0145 KDevelop::VcsJob* errorsFound(const QString& error, 0146 KDevelop::OutputJob::OutputJobVerbosity verbosity = KDevelop::OutputJob::Verbose); 0147 0148 QString getRepositoryName(const QFileInfo& curFile); 0149 0150 0151 void setEnvironmentForJob(KDevelop::DVcsJob* job, QFileInfo const& fsObject); 0152 QList<QVariant> getQvariantFromLogOutput(QStringList const& outputLines); 0153 0154 std::unique_ptr<KDevelop::VcsPluginHelper> m_common; 0155 QString m_perforceConfigName; 0156 QString m_perforceExecutable; 0157 QAction* m_edit_action; 0158 }; 0159 0160 #endif // PERFORCEPLUGIN_H