get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2227545,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2227545/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260423220022.2180059-2-jsnow@redhat.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/1.1/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": ""
    },
    "msgid": "<20260423220022.2180059-2-jsnow@redhat.com>",
    "date": "2026-04-23T22:00:10",
    "name": "[01/12] tests/qapi: generate output in source order",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "20c8fa7b2968c29c106aca28252bbddac955bf9e",
    "submitter": {
        "id": 64343,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/64343/?format=api",
        "name": "John Snow",
        "email": "jsnow@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260423220022.2180059-2-jsnow@redhat.com/mbox/",
    "series": [
        {
            "id": 501255,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/501255/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=501255",
            "date": "2026-04-23T22:00:11",
            "name": "qapi: add formal \"intro\" section",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/501255/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2227545/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2227545/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=TT1SwdoD;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g1qmp2pVzz1yJF\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 24 Apr 2026 08:01:30 +1000 (AEST)",
            "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wG26E-0005gJ-Lr; Thu, 23 Apr 2026 18:00:42 -0400",
            "from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <jsnow@redhat.com>) id 1wG26D-0005fc-1y\n for qemu-devel@nongnu.org; Thu, 23 Apr 2026 18:00:41 -0400",
            "from us-smtp-delivery-124.mimecast.com ([170.10.133.124])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <jsnow@redhat.com>) id 1wG26A-0005mH-Oo\n for qemu-devel@nongnu.org; Thu, 23 Apr 2026 18:00:40 -0400",
            "from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-132-_CLeo1weMNKtRlq4QIXhag-1; Thu,\n 23 Apr 2026 18:00:32 -0400",
            "from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 83C9E180057D; Thu, 23 Apr 2026 22:00:30 +0000 (UTC)",
            "from jsnow-thinkpadp16vgen1.westford.csb (unknown [10.22.64.143])\n by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id 92074300757B; Thu, 23 Apr 2026 22:00:27 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776981635;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=TEzImYqo15Vc+v8MYBOrn3/FbYDE9JP7Gr2EmP3uAno=;\n b=TT1SwdoD2mMB5mQsAyB3Tyxs5bN+nFeMSggDIZ4lyUp18bPqD8XSZBiTsctnQxLTZB8S2i\n 9jxxw9hN7R2uOM3+bZNvStpmY/mdpyw0yfPAXuVtDTXkNYmsRXU90W/UuEkeS+GiVjrhrs\n yq8PqUZI4j7PuDNFfY53e+WlfYhzQnA=",
        "X-MC-Unique": "_CLeo1weMNKtRlq4QIXhag-1",
        "X-Mimecast-MFC-AGG-ID": "_CLeo1weMNKtRlq4QIXhag_1776981630",
        "From": "John Snow <jsnow@redhat.com>",
        "To": "qemu-devel@nongnu.org",
        "Cc": "Igor Mammedov <imammedo@redhat.com>,\n Mauro Carvalho Chehab <mchehab+huawei@kernel.org>,\n \"Michael S. Tsirkin\" <mst@redhat.com>, Michael Roth <michael.roth@amd.com>,\n Markus Armbruster <armbru@redhat.com>, Ani Sinha <anisinha@redhat.com>,\n Gerd Hoffmann <kraxel@redhat.com>, Eric Blake <eblake@redhat.com>,\n Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>, =?utf-8?q?Philippe_Ma?=\n\t=?utf-8?q?thieu-Daud=C3=A9?= <philmd@linaro.org>, =?utf-8?q?Marc-Andr=C3=A9?=\n\t=?utf-8?q?_Lureau?= <marcandre.lureau@redhat.com>,\n Richard Henderson <richard.henderson@linaro.org>,\n Paolo Bonzini <pbonzini@redhat.com>,\n Peter Maydell <peter.maydell@linaro.org>, John Snow <jsnow@redhat.com>",
        "Subject": "[PATCH 01/12] tests/qapi: generate output in source order",
        "Date": "Thu, 23 Apr 2026 18:00:10 -0400",
        "Message-ID": "<20260423220022.2180059-2-jsnow@redhat.com>",
        "In-Reply-To": "<20260423220022.2180059-1-jsnow@redhat.com>",
        "References": "<20260423220022.2180059-1-jsnow@redhat.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.4",
        "Received-SPF": "pass client-ip=170.10.133.124; envelope-from=jsnow@redhat.com;\n helo=us-smtp-delivery-124.mimecast.com",
        "X-Spam_score_int": "-20",
        "X-Spam_score": "-2.1",
        "X-Spam_bar": "--",
        "X-Spam_report": "(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001,\n SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no",
        "X-Spam_action": "no action",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "qemu development <qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<https://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 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"
    },
    "content": "Rewrite the test doc generator to produce output in source order instead\nof arbitrarily by section name.\n\nThis patch removes our last use of the \"body\" field, which has an effect\non how the first plaintext section of each test documented is printed:\nwe now print \"section=Plain\" followed by the section text instead of\n\"body=[...]\".\n\nThis patch is motivated by a desire to move the QAPIDoc API away from\nnamed fields for specific sections in a bid to force all users to simply\niterate through all_sections in order, instead - and to remove the named\nsubsections.\n\nSigned-off-by: John Snow <jsnow@redhat.com>\n---\n tests/qapi-schema/doc-good.out | 26 +++++++++++++-------------\n tests/qapi-schema/test-qapi.py | 15 ++++++++-------\n 2 files changed, 21 insertions(+), 20 deletions(-)",
    "diff": "diff --git a/tests/qapi-schema/doc-good.out b/tests/qapi-schema/doc-good.out\nindex 04a55072646..e2be6f96bbf 100644\n--- a/tests/qapi-schema/doc-good.out\n+++ b/tests/qapi-schema/doc-good.out\n@@ -54,15 +54,15 @@ event EVT_BOXED Object\n     boxed=True\n     feature feat3\n doc freeform\n-    body=\n+    section=Plain\n *******\n Section\n *******\n doc freeform\n-    body=\n+    section=Plain\n Just text, no heading.\n doc freeform\n-    body=\n+    section=Plain\n Subsection\n ==========\n \n@@ -106,7 +106,7 @@ Examples:\n - *verbatim*\n - {braces}\n doc symbol=Enum\n-    body=\n+    section=Plain\n \n     arg=one\n The _one_ {and only}, description on the same line\n@@ -119,13 +119,13 @@ a member feature\n     section=Plain\n @two is undocumented\n doc symbol=Base\n-    body=\n+    section=Plain\n \n     arg=base1\n  description starts on a new line,\n  minimally indented\n doc symbol=Variant1\n-    body=\n+    section=Plain\n A paragraph\n \n Another paragraph\n@@ -138,15 +138,15 @@ a feature\n     feature=member-feat\n a member feature\n doc symbol=Variant2\n-    body=\n+    section=Plain\n \n doc symbol=Object\n-    body=\n+    section=Plain\n \n     feature=union-feat1\n a feature\n doc symbol=Alternate\n-    body=\n+    section=Plain\n \n     arg=i\n description starts on the same line\n@@ -157,11 +157,11 @@ description starts on the same line\n     feature=alt-feat\n a feature\n doc freeform\n-    body=\n+    section=Plain\n Another subsection\n ==================\n doc symbol=cmd\n-    body=\n+    section=Plain\n \n     arg=arg1\n     description starts on a new line,\n@@ -210,7 +210,7 @@ Note::\n     section=Since\n 2.10\n doc symbol=cmd-boxed\n-    body=\n+    section=Plain\n If you're bored enough to read this, go see a video of boxed cats\n     feature=cmd-feat1\n a feature\n@@ -223,7 +223,7 @@ another feature\n \n    <- ... has no title ...\n doc symbol=EVT_BOXED\n-    body=\n+    section=Plain\n \n     feature=feat3\n a feature\ndiff --git a/tests/qapi-schema/test-qapi.py b/tests/qapi-schema/test-qapi.py\nindex cf7fb8a6df5..27885147b4d 100755\n--- a/tests/qapi-schema/test-qapi.py\n+++ b/tests/qapi-schema/test-qapi.py\n@@ -19,6 +19,7 @@\n from io import StringIO\n \n from qapi.error import QAPIError\n+from qapi.parser import QAPIDoc\n from qapi.schema import QAPISchema, QAPISchemaVisitor\n \n \n@@ -116,13 +117,13 @@ def test_frontend(fname):\n             print('doc symbol=%s' % doc.symbol)\n         else:\n             print('doc freeform')\n-        print('    body=\\n%s' % doc.body.text)\n-        for arg, section in doc.args.items():\n-            print('    arg=%s\\n%s' % (arg, section.text))\n-        for feat, section in doc.features.items():\n-            print('    feature=%s\\n%s' % (feat, section.text))\n-        for section in doc.sections:\n-            print('    section=%s\\n%s' % (section.kind, section.text))\n+        for section in doc.all_sections:\n+            if section.kind == QAPIDoc.Kind.MEMBER:\n+                print('    arg=%s\\n%s' % (section.name, section.text))\n+            elif section.kind == QAPIDoc.Kind.FEATURE:\n+                print('    feature=%s\\n%s' % (section.name, section.text))\n+            else:\n+                print('    section=%s\\n%s' % (section.kind, section.text))\n \n \n def open_test_result(dir_name, file_name, update):\n",
    "prefixes": [
        "01/12"
    ]
}