)]}'
{"nova/tests/unit/db/api/test_migrations.py":[{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"4c386660589ac4062fd81f30c2bc1c845ac9f549","unresolved":true,"context_lines":[{"line_number":248,"context_line":"            script \u003d alembic_script.ScriptDirectory.from_config(self.config)"},{"line_number":249,"context_line":"            # for some reason, \u0027walk_revisions\u0027 gives us the revisions in"},{"line_number":250,"context_line":"            # reverse chronological order so we have to invert this"},{"line_number":251,"context_line":"            revisions \u003d reversed([x.revision for x in script.walk_revisions()])"},{"line_number":252,"context_line":"            for revision in revisions:"},{"line_number":253,"context_line":"                LOG.info(\u0027Testing revision %s\u0027, revision)"},{"line_number":254,"context_line":"                self._migrate_up(connection, revision)"}],"source_content_type":"text/x-python","patch_set":1,"id":"015ad89a_3b9fb417","line":251,"range":{"start_line":251,"start_character":12,"end_line":251,"end_character":79},"updated":"2021-09-22 10:17:22.000000000","message":"Can you throw in an assert here to ensure that the first revision is equal to the expected base?","commit_id":"3e166871500c0f1c69c367a65c4be145eb0df997"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d5584b8d3c69fdcfa1eee0dceb3027d8db2d9775","unresolved":false,"context_lines":[{"line_number":248,"context_line":"            script \u003d alembic_script.ScriptDirectory.from_config(self.config)"},{"line_number":249,"context_line":"            # for some reason, \u0027walk_revisions\u0027 gives us the revisions in"},{"line_number":250,"context_line":"            # reverse chronological order so we have to invert this"},{"line_number":251,"context_line":"            revisions \u003d reversed([x.revision for x in script.walk_revisions()])"},{"line_number":252,"context_line":"            for revision in revisions:"},{"line_number":253,"context_line":"                LOG.info(\u0027Testing revision %s\u0027, revision)"},{"line_number":254,"context_line":"                self._migrate_up(connection, revision)"}],"source_content_type":"text/x-python","patch_set":1,"id":"2033d212_c9d389a2","line":251,"range":{"start_line":251,"start_character":12,"end_line":251,"end_character":79},"in_reply_to":"015ad89a_3b9fb417","updated":"2021-09-24 10:07:55.000000000","message":"Done","commit_id":"3e166871500c0f1c69c367a65c4be145eb0df997"}],"nova/tests/unit/db/main/test_migrations.py":[{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"4c386660589ac4062fd81f30c2bc1c845ac9f549","unresolved":true,"context_lines":[{"line_number":22,"context_line":"For the opportunistic testing you need to set up db\u0027s named \u0027openstack_citest\u0027"},{"line_number":23,"context_line":"with user \u0027openstack_citest\u0027 and password \u0027openstack_citest\u0027 on localhost. The"},{"line_number":24,"context_line":"test will then use that db and u/p combo to run the tests."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"For postgres on Ubuntu this can be done with the following commands::"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"| sudo -u postgres psql"},{"line_number":29,"context_line":"| postgres\u003d# create user openstack_citest with createdb login password"},{"line_number":30,"context_line":"|       \u0027openstack_citest\u0027;"},{"line_number":31,"context_line":"| postgres\u003d# create database openstack_citest with owner openstack_citest;"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"\"\"\""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df0669c4_0ed4bc25","line":31,"range":{"start_line":25,"start_character":0,"end_line":31,"end_character":74},"updated":"2021-09-22 10:17:22.000000000","message":"supernit - you may as well point at the ``tools/test-setup.sh`` CI script.","commit_id":"3e166871500c0f1c69c367a65c4be145eb0df997"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d5584b8d3c69fdcfa1eee0dceb3027d8db2d9775","unresolved":false,"context_lines":[{"line_number":22,"context_line":"For the opportunistic testing you need to set up db\u0027s named \u0027openstack_citest\u0027"},{"line_number":23,"context_line":"with user \u0027openstack_citest\u0027 and password \u0027openstack_citest\u0027 on localhost. The"},{"line_number":24,"context_line":"test will then use that db and u/p combo to run the tests."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"For postgres on Ubuntu this can be done with the following commands::"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"| sudo -u postgres psql"},{"line_number":29,"context_line":"| postgres\u003d# create user openstack_citest with createdb login password"},{"line_number":30,"context_line":"|       \u0027openstack_citest\u0027;"},{"line_number":31,"context_line":"| postgres\u003d# create database openstack_citest with owner openstack_citest;"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"\"\"\""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"a317283a_0a1e6ae6","line":31,"range":{"start_line":25,"start_character":0,"end_line":31,"end_character":74},"in_reply_to":"df0669c4_0ed4bc25","updated":"2021-09-24 10:07:55.000000000","message":"Done (in a separate change)","commit_id":"3e166871500c0f1c69c367a65c4be145eb0df997"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"4c386660589ac4062fd81f30c2bc1c845ac9f549","unresolved":true,"context_lines":[{"line_number":251,"context_line":"            script \u003d alembic_script.ScriptDirectory.from_config(self.config)"},{"line_number":252,"context_line":"            # for some reason, \u0027walk_revisions\u0027 gives us the revisions in"},{"line_number":253,"context_line":"            # reverse chronological order so we have to invert this"},{"line_number":254,"context_line":"            revisions \u003d reversed([x.revision for x in script.walk_revisions()])"},{"line_number":255,"context_line":"            for revision in revisions:"},{"line_number":256,"context_line":"                LOG.info(\u0027Testing revision %s\u0027, revision)"},{"line_number":257,"context_line":"                self._migrate_up(connection, revision)"}],"source_content_type":"text/x-python","patch_set":1,"id":"565b2e2f_beacf7ee","line":254,"range":{"start_line":254,"start_character":12,"end_line":254,"end_character":79},"updated":"2021-09-22 10:17:22.000000000","message":"LGTM using the change on top to test this:\n\n  -\u003e for revision in revisions:\n  (Pdb) x \u003d list(revisions)\n  (Pdb) x[0]\n  \u00278f2f1571d55b\u0027\n  (Pdb) x[1]\n  \u002716f1fbcab42b\u0027\n  (Pdb) script.get_current_head()\n  \u002716f1fbcab42b\u0027\n  (Pdb) script.get_base()\n  \u00278f2f1571d55b\u0027\n\nAgain would be useful to assert that we get the expected base / self.init_version from this first revision here.","commit_id":"3e166871500c0f1c69c367a65c4be145eb0df997"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d5584b8d3c69fdcfa1eee0dceb3027d8db2d9775","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            script \u003d alembic_script.ScriptDirectory.from_config(self.config)"},{"line_number":252,"context_line":"            # for some reason, \u0027walk_revisions\u0027 gives us the revisions in"},{"line_number":253,"context_line":"            # reverse chronological order so we have to invert this"},{"line_number":254,"context_line":"            revisions \u003d reversed([x.revision for x in script.walk_revisions()])"},{"line_number":255,"context_line":"            for revision in revisions:"},{"line_number":256,"context_line":"                LOG.info(\u0027Testing revision %s\u0027, revision)"},{"line_number":257,"context_line":"                self._migrate_up(connection, revision)"}],"source_content_type":"text/x-python","patch_set":1,"id":"6a5a49b3_b48fd74e","line":254,"range":{"start_line":254,"start_character":12,"end_line":254,"end_character":79},"in_reply_to":"565b2e2f_beacf7ee","updated":"2021-09-24 10:07:55.000000000","message":"Done","commit_id":"3e166871500c0f1c69c367a65c4be145eb0df997"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"4c386660589ac4062fd81f30c2bc1c845ac9f549","unresolved":true,"context_lines":[{"line_number":288,"context_line":"    FIXTURE \u003d test_fixtures.PostgresqlOpportunisticFixture"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"class ProjectTestCase(test.NoDBTestCase):"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def test_no_migrations_have_downgrade(self):"},{"line_number":294,"context_line":"        topdir \u003d os.path.normpath(os.path.dirname(__file__) + \u0027/../../../\u0027)"},{"line_number":295,"context_line":"        # Walk both the nova_api and nova (cell) database migrations."},{"line_number":296,"context_line":"        includes_downgrade \u003d []"},{"line_number":297,"context_line":"        for directory in ("},{"line_number":298,"context_line":"            os.path.join(topdir, \u0027db\u0027, \u0027main\u0027, \u0027legacy_migrations\u0027),"},{"line_number":299,"context_line":"            os.path.join(topdir, \u0027db\u0027, \u0027api\u0027, \u0027legacy_migrations\u0027),"},{"line_number":300,"context_line":"        ):"},{"line_number":301,"context_line":"            py_glob \u003d os.path.join(directory, \u0027versions\u0027, \u0027*.py\u0027)"},{"line_number":302,"context_line":"            for path in glob.iglob(py_glob):"},{"line_number":303,"context_line":"                has_upgrade \u003d False"},{"line_number":304,"context_line":"                has_downgrade \u003d False"},{"line_number":305,"context_line":"                with open(path, \"r\") as f:"},{"line_number":306,"context_line":"                    for line in f:"},{"line_number":307,"context_line":"                        if \u0027def upgrade(\u0027 in line:"},{"line_number":308,"context_line":"                            has_upgrade \u003d True"},{"line_number":309,"context_line":"                        if \u0027def downgrade(\u0027 in line:"},{"line_number":310,"context_line":"                            has_downgrade \u003d True"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"                    if has_upgrade and has_downgrade:"},{"line_number":313,"context_line":"                        fname \u003d os.path.basename(path)"},{"line_number":314,"context_line":"                        includes_downgrade.append(fname)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        helpful_msg \u003d ("},{"line_number":317,"context_line":"            \"The following migrations have a downgrade \""},{"line_number":318,"context_line":"            \"which is not supported:\""},{"line_number":319,"context_line":"            \"\\n\\t%s\" % \u0027\\n\\t\u0027.join(sorted(includes_downgrade)))"},{"line_number":320,"context_line":"        self.assertFalse(includes_downgrade, helpful_msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"edc69e14_aacd3930","line":320,"range":{"start_line":291,"start_character":0,"end_line":320,"end_character":57},"updated":"2021-09-22 10:17:22.000000000","message":"supernit - shouldn\u0027t this live in nova.tests.unit.db.test_migration as covering both the api and main dbs?","commit_id":"3e166871500c0f1c69c367a65c4be145eb0df997"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d5584b8d3c69fdcfa1eee0dceb3027d8db2d9775","unresolved":false,"context_lines":[{"line_number":288,"context_line":"    FIXTURE \u003d test_fixtures.PostgresqlOpportunisticFixture"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"class ProjectTestCase(test.NoDBTestCase):"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    def test_no_migrations_have_downgrade(self):"},{"line_number":294,"context_line":"        topdir \u003d os.path.normpath(os.path.dirname(__file__) + \u0027/../../../\u0027)"},{"line_number":295,"context_line":"        # Walk both the nova_api and nova (cell) database migrations."},{"line_number":296,"context_line":"        includes_downgrade \u003d []"},{"line_number":297,"context_line":"        for directory in ("},{"line_number":298,"context_line":"            os.path.join(topdir, \u0027db\u0027, \u0027main\u0027, \u0027legacy_migrations\u0027),"},{"line_number":299,"context_line":"            os.path.join(topdir, \u0027db\u0027, \u0027api\u0027, \u0027legacy_migrations\u0027),"},{"line_number":300,"context_line":"        ):"},{"line_number":301,"context_line":"            py_glob \u003d os.path.join(directory, \u0027versions\u0027, \u0027*.py\u0027)"},{"line_number":302,"context_line":"            for path in glob.iglob(py_glob):"},{"line_number":303,"context_line":"                has_upgrade \u003d False"},{"line_number":304,"context_line":"                has_downgrade \u003d False"},{"line_number":305,"context_line":"                with open(path, \"r\") as f:"},{"line_number":306,"context_line":"                    for line in f:"},{"line_number":307,"context_line":"                        if \u0027def upgrade(\u0027 in line:"},{"line_number":308,"context_line":"                            has_upgrade \u003d True"},{"line_number":309,"context_line":"                        if \u0027def downgrade(\u0027 in line:"},{"line_number":310,"context_line":"                            has_downgrade \u003d True"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"                    if has_upgrade and has_downgrade:"},{"line_number":313,"context_line":"                        fname \u003d os.path.basename(path)"},{"line_number":314,"context_line":"                        includes_downgrade.append(fname)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        helpful_msg \u003d ("},{"line_number":317,"context_line":"            \"The following migrations have a downgrade \""},{"line_number":318,"context_line":"            \"which is not supported:\""},{"line_number":319,"context_line":"            \"\\n\\t%s\" % \u0027\\n\\t\u0027.join(sorted(includes_downgrade)))"},{"line_number":320,"context_line":"        self.assertFalse(includes_downgrade, helpful_msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"cb9fcf97_4519410d","line":320,"range":{"start_line":291,"start_character":0,"end_line":320,"end_character":57},"in_reply_to":"edc69e14_aacd3930","updated":"2021-09-24 10:07:55.000000000","message":"Done (in a separate change)","commit_id":"3e166871500c0f1c69c367a65c4be145eb0df997"}]}
