)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"76d8e524a29d225452127d75fd53f8fe2006b816","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"On previous versions of Python, this tokenizer would parse the string like so:"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"  (3, \"\u0027This is the the best comment\u0027\", (1, 0), (1, 30), \"\u0027This is the the best comment\u0027\")"},{"line_number":19,"context_line":"  (0, \u0027\u0027, (2, 0), (2, 0), \u0027\u0027)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"where (3 \u003d \u0027STRING\u0027, 0 \u003d \u0027ENDMARKER\u0027)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_c2cd8c85","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":90},"updated":"2019-06-12 14:37:07.000000000","message":"For information on the format of this tuple, see [1]. Maybe should have linked to that here but oh well\n\n[1] https://docs.python.org/3/library/tokenize.html#tokenize.tokenize","commit_id":"8f712cac5c59821b25d51d3233f9f077a95feace"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"55c7d6a31fbbbdfea9b4045c3146975120613a05","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"On previous versions of Python, this tokenizer would parse the string like so:"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"  (3, \"\u0027This is the the best comment\u0027\", (1, 0), (1, 30), \"\u0027This is the the best comment\u0027\")"},{"line_number":19,"context_line":"  (0, \u0027\u0027, (2, 0), (2, 0), \u0027\u0027)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"where (3 \u003d \u0027STRING\u0027, 0 \u003d \u0027ENDMARKER\u0027)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_74efb6e8","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":90},"in_reply_to":"9fb8cfa7_c2cd8c85","updated":"2019-06-12 19:15:11.000000000","message":"coulda done this","commit_id":"8f712cac5c59821b25d51d3233f9f077a95feace"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2d66db9829a0a78fbe59512be4fdd15513ea6d00","unresolved":false,"context_lines":[{"line_number":37,"context_line":"For the former case above, the line doesn\u0027t include a newline which"},{"line_number":38,"context_line":"means we never parse a \u0027NEWLINE\u0027 token with a logical line (the fifth"},{"line_number":39,"context_line":"element of the token tuple) corresponding to our full line. This means"},{"line_number":40,"context_line":"triggers here but that wasn\u0027t an issue previously since there\u0027s a"},{"line_number":41,"context_line":"fallthrough case that handled tokens remaining at the end of the parse:"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"  https://github.com/PyCQA/pycodestyle/blob/2.5.0/pycodestyle.py#L2114-L2116"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_02ade499","line":40,"range":{"start_line":40,"start_character":0,"end_line":40,"end_character":8},"updated":"2019-06-12 14:40:08.000000000","message":"we don\u0027t trigger","commit_id":"8f712cac5c59821b25d51d3233f9f077a95feace"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d5813aa930d43d479ae27b9b81ef8dc9fd57f507","unresolved":false,"context_lines":[{"line_number":37,"context_line":"For the former case above, the line doesn\u0027t include a newline which"},{"line_number":38,"context_line":"means we never parse a \u0027NEWLINE\u0027 token with a logical line (the fifth"},{"line_number":39,"context_line":"element of the token tuple) corresponding to our full line. This means"},{"line_number":40,"context_line":"triggers here but that wasn\u0027t an issue previously since there\u0027s a"},{"line_number":41,"context_line":"fallthrough case that handled tokens remaining at the end of the parse:"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"  https://github.com/PyCQA/pycodestyle/blob/2.5.0/pycodestyle.py#L2114-L2116"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_2502720b","line":40,"range":{"start_line":40,"start_character":0,"end_line":40,"end_character":8},"in_reply_to":"9fb8cfa7_02ade499","updated":"2019-06-12 15:02:15.000000000","message":"Done","commit_id":"8f712cac5c59821b25d51d3233f9f077a95feace"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2d66db9829a0a78fbe59512be4fdd15513ea6d00","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"  https://github.com/PyCQA/pycodestyle/blob/2.5.0/pycodestyle.py#L2114-L2116"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Unfortunately, because we now parse this separate \u0027NEWLINE\u0027 character, this"},{"line_number":46,"context_line":"fallthrough case isn\u0027t activated, but neither is the physical line check"},{"line_number":47,"context_line":"because the first token parsed still doesn\u0027t contain a new line character."},{"line_number":48,"context_line":"Instead we attempt to parse the \"line\" that the newline character is on and run"},{"line_number":49,"context_line":"logical checks on the same:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  https://github.com/PyCQA/pycodestyle/blob/2.5.0/pycodestyle.py#L2105-L2107"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_e2821000","line":49,"range":{"start_line":45,"start_character":0,"end_line":49,"end_character":27},"updated":"2019-06-12 14:40:08.000000000","message":"Reword: Unfortunately, because we now have an additional newline character to parse, one that\u0027s on a separate line to our test string no less, we run logical checks on it:","commit_id":"8f712cac5c59821b25d51d3233f9f077a95feace"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d5813aa930d43d479ae27b9b81ef8dc9fd57f507","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"  https://github.com/PyCQA/pycodestyle/blob/2.5.0/pycodestyle.py#L2114-L2116"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Unfortunately, because we now parse this separate \u0027NEWLINE\u0027 character, this"},{"line_number":46,"context_line":"fallthrough case isn\u0027t activated, but neither is the physical line check"},{"line_number":47,"context_line":"because the first token parsed still doesn\u0027t contain a new line character."},{"line_number":48,"context_line":"Instead we attempt to parse the \"line\" that the newline character is on and run"},{"line_number":49,"context_line":"logical checks on the same:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  https://github.com/PyCQA/pycodestyle/blob/2.5.0/pycodestyle.py#L2105-L2107"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_62062023","line":49,"range":{"start_line":45,"start_character":0,"end_line":49,"end_character":27},"in_reply_to":"9fb8cfa7_e2821000","updated":"2019-06-12 15:02:15.000000000","message":"Done","commit_id":"8f712cac5c59821b25d51d3233f9f077a95feace"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8a8008edf0959abcc9053b4db6a01e0571bb0772","unresolved":false,"context_lines":[{"line_number":81,"context_line":"which is something Vim, for example, won\u0027t even let you do without"},{"line_number":82,"context_line":"setting special flags - and therefore it can be reasonably ignored."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"[1] https://bugs.launchpad.net/nova/+bug/1804062"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"Change-Id: Ia597594e0469c0e83d7ad22b0678390aaebaffe7"},{"line_number":87,"context_line":"Signed-off-by: Stephen Finucane \u003csfinucan@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_228d8831","line":84,"range":{"start_line":84,"start_character":4,"end_line":84,"end_character":48},"updated":"2019-06-12 14:42:41.000000000","message":"Did you mean https://bugs.python.org/issue33899 here?","commit_id":"8f712cac5c59821b25d51d3233f9f077a95feace"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d5813aa930d43d479ae27b9b81ef8dc9fd57f507","unresolved":false,"context_lines":[{"line_number":81,"context_line":"which is something Vim, for example, won\u0027t even let you do without"},{"line_number":82,"context_line":"setting special flags - and therefore it can be reasonably ignored."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"[1] https://bugs.launchpad.net/nova/+bug/1804062"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"Change-Id: Ia597594e0469c0e83d7ad22b0678390aaebaffe7"},{"line_number":87,"context_line":"Signed-off-by: Stephen Finucane \u003csfinucan@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_a24178ab","line":84,"range":{"start_line":84,"start_character":4,"end_line":84,"end_character":48},"in_reply_to":"9fb8cfa7_228d8831","updated":"2019-06-12 15:02:15.000000000","message":"I did","commit_id":"8f712cac5c59821b25d51d3233f9f077a95feace"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4e16ff517a8ff5dab301f3294cba8eae1c913d0b","unresolved":false,"context_lines":[{"line_number":81,"context_line":"which is something Vim, for example, won\u0027t even let you do without"},{"line_number":82,"context_line":"setting special flags - and therefore it can be reasonably ignored."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"[1] https://bugs.launchpad.net/nova/+bug/1804062"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"Change-Id: Ia597594e0469c0e83d7ad22b0678390aaebaffe7"},{"line_number":87,"context_line":"Signed-off-by: Stephen Finucane \u003csfinucan@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_259ef2b8","line":84,"range":{"start_line":84,"start_character":4,"end_line":84,"end_character":48},"in_reply_to":"9fb8cfa7_a24178ab","updated":"2019-06-12 15:06:03.000000000","message":"Done","commit_id":"8f712cac5c59821b25d51d3233f9f077a95feace"}],"nova/tests/unit/test_hacking.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8a8008edf0959abcc9053b4db6a01e0571bb0772","unresolved":false,"context_lines":[{"line_number":276,"context_line":"    def _run_check(self, code, checker, filename\u003dNone):"},{"line_number":277,"context_line":"        pycodestyle.register_check(checker)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        lines \u003d textwrap.dedent(code).lstrip().splitlines(True)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        checker \u003d pycodestyle.Checker(filename\u003dfilename, lines\u003dlines)"},{"line_number":282,"context_line":"        # NOTE(sdague): the standard reporter has printing to stdout"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_e2977039","line":279,"updated":"2019-06-12 14:42:41.000000000","message":"This is hit by every single test; are we sure it\u0027s safe \u0026 sane?\n\nI guess if the suite passes, it must be okay.","commit_id":"8f712cac5c59821b25d51d3233f9f077a95feace"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4e16ff517a8ff5dab301f3294cba8eae1c913d0b","unresolved":false,"context_lines":[{"line_number":276,"context_line":"    def _run_check(self, code, checker, filename\u003dNone):"},{"line_number":277,"context_line":"        pycodestyle.register_check(checker)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        lines \u003d textwrap.dedent(code).lstrip().splitlines(True)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        checker \u003d pycodestyle.Checker(filename\u003dfilename, lines\u003dlines)"},{"line_number":282,"context_line":"        # NOTE(sdague): the standard reporter has printing to stdout"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_e520da9d","line":279,"in_reply_to":"9fb8cfa7_e2977039","updated":"2019-06-12 15:06:03.000000000","message":"Yup. It\u0027s safe to have trailing newlines. It\u0027s not so safe to have leading newlines (that throws off all our hardcoded line counts, at a minimum)","commit_id":"8f712cac5c59821b25d51d3233f9f077a95feace"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8a8008edf0959abcc9053b4db6a01e0571bb0772","unresolved":false,"context_lines":[{"line_number":581,"context_line":"    def test_check_doubled_words(self):"},{"line_number":582,"context_line":"        errors \u003d [(1, 0, \"N343\")]"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        # Artificial break to stop flake8 detecting the test !"},{"line_number":585,"context_line":"        code \u003d \"\u0027This is the\" + \" the best comment\u0027\\n\""},{"line_number":586,"context_line":"        self._assert_has_errors(code, checks.check_doubled_words,"},{"line_number":587,"context_line":"                                expected_errors\u003derrors)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_c27b4c25","line":584,"range":{"start_line":584,"start_character":0,"end_line":584,"end_character":62},"updated":"2019-06-12 14:42:41.000000000","message":"We should definitely enhance this comment describing the weirdness","commit_id":"8f712cac5c59821b25d51d3233f9f077a95feace"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4e16ff517a8ff5dab301f3294cba8eae1c913d0b","unresolved":false,"context_lines":[{"line_number":581,"context_line":"    def test_check_doubled_words(self):"},{"line_number":582,"context_line":"        errors \u003d [(1, 0, \"N343\")]"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        # Artificial break to stop flake8 detecting the test !"},{"line_number":585,"context_line":"        code \u003d \"\u0027This is the\" + \" the best comment\u0027\\n\""},{"line_number":586,"context_line":"        self._assert_has_errors(code, checks.check_doubled_words,"},{"line_number":587,"context_line":"                                expected_errors\u003derrors)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_e5a3fafe","line":584,"range":{"start_line":584,"start_character":0,"end_line":584,"end_character":62},"in_reply_to":"9fb8cfa7_c27b4c25","updated":"2019-06-12 15:06:03.000000000","message":"Done","commit_id":"8f712cac5c59821b25d51d3233f9f077a95feace"}]}
