)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"09670c23acb212202e6e99bce94e1d35583d1045","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"2a6a9944_9abd7830","updated":"2026-02-17 12:06:34.000000000","message":"Well, obviously this fails on Jenkins because `pymarkdownlnt` is not installed...\n\n@Antonio: should we require `pymarkdownlnt`? If not, then I think linting is pretty useless, since almost no one happens to have `pymarkdownlnt` installed.","commit_id":"575dd89e05210e86f532e741e89fd34ad626189f"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"1992e42db1fba0c6bb23b2dfec7674f73df82012","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f807d5f8_949fa67c","in_reply_to":"2a6a9944_9abd7830","updated":"2026-02-17 16:51:32.000000000","message":"We should install it in Jenkins to check the markdown.\nBut for normal users this should not be mandatory (you already put it as optional in README.md)","commit_id":"575dd89e05210e86f532e741e89fd34ad626189f"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"db02971abb1e33458af3afe16cc071ccd7bfb9d8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ca463eb7_1498748d","updated":"2026-02-17 20:11:45.000000000","message":"\u003e I think we should not handle it as an error, just skip the test\n\u003e ...\n\u003e We should install it in Jenkins to check the markdown.\n\u003e But for normal users this should not be mandatory (you already put it as optional in README.md)\n\nMy understanding of the README.md entry is that `pymarkdownlnt` is now \"mandatory\" for developers but not users.\nActually, it is (effectively) only required if you modify a Markdown file.\nWould you like it to be optional for developers as well?\n\n\u003e Note the check for python3, before use it\n\nNote that unlike the other Python code we run, `pymarkdownlnt` is a program provided by a package manager.\nIn almost all cases, this is via pip - currently, it only seems to be available as a distro package in OpenBSD [1].\nSo if it is available, the package manager already has ensured that Python3 is installed.\nIn my opinion, the check is not necessary. Or what scenario do you have in mind?\n\n[1] https://repology.org/projects/?search\u003dpymarkdownlnt","commit_id":"9e43b03f0807d4cec161e96a2747191314c1cd4f"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"2475351f4dd2ec495d019cd7305b5b3396a7f221","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4a8ed766_95a15a59","updated":"2026-02-17 20:16:28.000000000","message":"@Paul: can you install pymarkdownlint on Gerrit, please?","commit_id":"9e43b03f0807d4cec161e96a2747191314c1cd4f"},{"author":{"_account_id":1000160,"name":"Paul Fertser","email":"fercerpav@gmail.com","username":"pfertser"},"change_message_id":"6454106d630468a6d849bba920fe491153524d10","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4c95b53c_5b55bf66","in_reply_to":"4a8ed766_95a15a59","updated":"2026-02-17 21:36:25.000000000","message":"\u003e @Paul: can you install pymarkdownlint on Gerrit, please?\n\nSure, got it with pip, should work.","commit_id":"9e43b03f0807d4cec161e96a2747191314c1cd4f"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"77825104c5ca6d6ecfabdc7a726af3f4ea7dfcdb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"19415096_a9a658e3","in_reply_to":"4c95b53c_5b55bf66","updated":"2026-02-18 07:15:01.000000000","message":"Thanks!","commit_id":"9e43b03f0807d4cec161e96a2747191314c1cd4f"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"b60ce25e98161a93a6b7c679e410921b3b7ef6c0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"924525d2_c0eddb8f","in_reply_to":"56d15687_ff0f249b","updated":"2026-02-19 10:35:29.000000000","message":"Okay, it\u0027s now optional.","commit_id":"9e43b03f0807d4cec161e96a2747191314c1cd4f"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"d1a2f362cc924d8ad1e93f4c8ce05b84a934d90c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"56d15687_ff0f249b","in_reply_to":"ca463eb7_1498748d","updated":"2026-02-18 13:50:46.000000000","message":"I did not explained carefully.\nI was pointing that like we check for python3 to optionally run `spdxcheck.py` and spell checker, we should do the same for `pymarkdownlnt`. If not present, skip the test with no errors.","commit_id":"9e43b03f0807d4cec161e96a2747191314c1cd4f"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"23599cb958df88a6f920c3227636a4edd82c4950","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"de15794e_1f6fced4","updated":"2026-02-21 15:05:22.000000000","message":"Not tested, but looks ok.","commit_id":"92cc6191379dc03a57635cba9a76ccde196e1966"}],"tools/scripts/checkpatch.pl":[{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"1992e42db1fba0c6bb23b2dfec7674f73df82012","unresolved":true,"context_lines":[{"line_number":92,"context_line":"my $tabsize \u003d 8;"},{"line_number":93,"context_line":"my ${CONFIG_} \u003d \"CONFIG_\";"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"# Remember which Markdown (*.md) files were already linted."},{"line_number":96,"context_line":"my %md_checked;"},{"line_number":97,"context_line":"my $md_linter_not_found;"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-perl","patch_set":1,"id":"aa94b53b_5d4ece32","line":95,"updated":"2026-02-17 16:51:32.000000000","message":"Same here, put this new block of code between\n`# OpenOCD specific: Begin: check markdown with pymarkdownlnt`\nand\n`# OpenOCD specific: End`","commit_id":"575dd89e05210e86f532e741e89fd34ad626189f"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"db02971abb1e33458af3afe16cc071ccd7bfb9d8","unresolved":false,"context_lines":[{"line_number":92,"context_line":"my $tabsize \u003d 8;"},{"line_number":93,"context_line":"my ${CONFIG_} \u003d \"CONFIG_\";"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"# Remember which Markdown (*.md) files were already linted."},{"line_number":96,"context_line":"my %md_checked;"},{"line_number":97,"context_line":"my $md_linter_not_found;"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-perl","patch_set":1,"id":"a6d69baf_17edc2d8","line":95,"in_reply_to":"aa94b53b_5d4ece32","updated":"2026-02-17 20:11:45.000000000","message":"Done","commit_id":"575dd89e05210e86f532e741e89fd34ad626189f"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"1992e42db1fba0c6bb23b2dfec7674f73df82012","unresolved":false,"context_lines":[{"line_number":356,"context_line":"} elsif (!(-f $codespellfile)) {"},{"line_number":357,"context_line":"\t# If /usr/share/codespell/dictionary.txt is not present, try to find it"},{"line_number":358,"context_line":"\t# under codespell\u0027s install directory: \u003ccodespell_root\u003e/data/dictionary.txt"},{"line_number":359,"context_line":"\tif (($codespell || $help) \u0026\u0026 which(\"python3\") ne \"\") {"},{"line_number":360,"context_line":"\t\tmy $python_codespell_dict \u003d \u003c\u003c \"EOF\";"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"import os.path as op"}],"source_content_type":"text/x-perl","patch_set":1,"id":"352f586b_b03993a9","line":359,"updated":"2026-02-17 16:51:32.000000000","message":"Note the check for python3, before use it","commit_id":"575dd89e05210e86f532e741e89fd34ad626189f"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"1992e42db1fba0c6bb23b2dfec7674f73df82012","unresolved":false,"context_lines":[{"line_number":1182,"context_line":"\tmy ($license) \u003d @_;"},{"line_number":1183,"context_line":""},{"line_number":1184,"context_line":"\t# OpenOCD specific: Begin: replace s\"scripts\"tools/scripts\""},{"line_number":1185,"context_line":"\treturn 1 if (!$tree || which(\"python3\") eq \"\" || !(-x \"$root/tools/scripts/spdxcheck.py\") || !(-e \"$gitroot\"));"},{"line_number":1186,"context_line":""},{"line_number":1187,"context_line":"\tmy $root_path \u003d abs_path($root);"},{"line_number":1188,"context_line":"\tmy $status \u003d `cd \"$root_path\"; echo \"$license\" | tools/scripts/spdxcheck.py -`;"}],"source_content_type":"text/x-perl","patch_set":1,"id":"8d84d3a9_9e026d77","line":1185,"updated":"2026-02-17 16:51:32.000000000","message":"Again, note the check for python3, before use it","commit_id":"575dd89e05210e86f532e741e89fd34ad626189f"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"1992e42db1fba0c6bb23b2dfec7674f73df82012","unresolved":true,"context_lines":[{"line_number":2439,"context_line":"\tour @report;"},{"line_number":2440,"context_line":"}"},{"line_number":2441,"context_line":""},{"line_number":2442,"context_line":"sub run_md_linter {"},{"line_number":2443,"context_line":"\tmy ($file) \u003d @_;"},{"line_number":2444,"context_line":"\tmy $md_linter \u003d \"pymarkdownlnt\";"},{"line_number":2445,"context_line":""}],"source_content_type":"text/x-perl","patch_set":1,"id":"1913edf4_96a39db4","line":2442,"updated":"2026-02-17 16:51:32.000000000","message":"To easily update this file from new versions in linux kernel, we need to track any OpenOCD specific code we add/modify.\nPlease start this block of added code with a line:\n`# OpenOCD specific: Begin: check markdown with pymarkdownlnt`","commit_id":"575dd89e05210e86f532e741e89fd34ad626189f"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"db02971abb1e33458af3afe16cc071ccd7bfb9d8","unresolved":true,"context_lines":[{"line_number":2439,"context_line":"\tour @report;"},{"line_number":2440,"context_line":"}"},{"line_number":2441,"context_line":""},{"line_number":2442,"context_line":"sub run_md_linter {"},{"line_number":2443,"context_line":"\tmy ($file) \u003d @_;"},{"line_number":2444,"context_line":"\tmy $md_linter \u003d \"pymarkdownlnt\";"},{"line_number":2445,"context_line":""}],"source_content_type":"text/x-perl","patch_set":1,"id":"82b71cde_d703bd23","line":2442,"in_reply_to":"1913edf4_96a39db4","updated":"2026-02-17 20:11:45.000000000","message":"Thanks, done!","commit_id":"575dd89e05210e86f532e741e89fd34ad626189f"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"b60ce25e98161a93a6b7c679e410921b3b7ef6c0","unresolved":false,"context_lines":[{"line_number":2439,"context_line":"\tour @report;"},{"line_number":2440,"context_line":"}"},{"line_number":2441,"context_line":""},{"line_number":2442,"context_line":"sub run_md_linter {"},{"line_number":2443,"context_line":"\tmy ($file) \u003d @_;"},{"line_number":2444,"context_line":"\tmy $md_linter \u003d \"pymarkdownlnt\";"},{"line_number":2445,"context_line":""}],"source_content_type":"text/x-perl","patch_set":1,"id":"e5232643_637fa98d","line":2442,"in_reply_to":"82b71cde_d703bd23","updated":"2026-02-19 10:35:29.000000000","message":"Done","commit_id":"575dd89e05210e86f532e741e89fd34ad626189f"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"1992e42db1fba0c6bb23b2dfec7674f73df82012","unresolved":true,"context_lines":[{"line_number":2450,"context_line":"\t}"},{"line_number":2451,"context_line":""},{"line_number":2452,"context_line":"\tif ($md_linter_not_found) {"},{"line_number":2453,"context_line":"\t\tERROR(\"MARKDOWN_LINT\", \"Markdown linter \u0027$md_linter\u0027 could not be found\\n\");"},{"line_number":2454,"context_line":"\t\treturn;"},{"line_number":2455,"context_line":"\t}"},{"line_number":2456,"context_line":""}],"source_content_type":"text/x-perl","patch_set":1,"id":"d8baa062_ed378e12","line":2453,"updated":"2026-02-17 16:51:32.000000000","message":"I think we should not handle it as an error, just skip the test\nLook at the two tests above about presence of `python3`","commit_id":"575dd89e05210e86f532e741e89fd34ad626189f"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"b60ce25e98161a93a6b7c679e410921b3b7ef6c0","unresolved":false,"context_lines":[{"line_number":2450,"context_line":"\t}"},{"line_number":2451,"context_line":""},{"line_number":2452,"context_line":"\tif ($md_linter_not_found) {"},{"line_number":2453,"context_line":"\t\tERROR(\"MARKDOWN_LINT\", \"Markdown linter \u0027$md_linter\u0027 could not be found\\n\");"},{"line_number":2454,"context_line":"\t\treturn;"},{"line_number":2455,"context_line":"\t}"},{"line_number":2456,"context_line":""}],"source_content_type":"text/x-perl","patch_set":1,"id":"0dbdd53e_1e5efa45","line":2453,"in_reply_to":"d8baa062_ed378e12","updated":"2026-02-19 10:35:29.000000000","message":"Done","commit_id":"575dd89e05210e86f532e741e89fd34ad626189f"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"1992e42db1fba0c6bb23b2dfec7674f73df82012","unresolved":true,"context_lines":[{"line_number":2475,"context_line":"\t\tWARN(\"MARKDOWN_LINT\", \"Markdown linter exited with status $rc for $file\\n\");"},{"line_number":2476,"context_line":"\t}"},{"line_number":2477,"context_line":"}"},{"line_number":2478,"context_line":""},{"line_number":2479,"context_line":"sub fixup_current_range {"},{"line_number":2480,"context_line":"\tmy ($lineRef, $offset, $length) \u003d @_;"},{"line_number":2481,"context_line":""}],"source_content_type":"text/x-perl","patch_set":1,"id":"f3cc067c_dfa2eda0","line":2478,"updated":"2026-02-17 16:51:32.000000000","message":"and complete it with\n`# OpenOCD specific: End`","commit_id":"575dd89e05210e86f532e741e89fd34ad626189f"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"db02971abb1e33458af3afe16cc071ccd7bfb9d8","unresolved":false,"context_lines":[{"line_number":2475,"context_line":"\t\tWARN(\"MARKDOWN_LINT\", \"Markdown linter exited with status $rc for $file\\n\");"},{"line_number":2476,"context_line":"\t}"},{"line_number":2477,"context_line":"}"},{"line_number":2478,"context_line":""},{"line_number":2479,"context_line":"sub fixup_current_range {"},{"line_number":2480,"context_line":"\tmy ($lineRef, $offset, $length) \u003d @_;"},{"line_number":2481,"context_line":""}],"source_content_type":"text/x-perl","patch_set":1,"id":"be2ba462_44787c66","line":2478,"in_reply_to":"f3cc067c_dfa2eda0","updated":"2026-02-17 20:11:45.000000000","message":"Done","commit_id":"575dd89e05210e86f532e741e89fd34ad626189f"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"1992e42db1fba0c6bb23b2dfec7674f73df82012","unresolved":true,"context_lines":[{"line_number":3006,"context_line":"\t\t\t\t}"},{"line_number":3007,"context_line":"\t\t\t}"},{"line_number":3008,"context_line":""},{"line_number":3009,"context_line":"\t\t\t# Lint Markdown files."},{"line_number":3010,"context_line":"\t\t\tif ($realfile \u003d~ /\\.md$/ \u0026\u0026 !$md_checked{$realfile}) {"},{"line_number":3011,"context_line":"\t\t\t\tmy $fullpath \u003d $root ? \"$root/$realfile\" : $realfile;"},{"line_number":3012,"context_line":"\t\t\t\trun_md_linter($fullpath);"}],"source_content_type":"text/x-perl","patch_set":1,"id":"ae4e7791_ae0bf8fa","line":3009,"updated":"2026-02-17 16:51:32.000000000","message":"Same here, put this new block of code between\n`# OpenOCD specific: Begin: check markdown with pymarkdownlnt`\nand\n`# OpenOCD specific: End`","commit_id":"575dd89e05210e86f532e741e89fd34ad626189f"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"db02971abb1e33458af3afe16cc071ccd7bfb9d8","unresolved":false,"context_lines":[{"line_number":3006,"context_line":"\t\t\t\t}"},{"line_number":3007,"context_line":"\t\t\t}"},{"line_number":3008,"context_line":""},{"line_number":3009,"context_line":"\t\t\t# Lint Markdown files."},{"line_number":3010,"context_line":"\t\t\tif ($realfile \u003d~ /\\.md$/ \u0026\u0026 !$md_checked{$realfile}) {"},{"line_number":3011,"context_line":"\t\t\t\tmy $fullpath \u003d $root ? \"$root/$realfile\" : $realfile;"},{"line_number":3012,"context_line":"\t\t\t\trun_md_linter($fullpath);"}],"source_content_type":"text/x-perl","patch_set":1,"id":"73cb7a05_f7b51729","line":3009,"in_reply_to":"ae4e7791_ae0bf8fa","updated":"2026-02-17 20:11:45.000000000","message":"Done","commit_id":"575dd89e05210e86f532e741e89fd34ad626189f"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"d1a2f362cc924d8ad1e93f4c8ce05b84a934d90c","unresolved":true,"context_lines":[{"line_number":3010,"context_line":"\t\t\t\t}"},{"line_number":3011,"context_line":"\t\t\t}"},{"line_number":3012,"context_line":""},{"line_number":3013,"context_line":"# OpenOCD specific: Begin: check markdown with pymarkdownlnt"},{"line_number":3014,"context_line":"\t\t\t# Lint Markdown files."},{"line_number":3015,"context_line":"\t\t\tif ($realfile \u003d~ /\\.md$/ \u0026\u0026 !$md_checked{$realfile}) {"},{"line_number":3016,"context_line":"\t\t\t\tmy $fullpath \u003d $root ? \"$root/$realfile\" : $realfile;"}],"source_content_type":"text/x-perl","patch_set":2,"id":"37514aa6_3dd208d9","line":3013,"updated":"2026-02-18 13:50:46.000000000","message":"Please indent the comment as the code.","commit_id":"9e43b03f0807d4cec161e96a2747191314c1cd4f"},{"author":{"_account_id":1000853,"name":"zapb","display_name":"Marc Schink","email":"dev@zapb.de","username":"zapb"},"change_message_id":"b60ce25e98161a93a6b7c679e410921b3b7ef6c0","unresolved":false,"context_lines":[{"line_number":3010,"context_line":"\t\t\t\t}"},{"line_number":3011,"context_line":"\t\t\t}"},{"line_number":3012,"context_line":""},{"line_number":3013,"context_line":"# OpenOCD specific: Begin: check markdown with pymarkdownlnt"},{"line_number":3014,"context_line":"\t\t\t# Lint Markdown files."},{"line_number":3015,"context_line":"\t\t\tif ($realfile \u003d~ /\\.md$/ \u0026\u0026 !$md_checked{$realfile}) {"},{"line_number":3016,"context_line":"\t\t\t\tmy $fullpath \u003d $root ? \"$root/$realfile\" : $realfile;"}],"source_content_type":"text/x-perl","patch_set":2,"id":"4291185f_07207b74","line":3013,"in_reply_to":"37514aa6_3dd208d9","updated":"2026-02-19 10:35:29.000000000","message":"Done","commit_id":"9e43b03f0807d4cec161e96a2747191314c1cd4f"}]}
