)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"3ba94fd0d1e66d7e47d6a7d8740f14507b25aec4","unresolved":false,"context_lines":[{"line_number":10,"context_line":"1. Fix error for tables with foreign key(s)."},{"line_number":11,"context_line":"2. Now work with tables contains reserved words in"},{"line_number":12,"context_line":"column names (\"key\" for example)."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Idc4dfa5006eee115f578b00d675cae1d6241ec69"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAPn%2F%2FxBI%3D","line":13,"updated":"2013-06-21 18:39:15.000000000","message":"You should add here\nFixes bug \u003cnumber\u003e","commit_id":"843742290c3110d45adfc280b0bcb3ba183cde53"}],"nova/db/sqlalchemy/utils.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c1eb8c3be04eae1b94271e01124a5a93d8f22f5c","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    uniques \u003d set(["},{"line_number":103,"context_line":"        schema.UniqueConstraint("},{"line_number":104,"context_line":"            *[getattr(table.c, c.strip().replace(\u0027\"\u0027, \u0027\u0027))"},{"line_number":105,"context_line":"              for c in cols.split(\",\")], name\u003dname"},{"line_number":106,"context_line":"        )"},{"line_number":107,"context_line":"        for name, cols in re.findall(regexp, sql_data)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fr48%3D","line":104,"updated":"2013-06-25 10:28:44.000000000","message":"c.strip(\u0027 \"\u0027) would be enough","commit_id":"ca9fbf82c9524b9e7e76b7951daf777d5a4a99a2"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0d59079a851a165620aafab7a2019d2512a86007","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    uniques \u003d set(["},{"line_number":103,"context_line":"        schema.UniqueConstraint("},{"line_number":104,"context_line":"            *[getattr(table.c, c.strip().replace(\u0027\"\u0027, \u0027\u0027))"},{"line_number":105,"context_line":"              for c in cols.split(\",\")], name\u003dname"},{"line_number":106,"context_line":"        )"},{"line_number":107,"context_line":"        for name, cols in re.findall(regexp, sql_data)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2FrvI%3D","line":104,"in_reply_to":"AAAAPn%2F%2Fr48%3D","updated":"2013-06-25 11:42:46.000000000","message":"Equivalent in this case is not c.strip(\u0027 \"\u0027) but c.strip(string.whitespace + \u0027\"\u0027), new import needed. I prefer additional insurance.","commit_id":"ca9fbf82c9524b9e7e76b7951daf777d5a4a99a2"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c1eb8c3be04eae1b94271e01124a5a93d8f22f5c","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    constraints \u003d [constraint for constraint in table.constraints"},{"line_number":132,"context_line":"                    if not constraint.name \u003d\u003d uc_name and"},{"line_number":133,"context_line":"                    not isinstance(constraint, schema.ForeignKeyConstraint)]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    new_table \u003d Table(table_name + \"__tmp__\", meta, *(columns + constraints))"},{"line_number":136,"context_line":"    new_table.create()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fr4s%3D","line":133,"updated":"2013-06-25 10:28:44.000000000","message":"I would rather you made the FK fix as a separate patch","commit_id":"ca9fbf82c9524b9e7e76b7951daf777d5a4a99a2"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0d59079a851a165620aafab7a2019d2512a86007","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    constraints \u003d [constraint for constraint in table.constraints"},{"line_number":132,"context_line":"                    if not constraint.name \u003d\u003d uc_name and"},{"line_number":133,"context_line":"                    not isinstance(constraint, schema.ForeignKeyConstraint)]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    new_table \u003d Table(table_name + \"__tmp__\", meta, *(columns + constraints))"},{"line_number":136,"context_line":"    new_table.create()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fru0%3D","line":133,"in_reply_to":"AAAAPn%2F%2Fr4s%3D","updated":"2013-06-25 11:42:46.000000000","message":"I started new patch with this two fix as dependency.","commit_id":"ca9fbf82c9524b9e7e76b7951daf777d5a4a99a2"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"3625701868802320fad222d6a172314ed3dc5ee8","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    uniques \u003d set(["},{"line_number":103,"context_line":"        schema.UniqueConstraint("},{"line_number":104,"context_line":"            *[getattr(table.c, c.strip().replace(\u0027\"\u0027, \u0027\u0027))"},{"line_number":105,"context_line":"              for c in cols.split(\",\")], name\u003dname"},{"line_number":106,"context_line":"        )"},{"line_number":107,"context_line":"        for name, cols in re.findall(regexp, sql_data)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FrjI%3D","line":104,"updated":"2013-06-25 12:50:45.000000000","message":"what do you think about c.strip(\u0027 \"\u0027) here?","commit_id":"cc9df72aaa8548fedbdaa3b3497c925014c54dbc"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"70514ef0500a278fc3846e0d247b818a4d3b029e","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    uniques \u003d set(["},{"line_number":103,"context_line":"        schema.UniqueConstraint("},{"line_number":104,"context_line":"            *[getattr(table.c, c.strip().replace(\u0027\"\u0027, \u0027\u0027))"},{"line_number":105,"context_line":"              for c in cols.split(\",\")], name\u003dname"},{"line_number":106,"context_line":"        )"},{"line_number":107,"context_line":"        for name, cols in re.findall(regexp, sql_data)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FnlI%3D","line":104,"in_reply_to":"AAAAPn%2F%2Foio%3D","updated":"2013-06-26 16:35:40.000000000","message":"Done","commit_id":"cc9df72aaa8548fedbdaa3b3497c925014c54dbc"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"170834746c5ff571bf6bb5bc6b0cc0006935163c","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    uniques \u003d set(["},{"line_number":103,"context_line":"        schema.UniqueConstraint("},{"line_number":104,"context_line":"            *[getattr(table.c, c.strip().replace(\u0027\"\u0027, \u0027\u0027))"},{"line_number":105,"context_line":"              for c in cols.split(\",\")], name\u003dname"},{"line_number":106,"context_line":"        )"},{"line_number":107,"context_line":"        for name, cols in re.findall(regexp, sql_data)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2Foio%3D","line":104,"in_reply_to":"AAAAPn%2F%2FolA%3D","updated":"2013-06-26 10:32:08.000000000","message":"@Victor no way!\n\n@Yuriy I actually believe no \\t, \\n, \\r are possible there. I\u0027m ok with your solution though.","commit_id":"cc9df72aaa8548fedbdaa3b3497c925014c54dbc"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"70514ef0500a278fc3846e0d247b818a4d3b029e","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    uniques \u003d set(["},{"line_number":103,"context_line":"        schema.UniqueConstraint("},{"line_number":104,"context_line":"            *[getattr(table.c, c.strip().replace(\u0027\"\u0027, \u0027\u0027))"},{"line_number":105,"context_line":"              for c in cols.split(\",\")], name\u003dname"},{"line_number":106,"context_line":"        )"},{"line_number":107,"context_line":"        for name, cols in re.findall(regexp, sql_data)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FnlM%3D","line":104,"in_reply_to":"AAAAPn%2F%2FolA%3D","updated":"2013-06-26 16:35:40.000000000","message":"c.strip(\u0027 \"\u0027), done","commit_id":"cc9df72aaa8548fedbdaa3b3497c925014c54dbc"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"78647fdfbdd3b07b7153298ed13ba854a60cfead","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    uniques \u003d set(["},{"line_number":103,"context_line":"        schema.UniqueConstraint("},{"line_number":104,"context_line":"            *[getattr(table.c, c.strip().replace(\u0027\"\u0027, \u0027\u0027))"},{"line_number":105,"context_line":"              for c in cols.split(\",\")], name\u003dname"},{"line_number":106,"context_line":"        )"},{"line_number":107,"context_line":"        for name, cols in re.findall(regexp, sql_data)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FolA%3D","line":104,"in_reply_to":"AAAAPn%2F%2FqzA%3D","updated":"2013-06-26 10:12:20.000000000","message":"ok. What do you think about c.strip(\u0027\\t\\n\\x0b\\x0c\\r  \"\u0027) here? :)","commit_id":"cc9df72aaa8548fedbdaa3b3497c925014c54dbc"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"239a83e8c59242ef78d19f55816003eb2dbfce4d","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    uniques \u003d set(["},{"line_number":103,"context_line":"        schema.UniqueConstraint("},{"line_number":104,"context_line":"            *[getattr(table.c, c.strip().replace(\u0027\"\u0027, \u0027\u0027))"},{"line_number":105,"context_line":"              for c in cols.split(\",\")], name\u003dname"},{"line_number":106,"context_line":"        )"},{"line_number":107,"context_line":"        for name, cols in re.findall(regexp, sql_data)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FqzA%3D","line":104,"in_reply_to":"AAAAPn%2F%2FrjI%3D","updated":"2013-06-25 16:10:34.000000000","message":"Answer posted early https://review.openstack.org/#/c/33954/3/nova/db/sqlalchemy/utils.py","commit_id":"cc9df72aaa8548fedbdaa3b3497c925014c54dbc"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"70514ef0500a278fc3846e0d247b818a4d3b029e","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    uniques \u003d set(["},{"line_number":103,"context_line":"        schema.UniqueConstraint("},{"line_number":104,"context_line":"            *[getattr(table.c, c.strip().replace(\u0027\"\u0027, \u0027\u0027))"},{"line_number":105,"context_line":"              for c in cols.split(\",\")], name\u003dname"},{"line_number":106,"context_line":"        )"},{"line_number":107,"context_line":"        for name, cols in re.findall(regexp, sql_data)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2FnlU%3D","line":104,"in_reply_to":"AAAAPn%2F%2FrjI%3D","updated":"2013-06-26 16:35:40.000000000","message":"Done","commit_id":"cc9df72aaa8548fedbdaa3b3497c925014c54dbc"}],"nova/tests/db/test_migration_utils.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"3ba94fd0d1e66d7e47d6a7d8740f14507b25aec4","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        self.assertTrue(isinstance(table.c.foo.type, NullType))"},{"line_number":517,"context_line":"        self.assertTrue(isinstance(table.c.deleted.type, Boolean))"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    @test.testtools.skip(\"bug 1189462\")"},{"line_number":520,"context_line":"    def test_drop_unique_constraint_in_sqlite_fk_recreate(self):"},{"line_number":521,"context_line":"        engine \u003d self.engines[\u0027sqlite\u0027]"},{"line_number":522,"context_line":"        meta \u003d MetaData()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FxBM%3D","line":519,"updated":"2013-06-21 18:39:15.000000000","message":"This test should be runed and should pass","commit_id":"843742290c3110d45adfc280b0bcb3ba183cde53"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c1eb8c3be04eae1b94271e01124a5a93d8f22f5c","unresolved":false,"context_lines":[{"line_number":530,"context_line":"                      Column(\u0027bar\u0027, Integer, ForeignKey(\"table0.id\")),"},{"line_number":531,"context_line":"                      UniqueConstraint(\u0027baz\u0027, name\u003d\u0027constr1\u0027))"},{"line_number":532,"context_line":"        table.create()"},{"line_number":533,"context_line":"        utils.drop_unique_constraint(engine, table_name, \u0027constr1\u0027, \u0027baz\u0027)"},{"line_number":534,"context_line":"        insp \u003d reflection.Inspector.from_engine(engine)"},{"line_number":535,"context_line":"        f_keys \u003d insp.get_foreign_keys(table_name)"},{"line_number":536,"context_line":"        self.assertEqual(len(f_keys), 1)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2Fr14%3D","line":533,"updated":"2013-06-25 10:28:44.000000000","message":"nit: put an empty line here to improve readability","commit_id":"ca9fbf82c9524b9e7e76b7951daf777d5a4a99a2"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0d59079a851a165620aafab7a2019d2512a86007","unresolved":false,"context_lines":[{"line_number":530,"context_line":"                      Column(\u0027bar\u0027, Integer, ForeignKey(\"table0.id\")),"},{"line_number":531,"context_line":"                      UniqueConstraint(\u0027baz\u0027, name\u003d\u0027constr1\u0027))"},{"line_number":532,"context_line":"        table.create()"},{"line_number":533,"context_line":"        utils.drop_unique_constraint(engine, table_name, \u0027constr1\u0027, \u0027baz\u0027)"},{"line_number":534,"context_line":"        insp \u003d reflection.Inspector.from_engine(engine)"},{"line_number":535,"context_line":"        f_keys \u003d insp.get_foreign_keys(table_name)"},{"line_number":536,"context_line":"        self.assertEqual(len(f_keys), 1)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2FrsU%3D","line":533,"in_reply_to":"AAAAPn%2F%2Fr14%3D","updated":"2013-06-25 11:42:46.000000000","message":"Done","commit_id":"ca9fbf82c9524b9e7e76b7951daf777d5a4a99a2"}]}
