1/*
2 This file is part of the Purpose library.
3 SPDX-FileCopyrightText: 2017 René J.V. Bertin <rjvbertin@gmail.com>
4
5 SPDX-License-Identifier: LGPL-2.0-or-later
6*/
7
8#include <QCommandLineParser>
9#include <QCoreApplication>
10#include <QDebug>
11#include <QString>
12
13#include "../phabricatorjobs.h"
14
15int main(int argc, char *argv[])
16{
17 QCoreApplication app(argc, argv);
18
19 QString projectName;
20 QString diffID;
21 QString patchFile;
22 QString updateComment;
23
24 app.setApplicationName(QStringLiteral("testphabricator"));
25 QCommandLineParser parser;
26 const QCommandLineOption projectNameOption(QStringLiteral("project"),
27 QStringLiteral("a directory holding the project"),
28 QStringLiteral("project"),
29 projectName);
30 const QCommandLineOption diffIDOption(QStringLiteral("ID"),
31 QStringLiteral("set the revision ID to update (when missing, create a new diff)"),
32 QStringLiteral("ID"),
33 diffID);
34 const QCommandLineOption patchFileOption(QStringLiteral("patch"), QStringLiteral("the patch to upload"), QStringLiteral("patch"), patchFile);
35 const QCommandLineOption updateCommentOption(QStringLiteral("message"),
36 QStringLiteral("comment describing the patch update"),
37 QStringLiteral("message"),
38 updateComment);
39 const QCommandLineOption listOption(QStringLiteral("list"), QStringLiteral("list your open differential revisions"));
40 parser.addOption(commandLineOption: projectNameOption);
41 parser.addOption(commandLineOption: diffIDOption);
42 parser.addOption(commandLineOption: patchFileOption);
43 parser.addOption(commandLineOption: updateCommentOption);
44 parser.addOption(commandLineOption: listOption);
45 parser.addHelpOption();
46 parser.addVersionOption();
47
48 parser.process(app);
49 if (parser.isSet(option: projectNameOption)) {
50 projectName = parser.value(option: projectNameOption);
51 }
52 if (parser.isSet(option: listOption)) {
53 Phabricator::DiffRevList diffList(projectName);
54 if (diffList.error()) {
55 qCritical() << "Error creating diffList:" << diffList.errorString() << ";" << diffList.error();
56 } else {
57 diffList.exec();
58 if (diffList.error()) {
59 qCritical() << "Error getting diffList:" << diffList.errorString() << ";" << diffList.error();
60 } else {
61 qWarning() << "Open differential revisions:" << diffList.reviewMap();
62 const auto reviews = diffList.reviews();
63 for (const auto &rev : reviews) {
64 qWarning() << rev;
65 }
66 }
67 }
68 } else {
69 if (parser.isSet(option: diffIDOption)) {
70 diffID = parser.value(option: diffIDOption);
71 }
72 if (parser.isSet(option: patchFileOption)) {
73 patchFile = parser.value(option: patchFileOption);
74 if (diffID.isEmpty()) {
75 Phabricator::NewDiffRev newDiffRev(QUrl::fromLocalFile(localfile: patchFile), projectName);
76 newDiffRev.exec();
77 if (newDiffRev.error()) {
78 qCritical() << "Error creating new diff diff:" << newDiffRev.errorString() << ";" << newDiffRev.error();
79 } else {
80 qWarning() << "New differential diff to be completed online:" << newDiffRev.diffURI();
81 }
82 } else {
83 if (parser.isSet(option: updateCommentOption)) {
84 updateComment = parser.value(option: updateCommentOption);
85 }
86 Phabricator::UpdateDiffRev submitDiffRev(QUrl::fromLocalFile(localfile: patchFile), projectName, diffID, updateComment);
87 submitDiffRev.exec();
88 if (submitDiffRev.error()) {
89 qCritical() << "Error creating new diff diff:" << submitDiffRev.errorString() << ";" << submitDiffRev.error();
90 } else {
91 qWarning() << "Updated differential revision; please edit comment online:" << submitDiffRev.diffURI();
92 }
93 }
94 } else {
95 qCritical() << "need a patchfile";
96 }
97 }
98 exit(status: 0);
99}
100

source code of purpose/src/plugins/phabricator/tests/testphabricator.cpp