get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 808746,
    "url": "http://patchwork.ozlabs.org/api/patches/808746/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170901153758.8628-15-armbru@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": "<20170901153758.8628-15-armbru@redhat.com>",
    "list_archive_url": null,
    "date": "2017-09-01T15:37:25",
    "name": "[PULL,v2,14/47] qlit: Tighten QLit dict vs QDict comparison",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "c802c357cbba7d26da685aac38953005a0bd305c",
    "submitter": {
        "id": 2645,
        "url": "http://patchwork.ozlabs.org/api/people/2645/?format=api",
        "name": "Markus Armbruster",
        "email": "armbru@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170901153758.8628-15-armbru@redhat.com/mbox/",
    "series": [
        {
            "id": 1049,
            "url": "http://patchwork.ozlabs.org/api/series/1049/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=1049",
            "date": "2017-09-01T15:37:14",
            "name": "[PULL,v2,01/47] qapi: Fix error handling code on alternate conflict",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/1049/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/808746/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/808746/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=armbru@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 3xkNyk3Mvyz9t3p\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat,  2 Sep 2017 01:51:42 +1000 (AEST)",
            "from localhost ([::1]:46546 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 1dnoEO-0003ZW-82\n\tfor incoming@patchwork.ozlabs.org; Fri, 01 Sep 2017 11:51:40 -0400",
            "from eggs.gnu.org ([2001:4830:134:3::10]:51527)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <armbru@redhat.com>) id 1dno1N-0006eL-3t\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 11:38:17 -0400",
            "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <armbru@redhat.com>) id 1dno1K-0001gh-DO\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 11:38:13 -0400",
            "from mx1.redhat.com ([209.132.183.28]:41266)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <armbru@redhat.com>) id 1dno1K-0001fV-43\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 11:38:10 -0400",
            "from smtp.corp.redhat.com\n\t(int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11])\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 267D568AC\n\tfor <qemu-devel@nongnu.org>; Fri,  1 Sep 2017 15:38:09 +0000 (UTC)",
            "from blackfin.pond.sub.org (ovpn-116-75.ams2.redhat.com\n\t[10.36.116.75])\n\tby smtp.corp.redhat.com (Postfix) with ESMTPS id 9B0329578E;\n\tFri,  1 Sep 2017 15:38:04 +0000 (UTC)",
            "by blackfin.pond.sub.org (Postfix, from userid 1000)\n\tid 6C1C811385D8; Fri,  1 Sep 2017 17:37:58 +0200 (CEST)"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com 267D568AC",
        "From": "Markus Armbruster <armbru@redhat.com>",
        "To": "qemu-devel@nongnu.org",
        "Date": "Fri,  1 Sep 2017 17:37:25 +0200",
        "Message-Id": "<20170901153758.8628-15-armbru@redhat.com>",
        "In-Reply-To": "<20170901153758.8628-1-armbru@redhat.com>",
        "References": "<20170901153758.8628-1-armbru@redhat.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.11",
        "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.38]);\n\tFri, 01 Sep 2017 15:38:09 +0000 (UTC)",
        "Content-Transfer-Encoding": "quoted-printable",
        "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] [PULL v2 14/47] qlit: Tighten QLit dict vs QDict\n\tcomparison",
        "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": "=?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@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": "From: Marc-André Lureau <marcandre.lureau@redhat.com>\n\nWe check that all members of the QLit dictionary are also in the\nQDict.  We neglect to check the other direction.\n\nComparing the number of members suffices, because QDict can't\ncontain duplicate members, and putting duplicates in a QLit is a\nprogramming error.\n\nSigned-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>\nMessage-Id: <20170825105913.4060-12-marcandre.lureau@redhat.com>\n[Commit message improved]\nSigned-off-by: Markus Armbruster <armbru@redhat.com>\n---\n qobject/qlit.c     | 37 +++++++++++++++++++++++--------------\n tests/check-qlit.c |  7 +++++++\n 2 files changed, 30 insertions(+), 14 deletions(-)",
    "diff": "diff --git a/qobject/qlit.c b/qobject/qlit.c\nindex b1d9146220..dc0015f76c 100644\n--- a/qobject/qlit.c\n+++ b/qobject/qlit.c\n@@ -41,6 +41,27 @@ static void compare_helper(QObject *obj, void *opaque)\n         qlit_equal_qobject(&helper->objs[helper->index++], obj);\n }\n \n+static bool qlit_equal_qdict(const QLitObject *lhs, const QDict *qdict)\n+{\n+    int i;\n+\n+    for (i = 0; lhs->value.qdict[i].key; i++) {\n+        QObject *obj = qdict_get(qdict, lhs->value.qdict[i].key);\n+\n+        if (!qlit_equal_qobject(&lhs->value.qdict[i].value, obj)) {\n+            return false;\n+        }\n+    }\n+\n+    /* Note: the literal qdict must not contain duplicates, this is\n+     * considered a programming error and it isn't checked here. */\n+    if (qdict_size(qdict) != i) {\n+        return false;\n+    }\n+\n+    return true;\n+}\n+\n bool qlit_equal_qobject(const QLitObject *lhs, const QObject *rhs)\n {\n     if (!rhs || lhs->type != qobject_type(rhs)) {\n@@ -55,20 +76,8 @@ bool qlit_equal_qobject(const QLitObject *lhs, const QObject *rhs)\n     case QTYPE_QSTRING:\n         return (strcmp(lhs->value.qstr,\n                        qstring_get_str(qobject_to_qstring(rhs))) == 0);\n-    case QTYPE_QDICT: {\n-        int i;\n-\n-        for (i = 0; lhs->value.qdict[i].key; i++) {\n-            QObject *obj = qdict_get(qobject_to_qdict(rhs),\n-                                     lhs->value.qdict[i].key);\n-\n-            if (!qlit_equal_qobject(&lhs->value.qdict[i].value, obj)) {\n-                return false;\n-            }\n-        }\n-\n-        return true;\n-    }\n+    case QTYPE_QDICT:\n+        return qlit_equal_qdict(lhs, qobject_to_qdict(rhs));\n     case QTYPE_QLIST: {\n         QListCompareHelper helper;\n \ndiff --git a/tests/check-qlit.c b/tests/check-qlit.c\nindex d2422bbaf0..d2ecc200d3 100644\n--- a/tests/check-qlit.c\n+++ b/tests/check-qlit.c\n@@ -28,6 +28,11 @@ static QLitObject qlit = QLIT_QDICT(((QLitDictEntry[]) {\n     { },\n }));\n \n+static QLitObject qlit_foo = QLIT_QDICT(((QLitDictEntry[]) {\n+    { \"foo\", QLIT_QNUM(42) },\n+    { },\n+}));\n+\n static QObject *make_qobject(void)\n {\n     QDict *qdict = qdict_new();\n@@ -51,6 +56,8 @@ static void qlit_equal_qobject_test(void)\n \n     g_assert(qlit_equal_qobject(&qlit, qobj));\n \n+    g_assert(!qlit_equal_qobject(&qlit_foo, qobj));\n+\n     qobject_decref(qobj);\n }\n \n",
    "prefixes": [
        "PULL",
        "v2",
        "14/47"
    ]
}