get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2220629,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2220629/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/buildroot/patch/20260407-generate-cyclonedx-br-v1-4-03c45ccba2ed@cherry.de/",
    "project": {
        "id": 27,
        "url": "http://patchwork.ozlabs.org/api/1.1/projects/27/?format=api",
        "name": "Buildroot development",
        "link_name": "buildroot",
        "list_id": "buildroot.buildroot.org",
        "list_email": "buildroot@buildroot.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20260407-generate-cyclonedx-br-v1-4-03c45ccba2ed@cherry.de>",
    "date": "2026-04-07T17:37:10",
    "name": "[4/4] utils/generate-cyclonedx: hint at missing Buildroot host package on a specific error",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "c01d1c43c0cf559596b2c638979485e0e15bc7ae",
    "submitter": {
        "id": 83602,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/83602/?format=api",
        "name": "Quentin Schulz",
        "email": "foss+buildroot@0leil.net"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/buildroot/patch/20260407-generate-cyclonedx-br-v1-4-03c45ccba2ed@cherry.de/mbox/",
    "series": [
        {
            "id": 499014,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/499014/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/buildroot/list/?series=499014",
            "date": "2026-04-07T17:37:07",
            "name": "make utils/generate-cyclonedx runnable with Buildroot host packages",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/499014/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2220629/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2220629/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<buildroot-bounces@buildroot.org>",
        "X-Original-To": [
            "incoming-buildroot@patchwork.ozlabs.org",
            "buildroot@buildroot.org"
        ],
        "Delivered-To": [
            "patchwork-incoming-buildroot@legolas.ozlabs.org",
            "buildroot@buildroot.org"
        ],
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=buildroot.org header.i=@buildroot.org\n header.a=rsa-sha256 header.s=default header.b=SvqRTCi0;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=buildroot.org\n (client-ip=140.211.166.137; helo=smtp4.osuosl.org;\n envelope-from=buildroot-bounces@buildroot.org; receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fqtgY16hjz1xtJ\n\tfor <incoming-buildroot@patchwork.ozlabs.org>;\n Wed, 08 Apr 2026 03:37:29 +1000 (AEST)",
            "from localhost (localhost [127.0.0.1])\n\tby smtp4.osuosl.org (Postfix) with ESMTP id 3E51A40C86;\n\tTue,  7 Apr 2026 17:37:27 +0000 (UTC)",
            "from smtp4.osuosl.org ([127.0.0.1])\n by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id OaG6GEk1ADup; Tue,  7 Apr 2026 17:37:25 +0000 (UTC)",
            "from lists1.osuosl.org (lists1.osuosl.org [140.211.166.142])\n\tby smtp4.osuosl.org (Postfix) with ESMTP id 1974240C72;\n\tTue,  7 Apr 2026 17:37:25 +0000 (UTC)",
            "from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n by lists1.osuosl.org (Postfix) with ESMTP id 92E232C7\n for <buildroot@buildroot.org>; Tue,  7 Apr 2026 17:37:20 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n by smtp1.osuosl.org (Postfix) with ESMTP id 796DA811C4\n for <buildroot@buildroot.org>; Tue,  7 Apr 2026 17:37:20 +0000 (UTC)",
            "from smtp1.osuosl.org ([127.0.0.1])\n by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id AOtS_S_yfwds for <buildroot@buildroot.org>;\n Tue,  7 Apr 2026 17:37:19 +0000 (UTC)",
            "from smtp-42ae.mail.infomaniak.ch (smtp-42ae.mail.infomaniak.ch\n [84.16.66.174])\n by smtp1.osuosl.org (Postfix) with ESMTPS id 21B8D81189\n for <buildroot@buildroot.org>; Tue,  7 Apr 2026 17:37:18 +0000 (UTC)",
            "from smtp-3-0001.mail.infomaniak.ch (unknown\n [IPv6:2001:1600:4:17::246c])\n by smtp-3-3000.mail.infomaniak.ch (Postfix) with ESMTPS id 4fqtgJ6T9zz8jg;\n Tue,  7 Apr 2026 19:37:16 +0200 (CEST)",
            "from unknown by smtp-3-0001.mail.infomaniak.ch (Postfix) with ESMTPA\n id 4fqtgJ2LMpzRX; Tue,  7 Apr 2026 19:37:16 +0200 (CEST)"
        ],
        "X-Virus-Scanned": [
            "amavis at osuosl.org",
            "amavis at osuosl.org"
        ],
        "X-Comment": "SPF check N/A for local connections - client-ip=140.211.166.142;\n helo=lists1.osuosl.org; envelope-from=buildroot-bounces@buildroot.org;\n receiver=<UNKNOWN> ",
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 smtp4.osuosl.org 1974240C72",
            "OpenDKIM Filter v2.11.0 smtp1.osuosl.org 21B8D81189"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=buildroot.org;\n\ts=default; t=1775583445;\n\tbh=qxLJ5VYU7gALh5eCFLt661Mjw6sW/rQLl8YagVTcX68=;\n\th=Date:References:In-Reply-To:To:Cc:Subject:List-Id:\n\t List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe:\n\t From:Reply-To:From;\n\tb=SvqRTCi0vv1ac8c8RMr6CVB2Iy409RC/b43l9mPk34mXo0XVgBEj+GTW0HLWgmGjP\n\t KilrpBGXWfTm7qnG0HAyokpTRAV38ct5gsOs19AYeespk1Owlw3YauLyy1lUgWQiT2\n\t t5Tycm08W/qxo2Mj4xkzBfyBWYS4pR0km8+IVFfUUsFW9egx/g2InnX6oVq6LsSa3K\n\t GHAFyRg1t+hPUk957R78ihXOysZPg6QpwHX3AVCwBtwS8jAPwXq58KON7qCRj50dtJ\n\t obKCpxE0n4XHH5uD3/Qqo4LjfEkOybrG6eTfvyoIJHyuTjlBTW6hTXBaA2Wr9Rcs1c\n\t PAHlI4jkqlogQ==",
        "Received-SPF": "Pass (mailfrom) identity=mailfrom; client-ip=84.16.66.174;\n helo=smtp-42ae.mail.infomaniak.ch; envelope-from=foss+buildroot@0leil.net;\n receiver=<UNKNOWN>",
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 smtp1.osuosl.org 21B8D81189",
        "Date": "Tue, 07 Apr 2026 19:37:10 +0200",
        "MIME-Version": "1.0",
        "Message-Id": "<20260407-generate-cyclonedx-br-v1-4-03c45ccba2ed@cherry.de>",
        "References": "<20260407-generate-cyclonedx-br-v1-0-03c45ccba2ed@cherry.de>",
        "In-Reply-To": "<20260407-generate-cyclonedx-br-v1-0-03c45ccba2ed@cherry.de>",
        "To": "buildroot@buildroot.org",
        "Cc": "Thomas Perale <thomas.perale@mind.be>, Martin Bark <martin@barkynet.com>,\n Thomas Petazzoni <thomas.petazzoni@bootlin.com>,\n Quentin Schulz <quentin.schulz@cherry.de>",
        "X-Mailer": "b4 0.15-dev-47773",
        "X-Infomaniak-Routing": "alpha",
        "X-Mailman-Original-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=0leil.net; s=20231125; t=1775583436;\n bh=skQ9YMiEmQUYxLhXWTNqQ3sCRS5c5cLe2pIVhCrgFGk=;\n h=From:Date:Subject:References:In-Reply-To:To:Cc:From;\n b=Da7icd7GhLkFzvjwTzzVd9NrMGB7J2axlDh/WkIQA6P8ZiENIb6xu97Ms0aslJWI+\n 5DUIoOtRMY+RwiAcdOtvrQNXoXa9mCwJIRfTr9KxaXMVQIgxcu5NZIs28MqfniT1nd\n UYrkkiaPIIw18F/TTgm9ZWlQWmTIJF7MHv5yJLf+YNdAL7VNLEYQ5OBRwHP/pktdEz\n C7FeCELMSsdsi2zdtE9pDZ3CidEPc1EXFdhAJXaT87ZLqUkqbgAiVJgGx2OiWCzLU+\n X7fTXuXf7wJ7MpzagqieDBCRM40SQTA+UOvqrWmnrwGltc/Rh+1vu8c+Su1OuCFxQU\n qZHYSsvmCF4qg==",
        "X-Mailman-Original-Authentication-Results": [
            "smtp1.osuosl.org;\n dmarc=pass (p=reject dis=none)\n header.from=0leil.net",
            "smtp1.osuosl.org;\n dkim=pass (2048-bit key) header.d=0leil.net header.i=@0leil.net\n header.a=rsa-sha256 header.s=20231125 header.b=Da7icd7G"
        ],
        "Subject": "[Buildroot] [PATCH 4/4] utils/generate-cyclonedx: hint at missing\n Buildroot host package on a specific error",
        "X-BeenThere": "buildroot@buildroot.org",
        "X-Mailman-Version": "2.1.30",
        "Precedence": "list",
        "List-Id": "Discussion and development of buildroot <buildroot.buildroot.org>",
        "List-Unsubscribe": "<https://lists.buildroot.org/mailman/options/buildroot>,\n <mailto:buildroot-request@buildroot.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.buildroot.org/pipermail/buildroot/>",
        "List-Post": "<mailto:buildroot@buildroot.org>",
        "List-Help": "<mailto:buildroot-request@buildroot.org?subject=help>",
        "List-Subscribe": "<https://lists.buildroot.org/mailman/listinfo/buildroot>,\n <mailto:buildroot-request@buildroot.org?subject=subscribe>",
        "From": "Quentin Schulz via buildroot <buildroot@buildroot.org>",
        "Reply-To": "Quentin Schulz <foss+buildroot@0leil.net>",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "buildroot-bounces@buildroot.org",
        "Sender": "\"buildroot\" <buildroot-bounces@buildroot.org>"
    },
    "content": "From: Quentin Schulz <quentin.schulz@cherry.de>\n\nSince last commit, utils/generate-cyclonedx can now be used with\nBuildroot host tools, provided the user either externally install the\nSPDX schema in the DL_DIR themselves or have\nBR2_PACKAGE_HOST_PYTHON3_SSL and BR2_PACKAGE_HOST_CA_CERTIFICATES both\nenabled. If the latter is missing, Python will complain with:\n\nTraceback (most recent call last):\n  File \"/buildroot/build/host/lib/python3.14/urllib/request.py\", line 1321, in do_open\n    h.request(req.get_method(), req.selector, req.data, headers,\n    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n              encode_chunked=req.has_header('Transfer-encoding'))\n              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/buildroot/build/host/lib/python3.14/http/client.py\", line 1358, in request\n    self._send_request(method, url, body, headers, encode_chunked)\n    ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/buildroot/build/host/lib/python3.14/http/client.py\", line 1404, in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/buildroot/build/host/lib/python3.14/http/client.py\", line 1353, in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/buildroot/build/host/lib/python3.14/http/client.py\", line 1113, in _send_output\n    self.send(msg)\n    ~~~~~~~~~^^^^^\n  File \"/buildroot/build/host/lib/python3.14/http/client.py\", line 1057, in send\n    self.connect()\n    ~~~~~~~~~~~~^^\n  File \"/buildroot/build/host/lib/python3.14/http/client.py\", line 1499, in connect\n    self.sock = self._context.wrap_socket(self.sock,\n                ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^\n                                          server_hostname=server_hostname)\n                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/buildroot/build/host/lib/python3.14/ssl.py\", line 455, in wrap_socket\n    return self.sslsocket_class._create(\n           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n        sock=sock,\n        ^^^^^^^^^^\n    ...<5 lines>...\n        session=session\n        ^^^^^^^^^^^^^^^\n    )\n    ^\n  File \"/buildroot/build/host/lib/python3.14/ssl.py\", line 1076, in _create\n    self.do_handshake()\n    ~~~~~~~~~~~~~~~~~^^\n  File \"/buildroot/build/host/lib/python3.14/ssl.py\", line 1372, in do_handshake\n    self._sslobj.do_handshake()\n    ~~~~~~~~~~~~~~~~~~~~~~~~~^^\nssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1081)\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/buildroot/utils/generate-cyclonedx\", line 53, in <module>\n    urllib.request.urlretrieve(SPDX_SCHEMA_URL, SPDX_SCHEMA_PATH)\n    ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/buildroot/build/host/lib/python3.14/urllib/request.py\", line 212, in urlretrieve\n    with contextlib.closing(urlopen(url, data)) as fp:\n                            ~~~~~~~^^^^^^^^^^^\n  File \"/buildroot/build/host/lib/python3.14/urllib/request.py\", line 187, in urlopen\n    return opener.open(url, data, timeout)\n           ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^\n  File \"/buildroot/build/host/lib/python3.14/urllib/request.py\", line 487, in open\n    response = self._open(req, data)\n  File \"/buildroot/build/host/lib/python3.14/urllib/request.py\", line 504, in _open\n    result = self._call_chain(self.handle_open, protocol, protocol +\n                              '_open', req)\n  File \"/buildroot/build/host/lib/python3.14/urllib/request.py\", line 464, in _call_chain\n    result = func(*args)\n  File \"/buildroot/build/host/lib/python3.14/urllib/request.py\", line 1369, in https_open\n    return self.do_open(http.client.HTTPSConnection, req,\n           ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n                        context=self._context)\n                        ^^^^^^^^^^^^^^^^^^^^^^\n  File \"/buildroot/build/host/lib/python3.14/urllib/request.py\", line 1324, in do_open\n    raise URLError(err)\nurllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1081)>\n\nProvide some hint as to what could be missing from Buildroot host.\n\nSigned-off-by: Quentin Schulz <quentin.schulz@cherry.de>\n---\n utils/generate-cyclonedx | 7 ++++++-\n 1 file changed, 6 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/utils/generate-cyclonedx b/utils/generate-cyclonedx\nindex 045bf14caa..fad0671166 100755\n--- a/utils/generate-cyclonedx\n+++ b/utils/generate-cyclonedx\n@@ -50,7 +50,12 @@ if not SPDX_SCHEMA_PATH.exists():\n \n     # Download the CycloneDX SPDX schema JSON, and cache it locally\n     cyclonedxpath.mkdir(parents=True, exist_ok=True)\n-    urllib.request.urlretrieve(SPDX_SCHEMA_URL, SPDX_SCHEMA_PATH)\n+    try:\n+        urllib.request.urlretrieve(SPDX_SCHEMA_URL, SPDX_SCHEMA_PATH)\n+    except urllib.error.URLError as e:\n+        if \"CERTIFICATE_VERIFY_FAILED\" in str(e.reason):\n+            raise Exception(\"Couldn't verify certificate. Try enabling BR2_PACKAGE_HOST_CA_CERTIFICATES.\")\n+        raise e\n \n try:\n     with SPDX_SCHEMA_PATH.open() as f:\n",
    "prefixes": [
        "4/4"
    ]
}