Show a patch.

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

{
    "id": 19806,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/19806/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/19806/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/1.1/projects/1/?format=api",
        "name": "libcamera",
        "link_name": "libcamera",
        "list_id": "libcamera_core",
        "list_email": "libcamera-devel@lists.libcamera.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20240326112419.503286-7-mzamazal@redhat.com>",
    "date": "2024-03-26T11:24:09",
    "name": "[RFC,06/11] config: Look up log color configuration in configuration file",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "0c3d4c92aff75ed4c6debeb38a73c00607546c0f",
    "submitter": {
        "id": 177,
        "url": "https://patchwork.libcamera.org/api/1.1/people/177/?format=api",
        "name": "Milan Zamazal",
        "email": "mzamazal@redhat.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/19806/mbox/",
    "series": [
        {
            "id": 4241,
            "url": "https://patchwork.libcamera.org/api/1.1/series/4241/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4241",
            "date": "2024-03-26T11:24:03",
            "name": "Add global configuration file",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/4241/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/19806/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/19806/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>",
        "X-Original-To": "parsemail@patchwork.libcamera.org",
        "Delivered-To": "parsemail@patchwork.libcamera.org",
        "Received": [
            "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 65AB2BD160\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 26 Mar 2024 11:26:27 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 186DB63361;\n\tTue, 26 Mar 2024 12:26:27 +0100 (CET)",
            "from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.133.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id BC7A36333E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 26 Mar 2024 12:26:21 +0100 (CET)",
            "from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com\n\t[66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-386-S4bfWoVfPVmddN7sH1rbYQ-1; Tue, 26 Mar 2024 07:26:19 -0400",
            "from smtp.corp.redhat.com\n\t(int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\tkey-exchange X25519 server-signature RSA-PSS (2048 bits)\n\tserver-digest SHA256) (No client certificate requested)\n\tby mimecast-mx02.redhat.com (Postfix) with ESMTPS id 1A6B9800264\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 26 Mar 2024 11:26:19 +0000 (UTC)",
            "from nuthatch.brq.redhat.com (unknown [10.43.17.39])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 9AAA43C20;\n\tTue, 26 Mar 2024 11:26:18 +0000 (UTC)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"cCmuAYZ2\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1711452380;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tcontent-transfer-encoding:content-transfer-encoding:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=wPiQFiIlDaGgBq0SquSq1dWwBimKRK9z13gS7ic6Tn4=;\n\tb=cCmuAYZ2t7L6Q8xho3G8THgU+xPjWKIXQxXCddU3oricdE/2Y6WYkqBu5PzvRRa0V0bPL0\n\t1kQ4fK4Mi42UOY5QUwaT0jGFSKXgCCigzgQZkRTnzcBVLB+ZSDSK7fq7ehiNWOx/+U6f5w\n\tYVUihPzb41PArZM1sKwNI6h64qmG+fs=",
        "X-MC-Unique": "S4bfWoVfPVmddN7sH1rbYQ-1",
        "From": "Milan Zamazal <mzamazal@redhat.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "Milan Zamazal <mzamazal@redhat.com>",
        "Subject": "[RFC PATCH 06/11] config: Look up log color configuration in\n\tconfiguration file",
        "Date": "Tue, 26 Mar 2024 12:24:09 +0100",
        "Message-ID": "<20240326112419.503286-7-mzamazal@redhat.com>",
        "In-Reply-To": "<20240326112419.503286-1-mzamazal@redhat.com>",
        "References": "<20240326112419.503286-1-mzamazal@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.4.1 on 10.11.54.1",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain; charset=\"US-ASCII\"; x-default=true",
        "X-BeenThere": "libcamera-devel@lists.libcamera.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "<libcamera-devel.lists.libcamera.org>",
        "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>",
        "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>",
        "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>",
        "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "The configuration snippet:\n\n  configuration:\n    log:\n      color: BOOL\n\nIn order to use the global configuration access helper for a boolean value, we\nmust make a template from it.  To make the template visible, we must implement\nit in the header file, otherwise undefined reference error would be reported\nwhen linking.\n\nWe don't implement envOption helper for boolean here, because we would have to\ndeal with a specific value interpretation in this particular case.\n\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\n---\n .../libcamera/internal/global_configuration.h   | 17 ++++++++++++++++-\n src/libcamera/base/global_configuration.cpp     | 17 +----------------\n src/libcamera/base/log.cpp                      |  2 ++\n 3 files changed, 19 insertions(+), 17 deletions(-)",
    "diff": "diff --git a/include/libcamera/internal/global_configuration.h b/include/libcamera/internal/global_configuration.h\nindex 41ac57cf..67684762 100644\n--- a/include/libcamera/internal/global_configuration.h\n+++ b/include/libcamera/internal/global_configuration.h\n@@ -13,6 +13,8 @@\n \n #include \"libcamera/internal/yaml_parser.h\"\n \n+#include \"libcamera/base/utils.h\"\n+\n namespace libcamera {\n \n class GlobalConfiguration\n@@ -28,7 +30,20 @@ public:\n \n \tstatic unsigned int version();\n \tstatic Configuration configuration();\n-\tstatic std::optional<std::string> option(const char *const confPath);\n+\n+\t/**\n+\t * \\brief Retrieve string configuration identified by the given string\n+\t * ...\n+\t */\n+\ttemplate<typename T>\n+\tstatic std::optional<T> option(const char *const confPath)\n+\t{\n+\t\tYamlObject *c = &const_cast<YamlObject &>(configuration());\n+\t\tfor (auto part : utils::details::StringSplitter(confPath, \".\"))\n+\t\t\tc = &const_cast<YamlObject &>((*c)[part]);\n+\t\treturn c->get<T>();\n+\t}\n+\n \tstatic std::optional<std::string> envOption(const char *const envVariable,\n \t\t\t\t\t\t    const char *const confPath);\n \ndiff --git a/src/libcamera/base/global_configuration.cpp b/src/libcamera/base/global_configuration.cpp\nindex b29f452b..1e7a4caa 100644\n--- a/src/libcamera/base/global_configuration.cpp\n+++ b/src/libcamera/base/global_configuration.cpp\n@@ -18,8 +18,6 @@\n \n #include \"libcamera/internal/yaml_parser.h\"\n \n-#include \"libcamera/base/utils.h\"\n-\n namespace libcamera {\n \n LOG_DEFINE_CATEGORY(Configuration)\n@@ -119,19 +117,6 @@ GlobalConfiguration::Configuration GlobalConfiguration::get()\n \treturn (*instance().configuration_);\n }\n \n-/**\n- * \\brief Retrieve string configuration identified by the given string\n- * ...\n- */\n-std::optional<std::string> GlobalConfiguration::option(\n-\tconst char *const confPath)\n-{\n-\tYamlObject *c = &const_cast<YamlObject &>(configuration());\n-\tfor (auto part : utils::details::StringSplitter(confPath, \".\"))\n-\t\tc = &const_cast<YamlObject &>((*c)[part]);\n-\treturn c->get<std::string>();\n-}\n-\n /**\n  * \\brief Retrieve string configuration from the given environment variable or configuration\n  * ...\n@@ -143,7 +128,7 @@ std::optional<std::string> GlobalConfiguration::envOption(\n \tconst char *envValue = utils::secure_getenv(envVariable);\n \tif (envValue)\n \t\treturn std::optional{ std::string{ envValue } };\n-\treturn option(confPath);\n+\treturn option<std::string>(confPath);\n }\n \n /**\ndiff --git a/src/libcamera/base/log.cpp b/src/libcamera/base/log.cpp\nindex a373d38b..19403378 100644\n--- a/src/libcamera/base/log.cpp\n+++ b/src/libcamera/base/log.cpp\n@@ -590,6 +590,8 @@ void Logger::logSetLevel(const char *category, const char *level)\n Logger::Logger()\n {\n \tbool color = !utils::secure_getenv(\"LIBCAMERA_LOG_NO_COLOR\");\n+\tif (color)\n+\t\tcolor = GlobalConfiguration::option<bool>(\"log.color\").value_or(true);\n \tlogSetStream(&std::cerr, color);\n \n \tparseLogFile();\n",
    "prefixes": [
        "RFC",
        "06/11"
    ]
}