)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9d49d320e543095c27c64a0399d5ac51da5a1cc2","unresolved":false,"context_lines":[{"line_number":12,"context_line":"But it should be in an isolated test class."},{"line_number":13,"context_line":"So add the test class and move the method into it."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Then split the method into methods for each test case"},{"line_number":16,"context_line":"to improve readability."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Id2350529b3322dfa8f7c13ac8e5f85aaf3041082"},{"line_number":19,"context_line":"Implements: blueprint mox-removal"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"bf659307_3456452c","line":16,"range":{"start_line":15,"start_character":0,"end_line":16,"end_character":23},"updated":"2018-04-11 10:23:10.000000000","message":"+1 nice work here","commit_id":"4a78dccf70bf8c37b3586cedfe5a4f0fb0d45b96"}],"nova/tests/unit/test_utils.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"662a980f69e1dcc1e602690ba71714b502956449","unresolved":false,"context_lines":[{"line_number":1400,"context_line":"        self.einval \u003d OSError()"},{"line_number":1401,"context_line":"        self.einval.errno \u003d errno.EINVAL"},{"line_number":1402,"context_line":"        self.test_path \u003d os.path.join(\u0027.\u0027, \u0027.directio.test\u0027)"},{"line_number":1403,"context_line":"        self.flags \u003d os.O_CREAT | os.O_WRONLY | os.O_DIRECT"},{"line_number":1404,"context_line":""},{"line_number":1405,"context_line":"    @mock.patch(\u0027os.unlink\u0027)"},{"line_number":1406,"context_line":"    @mock.patch(\u0027os.close\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_8c9cbec0","line":1403,"range":{"start_line":1403,"start_character":13,"end_line":1403,"end_character":18},"updated":"2018-03-31 23:08:39.000000000","message":"This overrides the flags method from nova.test.TestCase - use a different name.","commit_id":"ad046d5fa6abc8dd3e6e27501106352988855db8"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"303f877b79abc7abeccda42dff6d473b6e43d8bd","unresolved":false,"context_lines":[{"line_number":1400,"context_line":"        self.einval \u003d OSError()"},{"line_number":1401,"context_line":"        self.einval.errno \u003d errno.EINVAL"},{"line_number":1402,"context_line":"        self.test_path \u003d os.path.join(\u0027.\u0027, \u0027.directio.test\u0027)"},{"line_number":1403,"context_line":"        self.flags \u003d os.O_CREAT | os.O_WRONLY | os.O_DIRECT"},{"line_number":1404,"context_line":""},{"line_number":1405,"context_line":"    @mock.patch(\u0027os.unlink\u0027)"},{"line_number":1406,"context_line":"    @mock.patch(\u0027os.close\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_44d8b679","line":1403,"range":{"start_line":1403,"start_character":13,"end_line":1403,"end_character":18},"in_reply_to":"bf659307_8c9cbec0","updated":"2018-04-02 07:30:13.000000000","message":"Done","commit_id":"ad046d5fa6abc8dd3e6e27501106352988855db8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"662a980f69e1dcc1e602690ba71714b502956449","unresolved":false,"context_lines":[{"line_number":1402,"context_line":"        self.test_path \u003d os.path.join(\u0027.\u0027, \u0027.directio.test\u0027)"},{"line_number":1403,"context_line":"        self.flags \u003d os.O_CREAT | os.O_WRONLY | os.O_DIRECT"},{"line_number":1404,"context_line":""},{"line_number":1405,"context_line":"    @mock.patch(\u0027os.unlink\u0027)"},{"line_number":1406,"context_line":"    @mock.patch(\u0027os.close\u0027)"},{"line_number":1407,"context_line":"    @mock.patch(\u0027os.write\u0027)"},{"line_number":1408,"context_line":"    @mock.patch(\u0027os.open\u0027)"},{"line_number":1409,"context_line":"    def test_supports_direct_io(self, mock_open, mock_write,"},{"line_number":1410,"context_line":"                                mock_close, mock_unlink):"},{"line_number":1411,"context_line":"        mock_open.return_value \u003d 3"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_aca182fa","line":1408,"range":{"start_line":1405,"start_character":0,"end_line":1408,"end_character":26},"updated":"2018-03-31 23:08:39.000000000","message":"If you\u0027re mocking these for every method, do it at the class level, or in setUp().","commit_id":"ad046d5fa6abc8dd3e6e27501106352988855db8"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"303f877b79abc7abeccda42dff6d473b6e43d8bd","unresolved":false,"context_lines":[{"line_number":1402,"context_line":"        self.test_path \u003d os.path.join(\u0027.\u0027, \u0027.directio.test\u0027)"},{"line_number":1403,"context_line":"        self.flags \u003d os.O_CREAT | os.O_WRONLY | os.O_DIRECT"},{"line_number":1404,"context_line":""},{"line_number":1405,"context_line":"    @mock.patch(\u0027os.unlink\u0027)"},{"line_number":1406,"context_line":"    @mock.patch(\u0027os.close\u0027)"},{"line_number":1407,"context_line":"    @mock.patch(\u0027os.write\u0027)"},{"line_number":1408,"context_line":"    @mock.patch(\u0027os.open\u0027)"},{"line_number":1409,"context_line":"    def test_supports_direct_io(self, mock_open, mock_write,"},{"line_number":1410,"context_line":"                                mock_close, mock_unlink):"},{"line_number":1411,"context_line":"        mock_open.return_value \u003d 3"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_e4ca2a9f","line":1408,"range":{"start_line":1405,"start_character":0,"end_line":1408,"end_character":26},"in_reply_to":"bf659307_aca182fa","updated":"2018-04-02 07:30:13.000000000","message":"Done","commit_id":"ad046d5fa6abc8dd3e6e27501106352988855db8"}]}
