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