)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"08063a75a47734cdc36210a482a5e834e0b9cc4d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Eric Harney \u003ceharney@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-06-25 14:10:37 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Don\u0027t allow \u003e4-byte Unicode characters in volume names"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"MySQL\u0027s utf8 schema only supports up to 3-byte characters."},{"line_number":10,"context_line":"Creating volumes with larger Unicode characters results in"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa32b979_c2b88278","line":7,"updated":"2015-06-25 18:45:29.000000000","message":"Looks like a 54 character topic line, https://wiki.openstack.org/wiki/GitCommitMessages says \"The first line should be limited to 50 characters ...\"\n\nPerhaps:\n    Forbid \u003e4-byte ...\nOr s/characters//","commit_id":"f66ae78238e3bbb9f043ea5cc3075998df4f25bc"}],"cinder/tests/unit/test_utils.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"08063a75a47734cdc36210a482a5e834e0b9cc4d","unresolved":false,"context_lines":[{"line_number":1512,"context_line":""},{"line_number":1513,"context_line":"    def test_convert_version_to_tuple(self):"},{"line_number":1514,"context_line":"        self.assertEqual(utils.convert_version_to_tuple(\u00276.7.0\u0027), (6, 7, 0))"},{"line_number":1515,"context_line":""},{"line_number":1516,"context_line":""},{"line_number":1517,"context_line":"class ValidateStringTestCase(test.TestCase):"},{"line_number":1518,"context_line":"    def test_validate_string_basic(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_c5596c37","line":1515,"updated":"2015-06-25 18:45:29.000000000","message":"I\u0027m interested in your thinking w.r.t. using ddt instead of loops\n(see e.g. cinder/tests/unit/volume/drivers/netapp/eseries/test_library.py) to get one central assert per test case\nwhile still avoiding code duplication.","commit_id":"f66ae78238e3bbb9f043ea5cc3075998df4f25bc"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"4f891223ff3e08ad09c99185e43cc63e4fb5b6ee","unresolved":false,"context_lines":[{"line_number":1512,"context_line":""},{"line_number":1513,"context_line":"    def test_convert_version_to_tuple(self):"},{"line_number":1514,"context_line":"        self.assertEqual(utils.convert_version_to_tuple(\u00276.7.0\u0027), (6, 7, 0))"},{"line_number":1515,"context_line":""},{"line_number":1516,"context_line":""},{"line_number":1517,"context_line":"class ValidateStringTestCase(test.TestCase):"},{"line_number":1518,"context_line":"    def test_validate_string_basic(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_c5140c4f","line":1515,"in_reply_to":"fa32b979_65f740d5","updated":"2015-06-25 19:07:54.000000000","message":"Tom pointed that out to me in one of my patches. Very slick. This looks like a perfect use case for it.","commit_id":"f66ae78238e3bbb9f043ea5cc3075998df4f25bc"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"67c9654fee79802e988442b5e550258643064962","unresolved":false,"context_lines":[{"line_number":1512,"context_line":""},{"line_number":1513,"context_line":"    def test_convert_version_to_tuple(self):"},{"line_number":1514,"context_line":"        self.assertEqual(utils.convert_version_to_tuple(\u00276.7.0\u0027), (6, 7, 0))"},{"line_number":1515,"context_line":""},{"line_number":1516,"context_line":""},{"line_number":1517,"context_line":"class ValidateStringTestCase(test.TestCase):"},{"line_number":1518,"context_line":"    def test_validate_string_basic(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_a8b19f03","line":1515,"in_reply_to":"fa32b979_c5140c4f","updated":"2015-06-25 19:18:04.000000000","message":"It should be even more useful when we want to have a base list of good and bad unicode strings to pass into different tests, so I think I\u0027ll go with it.","commit_id":"f66ae78238e3bbb9f043ea5cc3075998df4f25bc"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"4ac1af460ebd4c469c128cb607985266133b7985","unresolved":false,"context_lines":[{"line_number":1512,"context_line":""},{"line_number":1513,"context_line":"    def test_convert_version_to_tuple(self):"},{"line_number":1514,"context_line":"        self.assertEqual(utils.convert_version_to_tuple(\u00276.7.0\u0027), (6, 7, 0))"},{"line_number":1515,"context_line":""},{"line_number":1516,"context_line":""},{"line_number":1517,"context_line":"class ValidateStringTestCase(test.TestCase):"},{"line_number":1518,"context_line":"    def test_validate_string_basic(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_65f740d5","line":1515,"in_reply_to":"fa32b979_c5596c37","updated":"2015-06-25 18:49:17.000000000","message":"I didn\u0027t know that existed... I\u0027ll play with it and see.","commit_id":"f66ae78238e3bbb9f043ea5cc3075998df4f25bc"}],"cinder/utils.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f2fd0997a692a48db359b36db97d40b3c45c8e45","unresolved":false,"context_lines":[{"line_number":834,"context_line":"    if string is None:"},{"line_number":835,"context_line":"        return None"},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"    regex \u003d \u0027.*\u0027 + u\u0027[\\uffff-\\U0010FFFF]\u0027 + \u0027.*\u0027"},{"line_number":838,"context_line":"    if re.search(regex, string):"},{"line_number":839,"context_line":"        message \u003d _LE(\u0027Disallowed Unicode characters in %(name)s.\u0027)"},{"line_number":840,"context_line":"        string \u003d _LE(\u0027string\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_b6a260fb","line":837,"updated":"2015-06-25 20:05:35.000000000","message":"I switched from re.match to re.search but forgot to remove the now unneeded .* .","commit_id":"f66ae78238e3bbb9f043ea5cc3075998df4f25bc"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"0df879437c7b933647f14e8362ceb67e07c38ac5","unresolved":false,"context_lines":[{"line_number":834,"context_line":"    if string is None:"},{"line_number":835,"context_line":"        return None"},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"    regex \u003d u\u0027[\\uffff-\\U0010FFFF]\u0027"},{"line_number":838,"context_line":"    if re.search(regex, string):"},{"line_number":839,"context_line":"        message \u003d _LE(\u0027Disallowed Unicode characters in %(name)s.\u0027)"},{"line_number":840,"context_line":"        string \u003d _LE(\u0027string\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_04ae56e7","line":837,"updated":"2015-06-26 12:05:52.000000000","message":"Dunno how to do this right, but it looks like re module can\u0027t\nhandle the wide code points at the end of the range.\n\nI wonder if you can do a range for the short codepoint end\nof the spectrum instead, and do a \u0027if not re.match(regex, string).","commit_id":"53929191924d214d9944c7bcd59caee540558ea2"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"13522398c75a200c904df89bbdec0daff7d01d12","unresolved":false,"context_lines":[{"line_number":834,"context_line":"    if string is None:"},{"line_number":835,"context_line":"        return None"},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"    regex \u003d u\u0027[\\uffff-\\U0010FFFF]\u0027"},{"line_number":838,"context_line":"    if re.search(regex, string):"},{"line_number":839,"context_line":"        message \u003d _LE(\u0027Disallowed Unicode characters in %(name)s.\u0027)"},{"line_number":840,"context_line":"        string \u003d _LE(\u0027string\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_e57a4925","line":837,"in_reply_to":"fa32b979_04ae56e7","updated":"2015-06-26 14:20:43.000000000","message":"I think this is the top of the range that\u0027s actually valid characters, which is why higher codepoints don\u0027t work.","commit_id":"53929191924d214d9944c7bcd59caee540558ea2"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ec43367ea7812f09a71c6d968d51fc6dc6bac957","unresolved":false,"context_lines":[{"line_number":837,"context_line":"    regex \u003d u\u0027[\\uffff-\\U0010FFFF]\u0027"},{"line_number":838,"context_line":"    if re.search(regex, string):"},{"line_number":839,"context_line":"        message \u003d _LE(\u0027Disallowed Unicode characters in %(name)s.\u0027)"},{"line_number":840,"context_line":"        string \u003d _LE(\u0027string\u0027)"},{"line_number":841,"context_line":"        out_msg \u003d message % {\u0027name\u0027: name or string}"},{"line_number":842,"context_line":"        raise exception.InvalidInput(out_msg)"},{"line_number":843,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_163a08ce","line":840,"updated":"2015-07-06 12:25:05.000000000","message":"According to the logging guidelines, we don\u0027t use _LE/_LI/etc markers for exception messages. Should be just _(\u0027string\u0027)","commit_id":"0a464a300afea3de19e5109a52182be95b444f0e"}]}
