)]}'
{"keystone/common/sql/migrate_repo/versions/036_havana.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0dfd76f13ae3cf02dded57def91ba74d645ca1ac","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            table.create()"},{"line_number":209,"context_line":"        except Exception:"},{"line_number":210,"context_line":"            LOG.info(repr(table))"},{"line_number":211,"context_line":"            LOG.exception(\u0027Exception while creating table.\u0027)"},{"line_number":212,"context_line":"            raise"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    # Unique Constraints"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWn%2F%2F3q4%3D","line":211,"updated":"2014-04-08 20:32:58.000000000","message":"i\u0027d prefer this to be one log line using .exception()","commit_id":"47add90abc3dfd588e814e04e51a9fdb8d4cda62"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"fde7f1bfcacffb9ba93f5aec23c9fb977653e822","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            table.create()"},{"line_number":209,"context_line":"        except Exception:"},{"line_number":210,"context_line":"            LOG.info(repr(table))"},{"line_number":211,"context_line":"            LOG.exception(\u0027Exception while creating table.\u0027)"},{"line_number":212,"context_line":"            raise"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    # Unique Constraints"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F3rE%3D","line":211,"in_reply_to":"AAAAWn%2F%2F3q4%3D","updated":"2014-04-09 19:33:36.000000000","message":"If there is another patchset, I\u0027ll collapse this down to a single log line.","commit_id":"47add90abc3dfd588e814e04e51a9fdb8d4cda62"}],"keystone/tests/test_sql_upgrade.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f03974cd337a67cb4b6d90bde04c2390369afac9","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        Upgrades are run in the following order::"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"            0 -\u003e 1 -\u003e 0 -\u003e 1 -\u003e 2 -\u003e 1 -\u003e 2 -\u003e 3 -\u003e 2 -\u003e 3 ..."},{"line_number":191,"context_line":"                 ^---------^    ^---------^    ^---------^"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F16o%3D","line":190,"updated":"2014-04-10 01:33:58.000000000","message":"this isn\u0027t really what it\u0027s doing anymore.","commit_id":"47add90abc3dfd588e814e04e51a9fdb8d4cda62"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"59c1493175a3810545d4075dff47ad0750f3788f","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        Upgrades are run in the following order::"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"            0 -\u003e 1 -\u003e 0 -\u003e 1 -\u003e 2 -\u003e 1 -\u003e 2 -\u003e 3 -\u003e 2 -\u003e 3 ..."},{"line_number":191,"context_line":"                 ^---------^    ^---------^    ^---------^"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F10A%3D","line":190,"in_reply_to":"AAAAW3%2F%2F16o%3D","updated":"2014-04-10 02:03:02.000000000","message":"Fixed in next patchset.","commit_id":"47add90abc3dfd588e814e04e51a9fdb8d4cda62"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f03974cd337a67cb4b6d90bde04c2390369afac9","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def test_upgrade_add_initial_tables(self):"},{"line_number":205,"context_line":"        self.upgrade(migration_helpers.DB_INIT_VERSION + 1)"},{"line_number":206,"context_line":"        self.check_initial_tables()"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def check_initial_tables(self):"},{"line_number":209,"context_line":"        self.assertTableColumns(\u0027credential\u0027, [\u0027id\u0027, \u0027user_id\u0027, \u0027project_id\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F16U%3D","line":206,"updated":"2014-04-10 01:33:58.000000000","message":"the initial migration also creates the default domain -- there should be an assertion for that.","commit_id":"47add90abc3dfd588e814e04e51a9fdb8d4cda62"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"59c1493175a3810545d4075dff47ad0750f3788f","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def test_upgrade_add_initial_tables(self):"},{"line_number":205,"context_line":"        self.upgrade(migration_helpers.DB_INIT_VERSION + 1)"},{"line_number":206,"context_line":"        self.check_initial_tables()"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def check_initial_tables(self):"},{"line_number":209,"context_line":"        self.assertTableColumns(\u0027credential\u0027, [\u0027id\u0027, \u0027user_id\u0027, \u0027project_id\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F1z8%3D","line":206,"in_reply_to":"AAAAW3%2F%2F16U%3D","updated":"2014-04-10 02:03:02.000000000","message":"fixed in next patchset.","commit_id":"47add90abc3dfd588e814e04e51a9fdb8d4cda62"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f03974cd337a67cb4b6d90bde04c2390369afac9","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        self.upgrade(migration_helpers.DB_INIT_VERSION + 1)"},{"line_number":206,"context_line":"        self.check_initial_tables()"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def check_initial_tables(self):"},{"line_number":209,"context_line":"        self.assertTableColumns(\u0027credential\u0027, [\u0027id\u0027, \u0027user_id\u0027, \u0027project_id\u0027,"},{"line_number":210,"context_line":"                                               \u0027blob\u0027, \u0027type\u0027, \u0027extra\u0027])"},{"line_number":211,"context_line":"        self.assertTableColumns(\u0027domain\u0027, [\u0027id\u0027, \u0027name\u0027, \u0027enabled\u0027, \u0027extra\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F17c%3D","line":208,"updated":"2014-04-10 01:33:58.000000000","message":"a comment for what this is for would be useful... one thing should note is that this shouldn\u0027t change until another migration collapse.","commit_id":"47add90abc3dfd588e814e04e51a9fdb8d4cda62"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"59c1493175a3810545d4075dff47ad0750f3788f","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        self.upgrade(migration_helpers.DB_INIT_VERSION + 1)"},{"line_number":206,"context_line":"        self.check_initial_tables()"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def check_initial_tables(self):"},{"line_number":209,"context_line":"        self.assertTableColumns(\u0027credential\u0027, [\u0027id\u0027, \u0027user_id\u0027, \u0027project_id\u0027,"},{"line_number":210,"context_line":"                                               \u0027blob\u0027, \u0027type\u0027, \u0027extra\u0027])"},{"line_number":211,"context_line":"        self.assertTableColumns(\u0027domain\u0027, [\u0027id\u0027, \u0027name\u0027, \u0027enabled\u0027, \u0027extra\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F1zw%3D","line":208,"in_reply_to":"AAAAW3%2F%2F17c%3D","updated":"2014-04-10 02:03:02.000000000","message":"I\u0027ll clean this up as well and make it so we can use the same data structure for the downgrade test (259)","commit_id":"47add90abc3dfd588e814e04e51a9fdb8d4cda62"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f03974cd337a67cb4b6d90bde04c2390369afac9","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        meta.bind \u003d self.engine"},{"line_number":257,"context_line":"        meta.reflect(self.engine)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        initial_table_set \u003d set([\u0027credential\u0027, \u0027domain\u0027, \u0027endpoint\u0027, \u0027group\u0027,"},{"line_number":260,"context_line":"                                 \u0027group_domain_metadata\u0027,"},{"line_number":261,"context_line":"                                 \u0027group_project_metadata\u0027,"},{"line_number":262,"context_line":"                                 \u0027policy\u0027, \u0027project\u0027, \u0027role\u0027, \u0027service\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F17Q%3D","line":259,"updated":"2014-04-10 01:33:58.000000000","message":"this list is the same as the list in check_initial_tables -- suggest make a dict and use keys()","commit_id":"47add90abc3dfd588e814e04e51a9fdb8d4cda62"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f03974cd337a67cb4b6d90bde04c2390369afac9","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        table_set \u003d set(meta.tables.keys())"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        self.assertSetEqual(initial_table_set, table_set)"},{"line_number":271,"context_line":"        self.assertRaises(NotImplementedError, self.downgrade,"},{"line_number":272,"context_line":"                          migration_helpers.DB_INIT_VERSION)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def insert_dict(self, session, table_name, d, table\u003dNone):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F17A%3D","line":271,"updated":"2014-04-10 01:33:58.000000000","message":"add a comment why it\u0027s correct to raise here.","commit_id":"47add90abc3dfd588e814e04e51a9fdb8d4cda62"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"59c1493175a3810545d4075dff47ad0750f3788f","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        table_set \u003d set(meta.tables.keys())"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        self.assertSetEqual(initial_table_set, table_set)"},{"line_number":271,"context_line":"        self.assertRaises(NotImplementedError, self.downgrade,"},{"line_number":272,"context_line":"                          migration_helpers.DB_INIT_VERSION)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def insert_dict(self, session, table_name, d, table\u003dNone):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F1zs%3D","line":271,"in_reply_to":"AAAAW3%2F%2F17A%3D","updated":"2014-04-10 02:03:02.000000000","message":"done in next patch","commit_id":"47add90abc3dfd588e814e04e51a9fdb8d4cda62"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9c4bb435e604d9a209cc30c32ac8c40c3b072ca2","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"# NOTE(morganfainberg): This should be updated when each DB migration collapse"},{"line_number":57,"context_line":"# is done to mirror the expected structure of the DB in the format of"},{"line_number":58,"context_line":"# { \u003cDB_TABLE_NAME\u003e: [\u003cCOLUMN\u003e, \u003cCOLUMN\u003e, ...], ... }"},{"line_number":59,"context_line":"INITIAL_TABLE_STRUCTURE \u003d {"},{"line_number":60,"context_line":"    \u0027credential\u0027: ["},{"line_number":61,"context_line":"        \u0027id\u0027, \u0027user_id\u0027, \u0027project_id\u0027, \u0027blob\u0027, \u0027type\u0027, \u0027extra\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FnJc%3D","line":58,"updated":"2014-04-11 18:47:12.000000000","message":"change \"COLUMN\" to \"COLUMN_NAME\"","commit_id":"87d0e0fb3731c45ed0ee0dea83297858addfbb7c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9c4bb435e604d9a209cc30c32ac8c40c3b072ca2","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        q \u003d session.query(domain_table)"},{"line_number":299,"context_line":"        refs \u003d q.all()"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        self.assertEqual(1, len(refs))"},{"line_number":302,"context_line":"        for k in default_domain.keys():"},{"line_number":303,"context_line":"            self.assertEqual(default_domain[k], getattr(refs[0], k))"},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FnJo%3D","line":301,"updated":"2014-04-11 18:47:12.000000000","message":"there\u0027s a HasLength matcher for this: http://testtools.readthedocs.org/en/latest/for-test-authors.html#haslength","commit_id":"87d0e0fb3731c45ed0ee0dea83297858addfbb7c"}]}
