)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"1b36b17aa0a0d5b72873aaaea9e7d1a083d730c7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Henry Nash \u003chenryn@linux.vnet.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-08-22 16:40:22 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Modify sql banned opreations for each of the new repos"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch covers all the regular table and column operations"},{"line_number":10,"context_line":"across the four repos. It does not, however, check for triggers"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1ac06dbe_f06664b9","line":7,"updated":"2016-08-23 18:21:20.000000000","message":"operations","commit_id":"83474bbed017663f7114d5254ced8e3e87de9465"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"506182c54efeab268969b2e507cbe9cca3a67242","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Modify sql banned operations for each of the new repos"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch covers all the regular table and column operations"},{"line_number":10,"context_line":"across the four repos. It does not, however, check for triggers"},{"line_number":11,"context_line":"and indexes - which will be done in a separate patch."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1ac06dbe_8db5f7d1","line":9,"range":{"start_line":9,"start_character":18,"end_line":9,"end_character":61},"updated":"2016-08-25 02:25:27.000000000","message":"It does not cover updates","commit_id":"a0934dbc87ff88554c9673d4e3240aaa9a8caf6c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"9b7bdf881560e2c25a5e577a25dec517611078ee","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Modify sql banned operations for each of the new repos"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch covers all the regular table and column operations"},{"line_number":10,"context_line":"across the four repos. It does not, however, check for triggers"},{"line_number":11,"context_line":"and indexes - which will be done in a separate patch."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1ac06dbe_7181568f","line":9,"range":{"start_line":9,"start_character":18,"end_line":9,"end_character":61},"in_reply_to":"1ac06dbe_8db5f7d1","updated":"2016-08-25 12:38:02.000000000","message":"Done","commit_id":"a0934dbc87ff88554c9673d4e3240aaa9a8caf6c"}],"keystone/tests/unit/test_sql_banned_operations.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"55a92182aa08fe19fa875bc2e7bf929240751839","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def setUp(self):"},{"line_number":55,"context_line":"        super(BannedDBSchemaOperations, self).setUp()"},{"line_number":56,"context_line":"        explode_lambda \u003d {"},{"line_number":57,"context_line":"            \u0027Table.create\u0027: lambda *a, **k: self._explode("},{"line_number":58,"context_line":"                \u0027Table.create\u0027, self._migration_repo),"},{"line_number":59,"context_line":"            \u0027Table.alter\u0027: lambda *a, **k: self._explode("},{"line_number":60,"context_line":"                \u0027Table.alter\u0027, self._migration_repo),"},{"line_number":61,"context_line":"            \u0027Table.drop\u0027: lambda *a, **k: self._explode("},{"line_number":62,"context_line":"                \u0027Table.drop\u0027, self._migration_repo),"},{"line_number":63,"context_line":"            \u0027Table.insert\u0027: lambda *a, **k: self._explode("},{"line_number":64,"context_line":"                \u0027Table.insert\u0027, self._migration_repo),"},{"line_number":65,"context_line":"            \u0027Table.update\u0027: lambda *a, **k: self._explode("},{"line_number":66,"context_line":"                \u0027Table.update\u0027, self._migration_repo),"},{"line_number":67,"context_line":"            \u0027Table.delete\u0027: lambda *a, **k: self._explode("},{"line_number":68,"context_line":"                \u0027Table.delete\u0027, self._migration_repo),"},{"line_number":69,"context_line":"            \u0027Column.create\u0027: lambda *a, **k: self._explode("},{"line_number":70,"context_line":"                \u0027Column.create\u0027, self._migration_repo),"},{"line_number":71,"context_line":"            \u0027Column.alter\u0027: lambda *a, **k: self._explode("},{"line_number":72,"context_line":"                \u0027Column.alter\u0027, self._migration_repo),"},{"line_number":73,"context_line":"            \u0027Column.drop\u0027: lambda *a, **k: self._explode("},{"line_number":74,"context_line":"                \u0027Column.drop\u0027, self._migration_repo)"},{"line_number":75,"context_line":"        }"},{"line_number":76,"context_line":"        for resource in self._banned_ops:"},{"line_number":77,"context_line":"            for op in self._banned_ops[resource]:"},{"line_number":78,"context_line":"                resource_op \u003d \u0027%(resource)s.%(op)s\u0027 % {"},{"line_number":79,"context_line":"                    \u0027resource\u0027: resource, \u0027op\u0027: op}"},{"line_number":80,"context_line":"                self.useFixture(fixtures.MonkeyPatch("},{"line_number":81,"context_line":"                    \u0027sqlalchemy.%s\u0027 % resource_op,"},{"line_number":82,"context_line":"                    explode_lambda[resource_op]))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class TestBannedDBSchemaOperations(testtools.TestCase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_8ff48287","line":82,"range":{"start_line":56,"start_character":0,"end_line":82,"end_character":49},"updated":"2016-08-22 17:36:49.000000000","message":"So I\u0027d welcome ideas on how to do this better. What you can\u0027t do is the following:\n\n        for resource in self._banned_ops:\n            for op in self._banned_ops[resource]:\n                resource_op \u003d \u0027%(resource)s.%(op)s\u0027 % {\n                    \u0027resource\u0027: resource, \u0027op\u0027: op}\n                self.useFixture(fixtures.MonkeyPatch(\n                    \u0027sqlalchemy.%s\u0027 % resource_op,\n                    lambda *a, **k: self._explode(resource_op, self._migration_repo))\n\n...since resource_op changes after you time you set up each monkey patch...","commit_id":"83474bbed017663f7114d5254ced8e3e87de9465"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"90b76bbcbabeb183d4b4a57a898b4c196b3bdcc7","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    # NOTE(henry-nash): we should include Table update here as well, but this"},{"line_number":222,"context_line":"    # causes the update of the migration version to appear as a banned"},{"line_number":223,"context_line":"    # operation!"},{"line_number":224,"context_line":"    banned_ops \u003d {\u0027Table\u0027: [\u0027alter\u0027, \u0027drop\u0027, \u0027insert\u0027, \u0027delete\u0027],"},{"line_number":225,"context_line":"                  \u0027Column\u0027: [\u0027alter\u0027, \u0027drop\u0027]}"},{"line_number":226,"context_line":"    exceptions \u003d ["},{"line_number":227,"context_line":"        # NOTE(xek, henry-nash): Reviewers: DO NOT ALLOW THINGS TO BE ADDED"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_c915439c","line":224,"updated":"2016-08-24 16:42:44.000000000","message":"update should be banned here as well, as that\u0027s always a data migration.","commit_id":"23d544bcd7d9a16b10d11a10de2c868daad6c67e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"904733ca9edad0c36a2d2e9c618ee94781b579b6","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    # NOTE(henry-nash): we should include Table update here as well, but this"},{"line_number":222,"context_line":"    # causes the update of the migration version to appear as a banned"},{"line_number":223,"context_line":"    # operation!"},{"line_number":224,"context_line":"    banned_ops \u003d {\u0027Table\u0027: [\u0027alter\u0027, \u0027drop\u0027, \u0027insert\u0027, \u0027delete\u0027],"},{"line_number":225,"context_line":"                  \u0027Column\u0027: [\u0027alter\u0027, \u0027drop\u0027]}"},{"line_number":226,"context_line":"    exceptions \u003d ["},{"line_number":227,"context_line":"        # NOTE(xek, henry-nash): Reviewers: DO NOT ALLOW THINGS TO BE ADDED"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_b1174e53","line":224,"in_reply_to":"1ac06dbe_02ff1635","updated":"2016-08-25 12:38:35.000000000","message":"Done","commit_id":"23d544bcd7d9a16b10d11a10de2c868daad6c67e"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"cf7101dbcbfd3cc459e76630adb1915b0180d7ba","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    # NOTE(henry-nash): we should include Table update here as well, but this"},{"line_number":222,"context_line":"    # causes the update of the migration version to appear as a banned"},{"line_number":223,"context_line":"    # operation!"},{"line_number":224,"context_line":"    banned_ops \u003d {\u0027Table\u0027: [\u0027alter\u0027, \u0027drop\u0027, \u0027insert\u0027, \u0027delete\u0027],"},{"line_number":225,"context_line":"                  \u0027Column\u0027: [\u0027alter\u0027, \u0027drop\u0027]}"},{"line_number":226,"context_line":"    exceptions \u003d ["},{"line_number":227,"context_line":"        # NOTE(xek, henry-nash): Reviewers: DO NOT ALLOW THINGS TO BE ADDED"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_02ff1635","line":224,"in_reply_to":"1ac06dbe_109f69b5","updated":"2016-08-25 02:06:18.000000000","message":"So perhaps we should find a way to allow update only of the migration version ? If we want to merge this and fix that later, I\u0027d put a FIXME or TODO note rather than just NOTE.","commit_id":"23d544bcd7d9a16b10d11a10de2c868daad6c67e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"7b49843a8d6545b825107f058f40ccc526f34169","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    # NOTE(henry-nash): we should include Table update here as well, but this"},{"line_number":222,"context_line":"    # causes the update of the migration version to appear as a banned"},{"line_number":223,"context_line":"    # operation!"},{"line_number":224,"context_line":"    banned_ops \u003d {\u0027Table\u0027: [\u0027alter\u0027, \u0027drop\u0027, \u0027insert\u0027, \u0027delete\u0027],"},{"line_number":225,"context_line":"                  \u0027Column\u0027: [\u0027alter\u0027, \u0027drop\u0027]}"},{"line_number":226,"context_line":"    exceptions \u003d ["},{"line_number":227,"context_line":"        # NOTE(xek, henry-nash): Reviewers: DO NOT ALLOW THINGS TO BE ADDED"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_109f69b5","line":224,"in_reply_to":"1ac06dbe_c915439c","updated":"2016-08-24 21:38:08.000000000","message":"see the comment above!!","commit_id":"23d544bcd7d9a16b10d11a10de2c868daad6c67e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"90b76bbcbabeb183d4b4a57a898b4c196b3bdcc7","unresolved":false,"context_lines":[{"line_number":252,"context_line":"    migrate_file \u003d data_migration_repo.__file__"},{"line_number":253,"context_line":"    first_version \u003d 1"},{"line_number":254,"context_line":"    banned_ops \u003d {\u0027Table\u0027: [\u0027create\u0027, \u0027alter\u0027, \u0027drop\u0027],"},{"line_number":255,"context_line":"                  \u0027Column\u0027: [\u0027create\u0027, \u0027alter\u0027, \u0027drop\u0027]}"},{"line_number":256,"context_line":"    exceptions \u003d ["},{"line_number":257,"context_line":"        # NOTE(xek, henry-nash): Reviewers: DO NOT ALLOW THINGS TO BE ADDED"},{"line_number":258,"context_line":"        # HERE UNLESS JUSTIFICATION CAN BE PROVIDED AS TO WHY THIS WILL NOT"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_84b5f232","line":255,"updated":"2016-08-24 16:42:44.000000000","message":"++","commit_id":"23d544bcd7d9a16b10d11a10de2c868daad6c67e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"90b76bbcbabeb183d4b4a57a898b4c196b3bdcc7","unresolved":false,"context_lines":[{"line_number":291,"context_line":"    # causes the update of the migration version to appear as a banned"},{"line_number":292,"context_line":"    # operation!"},{"line_number":293,"context_line":"    banned_ops \u003d {\u0027Table\u0027: [\u0027create\u0027, \u0027insert\u0027, \u0027delete\u0027],"},{"line_number":294,"context_line":"                  \u0027Column\u0027: [\u0027create\u0027]}"},{"line_number":295,"context_line":"    exceptions \u003d ["},{"line_number":296,"context_line":"        # NOTE(xek, henry-nash): Reviewers: DO NOT ALLOW THINGS TO BE ADDED"},{"line_number":297,"context_line":"        # HERE UNLESS JUSTIFICATION CAN BE PROVIDED AS TO WHY THIS WILL NOT"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_e4e78644","line":294,"updated":"2016-08-24 16:42:44.000000000","message":"Table update should be included here","commit_id":"23d544bcd7d9a16b10d11a10de2c868daad6c67e"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"90b76bbcbabeb183d4b4a57a898b4c196b3bdcc7","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"class TestKeystoneContractSchemaMigrationsSQLite("},{"line_number":321,"context_line":"        TestKeystoneContractSchemaMigrations, test_base.DbTestCase):"},{"line_number":322,"context_line":"    # In Sqlite an alter will appear as a create, so if we check for creates"},{"line_number":323,"context_line":"    # we will get false positives."},{"line_number":324,"context_line":"    def setUp(self):"},{"line_number":325,"context_line":"        super(TestKeystoneContractSchemaMigrationsSQLite, self).setUp()"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_04ce22b4","line":322,"updated":"2016-08-24 16:42:44.000000000","message":"A table alter in sqlite is a dance of Table CREATE TABLE x, INSERT INTO x, DROP TABLE y, ALTER TABLE x RENAME TO y.","commit_id":"23d544bcd7d9a16b10d11a10de2c868daad6c67e"}]}
