)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38759,"name":"László Jánosi","display_name":"janosin","email":"laszlo.janosi@nokia.com","username":"janosin"},"change_message_id":"d7ccfc8798569675bd95681dfce70f952a938808","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"66d08ba5_380a73f8","updated":"2026-01-28 14:28:11.000000000","message":"@mnasiadka@gmail.com I think I addressed your requests, please check those.","commit_id":"d0517a61ef7c57bffb0fcf52493a7a91c1bddbb7"},{"author":{"_account_id":38759,"name":"László Jánosi","display_name":"janosin","email":"laszlo.janosi@nokia.com","username":"janosin"},"change_message_id":"de3e76b5098e2ae32472884c963adcd8d345c2cf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"dbf13043_3c2e5ffe","updated":"2026-01-28 16:37:06.000000000","message":"@cboylan@sapwetik.org Thank you for the comments. I fixed those. Please check.","commit_id":"337395deed2d726229a7f5d4b4a7700c7642eba1"}],"glean/cmd.py":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"98324964f36438db09ec2d863889e57691be98f6","unresolved":true,"context_lines":[{"line_number":127,"context_line":"        STARTMODE\u003dauto"},{"line_number":128,"context_line":"        \"\"\")"},{"line_number":129,"context_line":"    elif is_keyfile_format():"},{"line_number":130,"context_line":"        # For VLAN, use type\u003dvlan without the [802-3-ethernet] section"},{"line_number":131,"context_line":"        if is_vlan:"},{"line_number":132,"context_line":"            preamble \u003d textwrap.dedent(\"\"\"\\"},{"line_number":133,"context_line":"            # Automatically generated, do not edit"}],"source_content_type":"text/x-python","patch_set":2,"id":"bbed78c0_160b221f","line":130,"updated":"2026-01-28 11:40:57.000000000","message":"Can\u0027t we set type and have one keyfile template?","commit_id":"e4aeefa66ab51cacc7e0966cd28d785e56fd0137"},{"author":{"_account_id":38759,"name":"László Jánosi","display_name":"janosin","email":"laszlo.janosi@nokia.com","username":"janosin"},"change_message_id":"d7ccfc8798569675bd95681dfce70f952a938808","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        STARTMODE\u003dauto"},{"line_number":128,"context_line":"        \"\"\")"},{"line_number":129,"context_line":"    elif is_keyfile_format():"},{"line_number":130,"context_line":"        # For VLAN, use type\u003dvlan without the [802-3-ethernet] section"},{"line_number":131,"context_line":"        if is_vlan:"},{"line_number":132,"context_line":"            preamble \u003d textwrap.dedent(\"\"\"\\"},{"line_number":133,"context_line":"            # Automatically generated, do not edit"}],"source_content_type":"text/x-python","patch_set":2,"id":"5b6ccace_66d0e228","line":130,"in_reply_to":"bbed78c0_160b221f","updated":"2026-01-28 14:28:11.000000000","message":"Fixed, please check.","commit_id":"e4aeefa66ab51cacc7e0966cd28d785e56fd0137"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"98324964f36438db09ec2d863889e57691be98f6","unresolved":true,"context_lines":[{"line_number":165,"context_line":"    else:"},{"line_number":166,"context_line":"        # For Red Hat ifcfg format"},{"line_number":167,"context_line":"        nm_controlled \u003d \"yes\" if args.use_nm else \"no\""},{"line_number":168,"context_line":"        if is_vlan:"},{"line_number":169,"context_line":"            preamble \u003d textwrap.dedent(\"\"\"\\"},{"line_number":170,"context_line":"            # Automatically generated, do not edit"},{"line_number":171,"context_line":"            DEVICE\u003d{name}"}],"source_content_type":"text/x-python","patch_set":2,"id":"f788abbc_7aade779","line":168,"updated":"2026-01-28 11:40:57.000000000","message":"ditto","commit_id":"e4aeefa66ab51cacc7e0966cd28d785e56fd0137"},{"author":{"_account_id":38759,"name":"László Jánosi","display_name":"janosin","email":"laszlo.janosi@nokia.com","username":"janosin"},"change_message_id":"d7ccfc8798569675bd95681dfce70f952a938808","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    else:"},{"line_number":166,"context_line":"        # For Red Hat ifcfg format"},{"line_number":167,"context_line":"        nm_controlled \u003d \"yes\" if args.use_nm else \"no\""},{"line_number":168,"context_line":"        if is_vlan:"},{"line_number":169,"context_line":"            preamble \u003d textwrap.dedent(\"\"\"\\"},{"line_number":170,"context_line":"            # Automatically generated, do not edit"},{"line_number":171,"context_line":"            DEVICE\u003d{name}"}],"source_content_type":"text/x-python","patch_set":2,"id":"2d9f139a_3e939fdf","line":168,"in_reply_to":"f788abbc_7aade779","updated":"2026-01-28 14:28:11.000000000","message":"Fixed, please check.","commit_id":"e4aeefa66ab51cacc7e0966cd28d785e56fd0137"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"98324964f36438db09ec2d863889e57691be98f6","unresolved":true,"context_lines":[{"line_number":375,"context_line":"    # set_rh_bonding takes results as argument so we need to assign"},{"line_number":376,"context_line":"    # the return value, not append it"},{"line_number":377,"context_line":"    results \u003d _set_rh_bonding(name, interface, distro, results)"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    routes \u003d []"},{"line_number":380,"context_line":"    for route in interface.get(\u0027routes\u0027, ()):"},{"line_number":381,"context_line":"        if route[\u0027network\u0027] \u003d\u003d \u00270.0.0.0\u0027 and route[\u0027netmask\u0027] \u003d\u003d \u00270.0.0.0\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a3e2b58_bf323af5","line":378,"updated":"2026-01-28 11:40:57.000000000","message":"that extra newline is unrelated","commit_id":"e4aeefa66ab51cacc7e0966cd28d785e56fd0137"},{"author":{"_account_id":38759,"name":"László Jánosi","display_name":"janosin","email":"laszlo.janosi@nokia.com","username":"janosin"},"change_message_id":"d7ccfc8798569675bd95681dfce70f952a938808","unresolved":false,"context_lines":[{"line_number":375,"context_line":"    # set_rh_bonding takes results as argument so we need to assign"},{"line_number":376,"context_line":"    # the return value, not append it"},{"line_number":377,"context_line":"    results \u003d _set_rh_bonding(name, interface, distro, results)"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    routes \u003d []"},{"line_number":380,"context_line":"    for route in interface.get(\u0027routes\u0027, ()):"},{"line_number":381,"context_line":"        if route[\u0027network\u0027] \u003d\u003d \u00270.0.0.0\u0027 and route[\u0027netmask\u0027] \u003d\u003d \u00270.0.0.0\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"71b22b5d_be6d7ff3","line":378,"in_reply_to":"3a3e2b58_bf323af5","updated":"2026-01-28 14:28:11.000000000","message":"Fixed, please check.","commit_id":"e4aeefa66ab51cacc7e0966cd28d785e56fd0137"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"98324964f36438db09ec2d863889e57691be98f6","unresolved":true,"context_lines":[{"line_number":437,"context_line":"        args, is_vlan\u003d\u0027vlan_id\u0027 in interface, is_bond\u003dis_bond"},{"line_number":438,"context_line":"    ).format("},{"line_number":439,"context_line":"        method\u003d\"auto\", id\u003dname, mac_address\u003dinterface[\u0027mac_address\u0027])"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    results +\u003d _set_rh_vlan(name, interface, distro)"},{"line_number":442,"context_line":"    # set_rh_bonding takes results as argument so we need to assign"},{"line_number":443,"context_line":"    # the return value, not append it"}],"source_content_type":"text/x-python","patch_set":2,"id":"8719e79c_28a6cd95","line":440,"updated":"2026-01-28 11:40:57.000000000","message":"ditto","commit_id":"e4aeefa66ab51cacc7e0966cd28d785e56fd0137"},{"author":{"_account_id":38759,"name":"László Jánosi","display_name":"janosin","email":"laszlo.janosi@nokia.com","username":"janosin"},"change_message_id":"d7ccfc8798569675bd95681dfce70f952a938808","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        args, is_vlan\u003d\u0027vlan_id\u0027 in interface, is_bond\u003dis_bond"},{"line_number":438,"context_line":"    ).format("},{"line_number":439,"context_line":"        method\u003d\"auto\", id\u003dname, mac_address\u003dinterface[\u0027mac_address\u0027])"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    results +\u003d _set_rh_vlan(name, interface, distro)"},{"line_number":442,"context_line":"    # set_rh_bonding takes results as argument so we need to assign"},{"line_number":443,"context_line":"    # the return value, not append it"}],"source_content_type":"text/x-python","patch_set":2,"id":"b7362c8c_63a66a02","line":440,"in_reply_to":"8719e79c_28a6cd95","updated":"2026-01-28 14:28:11.000000000","message":"Fixed, please check.","commit_id":"e4aeefa66ab51cacc7e0966cd28d785e56fd0137"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"98324964f36438db09ec2d863889e57691be98f6","unresolved":true,"context_lines":[{"line_number":771,"context_line":"                })"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"        # create netdev files"},{"line_number":774,"context_line":"        if \u0027bond_mode\u0027 in interface or \u0027vlan_id\u0027 in interface:"},{"line_number":775,"context_line":"            netdev_file \u003d \\"},{"line_number":776,"context_line":"                \u0027/etc/systemd/network/{name}.netdev\u0027.format(name\u003diname)"},{"line_number":777,"context_line":"            if netdev_file not in files_struct:"}],"source_content_type":"text/x-python","patch_set":2,"id":"54ef9eaa_5271233c","line":774,"updated":"2026-01-28 11:40:57.000000000","message":"if [\u0027bond_mode\u0027,\u0027vlan_id\u0027] in interface: ?","commit_id":"e4aeefa66ab51cacc7e0966cd28d785e56fd0137"},{"author":{"_account_id":38759,"name":"László Jánosi","display_name":"janosin","email":"laszlo.janosi@nokia.com","username":"janosin"},"change_message_id":"d7ccfc8798569675bd95681dfce70f952a938808","unresolved":false,"context_lines":[{"line_number":771,"context_line":"                })"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"        # create netdev files"},{"line_number":774,"context_line":"        if \u0027bond_mode\u0027 in interface or \u0027vlan_id\u0027 in interface:"},{"line_number":775,"context_line":"            netdev_file \u003d \\"},{"line_number":776,"context_line":"                \u0027/etc/systemd/network/{name}.netdev\u0027.format(name\u003diname)"},{"line_number":777,"context_line":"            if netdev_file not in files_struct:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffabf650_1928aa03","line":774,"in_reply_to":"54ef9eaa_5271233c","updated":"2026-01-28 14:28:11.000000000","message":"On that way I got \"TypeError: unhashable type: \u0027list\u0027\"\n\nI changed it to \nif any(key in interface for key in [\u0027bond_mode\u0027, \u0027vlan_id\u0027]):","commit_id":"e4aeefa66ab51cacc7e0966cd28d785e56fd0137"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"59f6bb0a2afc81096af898c08cb248a898af210e","unresolved":true,"context_lines":[{"line_number":175,"context_line":"        ONBOOT\u003dyes"},{"line_number":176,"context_line":"        NM_CONTROLLED\u003d{nm}"},{"line_number":177,"context_line":"        TYPE\u003d{type}"},{"line_number":178,"context_line":"        \"\"\").format(nm\u003dnm_controlled, type\u003dtype_line).rstrip() + \"\\n\""},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    return preamble"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1c5a4450_ab9da3fe","line":178,"range":{"start_line":178,"start_character":53,"end_line":178,"end_character":69},"updated":"2026-01-28 16:17:26.000000000","message":"Is this necessary? The docstring is dedented and already ends in a newline","commit_id":"d0517a61ef7c57bffb0fcf52493a7a91c1bddbb7"},{"author":{"_account_id":38759,"name":"László Jánosi","display_name":"janosin","email":"laszlo.janosi@nokia.com","username":"janosin"},"change_message_id":"de3e76b5098e2ae32472884c963adcd8d345c2cf","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        ONBOOT\u003dyes"},{"line_number":176,"context_line":"        NM_CONTROLLED\u003d{nm}"},{"line_number":177,"context_line":"        TYPE\u003d{type}"},{"line_number":178,"context_line":"        \"\"\").format(nm\u003dnm_controlled, type\u003dtype_line).rstrip() + \"\\n\""},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    return preamble"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"17641c82_eba15f95","line":178,"range":{"start_line":178,"start_character":53,"end_line":178,"end_character":69},"in_reply_to":"1c5a4450_ab9da3fe","updated":"2026-01-28 16:37:06.000000000","message":"Indeed, that is not necessary, deleted.","commit_id":"d0517a61ef7c57bffb0fcf52493a7a91c1bddbb7"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"59f6bb0a2afc81096af898c08cb248a898af210e","unresolved":true,"context_lines":[{"line_number":732,"context_line":"                })"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"        # create netdev files"},{"line_number":735,"context_line":"        if any(key in interface for key in [\u0027bond_mode\u0027, \u0027vlan_id\u0027]):"},{"line_number":736,"context_line":"            netdev_file \u003d \\"},{"line_number":737,"context_line":"                \u0027/etc/systemd/network/{name}.netdev\u0027.format(name\u003diname)"},{"line_number":738,"context_line":"            if netdev_file not in files_struct:"}],"source_content_type":"text/x-python","patch_set":3,"id":"25ad703f_4ef1a4b1","line":735,"updated":"2026-01-28 16:17:26.000000000","message":"I guess this fixes an old logical error in the code rather than fixing the templating itself.","commit_id":"d0517a61ef7c57bffb0fcf52493a7a91c1bddbb7"},{"author":{"_account_id":38759,"name":"László Jánosi","display_name":"janosin","email":"laszlo.janosi@nokia.com","username":"janosin"},"change_message_id":"de3e76b5098e2ae32472884c963adcd8d345c2cf","unresolved":false,"context_lines":[{"line_number":732,"context_line":"                })"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"        # create netdev files"},{"line_number":735,"context_line":"        if any(key in interface for key in [\u0027bond_mode\u0027, \u0027vlan_id\u0027]):"},{"line_number":736,"context_line":"            netdev_file \u003d \\"},{"line_number":737,"context_line":"                \u0027/etc/systemd/network/{name}.netdev\u0027.format(name\u003diname)"},{"line_number":738,"context_line":"            if netdev_file not in files_struct:"}],"source_content_type":"text/x-python","patch_set":3,"id":"a5d1b153_4c926a40","line":735,"in_reply_to":"25ad703f_4ef1a4b1","updated":"2026-01-28 16:37:06.000000000","message":"Indeed, it is an unrelated fix.","commit_id":"d0517a61ef7c57bffb0fcf52493a7a91c1bddbb7"}],"glean/tests/test_glean.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"59f6bb0a2afc81096af898c08cb248a898af210e","unresolved":true,"context_lines":[{"line_number":377,"context_line":"                    \u0027/etc/systemd/network/\u0027, \u0027\u0027).replace(\u0027.network\u0027, \u0027\u0027)"},{"line_number":378,"context_line":"                netdev_path \u003d f\u0027/etc/systemd/network/{iface_name}.netdev\u0027"},{"line_number":379,"context_line":"                has_netdev \u003d netdev_path in self.file_handle_mocks"},{"line_number":380,"context_line":"                generated_interfaces_info[iface_name] \u003d has_netdev"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        if not generated_interfaces_info:"},{"line_number":383,"context_line":"            self.skipTest(\"No network files generated\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"ed2a98b1_31675f8f","line":380,"updated":"2026-01-28 16:17:26.000000000","message":"Could this test case by simplified by simply iterating through the resulting files and if we find a .network file assert there is no .netdev file? Something like:\n\n```\nfound \u003d False\n# Check what was generated by examining file_handle_mocks\ngenerated_interfaces_info \u003d {}\nfor file_path in self.file_handle_mocks.keys():\n    if (file_path.startswith(\u0027/etc/systemd/network/\u0027) and\n        file_path.endswith(\u0027.network\u0027)):\n        iface_name \u003d file_path.replace(\n            \u0027/etc/systemd/network/\u0027, \u0027\u0027).replace(\u0027.network\u0027, \u0027\u0027)\n        if \u0027bond\u0027 not in iface_name and \u0027-vlan\u0027 not in iface_name:\n            netdev_path \u003d f\u0027/etc/systemd/network/{iface_name}.netdev\u0027\n            self.assertNotIn(netdev_path, self.file_handle_mocks)\n            found \u003d True\nif not found:\n    self.skipTest(\"No physical interfaces to check for netdev files\")\n```\n\nThen we don\u0027t need any of the rest of the test case? This appears to be quite complicated when I think we only need to check the lack of a .netdev if the interface is a physical interface. This approach also follows the one taken in the vlan test below.","commit_id":"d0517a61ef7c57bffb0fcf52493a7a91c1bddbb7"},{"author":{"_account_id":38759,"name":"László Jánosi","display_name":"janosin","email":"laszlo.janosi@nokia.com","username":"janosin"},"change_message_id":"de3e76b5098e2ae32472884c963adcd8d345c2cf","unresolved":false,"context_lines":[{"line_number":377,"context_line":"                    \u0027/etc/systemd/network/\u0027, \u0027\u0027).replace(\u0027.network\u0027, \u0027\u0027)"},{"line_number":378,"context_line":"                netdev_path \u003d f\u0027/etc/systemd/network/{iface_name}.netdev\u0027"},{"line_number":379,"context_line":"                has_netdev \u003d netdev_path in self.file_handle_mocks"},{"line_number":380,"context_line":"                generated_interfaces_info[iface_name] \u003d has_netdev"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        if not generated_interfaces_info:"},{"line_number":383,"context_line":"            self.skipTest(\"No network files generated\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"6fc4e5a9_162c5d89","line":380,"in_reply_to":"ed2a98b1_31675f8f","updated":"2026-01-28 16:37:06.000000000","message":"You are right, this logic can be applied. I fixed it.","commit_id":"d0517a61ef7c57bffb0fcf52493a7a91c1bddbb7"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"59f6bb0a2afc81096af898c08cb248a898af210e","unresolved":true,"context_lines":[{"line_number":387,"context_line":"        # We identify them by checking if the output names match"},{"line_number":388,"context_line":"        # the patterns created by the code for bonds (bondX)"},{"line_number":389,"context_line":"        # and VLANs (parent-vlanNN)"},{"line_number":390,"context_line":"        found_physical_without_netdev \u003d False"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        for iface_name, has_netdev in generated_interfaces_info.items():"},{"line_number":393,"context_line":"            # Naming patterns from code:"}],"source_content_type":"text/x-python","patch_set":3,"id":"2b716b75_ed7b756c","line":390,"updated":"2026-01-28 16:17:26.000000000","message":"Nit: This variable may be more appropriately called `found_physical_interface` or similar as it seems to be used to determine if the test case should be skipped when there is no physical interface to check.\n\nThe actual test assertion of finding a physical interface with a netdev happens via the assertNotIn on line 410.","commit_id":"d0517a61ef7c57bffb0fcf52493a7a91c1bddbb7"},{"author":{"_account_id":38759,"name":"László Jánosi","display_name":"janosin","email":"laszlo.janosi@nokia.com","username":"janosin"},"change_message_id":"de3e76b5098e2ae32472884c963adcd8d345c2cf","unresolved":false,"context_lines":[{"line_number":387,"context_line":"        # We identify them by checking if the output names match"},{"line_number":388,"context_line":"        # the patterns created by the code for bonds (bondX)"},{"line_number":389,"context_line":"        # and VLANs (parent-vlanNN)"},{"line_number":390,"context_line":"        found_physical_without_netdev \u003d False"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        for iface_name, has_netdev in generated_interfaces_info.items():"},{"line_number":393,"context_line":"            # Naming patterns from code:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ec9b3e04_3332a4cc","line":390,"in_reply_to":"2b716b75_ed7b756c","updated":"2026-01-28 16:37:06.000000000","message":"That is right. The fixed test case does not include that variable anymore.","commit_id":"d0517a61ef7c57bffb0fcf52493a7a91c1bddbb7"}]}
