get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/812502/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 812502,
    "url": "http://patchwork.ozlabs.org/api/patches/812502/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170911172022.4738-28-eblake@redhat.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20170911172022.4738-28-eblake@redhat.com>",
    "list_archive_url": null,
    "date": "2017-09-11T17:20:11",
    "name": "[v7,27/38] libqtest: Swap order of qtest_init() and qtest_start()",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "a880cdff13f9222dbf2d00bcacbfd71fb63f4501",
    "submitter": {
        "id": 6591,
        "url": "http://patchwork.ozlabs.org/api/people/6591/?format=api",
        "name": "Eric Blake",
        "email": "eblake@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170911172022.4738-28-eblake@redhat.com/mbox/",
    "series": [
        {
            "id": 2534,
            "url": "http://patchwork.ozlabs.org/api/series/2534/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=2534",
            "date": "2017-09-11T17:19:47",
            "name": "Preliminary libqtest cleanups",
            "version": 7,
            "mbox": "http://patchwork.ozlabs.org/series/2534/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/812502/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/812502/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org",
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)",
            "ext-mx09.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com",
            "ext-mx09.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=eblake@redhat.com"
        ],
        "Received": [
            "from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xrb5F3d2Bz9sNr\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 12 Sep 2017 03:48:49 +1000 (AEST)",
            "from localhost ([::1]:59472 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1drSpD-0007rK-AL\n\tfor incoming@patchwork.ozlabs.org; Mon, 11 Sep 2017 13:48:47 -0400",
            "from eggs.gnu.org ([2001:4830:134:3::10]:38871)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <eblake@redhat.com>) id 1drSOx-0007sI-4C\n\tfor qemu-devel@nongnu.org; Mon, 11 Sep 2017 13:21:43 -0400",
            "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <eblake@redhat.com>) id 1drSOt-0001QK-3I\n\tfor qemu-devel@nongnu.org; Mon, 11 Sep 2017 13:21:39 -0400",
            "from mx1.redhat.com ([209.132.183.28]:59058)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <eblake@redhat.com>) id 1drSOs-0001Q5-QY\n\tfor qemu-devel@nongnu.org; Mon, 11 Sep 2017 13:21:35 -0400",
            "from smtp.corp.redhat.com\n\t(int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id CC9F0279AF5\n\tfor <qemu-devel@nongnu.org>; Mon, 11 Sep 2017 17:21:33 +0000 (UTC)",
            "from red.redhat.com (ovpn-120-44.rdu2.redhat.com [10.10.120.44])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id F33B25D757;\n\tMon, 11 Sep 2017 17:21:32 +0000 (UTC)"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com CC9F0279AF5",
        "From": "Eric Blake <eblake@redhat.com>",
        "To": "qemu-devel@nongnu.org",
        "Date": "Mon, 11 Sep 2017 12:20:11 -0500",
        "Message-Id": "<20170911172022.4738-28-eblake@redhat.com>",
        "In-Reply-To": "<20170911172022.4738-1-eblake@redhat.com>",
        "References": "<20170911172022.4738-1-eblake@redhat.com>",
        "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.14",
        "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.38]);\n\tMon, 11 Sep 2017 17:21:34 +0000 (UTC)",
        "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]",
        "X-Received-From": "209.132.183.28",
        "Subject": "[Qemu-devel] [PATCH v7 27/38] libqtest: Swap order of qtest_init()\n\tand qtest_start()",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.21",
        "Precedence": "list",
        "List-Id": "<qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.nongnu.org/archive/html/qemu-devel/>",
        "List-Post": "<mailto:qemu-devel@nongnu.org>",
        "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>",
        "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Cc": "pbonzini@redhat.com, thuth@redhat.com, armbru@redhat.com",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"
    },
    "content": "We already have another qtest_init() in the tree (namely, as part\nof the device initialization of the qtest device at the top level\nqtest.c), with a different signature; having two different\nqtest_init() is confusing, so an upcoming patch will consolidate\nall testsuite callers onto a unified spelling.  But the\nconsolidation is easier if qtest_start() is further down the call\nchain, rather than an intermediate wrapper, so swap the call chain\naround.  This includes renaming qtest_init_without_qmp_handshake()\ninto qtest_start_without_qmp_handshake(), as it remains the lowest\npoint in the call stack.\n\nNote that qtest_init() now asserts that global_qtest was not set\non entry, and clears it on exit, to preserve the behavior of\nexisting tests that assert the same (and also proving that we\nfixed all tests that had parallel connections); but later patches\nwill eventually simplify things by getting rid of qtest_init()\nand global_qtest altogether.\n\nSigned-off-by: Eric Blake <eblake@redhat.com>\n---\n tests/libqtest.h | 52 ++++++++++++++++++++++++++++------------------------\n tests/libqtest.c |  9 +++++----\n tests/qmp-test.c |  2 +-\n 3 files changed, 34 insertions(+), 29 deletions(-)",
    "diff": "diff --git a/tests/libqtest.h b/tests/libqtest.h\nindex d976a542b8..9ef0fbefea 100644\n--- a/tests/libqtest.h\n+++ b/tests/libqtest.h\n@@ -24,20 +24,39 @@ typedef struct QTestState QTestState;\n extern QTestState *global_qtest;\n\n /**\n+ * qtest_start_without_qmp_handshake:\n+ * @extra_args: other arguments to pass to QEMU.\n+ *\n+ * Returns: #QTestState instance.  Does not affect #global_qtest.\n+ */\n+QTestState *qtest_start_without_qmp_handshake(const char *extra_args);\n+\n+/**\n+ * qtest_start:\n+ * @args: other arguments to pass to QEMU\n+ *\n+ * Start QEMU and assign the resulting #QTestState to #global_qtest.\n+ * The global variable is used by \"shortcut\" functions documented below.\n+ *\n+ * Returns: #QTestState instance.\n+ */\n+QTestState *qtest_start(const char *args);\n+\n+/**\n  * qtest_init:\n  * @extra_args: other arguments to pass to QEMU.\n  *\n- * Returns: #QTestState instance.\n+ * Returns: #QTestState instance.  Does not affect #global_qtest.\n  */\n-QTestState *qtest_init(const char *extra_args);\n+static inline QTestState *qtest_init(const char *extra_args)\n+{\n+    QTestState *s;\n\n-/**\n- * qtest_init_without_qmp_handshake:\n- * @extra_args: other arguments to pass to QEMU.\n- *\n- * Returns: #QTestState instance.\n- */\n-QTestState *qtest_init_without_qmp_handshake(const char *extra_args);\n+    assert(!global_qtest);\n+    s = qtest_start(extra_args);\n+    global_qtest = NULL;\n+    return s;\n+}\n\n /**\n  * qtest_quit:\n@@ -508,21 +527,6 @@ void qtest_add_data_func_full(const char *str, void *data,\n void qtest_add_abrt_handler(GHookFunc fn, const void *data);\n\n /**\n- * qtest_start:\n- * @args: other arguments to pass to QEMU\n- *\n- * Start QEMU and assign the resulting #QTestState to a global variable.\n- * The global variable is used by \"shortcut\" functions documented below.\n- *\n- * Returns: #QTestState instance.\n- */\n-static inline QTestState *qtest_start(const char *args)\n-{\n-    global_qtest = qtest_init(args);\n-    return global_qtest;\n-}\n-\n-/**\n  * qmp:\n  * @fmt...: QMP message to send to qemu\n  *\ndiff --git a/tests/libqtest.c b/tests/libqtest.c\nindex 94c157ce02..e8c2e11817 100644\n--- a/tests/libqtest.c\n+++ b/tests/libqtest.c\n@@ -152,7 +152,7 @@ void qtest_add_abrt_handler(GHookFunc fn, const void *data)\n     g_hook_prepend(&abrt_hooks, hook);\n }\n\n-QTestState *qtest_init_without_qmp_handshake(const char *extra_args)\n+QTestState *qtest_start_without_qmp_handshake(const char *extra_args)\n {\n     QTestState *s;\n     int sock, qmpsock, i;\n@@ -233,15 +233,16 @@ QTestState *qtest_init_without_qmp_handshake(const char *extra_args)\n     return s;\n }\n\n-QTestState *qtest_init(const char *extra_args)\n+QTestState *qtest_start(const char *extra_args)\n {\n-    QTestState *s = qtest_init_without_qmp_handshake(extra_args);\n+    QTestState *s = qtest_start_without_qmp_handshake(extra_args);\n\n     /* Read the QMP greeting and then do the handshake */\n     qtest_qmp_discard_response(s, \"\");\n     qtest_qmp_discard_response(s, \"{ 'execute': 'qmp_capabilities' }\");\n\n-    return s;\n+    assert(!global_qtest);\n+    return global_qtest = s;\n }\n\n void qtest_quit(QTestState *s)\ndiff --git a/tests/qmp-test.c b/tests/qmp-test.c\nindex a31c0f7de1..8985e7f9ec 100644\n--- a/tests/qmp-test.c\n+++ b/tests/qmp-test.c\n@@ -77,7 +77,7 @@ static void test_qmp_protocol(void)\n     QList *capabilities;\n     QTestState *qts;\n\n-    qts = qtest_init_without_qmp_handshake(common_args);\n+    qts = qtest_start_without_qmp_handshake(common_args);\n\n     /* Test greeting */\n     resp = qtest_qmp_receive(qts);\n",
    "prefixes": [
        "v7",
        "27/38"
    ]
}