)]}'
{"doc/source/cli/ironic-manage.rst":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"97efe615d2006eb060bcb2437233e2154ea2e393","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"  ironic-manage inspection-rules check --rules rules.yaml --data-dir \u003cdirectory\u003e"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":".. option:: --rules \u003crules file\u003e"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"  YAML file with the inspection rules to evaluate. Always required."},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"77fa95d1_aab853f1","line":122,"updated":"2026-07-08 12:59:26.000000000","message":"nit: unconditionally required options should usually be positional","commit_id":"309326ca0c9491d01658aec995fcfd680772951f"}],"ironic/common/inspection_rules/tester.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"97efe615d2006eb060bcb2437233e2154ea2e393","unresolved":false,"context_lines":[{"line_number":233,"context_line":"            return 1"},{"line_number":234,"context_line":"        self.evaluate_rules()"},{"line_number":235,"context_line":"        self.print_results()"},{"line_number":236,"context_line":"        if sum(len(r[\"errors\"]) for r in self.results):"},{"line_number":237,"context_line":"            return 1"},{"line_number":238,"context_line":"        return 0"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"b2dc9365_e226655a","line":236,"updated":"2026-07-08 12:59:26.000000000","message":"nit: a bit less cryptic `any(r[\"errors\"] for r in self.results)`","commit_id":"309326ca0c9491d01658aec995fcfd680772951f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"97efe615d2006eb060bcb2437233e2154ea2e393","unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    :param data_dir: directory containing test case subdirectories."},{"line_number":274,"context_line":"    :param rules_file: YAML file with the inspection rules to evaluate."},{"line_number":275,"context_line":"    :returns: an exit code, 0 when all test cases pass."},{"line_number":276,"context_line":"    \"\"\""},{"line_number":277,"context_line":"    if not os.path.isdir(data_dir):"},{"line_number":278,"context_line":"        print(f\"No data directory found at {data_dir}\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"9b6a8d69_74ea992d","line":275,"updated":"2026-07-08 12:59:26.000000000","message":"Let\u0027s use booleans or raise exceptions for anything that is not directly interfaces with sys.exit","commit_id":"309326ca0c9491d01658aec995fcfd680772951f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"97efe615d2006eb060bcb2437233e2154ea2e393","unresolved":false,"context_lines":[{"line_number":275,"context_line":"    :returns: an exit code, 0 when all test cases pass."},{"line_number":276,"context_line":"    \"\"\""},{"line_number":277,"context_line":"    if not os.path.isdir(data_dir):"},{"line_number":278,"context_line":"        print(f\"No data directory found at {data_dir}\")"},{"line_number":279,"context_line":"        return 0"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    test_dirs \u003d sorted("}],"source_content_type":"text/x-python","patch_set":1,"id":"e343aac3_e0f9fe08","line":278,"updated":"2026-07-08 12:59:26.000000000","message":"Since this file is now a module, it should use logging instead of printing to stdout (and in any case should output status information to stderr)","commit_id":"309326ca0c9491d01658aec995fcfd680772951f"}]}
