get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2227540,
    "url": "http://patchwork.ozlabs.org/api/patches/2227540/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260423220022.2180059-9-jsnow@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": "<20260423220022.2180059-9-jsnow@redhat.com>",
    "list_archive_url": null,
    "date": "2026-04-23T22:00:17",
    "name": "[08/12] qapi/docs: Add rendering for INTRO sections",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "90343bfe11ad534aad2ff27653ec878c4b99458d",
    "submitter": {
        "id": 64343,
        "url": "http://patchwork.ozlabs.org/api/people/64343/?format=api",
        "name": "John Snow",
        "email": "jsnow@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260423220022.2180059-9-jsnow@redhat.com/mbox/",
    "series": [
        {
            "id": 501255,
            "url": "http://patchwork.ozlabs.org/api/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/2227540/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2227540/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@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=Y2M65qz6;\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 4g1qmd0dSfz1yHv\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 24 Apr 2026 08:01:19 +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 1wG26a-0005jh-RQ; Thu, 23 Apr 2026 18:01:04 -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 1wG26Y-0005jW-Uu\n for qemu-devel@nongnu.org; Thu, 23 Apr 2026 18:01:02 -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 1wG26V-0005rd-Ea\n for qemu-devel@nongnu.org; Thu, 23 Apr 2026 18:01:01 -0400",
            "from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-564-Ls0DPe2GOoG90vYTjz_ghA-1; Thu,\n 23 Apr 2026 18:00:55 -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-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 23FE619560AA; Thu, 23 Apr 2026 22:00:54 +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 83161300757C; Thu, 23 Apr 2026 22:00:51 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776981658;\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=sGg2GTodjNl+6P4GoaU6rZqaVUvKTe9aDT7miX+7eK4=;\n b=Y2M65qz6dgvo48Jwi1uwwrwr4Za/HzEg67ChE/XOqPGbFQpwzqVuokRtMXQBy1UGLVakwc\n uELdCJtlL+R/Et1ryrRNyN5a1iVNEK4YuzLI81p0hP6DdepcBomLotwD8uQYS0hHdUsM34\n 4P7ni5jrYDFZrDv1d6VwqwcmVVW6N+w=",
        "X-MC-Unique": "Ls0DPe2GOoG90vYTjz_ghA-1",
        "X-Mimecast-MFC-AGG-ID": "Ls0DPe2GOoG90vYTjz_ghA_1776981654",
        "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 08/12] qapi/docs: Add rendering for INTRO sections",
        "Date": "Thu, 23 Apr 2026 18:00:17 -0400",
        "Message-ID": "<20260423220022.2180059-9-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": "12",
        "X-Spam_score": "1.2",
        "X-Spam_bar": "+",
        "X-Spam_report": "(1.2 / 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 RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001,\n SPF_PASS=-0.001 autolearn=no 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": "The only real difference here is that we need to dedent all but the\nfirst line so that it renders correctly. We don't need to do this for\nmembers and features because they are always rendered as part of a field\nlist directive which expects indented lines - Undecorated plaintext\ndoesn't, so we chop the indent off.\n\nThis does not reflow the text or mess with the source info in any way,\nso \"blame\" for error messages should be unchanged.\n\nSigned-off-by: John Snow <jsnow@redhat.com>\n---\n docs/sphinx/qapidoc.py | 14 +++++++++++---\n 1 file changed, 11 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/docs/sphinx/qapidoc.py b/docs/sphinx/qapidoc.py\nindex 70ab9cdc214..6b8e4ecd76a 100644\n--- a/docs/sphinx/qapidoc.py\n+++ b/docs/sphinx/qapidoc.py\n@@ -35,6 +35,7 @@\n from pathlib import Path\n import re\n import sys\n+import textwrap\n from typing import TYPE_CHECKING\n \n from docutils import nodes\n@@ -150,8 +151,14 @@ def add_lines(\n         self,\n         content: str,\n         info: QAPISourceInfo,\n+        dedent: bool = False,\n     ) -> None:\n         lines = content.splitlines(True)\n+\n+        if dedent:\n+            txt = \"\".join(lines[1:])\n+            lines[1:] = textwrap.dedent(txt).splitlines(True)\n+\n         for i, line in enumerate(lines):\n             self.add_line_raw(line, info.fname, info.line + i)\n \n@@ -223,13 +230,14 @@ def reformat_arobase(text: str) -> str:\n \n     # Transmogrification helpers\n \n-    def visit_paragraph(self, section: QAPIDoc.Section) -> None:\n+    def visit_text(self, section: QAPIDoc.Section) -> None:\n         # Squelch empty paragraphs.\n         if not section.text:\n             return\n \n+        dedent = bool(section.kind == QAPIDoc.Kind.INTRO)\n         self.ensure_blank_line()\n-        self.add_lines(section.text, section.info)\n+        self.add_lines(section.text, section.info, dedent)\n         self.ensure_blank_line()\n \n     def visit_member(self, section: QAPIDoc.ArgSection) -> None:\n@@ -367,7 +375,7 @@ def visit_sections(self, ent: QAPISchemaDefinition) -> None:\n             section.text = self.reformat_arobase(section.text)\n \n             if section.kind.name in (\"PLAIN\", \"INTRO\"):\n-                self.visit_paragraph(section)\n+                self.visit_text(section)\n             elif section.kind == QAPIDoc.Kind.MEMBER:\n                 assert isinstance(section, QAPIDoc.ArgSection)\n                 if section.name == \"q_dummy\":\n",
    "prefixes": [
        "08/12"
    ]
}