)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"15d54c73aa6286c858aa45290775ab71fce90b88","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Specifying no service or sub-project will cause neutron-db-manage to"},{"line_number":21,"context_line":"run the command on neutron and all installed sub-projects."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"To run a command on core neutron only, specify --neutron_only."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Partial-Bug: #1470625"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3a50d1a3_f48bdc66","line":23,"updated":"2015-07-30 14:49:38.000000000","message":"It\u0027s now invalid.","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"e73576f88a9a68c68d4c5f863b7a69518868bd78","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Specifying no service or sub-project will cause neutron-db-manage to"},{"line_number":21,"context_line":"run the command on neutron and all installed sub-projects."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"To run a command on core neutron only, specify --neutron_only."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Partial-Bug: #1470625"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"1a4dcd0f_6cd71024","line":23,"in_reply_to":"3a50d1a3_f48bdc66","updated":"2015-08-08 23:36:20.000000000","message":"Done","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"23d37a57aaad048ab052c4005d1ce663aa49f695","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Specifying no service or sub-project will cause neutron-db-manage to"},{"line_number":21,"context_line":"run the command on neutron and all installed sub-projects."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Added devref for alembic migrations."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Partial-Bug: #1471333"},{"line_number":26,"context_line":"Partial-Bug: #1470625"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"1a4dcd0f_e3e4efa8","line":23,"updated":"2015-08-12 13:54:51.000000000","message":"+++","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"}],"doc/source/devref/alembic_migrations.rst":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"23d37a57aaad048ab052c4005d1ce663aa49f695","unresolved":false,"context_lines":[{"line_number":45,"context_line":"neutron service itself. In a deployment this often means passing multiple"},{"line_number":46,"context_line":"``--config-file`` options, for example::"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":" neutron-db-manage --config-file /path/to/neutron.conf --config-file /path/to/plugin/config.ini \u003c...commands...\u003e"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"When giving examples of using the wrapper, repeating this long-winded argument"},{"line_number":51,"context_line":"list obscures the pertinent information about the actual alembic arguments of"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a4dcd0f_a37827c5","line":48,"updated":"2015-08-12 13:54:51.000000000","message":"Well, first, it automatically reads /etc/neutron/neutron.conf. Second, I don\u0027t believe we now have anything to load from other files (the only thing that the tool seems to depend on is db configuration which is already in neutron.conf.\n\nFinally, you can just pass db connection string with --db-connection or smth like that.","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f81bf910297ace111665c1eb0f43d280269ad530","unresolved":false,"context_lines":[{"line_number":45,"context_line":"neutron service itself. In a deployment this often means passing multiple"},{"line_number":46,"context_line":"``--config-file`` options, for example::"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":" neutron-db-manage --config-file /path/to/neutron.conf --config-file /path/to/plugin/config.ini \u003c...commands...\u003e"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"When giving examples of using the wrapper, repeating this long-winded argument"},{"line_number":51,"context_line":"list obscures the pertinent information about the actual alembic arguments of"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a4dcd0f_72f08767","line":48,"in_reply_to":"1a4dcd0f_a37827c5","updated":"2015-08-13 03:52:10.000000000","message":"Done","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"23d37a57aaad048ab052c4005d1ce663aa49f695","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":" alias NDBM\u003d\u0027neutron-db-manage --config-file /path/to/neutron.conf --config-file /path/to/plugin/config.ini\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"The examples below will now use the ``NDBM`` alias. (It is given an all-caps"},{"line_number":58,"context_line":"name so it will not easily be confused with a regular command.)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"For new deployments you will start with an empty database. You then upgrade"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a4dcd0f_e30e2f3c","line":57,"updated":"2015-08-12 13:54:51.000000000","message":"Instead of describing the alias, I suggest to stick to argument-less form.","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f81bf910297ace111665c1eb0f43d280269ad530","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":" alias NDBM\u003d\u0027neutron-db-manage --config-file /path/to/neutron.conf --config-file /path/to/plugin/config.ini\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"The examples below will now use the ``NDBM`` alias. (It is given an all-caps"},{"line_number":58,"context_line":"name so it will not easily be confused with a regular command.)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"For new deployments you will start with an empty database. You then upgrade"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a4dcd0f_92f3d372","line":57,"in_reply_to":"1a4dcd0f_e30e2f3c","updated":"2015-08-13 03:52:10.000000000","message":"Done","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"23d37a57aaad048ab052c4005d1ce663aa49f695","unresolved":false,"context_lines":[{"line_number":60,"context_line":"For new deployments you will start with an empty database. You then upgrade"},{"line_number":61,"context_line":"to the latest database version via::"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":" NDBM upgrade head"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"For existing deployments the database will already be at some version. To"},{"line_number":66,"context_line":"check the current database version::"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a4dcd0f_5e1a5670","line":63,"updated":"2015-08-12 13:54:51.000000000","message":"I suggest to document \u0027upgrade heads\u0027 instead and leave \u0027head\u0027 for those who did not catch up with latest changes. Effectively, it\u0027s the same, but it sets the mind right.","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f81bf910297ace111665c1eb0f43d280269ad530","unresolved":false,"context_lines":[{"line_number":60,"context_line":"For new deployments you will start with an empty database. You then upgrade"},{"line_number":61,"context_line":"to the latest database version via::"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":" NDBM upgrade head"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"For existing deployments the database will already be at some version. To"},{"line_number":66,"context_line":"check the current database version::"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a4dcd0f_12002333","line":63,"in_reply_to":"1a4dcd0f_5e1a5670","updated":"2015-08-13 03:52:10.000000000","message":"Done","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"23d37a57aaad048ab052c4005d1ce663aa49f695","unresolved":false,"context_lines":[{"line_number":70,"context_line":"After installing a new version of Neutron server, upgrading the database is"},{"line_number":71,"context_line":"the same command::"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":" NDBM upgrade head"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"To create a script to run the migration offline::"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a4dcd0f_de1c2668","line":73,"updated":"2015-08-12 13:54:51.000000000","message":"ditto","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f81bf910297ace111665c1eb0f43d280269ad530","unresolved":false,"context_lines":[{"line_number":70,"context_line":"After installing a new version of Neutron server, upgrading the database is"},{"line_number":71,"context_line":"the same command::"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":" NDBM upgrade head"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"To create a script to run the migration offline::"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a4dcd0f_52a0eb41","line":73,"in_reply_to":"1a4dcd0f_de1c2668","updated":"2015-08-13 03:52:10.000000000","message":"Done","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"23d37a57aaad048ab052c4005d1ce663aa49f695","unresolved":false,"context_lines":[{"line_number":104,"context_line":"see the `Entry Points section of Contributing extensions to Neutron"},{"line_number":105,"context_line":"\u003ccontribute.html#entry-points\u003e`_."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"The neutron-db-manage script  and will run the given alembic command against"},{"line_number":108,"context_line":"all installed sub-projects. (An exception is the ``revision`` command, which is"},{"line_number":109,"context_line":"discussed in the `Developers`_ section below.)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a4dcd0f_1e9ccebe","line":107,"updated":"2015-08-12 13:54:51.000000000","message":"probably some word is missing before \u0027and\u0027","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f81bf910297ace111665c1eb0f43d280269ad530","unresolved":false,"context_lines":[{"line_number":104,"context_line":"see the `Entry Points section of Contributing extensions to Neutron"},{"line_number":105,"context_line":"\u003ccontribute.html#entry-points\u003e`_."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"The neutron-db-manage script  and will run the given alembic command against"},{"line_number":108,"context_line":"all installed sub-projects. (An exception is the ``revision`` command, which is"},{"line_number":109,"context_line":"discussed in the `Developers`_ section below.)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a4dcd0f_326bdff2","line":107,"in_reply_to":"1a4dcd0f_1e9ccebe","updated":"2015-08-13 03:52:10.000000000","message":"Done","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"23d37a57aaad048ab052c4005d1ce663aa49f695","unresolved":false,"context_lines":[{"line_number":111,"context_line":"2. Offline/Online Migrations"},{"line_number":112,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"TODO(Ihar): Explain contract/expand branches"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Developers"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a4dcd0f_5eb6d63e","line":114,"updated":"2015-08-12 13:54:51.000000000","message":"We actually have it documented in: doc/source/devref/db_layer.rst Can you move it here maybe?","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f81bf910297ace111665c1eb0f43d280269ad530","unresolved":false,"context_lines":[{"line_number":111,"context_line":"2. Offline/Online Migrations"},{"line_number":112,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"TODO(Ihar): Explain contract/expand branches"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Developers"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a4dcd0f_4d360e52","line":114,"in_reply_to":"1a4dcd0f_5eb6d63e","updated":"2015-08-13 03:52:10.000000000","message":"Done","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"23d37a57aaad048ab052c4005d1ce663aa49f695","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":" NDBM revision -m \"description of revision\""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"The migration timeline should remain linear so that there is a clear path when"},{"line_number":148,"context_line":"upgrading. To verify that the timeline does branch, you can run this command::"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":" NDBM check_migration"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a4dcd0f_fe59e2fd","line":147,"updated":"2015-08-12 13:54:51.000000000","message":"linear? It\u0027s not correct anymore. Maybe you mean that it should be linear in scope of a single branch.","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f81bf910297ace111665c1eb0f43d280269ad530","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":" NDBM revision -m \"description of revision\""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"The migration timeline should remain linear so that there is a clear path when"},{"line_number":148,"context_line":"upgrading. To verify that the timeline does branch, you can run this command::"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":" NDBM check_migration"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a4dcd0f_6df0aa67","line":147,"in_reply_to":"1a4dcd0f_fe59e2fd","updated":"2015-08-13 03:52:10.000000000","message":"Done","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"23d37a57aaad048ab052c4005d1ce663aa49f695","unresolved":false,"context_lines":[{"line_number":147,"context_line":"The migration timeline should remain linear so that there is a clear path when"},{"line_number":148,"context_line":"upgrading. To verify that the timeline does branch, you can run this command::"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":" NDBM check_migration"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"If the migration path does branch, you can find the branch point via::"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a4dcd0f_be491a33","line":150,"updated":"2015-08-12 13:54:51.000000000","message":"do you refer to the validation I add in: https://review.openstack.org/206746 ?","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f81bf910297ace111665c1eb0f43d280269ad530","unresolved":false,"context_lines":[{"line_number":147,"context_line":"The migration timeline should remain linear so that there is a clear path when"},{"line_number":148,"context_line":"upgrading. To verify that the timeline does branch, you can run this command::"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":" NDBM check_migration"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"If the migration path does branch, you can find the branch point via::"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1a4dcd0f_ed8b5ac1","line":150,"in_reply_to":"1a4dcd0f_be491a33","updated":"2015-08-13 03:52:10.000000000","message":"Done","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"2aa9eeb52491829b06a10f60f476ca10ad799713","unresolved":false,"context_lines":[{"line_number":104,"context_line":"see the `Entry Points section of Contributing extensions to Neutron"},{"line_number":105,"context_line":"\u003ccontribute.html#entry-points\u003e`_."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"The neutron-db-manage script  and will run the given alembic command against"},{"line_number":108,"context_line":"all installed sub-projects. (An exception is the ``revision`` command, which is"},{"line_number":109,"context_line":"discussed in the `Developers`_ section below.)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a4dcd0f_7e45d240","line":107,"updated":"2015-08-12 13:49:29.000000000","message":"nit: \u0027and\u0027 is not needed here","commit_id":"c2456975bece727e1f9a0aa00cefcbb77e95530c"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f2098bef79ab04294bd6fb0f5d9e216eb29a374a","unresolved":false,"context_lines":[{"line_number":104,"context_line":"see the `Entry Points section of Contributing extensions to Neutron"},{"line_number":105,"context_line":"\u003ccontribute.html#entry-points\u003e`_."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"The neutron-db-manage script  and will run the given alembic command against"},{"line_number":108,"context_line":"all installed sub-projects. (An exception is the ``revision`` command, which is"},{"line_number":109,"context_line":"discussed in the `Developers`_ section below.)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"1a4dcd0f_487d9c6b","line":107,"in_reply_to":"1a4dcd0f_7e45d240","updated":"2015-08-13 03:51:52.000000000","message":"Done","commit_id":"c2456975bece727e1f9a0aa00cefcbb77e95530c"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"939dd147d3d406830ead97868905b3b501a1c579","unresolved":false,"context_lines":[{"line_number":63,"context_line":"for the installation. This can be read from the configuration file(s) or"},{"line_number":64,"context_line":"specified using the ``--core_plugin`` option::"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":" neutron-db-manage --core_plugin neutron.plugins.ml2.plugin.Ml2Plugin \u003ccommands\u003e"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"When giving examples below of using the wrapper the options will not be shown."},{"line_number":69,"context_line":"It is assumed you will use the options that you need for your environment."}],"source_content_type":"text/x-rst","patch_set":14,"id":"1a4dcd0f_2694f734","line":66,"updated":"2015-08-13 09:23:56.000000000","message":"I am not sure what it actually does. I don\u0027t see any usage of the config option in cli.py, so I wonder whether it\u0027s not some obsolete thing that we need to remove instead of documenting it.","commit_id":"603c0d03aed5fdeefb471086c0aef879938f9641"}],"neutron/db/migration/README":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"23d37a57aaad048ab052c4005d1ce663aa49f695","unresolved":false,"context_lines":[{"line_number":1,"context_line":"See doc/source/devref/alembic_migrations.rst"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"Rendered at"},{"line_number":4,"context_line":"http://docs.openstack.org/developer/neutron/devref/alembic_migrations.html"}],"source_content_type":"application/octet-stream","patch_set":12,"id":"1a4dcd0f_be1efa09","line":1,"updated":"2015-08-12 13:54:51.000000000","message":"Why not just killing the file?","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f81bf910297ace111665c1eb0f43d280269ad530","unresolved":false,"context_lines":[{"line_number":1,"context_line":"See doc/source/devref/alembic_migrations.rst"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"Rendered at"},{"line_number":4,"context_line":"http://docs.openstack.org/developer/neutron/devref/alembic_migrations.html"}],"source_content_type":"application/octet-stream","patch_set":12,"id":"1a4dcd0f_cd7a1eba","line":1,"in_reply_to":"1a4dcd0f_be1efa09","updated":"2015-08-13 03:52:10.000000000","message":"I had the link to this (in github) bookmarked. I assumed others might also, and I think not want to cause surprise. If you feel strongly I can delete it.","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"}],"neutron/db/migration/cli.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"46a2356c550ab87890a93ebaab4047fa020ea86d","unresolved":false,"context_lines":[{"line_number":137,"context_line":"            raise SystemExit(_(\u0027Negative delta (downgrade) not supported\u0027))"},{"line_number":138,"context_line":"        revision \u003d \u0027%s+%d\u0027 % (revision, delta)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _do_upgrade(proj_name, proj_config):"},{"line_number":141,"context_line":"        if not CONF.command.sql:"},{"line_number":142,"context_line":"            run_sanity_checks(proj_config, revision)"},{"line_number":143,"context_line":"        sql \u003d CONF.command.sql"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_ee3cc130","line":140,"updated":"2015-07-09 09:38:30.000000000","message":"I feel that we should stop putting more util functions inside here and instead get them out, to allow for unit testing.","commit_id":"d19af0763f4220fe22cf8669c249759f065c8ba5"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"de0ec6e8217baf2809d132152a517f88efcbe3f4","unresolved":false,"context_lines":[{"line_number":43,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":44,"context_line":"               help\u003d_(\u0027Neutron plugin provider module\u0027)),"},{"line_number":45,"context_line":"    cfg.ListOpt(\u0027service_plugins\u0027,"},{"line_number":46,"context_line":"                default\u003d[],"},{"line_number":47,"context_line":"                help\u003d_(\"The service plugins Neutron will use\")),"},{"line_number":48,"context_line":"    cfg.StrOpt(\u0027service\u0027,"},{"line_number":49,"context_line":"               choices\u003dVALID_SERVICES,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_59b81dc8","side":"PARENT","line":46,"updated":"2015-07-29 06:45:02.000000000","message":"Is it just useless?","commit_id":"87fff61b06b1dfca7008e0482141d48329039f5a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6f4b9bc594adfe76bb35c8a8a09062d8f760a4f7","unresolved":false,"context_lines":[{"line_number":43,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":44,"context_line":"               help\u003d_(\u0027Neutron plugin provider module\u0027)),"},{"line_number":45,"context_line":"    cfg.ListOpt(\u0027service_plugins\u0027,"},{"line_number":46,"context_line":"                default\u003d[],"},{"line_number":47,"context_line":"                help\u003d_(\"The service plugins Neutron will use\")),"},{"line_number":48,"context_line":"    cfg.StrOpt(\u0027service\u0027,"},{"line_number":49,"context_line":"               choices\u003dVALID_SERVICES,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_9ab3cc99","side":"PARENT","line":46,"in_reply_to":"3a50d1a3_59b81dc8","updated":"2015-07-29 21:54:38.000000000","message":"I don\u0027t actually remember what it was used for. Maybe Ihar remembers?","commit_id":"87fff61b06b1dfca7008e0482141d48329039f5a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bb06bfd3b32df803b141a57d4869a1602d72c73f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":44,"context_line":"               help\u003d_(\u0027Neutron plugin provider module\u0027)),"},{"line_number":45,"context_line":"    cfg.ListOpt(\u0027service_plugins\u0027,"},{"line_number":46,"context_line":"                default\u003d[],"},{"line_number":47,"context_line":"                help\u003d_(\"The service plugins Neutron will use\")),"},{"line_number":48,"context_line":"    cfg.StrOpt(\u0027service\u0027,"},{"line_number":49,"context_line":"               choices\u003dVALID_SERVICES,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_a8aaf0d0","side":"PARENT","line":46,"in_reply_to":"3a50d1a3_9ab3cc99","updated":"2015-07-30 08:10:33.000000000","message":"Nope. It was long before I joined the project. Added as part of If7fc7a4488352e9b65b6973d8ea631e0d9ed8b68, should have been killed as part of I7285e0276b262a9ea5d22c456a5a8cf34c461a0c.","commit_id":"87fff61b06b1dfca7008e0482141d48329039f5a"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"11fe9330e5d05c338b3739d6df9ef51b1ecf46de","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        \u0027db/migration/alembic_migrations/versions\u0027)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"def _get_head_file_path(neutron_config):"},{"line_number":274,"context_line":"    \u0027\u0027\u0027Return the path of the file that contains single head.\u0027\u0027\u0027"},{"line_number":275,"context_line":"    return os.path.join("},{"line_number":276,"context_line":"        _get_root_versions_dir(neutron_config),"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_93aeb22c","side":"PARENT","line":273,"updated":"2015-07-28 11:37:07.000000000","message":"thanks for renaming all those. it\u0027s really a place to make dumb mistakes.","commit_id":"87fff61b06b1dfca7008e0482141d48329039f5a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"de0ec6e8217baf2809d132152a517f88efcbe3f4","unresolved":false,"context_lines":[{"line_number":30,"context_line":"HEAD_FILENAME \u003d \u0027HEAD\u0027"},{"line_number":31,"context_line":"HEADS_FILENAME \u003d \u0027HEADS\u0027"},{"line_number":32,"context_line":"CURRENT_RELEASE \u003d \"liberty\""},{"line_number":33,"context_line":"MIGRATION_BRANCHES \u003d (\u0027contract\u0027, \u0027expand\u0027)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"MIGRATION_ENTRYPOINTS \u003d \u0027neutron.db.alembic_migrations\u0027"},{"line_number":36,"context_line":"migration_entrypoints \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_19db7550","line":33,"updated":"2015-07-29 06:45:02.000000000","message":"Is there a need to change the order?","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6f4b9bc594adfe76bb35c8a8a09062d8f760a4f7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"HEAD_FILENAME \u003d \u0027HEAD\u0027"},{"line_number":31,"context_line":"HEADS_FILENAME \u003d \u0027HEADS\u0027"},{"line_number":32,"context_line":"CURRENT_RELEASE \u003d \"liberty\""},{"line_number":33,"context_line":"MIGRATION_BRANCHES \u003d (\u0027contract\u0027, \u0027expand\u0027)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"MIGRATION_ENTRYPOINTS \u003d \u0027neutron.db.alembic_migrations\u0027"},{"line_number":36,"context_line":"migration_entrypoints \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_5a56a45c","line":33,"in_reply_to":"3a50d1a3_19db7550","updated":"2015-07-29 21:54:38.000000000","message":"Oops. No.","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"de0ec6e8217baf2809d132152a517f88efcbe3f4","unresolved":false,"context_lines":[{"line_number":32,"context_line":"CURRENT_RELEASE \u003d \"liberty\""},{"line_number":33,"context_line":"MIGRATION_BRANCHES \u003d (\u0027contract\u0027, \u0027expand\u0027)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"MIGRATION_ENTRYPOINTS \u003d \u0027neutron.db.alembic_migrations\u0027"},{"line_number":36,"context_line":"migration_entrypoints \u003d {"},{"line_number":37,"context_line":"    entrypoint.name: entrypoint"},{"line_number":38,"context_line":"    for entrypoint in pkg_resources.iter_entry_points(MIGRATION_ENTRYPOINTS)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_5c9d6bba","line":35,"updated":"2015-07-29 06:45:02.000000000","message":"Don\u0027t we need to advertise this entrypoint?","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6f4b9bc594adfe76bb35c8a8a09062d8f760a4f7","unresolved":false,"context_lines":[{"line_number":32,"context_line":"CURRENT_RELEASE \u003d \"liberty\""},{"line_number":33,"context_line":"MIGRATION_BRANCHES \u003d (\u0027contract\u0027, \u0027expand\u0027)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"MIGRATION_ENTRYPOINTS \u003d \u0027neutron.db.alembic_migrations\u0027"},{"line_number":36,"context_line":"migration_entrypoints \u003d {"},{"line_number":37,"context_line":"    entrypoint.name: entrypoint"},{"line_number":38,"context_line":"    for entrypoint in pkg_resources.iter_entry_points(MIGRATION_ENTRYPOINTS)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_5cc1d9e2","line":35,"in_reply_to":"3a50d1a3_5c9d6bba","updated":"2015-07-29 21:54:38.000000000","message":"I am not sure I understand the question. Advertise it where?","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"de0ec6e8217baf2809d132152a517f88efcbe3f4","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"neutron_alembic_ini \u003d os.path.join(os.path.dirname(__file__), \u0027alembic.ini\u0027)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"VALID_SERVICES \u003d [\u0027fwaas\u0027, \u0027lbaas\u0027, \u0027vpnaas\u0027]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"_core_opts \u003d ["},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027core_plugin\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_f9c7a942","line":43,"updated":"2015-07-29 06:45:02.000000000","message":"why replace repos.NeutronModules() way?","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6f4b9bc594adfe76bb35c8a8a09062d8f760a4f7","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"neutron_alembic_ini \u003d os.path.join(os.path.dirname(__file__), \u0027alembic.ini\u0027)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"VALID_SERVICES \u003d [\u0027fwaas\u0027, \u0027lbaas\u0027, \u0027vpnaas\u0027]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"_core_opts \u003d ["},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027core_plugin\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_3c1acd7d","line":43,"in_reply_to":"3a50d1a3_f9c7a942","updated":"2015-07-29 21:54:38.000000000","message":"The repos.py module is being deleted in another patch. But in the next patch set I don\u0027t need this list.","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"11fe9330e5d05c338b3739d6df9ef51b1ecf46de","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    cfg.StrOpt(\u0027subproject\u0027,"},{"line_number":54,"context_line":"               help\u003d_(\"The sub-project to execute the command against. \""},{"line_number":55,"context_line":"                      \"This is something like \u0027networking-foo\u0027 for \""},{"line_number":56,"context_line":"                      \"third-party sub-projects.\")),"},{"line_number":57,"context_line":"    cfg.BoolOpt(\u0027neutron_only\u0027,"},{"line_number":58,"context_line":"               help\u003d_(\"Run the command on core neutron only, skipping any \""},{"line_number":59,"context_line":"                      \"installed services and sub-projects.\")),"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_b3d96e58","line":56,"updated":"2015-07-28 11:37:07.000000000","message":"Do we want to limit the choice based on which entrypoints are registered?","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6f4b9bc594adfe76bb35c8a8a09062d8f760a4f7","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    cfg.StrOpt(\u0027subproject\u0027,"},{"line_number":54,"context_line":"               help\u003d_(\"The sub-project to execute the command against. \""},{"line_number":55,"context_line":"                      \"This is something like \u0027networking-foo\u0027 for \""},{"line_number":56,"context_line":"                      \"third-party sub-projects.\")),"},{"line_number":57,"context_line":"    cfg.BoolOpt(\u0027neutron_only\u0027,"},{"line_number":58,"context_line":"               help\u003d_(\"Run the command on core neutron only, skipping any \""},{"line_number":59,"context_line":"                      \"installed services and sub-projects.\")),"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_106a3b81","line":56,"in_reply_to":"3a50d1a3_b3d96e58","updated":"2015-07-29 21:54:38.000000000","message":"I gave it a try. Let me know what you think.","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"11fe9330e5d05c338b3739d6df9ef51b1ecf46de","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               help\u003d_(\"The sub-project to execute the command against. \""},{"line_number":55,"context_line":"                      \"This is something like \u0027networking-foo\u0027 for \""},{"line_number":56,"context_line":"                      \"third-party sub-projects.\")),"},{"line_number":57,"context_line":"    cfg.BoolOpt(\u0027neutron_only\u0027,"},{"line_number":58,"context_line":"               help\u003d_(\"Run the command on core neutron only, skipping any \""},{"line_number":59,"context_line":"                      \"installed services and sub-projects.\")),"},{"line_number":60,"context_line":"    cfg.BoolOpt(\u0027split_branches\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_73fa06bf","line":57,"updated":"2015-07-28 11:37:07.000000000","message":"Could we instead keep ourselves on par with other subprojects and create an entrypoint for neutron?","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"89604a53c81bfd0a5653f3fbdc02b99b74b930a3","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               help\u003d_(\"The sub-project to execute the command against. \""},{"line_number":55,"context_line":"                      \"This is something like \u0027networking-foo\u0027 for \""},{"line_number":56,"context_line":"                      \"third-party sub-projects.\")),"},{"line_number":57,"context_line":"    cfg.BoolOpt(\u0027neutron_only\u0027,"},{"line_number":58,"context_line":"               help\u003d_(\"Run the command on core neutron only, skipping any \""},{"line_number":59,"context_line":"                      \"installed services and sub-projects.\")),"},{"line_number":60,"context_line":"    cfg.BoolOpt(\u0027split_branches\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_067bc22a","line":57,"in_reply_to":"3a50d1a3_08e76447","updated":"2015-07-30 14:22:57.000000000","message":"Well I thought of neutron as the main project, not a subproject, but I am quite happy to get rid of this option. Less is more. Please patch set 11.","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6f4b9bc594adfe76bb35c8a8a09062d8f760a4f7","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               help\u003d_(\"The sub-project to execute the command against. \""},{"line_number":55,"context_line":"                      \"This is something like \u0027networking-foo\u0027 for \""},{"line_number":56,"context_line":"                      \"third-party sub-projects.\")),"},{"line_number":57,"context_line":"    cfg.BoolOpt(\u0027neutron_only\u0027,"},{"line_number":58,"context_line":"               help\u003d_(\"Run the command on core neutron only, skipping any \""},{"line_number":59,"context_line":"                      \"installed services and sub-projects.\")),"},{"line_number":60,"context_line":"    cfg.BoolOpt(\u0027split_branches\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_845ba385","line":57,"in_reply_to":"3a50d1a3_73fa06bf","updated":"2015-07-29 21:54:38.000000000","message":"Good idea. I like consistency. However, the user may still want to run the command against only neutron, so I think this option has to remain.","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bb06bfd3b32df803b141a57d4869a1602d72c73f","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               help\u003d_(\"The sub-project to execute the command against. \""},{"line_number":55,"context_line":"                      \"This is something like \u0027networking-foo\u0027 for \""},{"line_number":56,"context_line":"                      \"third-party sub-projects.\")),"},{"line_number":57,"context_line":"    cfg.BoolOpt(\u0027neutron_only\u0027,"},{"line_number":58,"context_line":"               help\u003d_(\"Run the command on core neutron only, skipping any \""},{"line_number":59,"context_line":"                      \"installed services and sub-projects.\")),"},{"line_number":60,"context_line":"    cfg.BoolOpt(\u0027split_branches\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_08e76447","line":57,"in_reply_to":"3a50d1a3_845ba385","updated":"2015-07-30 08:10:33.000000000","message":"Doesn\u0027t --subproject neutron do just that?","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6f4b9bc594adfe76bb35c8a8a09062d8f760a4f7","unresolved":false,"context_lines":[{"line_number":284,"context_line":"    # Convert it to:"},{"line_number":285,"context_line":"    #   \u0027project_base/db/migration/alembic_migrations/versions\u0027"},{"line_number":286,"context_line":"    part1, part2 \u003d script_location.split(\u0027:\u0027)"},{"line_number":287,"context_line":"    parts \u003d part1.split(\u0027.\u0027) + [part2, \u0027versions\u0027]"},{"line_number":288,"context_line":"    return os.path.join(*parts)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_c4176ba1","line":287,"updated":"2015-07-29 21:54:38.000000000","message":"Fail. I need the absolute path.","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"11fe9330e5d05c338b3739d6df9ef51b1ecf46de","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"def _use_separate_migration_branches(config):"},{"line_number":322,"context_line":"    \u0027\u0027\u0027Detect whether split migration branches should be used.\u0027\u0027\u0027"},{"line_number":323,"context_line":"    return (CONF.split_branches or"},{"line_number":324,"context_line":"            # Use HEADS file to indicate the new, split migration world"},{"line_number":325,"context_line":"            os.path.exists(_get_heads_file_path(config)))"},{"line_number":326,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_f3bcd66d","line":323,"updated":"2015-07-28 11:37:07.000000000","message":"doh...","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6f4b9bc594adfe76bb35c8a8a09062d8f760a4f7","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"def _use_separate_migration_branches(config):"},{"line_number":322,"context_line":"    \u0027\u0027\u0027Detect whether split migration branches should be used.\u0027\u0027\u0027"},{"line_number":323,"context_line":"    return (CONF.split_branches or"},{"line_number":324,"context_line":"            # Use HEADS file to indicate the new, split migration world"},{"line_number":325,"context_line":"            os.path.exists(_get_heads_file_path(config)))"},{"line_number":326,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_e41e27ba","line":323,"in_reply_to":"3a50d1a3_f3bcd66d","updated":"2015-07-29 21:54:38.000000000","message":"heh, it had me going for a while.","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"11fe9330e5d05c338b3739d6df9ef51b1ecf46de","unresolved":false,"context_lines":[{"line_number":354,"context_line":""},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"def _get_subproject_base(subproject):"},{"line_number":357,"context_line":"    \u0027\u0027\u0027Get the import base namme for the installed subproject.\u0027\u0027\u0027"},{"line_number":358,"context_line":"    entrypoint \u003d _get_installed_entrypoint(subproject)"},{"line_number":359,"context_line":"    return entrypoint.module_name.split(\u0027.\u0027)[0]"},{"line_number":360,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_f3c7f60f","line":357,"updated":"2015-07-28 11:37:07.000000000","message":"namme","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6f4b9bc594adfe76bb35c8a8a09062d8f760a4f7","unresolved":false,"context_lines":[{"line_number":354,"context_line":""},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"def _get_subproject_base(subproject):"},{"line_number":357,"context_line":"    \u0027\u0027\u0027Get the import base namme for the installed subproject.\u0027\u0027\u0027"},{"line_number":358,"context_line":"    entrypoint \u003d _get_installed_entrypoint(subproject)"},{"line_number":359,"context_line":"    return entrypoint.module_name.split(\u0027.\u0027)[0]"},{"line_number":360,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_a406df83","line":357,"in_reply_to":"3a50d1a3_f3c7f60f","updated":"2015-07-29 21:54:38.000000000","message":"Done","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"11fe9330e5d05c338b3739d6df9ef51b1ecf46de","unresolved":false,"context_lines":[{"line_number":356,"context_line":"def _get_subproject_base(subproject):"},{"line_number":357,"context_line":"    \u0027\u0027\u0027Get the import base namme for the installed subproject.\u0027\u0027\u0027"},{"line_number":358,"context_line":"    entrypoint \u003d _get_installed_entrypoint(subproject)"},{"line_number":359,"context_line":"    return entrypoint.module_name.split(\u0027.\u0027)[0]"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"def _get_script_locations():"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_9300f235","line":359,"updated":"2015-07-28 11:37:07.000000000","message":"And what if there are no dots? an entrypoint like \"neutron_project:XXX\" seem reasonable to me.","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6f4b9bc594adfe76bb35c8a8a09062d8f760a4f7","unresolved":false,"context_lines":[{"line_number":356,"context_line":"def _get_subproject_base(subproject):"},{"line_number":357,"context_line":"    \u0027\u0027\u0027Get the import base namme for the installed subproject.\u0027\u0027\u0027"},{"line_number":358,"context_line":"    entrypoint \u003d _get_installed_entrypoint(subproject)"},{"line_number":359,"context_line":"    return entrypoint.module_name.split(\u0027.\u0027)[0]"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"def _get_script_locations():"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_c409ab96","line":359,"in_reply_to":"3a50d1a3_9300f235","updated":"2015-07-29 21:54:38.000000000","message":"Done","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"4fc9c2c4d07dfa351231a137c0e8371f3184af70","unresolved":false,"context_lines":[{"line_number":356,"context_line":"def _get_subproject_base(subproject):"},{"line_number":357,"context_line":"    \u0027\u0027\u0027Get the import base namme for the installed subproject.\u0027\u0027\u0027"},{"line_number":358,"context_line":"    entrypoint \u003d _get_installed_entrypoint(subproject)"},{"line_number":359,"context_line":"    return entrypoint.module_name.split(\u0027.\u0027)[0]"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"def _get_script_locations():"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_eb4ec494","line":359,"in_reply_to":"3a50d1a3_c409ab96","updated":"2015-07-29 22:15:14.000000000","message":"Actually:\n\n  \u003e\u003e\u003e \u0027abc\u0027.split(\u0027.\u0027)\n  [\u0027abc\u0027]\n\nSo it works anyway.","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"11fe9330e5d05c338b3739d6df9ef51b1ecf46de","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    return configs"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"def get_alembic_configs():"},{"line_number":410,"context_line":"    script_locations \u003d _get_script_locations()"},{"line_number":411,"context_line":"    configs \u003d _get_alembic_configs(script_locations)"},{"line_number":412,"context_line":"    return configs"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_53702a40","line":409,"updated":"2015-07-28 11:37:07.000000000","message":"Why exactly do we split the function into two pieces?","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6f4b9bc594adfe76bb35c8a8a09062d8f760a4f7","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    return configs"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"def get_alembic_configs():"},{"line_number":410,"context_line":"    script_locations \u003d _get_script_locations()"},{"line_number":411,"context_line":"    configs \u003d _get_alembic_configs(script_locations)"},{"line_number":412,"context_line":"    return configs"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_2bbd8cb0","line":409,"in_reply_to":"3a50d1a3_53702a40","updated":"2015-07-29 21:54:38.000000000","message":"Done","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ced881645f2be6a5b537c137d5d9daa25193c2fe","unresolved":false,"context_lines":[{"line_number":47,"context_line":"INSTALLED_SERVICE_PROJECTS \u003d [\u0027neutron-%s\u0027 % service"},{"line_number":48,"context_line":"                              for service in INSTALLED_SERVICES]"},{"line_number":49,"context_line":"INSTALLED_SUBPROJECTS \u003d [project for project in migration_entrypoints"},{"line_number":50,"context_line":"                         if project not in INSTALLED_SERVICE_PROJECTS]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"service_help \u003d ("},{"line_number":53,"context_line":"    _(\"Can be one of %s.\") % INSTALLED_SERVICES"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a50d1a3_1ca69c53","line":50,"updated":"2015-07-31 01:13:56.000000000","message":"I am wondering what\u0027s the value of considering *-aas different from other sub-projects. It\u0027s making this code busier and more complicated that it needs to be. Have you considered, just listing the migration-entrypoint without making any distinction between service_projecsts and subprojects?","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"31bb2e98e896cb99e5d2b0e8d33d294bfc28d5b8","unresolved":false,"context_lines":[{"line_number":47,"context_line":"INSTALLED_SERVICE_PROJECTS \u003d [\u0027neutron-%s\u0027 % service"},{"line_number":48,"context_line":"                              for service in INSTALLED_SERVICES]"},{"line_number":49,"context_line":"INSTALLED_SUBPROJECTS \u003d [project for project in migration_entrypoints"},{"line_number":50,"context_line":"                         if project not in INSTALLED_SERVICE_PROJECTS]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"service_help \u003d ("},{"line_number":53,"context_line":"    _(\"Can be one of %s.\") % INSTALLED_SERVICES"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a50d1a3_cd77209e","line":50,"in_reply_to":"3a50d1a3_1ca69c53","updated":"2015-07-31 02:17:06.000000000","message":"I can\u0027t remove the --service option until [1] merges.\n\n[1] https://review.openstack.org/198542","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3ed39757bcfdd35a6ab09a09e154eb7c908bbdbd","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                         if project not in INSTALLED_SERVICE_PROJECTS]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"service_help \u003d ("},{"line_number":53,"context_line":"    _(\"Can be one of %s.\") % INSTALLED_SERVICES"},{"line_number":54,"context_line":"    if INSTALLED_SERVICES else"},{"line_number":55,"context_line":"    _(\"(No services are currently installed).\")"},{"line_number":56,"context_line":")"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a50d1a3_660f2689","line":53,"updated":"2015-07-30 14:49:07.000000000","message":"We may want some pretty printing here, like \u0027, \u0027.join(INSTALLED_SERVICES)","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"e73576f88a9a68c68d4c5f863b7a69518868bd78","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                         if project not in INSTALLED_SERVICE_PROJECTS]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"service_help \u003d ("},{"line_number":53,"context_line":"    _(\"Can be one of %s.\") % INSTALLED_SERVICES"},{"line_number":54,"context_line":"    if INSTALLED_SERVICES else"},{"line_number":55,"context_line":"    _(\"(No services are currently installed).\")"},{"line_number":56,"context_line":")"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_4cb9f4eb","line":53,"in_reply_to":"3a50d1a3_5c73c4e7","updated":"2015-08-08 23:36:20.000000000","message":"I\u0027ll submit a follow-up patch to remove this once [1] merges in devstack.\n\n[1] https://review.openstack.org/198542","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ced881645f2be6a5b537c137d5d9daa25193c2fe","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                         if project not in INSTALLED_SERVICE_PROJECTS]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"service_help \u003d ("},{"line_number":53,"context_line":"    _(\"Can be one of %s.\") % INSTALLED_SERVICES"},{"line_number":54,"context_line":"    if INSTALLED_SERVICES else"},{"line_number":55,"context_line":"    _(\"(No services are currently installed).\")"},{"line_number":56,"context_line":")"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a50d1a3_5c73c4e7","line":53,"in_reply_to":"3a50d1a3_660f2689","updated":"2015-07-31 01:13:56.000000000","message":"see comment above, I wonder if this is mostly unnecessary now.","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ced881645f2be6a5b537c137d5d9daa25193c2fe","unresolved":false,"context_lines":[{"line_number":63,"context_line":"               choices\u003dINSTALLED_SERVICES,"},{"line_number":64,"context_line":"               help\u003d(_(\"The advanced service to execute the command against. \")"},{"line_number":65,"context_line":"                     + service_help)),"},{"line_number":66,"context_line":"    cfg.StrOpt(\u0027subproject\u0027,"},{"line_number":67,"context_line":"               choices\u003dINSTALLED_SUBPROJECTS,"},{"line_number":68,"context_line":"               help\u003d(_(\"The subproject to execute the command against. \""},{"line_number":69,"context_line":"                       \"Can be one of %s.\") % INSTALLED_SUBPROJECTS)),"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a50d1a3_af996cd2","line":66,"updated":"2015-07-31 01:13:56.000000000","message":"Perhaps we can expose this option only to specific commands that are not meant to do modify the DB state. In fact, I am wondering if the execution of the command with different parameters over time may lead to some funky situations where the order matters. Instead, if we exposed this option for things like check_migration, that are idempotent no matter what, then our life is simpler","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"e73576f88a9a68c68d4c5f863b7a69518868bd78","unresolved":false,"context_lines":[{"line_number":63,"context_line":"               choices\u003dINSTALLED_SERVICES,"},{"line_number":64,"context_line":"               help\u003d(_(\"The advanced service to execute the command against. \")"},{"line_number":65,"context_line":"                     + service_help)),"},{"line_number":66,"context_line":"    cfg.StrOpt(\u0027subproject\u0027,"},{"line_number":67,"context_line":"               choices\u003dINSTALLED_SUBPROJECTS,"},{"line_number":68,"context_line":"               help\u003d(_(\"The subproject to execute the command against. \""},{"line_number":69,"context_line":"                       \"Can be one of %s.\") % INSTALLED_SUBPROJECTS)),"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_acc4385f","line":66,"in_reply_to":"3a50d1a3_af996cd2","updated":"2015-08-08 23:36:20.000000000","message":"Can this option be exposed conditionally based on which alembic arg is specified? It\u0027s not obvious to me how to do that.","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ced881645f2be6a5b537c137d5d9daa25193c2fe","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def do_alembic_command(config, cmd, *args, **kwargs):"},{"line_number":99,"context_line":"    project \u003d config.get_main_option(\u0027neutron_project\u0027)"},{"line_number":100,"context_line":"    alembic_util.msg(_(\u0027Running %(cmd)s for %(project)s ...\u0027) %"},{"line_number":101,"context_line":"                     {\u0027cmd\u0027: cmd, \u0027project\u0027: project})"},{"line_number":102,"context_line":"    try:"},{"line_number":103,"context_line":"        getattr(alembic_command, cmd)(config, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a50d1a3_2faebce7","line":100,"updated":"2015-07-31 01:13:56.000000000","message":"should we emit an OK if everything goes well?","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"e73576f88a9a68c68d4c5f863b7a69518868bd78","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def do_alembic_command(config, cmd, *args, **kwargs):"},{"line_number":99,"context_line":"    project \u003d config.get_main_option(\u0027neutron_project\u0027)"},{"line_number":100,"context_line":"    alembic_util.msg(_(\u0027Running %(cmd)s for %(project)s ...\u0027) %"},{"line_number":101,"context_line":"                     {\u0027cmd\u0027: cmd, \u0027project\u0027: project})"},{"line_number":102,"context_line":"    try:"},{"line_number":103,"context_line":"        getattr(alembic_command, cmd)(config, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_4ca014a6","line":100,"in_reply_to":"3a50d1a3_2faebce7","updated":"2015-08-08 23:36:20.000000000","message":"Done","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3ed39757bcfdd35a6ab09a09e154eb7c908bbdbd","unresolved":false,"context_lines":[{"line_number":284,"context_line":"    \u0027\u0027\u0027Return the base python namespace name for a project.\u0027\u0027\u0027"},{"line_number":285,"context_line":"    script_location \u003d config.get_main_option(\u0027script_location\u0027)"},{"line_number":286,"context_line":"    base \u003d script_location.split(\u0027:\u0027)[0].split(\u0027.\u0027)[0]"},{"line_number":287,"context_line":"    return base"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"def _get_package_root_dir(config):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a50d1a3_a663ee40","line":287,"updated":"2015-07-30 14:49:07.000000000","message":"I see you like dense code :) you could squash those two lines to save another line! :)","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"e73576f88a9a68c68d4c5f863b7a69518868bd78","unresolved":false,"context_lines":[{"line_number":284,"context_line":"    \u0027\u0027\u0027Return the base python namespace name for a project.\u0027\u0027\u0027"},{"line_number":285,"context_line":"    script_location \u003d config.get_main_option(\u0027script_location\u0027)"},{"line_number":286,"context_line":"    base \u003d script_location.split(\u0027:\u0027)[0].split(\u0027.\u0027)[0]"},{"line_number":287,"context_line":"    return base"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"def _get_package_root_dir(config):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_6ca5d0b3","line":287,"in_reply_to":"3a50d1a3_a663ee40","updated":"2015-08-08 23:36:20.000000000","message":"Done","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3ed39757bcfdd35a6ab09a09e154eb7c908bbdbd","unresolved":false,"context_lines":[{"line_number":292,"context_line":"    if not root_module:"},{"line_number":293,"context_line":"        project \u003d config.get_main_option(\u0027neutron_project\u0027)"},{"line_number":294,"context_line":"        alembic_util.err(_(\"Failed to locate source for %s.\") % project)"},{"line_number":295,"context_line":"    return os.path.dirname(os.path.dirname(root_module.__file__))"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"def _get_root_versions_dir(config):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a50d1a3_466b0af2","line":295,"updated":"2015-07-30 14:49:07.000000000","message":"may I ask you to explain what that duplicate dirname application is for?","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"e73576f88a9a68c68d4c5f863b7a69518868bd78","unresolved":false,"context_lines":[{"line_number":292,"context_line":"    if not root_module:"},{"line_number":293,"context_line":"        project \u003d config.get_main_option(\u0027neutron_project\u0027)"},{"line_number":294,"context_line":"        alembic_util.err(_(\"Failed to locate source for %s.\") % project)"},{"line_number":295,"context_line":"    return os.path.dirname(os.path.dirname(root_module.__file__))"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"def _get_root_versions_dir(config):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_8c75bc33","line":295,"in_reply_to":"3a50d1a3_466b0af2","updated":"2015-08-08 23:36:20.000000000","message":"Done","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"3ed39757bcfdd35a6ab09a09e154eb7c908bbdbd","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    # Script location is something like:"},{"line_number":303,"context_line":"    #   \u0027project_base.db.migration:alembic_migrations\u0027"},{"line_number":304,"context_line":"    # Convert it to:"},{"line_number":305,"context_line":"    #   \u0027project_base/db/migration/alembic_migrations/versions\u0027"},{"line_number":306,"context_line":"    part1, part2 \u003d script_location.split(\u0027:\u0027)"},{"line_number":307,"context_line":"    parts \u003d part1.split(\u0027.\u0027) + part2.split(\u0027.\u0027) + [\u0027versions\u0027]"},{"line_number":308,"context_line":"    return os.path.join(root_dir, *parts)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a50d1a3_c6563a2a","line":305,"updated":"2015-07-30 14:49:07.000000000","message":"Should it be absolute?","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"e73576f88a9a68c68d4c5f863b7a69518868bd78","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    # Script location is something like:"},{"line_number":303,"context_line":"    #   \u0027project_base.db.migration:alembic_migrations\u0027"},{"line_number":304,"context_line":"    # Convert it to:"},{"line_number":305,"context_line":"    #   \u0027project_base/db/migration/alembic_migrations/versions\u0027"},{"line_number":306,"context_line":"    part1, part2 \u003d script_location.split(\u0027:\u0027)"},{"line_number":307,"context_line":"    parts \u003d part1.split(\u0027.\u0027) + part2.split(\u0027.\u0027) + [\u0027versions\u0027]"},{"line_number":308,"context_line":"    return os.path.join(root_dir, *parts)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_6c939050","line":305,"in_reply_to":"3a50d1a3_c6563a2a","updated":"2015-08-08 23:36:20.000000000","message":"We return the absolute path, but lines 306-307 convert only the relative parts. I will add a comment before the return to make it clearer.","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ced881645f2be6a5b537c137d5d9daa25193c2fe","unresolved":false,"context_lines":[{"line_number":447,"context_line":""},{"line_number":448,"context_line":"def validate_cli_options():"},{"line_number":449,"context_line":"    if CONF.subproject and CONF.service:"},{"line_number":450,"context_line":"        alembic_util.err(_(\"Cannot specify both --service and --subproject.\"))"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"def main():"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a50d1a3_4fc0e87c","line":450,"updated":"2015-07-31 01:13:56.000000000","message":"I am thinking that perhaps we can use just one option if we treat service and subproject like peer entities.","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"e73576f88a9a68c68d4c5f863b7a69518868bd78","unresolved":false,"context_lines":[{"line_number":447,"context_line":""},{"line_number":448,"context_line":"def validate_cli_options():"},{"line_number":449,"context_line":"    if CONF.subproject and CONF.service:"},{"line_number":450,"context_line":"        alembic_util.err(_(\"Cannot specify both --service and --subproject.\"))"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"def main():"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_2c9d8859","line":450,"in_reply_to":"3a50d1a3_4fc0e87c","updated":"2015-08-08 23:36:20.000000000","message":"Will follow up with a removal of the --service option once devstack no longer uses --service.","commit_id":"185a07e7a0c4fd4eb2be9e32258b2a26038c00e9"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"23d37a57aaad048ab052c4005d1ce663aa49f695","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                         if project_ not in INSTALLED_SERVICE_PROJECTS]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"service_help \u003d ("},{"line_number":53,"context_line":"    _(\"Can be one of %s.\") % INSTALLED_SERVICES"},{"line_number":54,"context_line":"    if INSTALLED_SERVICES else"},{"line_number":55,"context_line":"    _(\"(No services are currently installed).\")"},{"line_number":56,"context_line":")"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_bee59a09","line":53,"updated":"2015-08-12 13:54:51.000000000","message":"so I still suggest pretty printing here: % \u0027, \u0027.join(INSTALLED_SERVICES)","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f81bf910297ace111665c1eb0f43d280269ad530","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                         if project_ not in INSTALLED_SERVICE_PROJECTS]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"service_help \u003d ("},{"line_number":53,"context_line":"    _(\"Can be one of %s.\") % INSTALLED_SERVICES"},{"line_number":54,"context_line":"    if INSTALLED_SERVICES else"},{"line_number":55,"context_line":"    _(\"(No services are currently installed).\")"},{"line_number":56,"context_line":")"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_8d365601","line":53,"in_reply_to":"1a4dcd0f_bee59a09","updated":"2015-08-13 03:52:10.000000000","message":"Done","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"}],"neutron/tests/functional/db/test_migrations.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"c86fc38016202ff48d689a99fe1343c7fa61342a","unresolved":false,"context_lines":[{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def setUp(self):"},{"line_number":252,"context_line":"        super(TestWalkMigrations, self).setUp()"},{"line_number":253,"context_line":"        # The first config is always neutron\u0027s"},{"line_number":254,"context_line":"        self.alembic_config \u003d migration.get_neutron_config()"},{"line_number":255,"context_line":"        self.alembic_config.neutron_config \u003d cfg.CONF"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_4a7a9df2","line":253,"updated":"2015-08-12 11:19:59.000000000","message":"Do we need this comment here?","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"77ebd67520ff42c7dd96e7145ff98775b9e4b2dc","unresolved":false,"context_lines":[{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def setUp(self):"},{"line_number":252,"context_line":"        super(TestWalkMigrations, self).setUp()"},{"line_number":253,"context_line":"        # The first config is always neutron\u0027s"},{"line_number":254,"context_line":"        self.alembic_config \u003d migration.get_neutron_config()"},{"line_number":255,"context_line":"        self.alembic_config.neutron_config \u003d cfg.CONF"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_23617739","line":253,"in_reply_to":"1a4dcd0f_4a7a9df2","updated":"2015-08-12 13:40:04.000000000","message":"Done","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"}],"neutron/tests/unit/db/test_migration.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"de0ec6e8217baf2809d132152a517f88efcbe3f4","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        self.configs \u003d []"},{"line_number":87,"context_line":"        self.projects \u003d (\u0027neutron\u0027, \u0027networking-foo\u0027, \u0027neutron-fwaas\u0027)"},{"line_number":88,"context_line":"        for project in self.projects:"},{"line_number":89,"context_line":"            ini \u003d os.path.join(os.path.dirname(cli.__file__), \u0027alembic.ini\u0027)"},{"line_number":90,"context_line":"            config \u003d alembic_config.Config(ini)"},{"line_number":91,"context_line":"            config.set_main_option(\u0027neutron_project\u0027, project)"},{"line_number":92,"context_line":"            module_name \u003d project.replace(\u0027-\u0027, \u0027_\u0027) + \u0027.db.migration\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_592edd43","line":89,"updated":"2015-07-29 06:45:02.000000000","message":"this can be put outside the loop","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6f4b9bc594adfe76bb35c8a8a09062d8f760a4f7","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        self.configs \u003d []"},{"line_number":87,"context_line":"        self.projects \u003d (\u0027neutron\u0027, \u0027networking-foo\u0027, \u0027neutron-fwaas\u0027)"},{"line_number":88,"context_line":"        for project in self.projects:"},{"line_number":89,"context_line":"            ini \u003d os.path.join(os.path.dirname(cli.__file__), \u0027alembic.ini\u0027)"},{"line_number":90,"context_line":"            config \u003d alembic_config.Config(ini)"},{"line_number":91,"context_line":"            config.set_main_option(\u0027neutron_project\u0027, project)"},{"line_number":92,"context_line":"            module_name \u003d project.replace(\u0027-\u0027, \u0027_\u0027) + \u0027.db.migration\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_1721ea9d","line":89,"in_reply_to":"3a50d1a3_592edd43","updated":"2015-07-29 21:54:38.000000000","message":"Done","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"11fe9330e5d05c338b3739d6df9ef51b1ecf46de","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            entrypoint \u003d pkg_resources.EntryPoint(project,"},{"line_number":98,"context_line":"                                                  module_name,"},{"line_number":99,"context_line":"                                                  attrs\u003dattrs)"},{"line_number":100,"context_line":"            cli.migration_entrypoints[project] \u003d entrypoint"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _main_test_helper(self, argv, func_name, exp_args\u003d(), exp_kwargs\u003d[{}]):"},{"line_number":103,"context_line":"        with mock.patch.object(sys, \u0027argv\u0027, argv), mock.patch.object("}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_7078bcc4","line":100,"updated":"2015-07-28 11:37:07.000000000","message":"Your test modifies the symbol inside the cli module in place, and never recover it. You should use mock to temporarily replace it.","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6f4b9bc594adfe76bb35c8a8a09062d8f760a4f7","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            entrypoint \u003d pkg_resources.EntryPoint(project,"},{"line_number":98,"context_line":"                                                  module_name,"},{"line_number":99,"context_line":"                                                  attrs\u003dattrs)"},{"line_number":100,"context_line":"            cli.migration_entrypoints[project] \u003d entrypoint"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _main_test_helper(self, argv, func_name, exp_args\u003d(), exp_kwargs\u003d[{}]):"},{"line_number":103,"context_line":"        with mock.patch.object(sys, \u0027argv\u0027, argv), mock.patch.object("}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_0b6a1081","line":100,"in_reply_to":"3a50d1a3_7078bcc4","updated":"2015-07-29 21:54:38.000000000","message":"Mocking module variables seems to be a dark art. I used a fixture instead.","commit_id":"36896f3f4b40615b9a22da0103925ecde084090f"}],"test-requirements.txt":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"23d37a57aaad048ab052c4005d1ce663aa49f695","unresolved":false,"context_lines":[{"line_number":20,"context_line":"tempest-lib\u003e\u003d0.6.1"},{"line_number":21,"context_line":"ddt\u003e\u003d0.7.0"},{"line_number":22,"context_line":"pylint\u003d\u003d1.4.4 # GNU GPL v2"},{"line_number":23,"context_line":"PyMySQL\u003e\u003d0.6.2  # MIT License"}],"source_content_type":"text/plain","patch_set":12,"id":"1a4dcd0f_e3086f82","line":23,"updated":"2015-08-12 13:54:51.000000000","message":"This breaks functional job. You should remove the dependency from neutron/tests/functional/requirements.txt then.","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f81bf910297ace111665c1eb0f43d280269ad530","unresolved":false,"context_lines":[{"line_number":20,"context_line":"tempest-lib\u003e\u003d0.6.1"},{"line_number":21,"context_line":"ddt\u003e\u003d0.7.0"},{"line_number":22,"context_line":"pylint\u003d\u003d1.4.4 # GNU GPL v2"},{"line_number":23,"context_line":"PyMySQL\u003e\u003d0.6.2  # MIT License"}],"source_content_type":"text/plain","patch_set":12,"id":"1a4dcd0f_ed27dac7","line":23,"in_reply_to":"1a4dcd0f_e3086f82","updated":"2015-08-13 03:52:10.000000000","message":"Not needed here. Removing this change.","commit_id":"7a475d6ff7e2d253b8f7c708654d54e49289834b"}]}
