get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2195648,
    "url": "http://patchwork.ozlabs.org/api/patches/2195648/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260211152508.732487-23-berrange@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": "<20260211152508.732487-23-berrange@redhat.com>",
    "list_archive_url": null,
    "date": "2026-02-11T15:25:03",
    "name": "[v6,22/27] util: introduce common helper for error-report & log code",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "e30662c7ec0eb56e23d94c42af230eff255b830f",
    "submitter": {
        "id": 2694,
        "url": "http://patchwork.ozlabs.org/api/people/2694/?format=api",
        "name": "Daniel P. Berrangé",
        "email": "berrange@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260211152508.732487-23-berrange@redhat.com/mbox/",
    "series": [
        {
            "id": 491862,
            "url": "http://patchwork.ozlabs.org/api/series/491862/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=491862",
            "date": "2026-02-11T15:24:41",
            "name": "util: sync error_report & qemu_log output more closely",
            "version": 6,
            "mbox": "http://patchwork.ozlabs.org/series/491862/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2195648/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2195648/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=YTU/h2w1;\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=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from lists.gnu.org (lists.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 4fB2SC0Pb4z1xpY\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 12 Feb 2026 02:30:19 +1100 (AEDT)",
            "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vqC7t-0000E8-Al; Wed, 11 Feb 2026 10:27:37 -0500",
            "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <berrange@redhat.com>)\n id 1vqC7n-00081T-MD\n for qemu-devel@nongnu.org; Wed, 11 Feb 2026 10:27:31 -0500",
            "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 <berrange@redhat.com>)\n id 1vqC7k-00067Y-F3\n for qemu-devel@nongnu.org; Wed, 11 Feb 2026 10:27:31 -0500",
            "from mx-prod-mc-08.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-144-7-6718ePMXO4T7KlgIQrfQ-1; Wed,\n 11 Feb 2026 10:27:23 -0500",
            "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-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id B16DA180047F; Wed, 11 Feb 2026 15:27:21 +0000 (UTC)",
            "from toolbx.redhat.com (unknown [10.45.227.9])\n by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id EF96130001A8; Wed, 11 Feb 2026 15:27:15 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1770823647;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=RiGWGV9XhBIRb2VM0sXbC17FuOi6rcqgCKWUsAo60bY=;\n b=YTU/h2w1dEkaITwmtFwK7iQ/PUAY2SNx5HaMAgo4HEtuaoDMzSkl2NV5vagYu/XZTk1vWZ\n rJ8bIwaQCXL6NkUtp300M4Z/zm6LxvvVRniV3a3tRPi7P0yOkND663vx8auYhO42PC7j8o\n SsyUJeJ6RDmyWMTUMyKGync0cWW+Os0=",
        "X-MC-Unique": "7-6718ePMXO4T7KlgIQrfQ-1",
        "X-Mimecast-MFC-AGG-ID": "7-6718ePMXO4T7KlgIQrfQ_1770823641",
        "From": "=?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= <berrange@redhat.com>",
        "To": "qemu-devel@nongnu.org",
        "Cc": "Manos Pitsidianakis <manos.pitsidianakis@linaro.org>,\n Stefan Weil <sw@weilnetz.de>, \"Dr. David Alan Gilbert\" <dave@treblig.org>,\n Pierrick Bouvier <pierrick.bouvier@linaro.org>, devel@lists.libvirt.org,\n\t=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>, =?utf-8?q?Marc?=\n\t=?utf-8?q?-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>,\n Hanna Reitz <hreitz@redhat.com>, Kevin Wolf <kwolf@redhat.com>,\n qemu-block@nongnu.org, qemu-rust@nongnu.org,\n Paolo Bonzini <pbonzini@redhat.com>, Markus Armbruster <armbru@redhat.com>,\n Gerd Hoffmann <kraxel@redhat.com>,\n =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= <berrange@redhat.com>,\n Christian Schoenebeck <qemu_oss@crudebyte.com>,\n Richard Henderson <richard.henderson@linaro.org>",
        "Subject": "[PATCH v6 22/27] util: introduce common helper for error-report & log\n code",
        "Date": "Wed, 11 Feb 2026 15:25:03 +0000",
        "Message-ID": "<20260211152508.732487-23-berrange@redhat.com>",
        "In-Reply-To": "<20260211152508.732487-1-berrange@redhat.com>",
        "References": "<20260211152508.732487-1-berrange@redhat.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "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;\n envelope-from=berrange@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_H2=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,\n SPF_HELO_PASS=-0.001,\n SPF_PASS=-0.001 autolearn=unavailable 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 error-report and log code both have a need to add prefixes\nto messages they are printing, with the current example being\na timestamp.\n\nThe format and configuration they use should be consistent, so\nproviding a common helper will ensure this is always the case.\nInitially the helper only emits a timestamp, but future patches\nwill expand this.\n\nThis takes the liberty of assigning the new file to the same\nmaintainer as the existing error-report.c file, given it will\nbe extracting some functionality from the latter.\n\nWhile vreport() dynamically changes between reporting to the\nmonitor vs stderr, depending on whether HMP is active or not,\nmessage prefixes are only ever used in the non-HMP case. Thus\nthe helper API can take a FILE * object and not have to deal\nwith the monitor at all.\n\nReviewed-by: Richard Henderson <richard.henderson@linaro.org>\nSigned-off-by: Daniel P. Berrangé <berrange@redhat.com>\n---\n MAINTAINERS            |  2 ++\n include/qemu/message.h | 28 ++++++++++++++++++++++++++++\n util/meson.build       |  1 +\n util/message.c         | 23 +++++++++++++++++++++++\n 4 files changed, 54 insertions(+)\n create mode 100644 include/qemu/message.h\n create mode 100644 util/message.c",
    "diff": "diff --git a/MAINTAINERS b/MAINTAINERS\nindex 29f88d48f3..96a4ce438e 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -3261,9 +3261,11 @@ M: Markus Armbruster <armbru@redhat.com>\n S: Supported\n F: include/qapi/error.h\n F: include/qemu/error-report.h\n+F: include/qemu/message.h\n F: qapi/error.json\n F: util/error.c\n F: util/error-report.c\n+F: util/message.c\n F: scripts/coccinelle/err-bad-newline.cocci\n F: scripts/coccinelle/error-use-after-free.cocci\n F: scripts/coccinelle/error_propagate_null.cocci\ndiff --git a/include/qemu/message.h b/include/qemu/message.h\nnew file mode 100644\nindex 0000000000..0a06421f77\n--- /dev/null\n+++ b/include/qemu/message.h\n@@ -0,0 +1,28 @@\n+/* SPDX-License-Identifier: GPL-2.0-or-later */\n+\n+#ifndef QEMU_MESSAGE_H\n+#define QEMU_MESSAGE_H\n+\n+enum QMessageFormatFlags {\n+    QMESSAGE_FORMAT_TIMESTAMP = (1 << 0),\n+};\n+\n+/**\n+ * qmessage_set_format:\n+ * @flags: the message information to emit\n+ *\n+ * Select which pieces of information to\n+ * emit for messages\n+ */\n+void qmessage_set_format(int flags);\n+\n+/**\n+ * qmessage_context_print:\n+ * @fp: file to emit the prefix on\n+ *\n+ * Emit a message prefix with the information selected by\n+ * an earlier call to qmessage_set_format.\n+ */\n+void qmessage_context_print(FILE *fp);\n+\n+#endif /* QEMU_MESSAGE_H */\ndiff --git a/util/meson.build b/util/meson.build\nindex 7c9445615d..3035bd4bee 100644\n--- a/util/meson.build\n+++ b/util/meson.build\n@@ -38,6 +38,7 @@ util_ss.add(files('host-utils.c'))\n util_ss.add(files('bitmap.c', 'bitops.c'))\n util_ss.add(files('fifo8.c'))\n util_ss.add(files('cacheflush.c'))\n+util_ss.add(files('message.c'))\n util_ss.add(files('error.c', 'error-report.c'))\n util_ss.add(files('qemu-print.c'))\n util_ss.add(files('id.c'))\ndiff --git a/util/message.c b/util/message.c\nnew file mode 100644\nindex 0000000000..99a403f9d0\n--- /dev/null\n+++ b/util/message.c\n@@ -0,0 +1,23 @@\n+/* SPDX-License-Identifier: GPL-2.0-or-later */\n+\n+#include \"qemu/osdep.h\"\n+\n+#include \"qemu/message.h\"\n+#include \"monitor/monitor.h\"\n+\n+static int message_format;\n+\n+void qmessage_set_format(int flags)\n+{\n+    message_format = flags;\n+}\n+\n+void qmessage_context_print(FILE *fp)\n+{\n+    if (message_format & QMESSAGE_FORMAT_TIMESTAMP) {\n+        g_autoptr(GDateTime) dt = g_date_time_new_now_utc();\n+        g_autofree char *timestr = g_date_time_format_iso8601(dt);\n+        fputs(timestr, fp);\n+        fputc(' ', fp);\n+    }\n+}\n",
    "prefixes": [
        "v6",
        "22/27"
    ]
}