)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"dc5de5b59c2085f3bc6694c320a1983d219945a5","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"2ae8ebdd_668fd89a","updated":"2026-03-27 07:36:57.000000000","message":"The commit message has two `Change-Id` lines and two `Signed-off-by` lines. The first `Change-Id` (`I3e91fa93...`) and the `Closes-Bug: #2145077` appear to be from a different change or an earlier iteration. Please clean up the commit message to have a single `Change-Id` block at the end.","commit_id":"94152856bb0314846e54c0e8aaafcf1c7c025056"},{"author":{"_account_id":38940,"name":"Oluwasola Akintewe","display_name":"nathan_akin","email":"solaakintewe@gmail.com","username":"nathan_akin"},"change_message_id":"951958a9b3c42c6fc9b1d0814015167060c33d3d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1a96c875_956c4483","in_reply_to":"2ae8ebdd_668fd89a","updated":"2026-04-01 10:44:46.000000000","message":"Done","commit_id":"94152856bb0314846e54c0e8aaafcf1c7c025056"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"71993c46347e6c9335cf2396eb2d7932cbb1292a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"679e8def_1a62a09c","updated":"2026-03-31 15:53:31.000000000","message":"@solaakintewe@gmail.com did you see my unresolved comments here?","commit_id":"7738624c815a4f3085768eebe5fd10fb2d7dbfa3"},{"author":{"_account_id":38940,"name":"Oluwasola Akintewe","display_name":"nathan_akin","email":"solaakintewe@gmail.com","username":"nathan_akin"},"change_message_id":"951958a9b3c42c6fc9b1d0814015167060c33d3d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"925a3c66_186a9fbc","in_reply_to":"679e8def_1a62a09c","updated":"2026-04-01 10:44:46.000000000","message":"oh let me look at them my bad","commit_id":"7738624c815a4f3085768eebe5fd10fb2d7dbfa3"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"f357a0b7596c3127a0954684f2974caf24fae61c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"6bf77b12_4bc2a1e1","updated":"2026-04-01 19:40:02.000000000","message":"LGTM, thank you!","commit_id":"80e72c8aa308ebd3569ee5955b37910265db337b"}],"manila/tests/cmd/test_status.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"dc5de5b59c2085f3bc6694c320a1983d219945a5","unresolved":true,"context_lines":[{"line_number":39,"context_line":"    def test_upgrade_checks_contains_policy_json_check(self):"},{"line_number":40,"context_line":"        check_name, check_func \u003d self.cmd._upgrade_checks[0]"},{"line_number":41,"context_line":"        self.assertIn(\u0027Policy File JSON to YAML Migration\u0027, check_name)"},{"line_number":42,"context_line":"        # The check function is a tuple of (callable, kwargs)"},{"line_number":43,"context_line":"        func, kwargs \u003d check_func"},{"line_number":44,"context_line":"        self.assertEqual(common_checks.check_policy_json, func)"},{"line_number":45,"context_line":"        self.assertIn(\u0027conf\u0027, kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aca1e8d_0923f314","line":42,"updated":"2026-03-27 07:36:57.000000000","message":"This unpacking (`func, kwargs \u003d check_func`) assumes `_upgrade_checks` entries use the `(callable, dict)` tuple format internally. This is an implementation detail of how oslo_upgradecheck dispatches checks — if the format changes, this test breaks without any actual regression in manila.\n\nConsider testing the *behavior* instead: call `self.cmd.check()` with appropriate mocks and verify the result, rather than inspecting the internal tuple structure.","commit_id":"94152856bb0314846e54c0e8aaafcf1c7c025056"},{"author":{"_account_id":38940,"name":"Oluwasola Akintewe","display_name":"nathan_akin","email":"solaakintewe@gmail.com","username":"nathan_akin"},"change_message_id":"951958a9b3c42c6fc9b1d0814015167060c33d3d","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def test_upgrade_checks_contains_policy_json_check(self):"},{"line_number":40,"context_line":"        check_name, check_func \u003d self.cmd._upgrade_checks[0]"},{"line_number":41,"context_line":"        self.assertIn(\u0027Policy File JSON to YAML Migration\u0027, check_name)"},{"line_number":42,"context_line":"        # The check function is a tuple of (callable, kwargs)"},{"line_number":43,"context_line":"        func, kwargs \u003d check_func"},{"line_number":44,"context_line":"        self.assertEqual(common_checks.check_policy_json, func)"},{"line_number":45,"context_line":"        self.assertIn(\u0027conf\u0027, kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9258f106_d0ee7c92","line":42,"in_reply_to":"7aca1e8d_0923f314","updated":"2026-04-01 10:44:46.000000000","message":"Done","commit_id":"94152856bb0314846e54c0e8aaafcf1c7c025056"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"dc5de5b59c2085f3bc6694c320a1983d219945a5","unresolved":true,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self.assertEqual(0, result)"},{"line_number":61,"context_line":"        mock_main.assert_called_once()"},{"line_number":62,"context_line":"        call_kwargs \u003d mock_main.call_args"},{"line_number":63,"context_line":"        self.assertIs(CONF, call_kwargs[0][0])"},{"line_number":64,"context_line":"        self.assertEqual(\u0027manila\u0027, call_kwargs[1][\u0027project\u0027])"},{"line_number":65,"context_line":"        self.assertIsInstance("}],"source_content_type":"text/x-python","patch_set":3,"id":"63bbcff9_f0994a84","line":62,"updated":"2026-03-27 07:36:57.000000000","message":"`call_args[0][0]` and `call_args[1]` for positional/keyword args is valid but hard to read. Since Manila targets Python 3.10+, consider using the named attributes:\n\n```python\nself.assertIs(CONF, mock_main.call_args.args[0])\nself.assertEqual(\u0027manila\u0027, mock_main.call_args.kwargs[\u0027project\u0027])\n```","commit_id":"94152856bb0314846e54c0e8aaafcf1c7c025056"},{"author":{"_account_id":38940,"name":"Oluwasola Akintewe","display_name":"nathan_akin","email":"solaakintewe@gmail.com","username":"nathan_akin"},"change_message_id":"951958a9b3c42c6fc9b1d0814015167060c33d3d","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self.assertEqual(0, result)"},{"line_number":61,"context_line":"        mock_main.assert_called_once()"},{"line_number":62,"context_line":"        call_kwargs \u003d mock_main.call_args"},{"line_number":63,"context_line":"        self.assertIs(CONF, call_kwargs[0][0])"},{"line_number":64,"context_line":"        self.assertEqual(\u0027manila\u0027, call_kwargs[1][\u0027project\u0027])"},{"line_number":65,"context_line":"        self.assertIsInstance("}],"source_content_type":"text/x-python","patch_set":3,"id":"48f18e7c_c344ae3f","line":62,"in_reply_to":"63bbcff9_f0994a84","updated":"2026-04-01 10:44:46.000000000","message":"Done","commit_id":"94152856bb0314846e54c0e8aaafcf1c7c025056"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"9707046d8da44d26a91cce64662b38edc49cdb67","unresolved":true,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class TestUpgradeChecks(test.TestCase):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def setUp(self):"},{"line_number":29,"context_line":"        super(TestUpgradeChecks, self).setUp()"},{"line_number":30,"context_line":"        self.cmd \u003d status.Checks()"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1c550be7_868d65e7","line":28,"updated":"2026-03-31 20:56:13.000000000","message":"Minor style note: the tuple assertion could also verify that each\nelement in _upgrade_checks is a 2-tuple (name, func), which would\ncatch structural errors. Again, not blocking.","commit_id":"80e72c8aa308ebd3569ee5955b37910265db337b"},{"author":{"_account_id":38940,"name":"Oluwasola Akintewe","display_name":"nathan_akin","email":"solaakintewe@gmail.com","username":"nathan_akin"},"change_message_id":"951958a9b3c42c6fc9b1d0814015167060c33d3d","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class TestUpgradeChecks(test.TestCase):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def setUp(self):"},{"line_number":29,"context_line":"        super(TestUpgradeChecks, self).setUp()"},{"line_number":30,"context_line":"        self.cmd \u003d status.Checks()"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"f74bc198_01f2f645","line":28,"in_reply_to":"1c550be7_868d65e7","updated":"2026-04-01 10:44:46.000000000","message":"Done","commit_id":"80e72c8aa308ebd3569ee5955b37910265db337b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"9707046d8da44d26a91cce64662b38edc49cdb67","unresolved":true,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_upgrade_checks_tuple_is_not_empty(self):"},{"line_number":36,"context_line":"        self.assertGreater(len(self.cmd._upgrade_checks), 0)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def test_upgrade_checks_policy_json_check_succeeds(self):"},{"line_number":39,"context_line":"        self.mock_object("},{"line_number":40,"context_line":"            CONF, \u0027find_file\u0027, mock.Mock(return_value\u003dNone))"}],"source_content_type":"text/x-python","patch_set":6,"id":"267eb215_33111f0f","line":37,"updated":"2026-03-31 20:56:13.000000000","message":"Consider also testing the failure path: when CONF.find_file returns\na path to a JSON file (mocking fileutils.is_json to return True),\ncheck() should return upgradecheck.Code.FAILURE. This would give\ncomplete branch coverage of the policy JSON check. Not blocking --\nthe current tests are a good start.","commit_id":"80e72c8aa308ebd3569ee5955b37910265db337b"},{"author":{"_account_id":38940,"name":"Oluwasola Akintewe","display_name":"nathan_akin","email":"solaakintewe@gmail.com","username":"nathan_akin"},"change_message_id":"951958a9b3c42c6fc9b1d0814015167060c33d3d","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_upgrade_checks_tuple_is_not_empty(self):"},{"line_number":36,"context_line":"        self.assertGreater(len(self.cmd._upgrade_checks), 0)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def test_upgrade_checks_policy_json_check_succeeds(self):"},{"line_number":39,"context_line":"        self.mock_object("},{"line_number":40,"context_line":"            CONF, \u0027find_file\u0027, mock.Mock(return_value\u003dNone))"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a7bc3a8_f9cdbbc7","line":37,"in_reply_to":"267eb215_33111f0f","updated":"2026-04-01 10:44:46.000000000","message":"Done","commit_id":"80e72c8aa308ebd3569ee5955b37910265db337b"}]}
