File indexing completed on 2024-05-19 04:03:03
0001 /* 0002 SPDX-FileCopyrightText: 2017 René J.V. Bertin <rjvbertin@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef KDEVPLATFORM_PLUGIN_PHABRICATORJOBS_H 0008 #define KDEVPLATFORM_PLUGIN_PHABRICATORJOBS_H 0009 0010 #include <QHash> 0011 #include <QList> 0012 #include <QPair> 0013 #include <QUrl> 0014 0015 #include <KJob> 0016 #include <QProcess> 0017 0018 class QNetworkReply; 0019 0020 namespace Phabricator 0021 { 0022 class DifferentialRevision : public KJob 0023 { 0024 Q_OBJECT 0025 public: 0026 DifferentialRevision(const QString &id, QObject *parent) 0027 : KJob(parent) 0028 , m_id(id) 0029 , m_commit(QString()) 0030 { 0031 setPercent(0); 0032 } 0033 QString requestId() const 0034 { 0035 return m_id; 0036 } 0037 void setRequestId(const QString &id) 0038 { 0039 m_id = id; 0040 } 0041 QString commitRef() const 0042 { 0043 return m_commit; 0044 } 0045 void setCommitRef(const QString &commit) 0046 { 0047 m_commit = commit; 0048 } 0049 void start() override; 0050 QString errorString() const override 0051 { 0052 return m_errorString; 0053 } 0054 void setErrorString(const QString &msg); 0055 QString scrubbedResult(); 0056 QStringList scrubbedResultList(); 0057 0058 private Q_SLOTS: 0059 virtual void done(int exitCode, QProcess::ExitStatus exitStatus) = 0; 0060 0061 protected: 0062 virtual bool buildArcCommand(const QString &workDir, const QString &patchFile = QString(), bool doBrowse = false); 0063 QProcess m_arcCmd; 0064 0065 private: 0066 QString m_id; 0067 QString m_commit; 0068 QString m_errorString; 0069 QString m_arcInput; 0070 }; 0071 0072 class NewDiffRev : public DifferentialRevision 0073 { 0074 Q_OBJECT 0075 public: 0076 NewDiffRev(const QUrl &patch, const QString &project, bool doBrowse = false, QObject *parent = nullptr); 0077 QString diffURI() const 0078 { 0079 return m_diffURI; 0080 } 0081 0082 private Q_SLOTS: 0083 void done(int exitCode, QProcess::ExitStatus exitStatus) override; 0084 0085 private: 0086 QUrl m_patch; 0087 QString m_project; 0088 QString m_diffURI; 0089 }; 0090 0091 class UpdateDiffRev : public DifferentialRevision 0092 { 0093 Q_OBJECT 0094 public: 0095 UpdateDiffRev(const QUrl &patch, 0096 const QString &basedir, 0097 const QString &id, 0098 const QString &updateComment = QString(), 0099 bool doBrowse = false, 0100 QObject *parent = nullptr); 0101 QString diffURI() const 0102 { 0103 return m_diffURI; 0104 } 0105 0106 private Q_SLOTS: 0107 void done(int exitCode, QProcess::ExitStatus exitStatus) override; 0108 0109 private: 0110 QUrl m_patch; 0111 QString m_basedir; 0112 QString m_diffURI; 0113 }; 0114 0115 class DiffRevList : public DifferentialRevision 0116 { 0117 Q_OBJECT 0118 public: 0119 enum Status { 0120 Accepted, 0121 NeedsReview, 0122 NeedsRevision, 0123 }; 0124 Q_ENUM(Status) 0125 0126 DiffRevList(const QString &projectDir, QObject *parent = nullptr); 0127 // return the open diff. revisions as a list of <diffID,diffDescription> pairs 0128 QList<QPair<QString, QString>> reviews() const 0129 { 0130 return m_reviews; 0131 } 0132 // return the open diff. revisions as a map of diffDescription->diffID entries 0133 QHash<QString, QString> reviewMap() const 0134 { 0135 return m_revMap; 0136 } 0137 // return the open diff. revision statuses as a map of diffDescription->Status entries 0138 QHash<QString, Status> statusMap() const 0139 { 0140 return m_statusMap; 0141 } 0142 0143 private Q_SLOTS: 0144 void done(int exitCode, QProcess::ExitStatus exitStatus) override; 0145 0146 protected: 0147 bool buildArcCommand(const QString &workDir, const QString &unused = QString(), bool ignored = false) override; 0148 0149 private: 0150 QList<QPair<QString, QString>> m_reviews; 0151 QHash<QString, QString> m_revMap; 0152 QHash<QString, Status> m_statusMap; 0153 QString m_projectDir; 0154 }; 0155 } 0156 0157 #endif