get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 985237,
    "url": "http://patchwork.ozlabs.org/api/patches/985237/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20181017082702.5581-14-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": "<20181017082702.5581-14-armbru@redhat.com>",
    "list_archive_url": null,
    "date": "2018-10-17T08:26:37",
    "name": "[v4,13/38] l2tpv3: Improve -netdev/netdev_add/-net/... error reporting",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "d9612faa12f8a0a1c35cc077cb6117db3920d691",
    "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/20181017082702.5581-14-armbru@redhat.com/mbox/",
    "series": [
        {
            "id": 71196,
            "url": "http://patchwork.ozlabs.org/api/series/71196/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=71196",
            "date": "2018-10-17T08:26:36",
            "name": "Replace some unwise uses of error_report() & friends",
            "version": 4,
            "mbox": "http://patchwork.ozlabs.org/series/71196/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/985237/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/985237/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>)",
            "ozlabs.org;\n\tdmarc=fail (p=none dis=none) header.from=redhat.com"
        ],
        "Received": [
            "from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 42Zm4b0PrHz9s9J\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 17 Oct 2018 19:46:39 +1100 (AEDT)",
            "from localhost ([::1]:34599 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 1gChTQ-0007gt-3A\n\tfor incoming@patchwork.ozlabs.org; Wed, 17 Oct 2018 04:46:36 -0400",
            "from eggs.gnu.org ([2001:4830:134:3::10]:51147)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <armbru@redhat.com>) id 1gChAe-000872-6j\n\tfor qemu-devel@nongnu.org; Wed, 17 Oct 2018 04:27:13 -0400",
            "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <armbru@redhat.com>) id 1gChAc-00016z-MT\n\tfor qemu-devel@nongnu.org; Wed, 17 Oct 2018 04:27:12 -0400",
            "from mx1.redhat.com ([209.132.183.28]:63338)\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 1gChAc-00013q-2m\n\tfor qemu-devel@nongnu.org; Wed, 17 Oct 2018 04:27: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 A99FA3082141\n\tfor <qemu-devel@nongnu.org>; Wed, 17 Oct 2018 08:27:08 +0000 (UTC)",
            "from blackfin.pond.sub.org (ovpn-116-50.ams2.redhat.com\n\t[10.36.116.50])\n\tby smtp.corp.redhat.com (Postfix) with ESMTPS id 15AC169FC8;\n\tWed, 17 Oct 2018 08:27:07 +0000 (UTC)",
            "by blackfin.pond.sub.org (Postfix, from userid 1000)\n\tid 442ED113282C; Wed, 17 Oct 2018 10:27:02 +0200 (CEST)"
        ],
        "From": "Markus Armbruster <armbru@redhat.com>",
        "To": "qemu-devel@nongnu.org",
        "Date": "Wed, 17 Oct 2018 10:26:37 +0200",
        "Message-Id": "<20181017082702.5581-14-armbru@redhat.com>",
        "In-Reply-To": "<20181017082702.5581-1-armbru@redhat.com>",
        "References": "<20181017082702.5581-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.42]);\n\tWed, 17 Oct 2018 08:27:08 +0000 (UTC)",
        "Content-Transfer-Encoding": "quoted-printable",
        "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]",
        "X-Received-From": "209.132.183.28",
        "Subject": "[Qemu-devel] [PATCH v4 13/38] l2tpv3: Improve\n\t-netdev/netdev_add/-net/... error reporting",
        "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": "Jason Wang <jasowang@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": "When -netdev l2tpv3 fails, it first reports a specific error, then a\ngeneric one, like this:\n\n    $ qemu-system-x86_64 -netdev l2tpv3,id=foo,src=,dst=,txsession=1\n    qemu-system-x86_64: -netdev l2tpv3,id=foo,src=,dst=,txsession=1: l2tpv3_open : could not resolve src, errno = Name or service not known\n    qemu-system-x86_64: Device 'l2tpv3' could not be initialized\n\nWith the command line, the messages go to stderr.  In HMP, they go to\nthe monitor.  In QMP, the second one becomes the error reply, and the\nfirst one goes to stderr.\n\nConvert net_init_tap() to Error.  This suppresses the unwanted second\nmessage, and makes the specific error the QMP error reply.\n\nCc: Jason Wang <jasowang@redhat.com>\nSigned-off-by: Markus Armbruster <armbru@redhat.com>\nReviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>\n---\n net/l2tpv3.c | 25 ++++++++++++-------------\n 1 file changed, 12 insertions(+), 13 deletions(-)",
    "diff": "diff --git a/net/l2tpv3.c b/net/l2tpv3.c\nindex 6745b78990..81db24dc8c 100644\n--- a/net/l2tpv3.c\n+++ b/net/l2tpv3.c\n@@ -28,6 +28,7 @@\n #include <netdb.h>\n #include \"net/net.h\"\n #include \"clients.h\"\n+#include \"qapi/error.h\"\n #include \"qemu-common.h\"\n #include \"qemu/error-report.h\"\n #include \"qemu/option.h\"\n@@ -528,7 +529,6 @@ int net_init_l2tpv3(const Netdev *netdev,\n                     const char *name,\n                     NetClientState *peer, Error **errp)\n {\n-    /* FIXME error_setg(errp, ...) on failure */\n     const NetdevL2TPv3Options *l2tpv3;\n     NetL2TPV3State *s;\n     NetClientState *nc;\n@@ -555,7 +555,7 @@ int net_init_l2tpv3(const Netdev *netdev,\n     }\n \n     if ((l2tpv3->has_offset) && (l2tpv3->offset > 256)) {\n-        error_report(\"l2tpv3_open : offset must be less than 256 bytes\");\n+        error_setg(errp, \"offset must be less than 256 bytes\");\n         goto outerr;\n     }\n \n@@ -563,6 +563,8 @@ int net_init_l2tpv3(const Netdev *netdev,\n         if (l2tpv3->has_rxcookie && l2tpv3->has_txcookie) {\n             s->cookie = true;\n         } else {\n+            error_setg(errp,\n+                       \"require both 'rxcookie' and 'txcookie' or neither\");\n             goto outerr;\n         }\n     } else {\n@@ -578,7 +580,7 @@ int net_init_l2tpv3(const Netdev *netdev,\n     if (l2tpv3->has_udp && l2tpv3->udp) {\n         s->udp = true;\n         if (!(l2tpv3->has_srcport && l2tpv3->has_dstport)) {\n-            error_report(\"l2tpv3_open : need both src and dst port for udp\");\n+            error_setg(errp, \"need both src and dst port for udp\");\n             goto outerr;\n         } else {\n             srcport = l2tpv3->srcport;\n@@ -639,20 +641,19 @@ int net_init_l2tpv3(const Netdev *netdev,\n     gairet = getaddrinfo(l2tpv3->src, srcport, &hints, &result);\n \n     if ((gairet != 0) || (result == NULL)) {\n-        error_report(\n-            \"l2tpv3_open : could not resolve src, errno = %s\",\n-            gai_strerror(gairet)\n-        );\n+        error_setg(errp, \"could not resolve src, errno = %s\",\n+                   gai_strerror(gairet));\n         goto outerr;\n     }\n     fd = socket(result->ai_family, result->ai_socktype, result->ai_protocol);\n     if (fd == -1) {\n         fd = -errno;\n-        error_report(\"l2tpv3_open : socket creation failed, errno = %d\", -fd);\n+        error_setg(errp, \"socket creation failed, errno = %d\",\n+                   -fd);\n         goto outerr;\n     }\n     if (bind(fd, (struct sockaddr *) result->ai_addr, result->ai_addrlen)) {\n-        error_report(\"l2tpv3_open :  could not bind socket err=%i\", errno);\n+        error_setg(errp, \"could not bind socket err=%i\", errno);\n         goto outerr;\n     }\n     if (result) {\n@@ -677,10 +678,8 @@ int net_init_l2tpv3(const Netdev *netdev,\n     result = NULL;\n     gairet = getaddrinfo(l2tpv3->dst, dstport, &hints, &result);\n     if ((gairet != 0) || (result == NULL)) {\n-        error_report(\n-            \"l2tpv3_open : could not resolve dst, error = %s\",\n-            gai_strerror(gairet)\n-        );\n+        error_setg(errp, \"could not resolve dst, error = %s\",\n+                   gai_strerror(gairet));\n         goto outerr;\n     }\n \n",
    "prefixes": [
        "v4",
        "13/38"
    ]
}