)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"759eba6c79a617381607159f04d38e6645c6e198","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-12-10 17:54:10 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Advanced services support in neutron-db-manage"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ib8cd77e5e777be83c44b69edc0a6d2d2ba5d2ab1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3a961159_b2bf6da9","line":8,"updated":"2014-12-11 06:54:27.000000000","message":"Partially-Implements: blueprint split-services\n\n... though I forgot that in many places in the mad rush.","commit_id":"f592630d1e3737578de9e9e1a06af5b2f80600bc"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"fc6b4fa416594b3299a72bba5b54f3bf70a6c1e3","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-12-10 17:54:10 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Advanced services support in neutron-db-manage"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ib8cd77e5e777be83c44b69edc0a6d2d2ba5d2ab1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3a961159_15e3b2a4","line":8,"in_reply_to":"3a961159_b2bf6da9","updated":"2014-12-11 19:38:33.000000000","message":"Done","commit_id":"f592630d1e3737578de9e9e1a06af5b2f80600bc"}],"neutron/db/migration/cli.py":[{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"1a51f70d2a4c31e8f4456a6cfc47a4512c0d6a61","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                help\u003d_(\"The service plugins Neutron will use\")),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027service\u0027,"},{"line_number":39,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":40,"context_line":"               help\u003d_(\"Advanced service to run command\"))"},{"line_number":41,"context_line":"]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"_quota_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_4c6262ae","line":40,"updated":"2014-12-10 00:57:17.000000000","message":"Nit: This reads a bit funny. Do you mean something like this:\n\n\"Advanced service to run the command on\"\n\n???","commit_id":"e6767eb0ad1f3993d6a47d4b9ee8297c8932cb94"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"bc93417d68c25f1ab1d30ac80fa31082253dc604","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                help\u003d_(\"The service plugins Neutron will use\")),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027service\u0027,"},{"line_number":39,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":40,"context_line":"               help\u003d_(\"Advanced service to run command\"))"},{"line_number":41,"context_line":"]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"_quota_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_4cbee2d5","line":40,"in_reply_to":"3a961159_4c6262ae","updated":"2014-12-10 01:02:47.000000000","message":"How about this:\n\n\"The advanced service to execute the command against\"","commit_id":"e6767eb0ad1f3993d6a47d4b9ee8297c8932cb94"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"42392593b20b00e4656b98b9820ebe913e41fd7a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                help\u003d_(\"The service plugins Neutron will use\")),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027service\u0027,"},{"line_number":39,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":40,"context_line":"               help\u003d_(\"Advanced service to run command\"))"},{"line_number":41,"context_line":"]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"_quota_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_0c9bfa72","line":40,"in_reply_to":"3a961159_4cbee2d5","updated":"2014-12-10 01:06:11.000000000","message":"Done.  Though I did add the possible options.  Let me know if thats a bad idea, but I figured the user won\u0027t know what those options are.","commit_id":"e6767eb0ad1f3993d6a47d4b9ee8297c8932cb94"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6194d1c7b7c25db325dfad68f2aa4b6a9b11f050","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                help\u003d_(\"The service plugins Neutron will use\")),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027service\u0027,"},{"line_number":39,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":40,"context_line":"               help\u003d_(\"The advanced service to execute the command against \""},{"line_number":41,"context_line":"                      \"can be one of (\u0027lbaas\u0027, \u0027fwaas\u0027, \u0027vpnaas\u0027\"))"},{"line_number":42,"context_line":"]"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_48d6cbc6","line":40,"updated":"2014-12-10 05:53:08.000000000","message":"Period after against.","commit_id":"490233674c91dccd990882b73fe41599fb07c669"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"6dced174e30a56c62c8e8875e55f2226eed48134","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                help\u003d_(\"The service plugins Neutron will use\")),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027service\u0027,"},{"line_number":39,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":40,"context_line":"               help\u003d_(\"The advanced service to execute the command against \""},{"line_number":41,"context_line":"                      \"can be one of (\u0027lbaas\u0027, \u0027fwaas\u0027, \u0027vpnaas\u0027\"))"},{"line_number":42,"context_line":"]"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_2e14274d","line":40,"in_reply_to":"3a961159_48d6cbc6","updated":"2014-12-10 06:52:10.000000000","message":"I didn\u0027t add the period to remain consistent.  However, looking at it, it looks quite dumb without a period with the second line.","commit_id":"490233674c91dccd990882b73fe41599fb07c669"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6194d1c7b7c25db325dfad68f2aa4b6a9b11f050","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    cfg.StrOpt(\u0027service\u0027,"},{"line_number":39,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":40,"context_line":"               help\u003d_(\"The advanced service to execute the command against \""},{"line_number":41,"context_line":"                      \"can be one of (\u0027lbaas\u0027, \u0027fwaas\u0027, \u0027vpnaas\u0027\"))"},{"line_number":42,"context_line":"]"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"_quota_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_68038742","line":41,"updated":"2014-12-10 05:53:08.000000000","message":"\"Can be one of \u0027lbaas\u0027, \u0027fwaas\u0027, \u0027vpnaas\u0027.\"","commit_id":"490233674c91dccd990882b73fe41599fb07c669"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"6dced174e30a56c62c8e8875e55f2226eed48134","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    cfg.StrOpt(\u0027service\u0027,"},{"line_number":39,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":40,"context_line":"               help\u003d_(\"The advanced service to execute the command against \""},{"line_number":41,"context_line":"                      \"can be one of (\u0027lbaas\u0027, \u0027fwaas\u0027, \u0027vpnaas\u0027\"))"},{"line_number":42,"context_line":"]"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"_quota_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_4e17b351","line":41,"in_reply_to":"3a961159_68038742","updated":"2014-12-10 06:52:10.000000000","message":"Done","commit_id":"490233674c91dccd990882b73fe41599fb07c669"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"29ed578638226c783ebec317c8dda3c162e41de8","unresolved":false,"context_lines":[{"line_number":170,"context_line":"def get_script_location(neutron_config):"},{"line_number":171,"context_line":"    location \u003d \u0027neutron.db.migration:alembic_migrations\u0027"},{"line_number":172,"context_line":"    service_name \u003d neutron_config.service"},{"line_number":173,"context_line":"    service_lib \u003d None"},{"line_number":174,"context_line":"    if service_name \u003d\u003d LBAAS_SERVICE:"},{"line_number":175,"context_line":"        import neutron_lbaas as service_lib"},{"line_number":176,"context_line":"    elif service_name \u003d\u003d FWAAS_SERVICE:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_5f565f2b","line":173,"updated":"2014-12-10 21:53:22.000000000","message":"Thinking some more about this... replace 173-183:\n\nfrom oslo.utils import importutils\n\nservice_lib \u003d importutils.import(\u0027neutron_%s\u0027 % service_name)\nif service_lib:\n    location \u003d os.path.join(\n        os.path.dirname(service_lib.__file__),\n        SERVICES_SCRIPT_LOCATION\n    )\n\nreturn location","commit_id":"230986f3c296b21e6ece3223a016e4c5f2d5716a"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"1dd441855694cd524811360d42ef5bb7068de2e2","unresolved":false,"context_lines":[{"line_number":170,"context_line":"def get_script_location(neutron_config):"},{"line_number":171,"context_line":"    location \u003d \u0027neutron.db.migration:alembic_migrations\u0027"},{"line_number":172,"context_line":"    service_name \u003d neutron_config.service"},{"line_number":173,"context_line":"    service_lib \u003d None"},{"line_number":174,"context_line":"    if service_name \u003d\u003d LBAAS_SERVICE:"},{"line_number":175,"context_line":"        import neutron_lbaas as service_lib"},{"line_number":176,"context_line":"    elif service_name \u003d\u003d FWAAS_SERVICE:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_6b1b5d73","line":173,"in_reply_to":"3a961159_5f565f2b","updated":"2014-12-10 23:38:55.000000000","message":"Good Idea. Done.","commit_id":"230986f3c296b21e6ece3223a016e4c5f2d5716a"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"6f6fc47222f3ffbbbe4b7e6ff1fb92df694fd115","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    elif service_name \u003d\u003d VPNAAS_SERVICE:"},{"line_number":179,"context_line":"        import neutron_vpnaas as service_lib"},{"line_number":180,"context_line":"    if service_lib is not None:"},{"line_number":181,"context_line":"        location \u003d service_lib.__file__.rstrip(\u0027__init__.pyc\u0027)"},{"line_number":182,"context_line":"        location \u003d location.rstrip(\u0027__init__.py\u0027)"},{"line_number":183,"context_line":"        location +\u003d SERVICES_SCRIPT_LOCATION"},{"line_number":184,"context_line":"    return location"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_7047cf4b","line":181,"updated":"2014-12-10 21:42:53.000000000","message":"replace 181-2:\n\nlocation \u003d  os.path.dirname(service_lib.__file__)","commit_id":"230986f3c296b21e6ece3223a016e4c5f2d5716a"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"1dd441855694cd524811360d42ef5bb7068de2e2","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    elif service_name \u003d\u003d VPNAAS_SERVICE:"},{"line_number":179,"context_line":"        import neutron_vpnaas as service_lib"},{"line_number":180,"context_line":"    if service_lib is not None:"},{"line_number":181,"context_line":"        location \u003d service_lib.__file__.rstrip(\u0027__init__.pyc\u0027)"},{"line_number":182,"context_line":"        location \u003d location.rstrip(\u0027__init__.py\u0027)"},{"line_number":183,"context_line":"        location +\u003d SERVICES_SCRIPT_LOCATION"},{"line_number":184,"context_line":"    return location"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_5f91ffef","line":181,"in_reply_to":"3a961159_7047cf4b","updated":"2014-12-10 23:38:55.000000000","message":"Duhn! (combination of duh and done, get it?)","commit_id":"230986f3c296b21e6ece3223a016e4c5f2d5716a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"991deb8c0deeb5a26e51458ffe9056f3634e0c8f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    cfg.StrOpt(\u0027service\u0027,"},{"line_number":40,"context_line":"               choices\u003dVALID_SERVICES,"},{"line_number":41,"context_line":"               help\u003d_(\"The advanced service to execute the command against. \""},{"line_number":42,"context_line":"                      \"Can be one of \u0027lbaas\u0027, \u0027fwaas\u0027, \u0027vpnaas\u0027.\"))"},{"line_number":43,"context_line":"]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"_quota_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_fcf1ce01","line":42,"updated":"2014-12-11 16:50:36.000000000","message":"Yes, now you can do:\n\n  \"Can be one of \u0027%s\u0027.\" % \"\u0027, \u0027\".join(VALID_SERVICES)","commit_id":"f592630d1e3737578de9e9e1a06af5b2f80600bc"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"759eba6c79a617381607159f04d38e6645c6e198","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    cfg.StrOpt(\u0027service\u0027,"},{"line_number":40,"context_line":"               choices\u003dVALID_SERVICES,"},{"line_number":41,"context_line":"               help\u003d_(\"The advanced service to execute the command against. \""},{"line_number":42,"context_line":"                      \"Can be one of \u0027lbaas\u0027, \u0027fwaas\u0027, \u0027vpnaas\u0027.\"))"},{"line_number":43,"context_line":"]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"_quota_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_72a2659a","line":42,"updated":"2014-12-11 06:54:27.000000000","message":"super nit: you could replace those strings with the constants","commit_id":"f592630d1e3737578de9e9e1a06af5b2f80600bc"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"fc6b4fa416594b3299a72bba5b54f3bf70a6c1e3","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    cfg.StrOpt(\u0027service\u0027,"},{"line_number":40,"context_line":"               choices\u003dVALID_SERVICES,"},{"line_number":41,"context_line":"               help\u003d_(\"The advanced service to execute the command against. \""},{"line_number":42,"context_line":"                      \"Can be one of \u0027lbaas\u0027, \u0027fwaas\u0027, \u0027vpnaas\u0027.\"))"},{"line_number":43,"context_line":"]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"_quota_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_55dffa0c","line":42,"in_reply_to":"3a961159_fcf1ce01","updated":"2014-12-11 19:38:33.000000000","message":"Yeah, sorry I didn\u0027t see this.  Will fix on next PS.","commit_id":"f592630d1e3737578de9e9e1a06af5b2f80600bc"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"759eba6c79a617381607159f04d38e6645c6e198","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    location \u003d os.path.join(os.path.dirname(service_lib.__file__),"},{"line_number":179,"context_line":"                            SERVICES_SCRIPT_LOCATION)"},{"line_number":180,"context_line":"    return location"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"def get_alembic_config():"},{"line_number":184,"context_line":"    config \u003d alembic_config.Config(os.path.join(os.path.dirname(__file__),"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_52cc896a","line":181,"updated":"2014-12-11 06:54:27.000000000","message":"this is hella nicer.","commit_id":"f592630d1e3737578de9e9e1a06af5b2f80600bc"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"fc6b4fa416594b3299a72bba5b54f3bf70a6c1e3","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    location \u003d os.path.join(os.path.dirname(service_lib.__file__),"},{"line_number":179,"context_line":"                            SERVICES_SCRIPT_LOCATION)"},{"line_number":180,"context_line":"    return location"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"def get_alembic_config():"},{"line_number":184,"context_line":"    config \u003d alembic_config.Config(os.path.join(os.path.dirname(__file__),"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_d5d20aff","line":181,"in_reply_to":"3a961159_52cc896a","updated":"2014-12-11 19:38:33.000000000","message":"agreed.","commit_id":"f592630d1e3737578de9e9e1a06af5b2f80600bc"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"152ec5bc593aa1cc4661097e82919f022efa86ba","unresolved":false,"context_lines":[{"line_number":168,"context_line":"CONF.register_cli_opt(command_opt)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"def get_script_location(neutron_config):"},{"line_number":172,"context_line":"    location \u003d \u0027neutron.db.migration:alembic_migrations\u0027"},{"line_number":173,"context_line":"    if not neutron_config.service:"},{"line_number":174,"context_line":"        return location"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_b218f4d3","line":171,"updated":"2014-12-14 21:07:53.000000000","message":"I think this method is confusing on the return value. For neutron-core, it returns the python path whose delimiter is a period. On the other hand, for neutron adv services, it returns a path delimited by a slash. I believe the return value should be consistent.\n\nIf there is a reasonable reason, I hope it is commented in the code.","commit_id":"b5b1891810dbec02cd1b487985f4bf3608169be7"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"e007031f554d77a9f82a9782e0bb7032613d2c64","unresolved":false,"context_lines":[{"line_number":168,"context_line":"CONF.register_cli_opt(command_opt)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"def get_script_location(neutron_config):"},{"line_number":172,"context_line":"    location \u003d \u0027neutron.db.migration:alembic_migrations\u0027"},{"line_number":173,"context_line":"    if not neutron_config.service:"},{"line_number":174,"context_line":"        return location"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_224d93c4","line":171,"in_reply_to":"3a961159_0224170b","updated":"2014-12-15 03:48:33.000000000","message":"The following works:\n\ndef get_script_location(neutron_config):\n    location \u003d \u0027%s.db.migration:alembic_migrations\u0027\n    if neutron_config.service:\n        base \u003d \"neutron_%s\" % neutron_config.service\n    else:\n        base \u003d \"neutron\"\n    return location % base\n\nAre there any shortcomings to it?","commit_id":"b5b1891810dbec02cd1b487985f4bf3608169be7"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"92c077244cc54839a2b32d8cb043e89dbb9be8fc","unresolved":false,"context_lines":[{"line_number":168,"context_line":"CONF.register_cli_opt(command_opt)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"def get_script_location(neutron_config):"},{"line_number":172,"context_line":"    location \u003d \u0027neutron.db.migration:alembic_migrations\u0027"},{"line_number":173,"context_line":"    if not neutron_config.service:"},{"line_number":174,"context_line":"        return location"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_f537c3e0","line":171,"in_reply_to":"3a961159_224d93c4","updated":"2014-12-15 04:18:34.000000000","message":"Probably want something like this to give a better error message if an advanced service package is not installed:\n\ndef validate_service_installed(service):\n    if not importutils.try_import(\u0027neutron_%s\u0027 % service):\n        alembic_util.err(_(\u0027Package neutron-%s not installed\u0027) % service)\n\n\ndef get_script_location(neutron_config):\n    location \u003d \u0027%s.db.migration:alembic_migrations\u0027\n    if neutron_config.service:\n        validate_service_installed(neutron_config.service)\n        base \u003d \"neutron_%s\" % neutron_config.service\n    else:\n        base \u003d \"neutron\"\n    return location % base","commit_id":"b5b1891810dbec02cd1b487985f4bf3608169be7"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"7fe93ac0b112d22966bf0e76e4b97cf2890b0069","unresolved":false,"context_lines":[{"line_number":168,"context_line":"CONF.register_cli_opt(command_opt)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"def get_script_location(neutron_config):"},{"line_number":172,"context_line":"    location \u003d \u0027neutron.db.migration:alembic_migrations\u0027"},{"line_number":173,"context_line":"    if not neutron_config.service:"},{"line_number":174,"context_line":"        return location"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_0224170b","line":171,"in_reply_to":"3a961159_b218f4d3","updated":"2014-12-15 03:37:01.000000000","message":"well i suppose the 2 options for consistency here are:\n1) replace the last service_lib.__file__ \"/\" with a \":\" and then replace the rest with a \".\"\n2) change the default location (Line 172) to use slashes only.\n\nI\u0027m not a big fan of #1.  So if this is a must then I\u0027d go with #2.  I do understand your point that this function will return different  types of paths, and is inconsistent.","commit_id":"b5b1891810dbec02cd1b487985f4bf3608169be7"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"f1c8e9d0d9dfc2e6fd859f34d747ba7e3f682673","unresolved":false,"context_lines":[{"line_number":168,"context_line":"CONF.register_cli_opt(command_opt)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"def get_script_location(neutron_config):"},{"line_number":172,"context_line":"    location \u003d \u0027neutron.db.migration:alembic_migrations\u0027"},{"line_number":173,"context_line":"    if not neutron_config.service:"},{"line_number":174,"context_line":"        return location"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_e76612ee","line":171,"in_reply_to":"3a961159_f537c3e0","updated":"2014-12-16 06:27:31.000000000","message":"Done","commit_id":"b5b1891810dbec02cd1b487985f4bf3608169be7"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c6727d721b726fda1daa7423bca5afa4862400a3","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    location \u003d \u0027neutron.db.migration:alembic_migrations\u0027"},{"line_number":173,"context_line":"    if not neutron_config.service:"},{"line_number":174,"context_line":"        return location"},{"line_number":175,"context_line":"    from oslo.utils import importutils"},{"line_number":176,"context_line":"    service_lib \u003d importutils.import_module(\u0027neutron_%s\u0027 %"},{"line_number":177,"context_line":"                                            neutron_config.service)"},{"line_number":178,"context_line":"    location \u003d os.path.join(os.path.dirname(service_lib.__file__),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_27c84854","line":175,"updated":"2014-12-14 16:53:21.000000000","message":"why is this include not at the top of the file?","commit_id":"b5b1891810dbec02cd1b487985f4bf3608169be7"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"f1c8e9d0d9dfc2e6fd859f34d747ba7e3f682673","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    location \u003d \u0027neutron.db.migration:alembic_migrations\u0027"},{"line_number":173,"context_line":"    if not neutron_config.service:"},{"line_number":174,"context_line":"        return location"},{"line_number":175,"context_line":"    from oslo.utils import importutils"},{"line_number":176,"context_line":"    service_lib \u003d importutils.import_module(\u0027neutron_%s\u0027 %"},{"line_number":177,"context_line":"                                            neutron_config.service)"},{"line_number":178,"context_line":"    location \u003d os.path.join(os.path.dirname(service_lib.__file__),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_475e0614","line":175,"in_reply_to":"3a961159_12d1c822","updated":"2014-12-16 06:27:31.000000000","message":"Done","commit_id":"b5b1891810dbec02cd1b487985f4bf3608169be7"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"6e2790a8277b7c16ad69cb0ad17a4a58e053da35","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    location \u003d \u0027neutron.db.migration:alembic_migrations\u0027"},{"line_number":173,"context_line":"    if not neutron_config.service:"},{"line_number":174,"context_line":"        return location"},{"line_number":175,"context_line":"    from oslo.utils import importutils"},{"line_number":176,"context_line":"    service_lib \u003d importutils.import_module(\u0027neutron_%s\u0027 %"},{"line_number":177,"context_line":"                                            neutron_config.service)"},{"line_number":178,"context_line":"    location \u003d os.path.join(os.path.dirname(service_lib.__file__),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_b2d6344d","line":175,"in_reply_to":"3a961159_27c84854","updated":"2014-12-14 19:27:22.000000000","message":"It\u0027s a minor optimization to avoid importing in the non-service case. But it doesn\u0027t really buy much so I am OK with moving it to the top. I am also OK with keeping it here, so my +2 stays.","commit_id":"b5b1891810dbec02cd1b487985f4bf3608169be7"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"2c8d3699f930ed4690f13291395de3c1d703924e","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    location \u003d \u0027neutron.db.migration:alembic_migrations\u0027"},{"line_number":173,"context_line":"    if not neutron_config.service:"},{"line_number":174,"context_line":"        return location"},{"line_number":175,"context_line":"    from oslo.utils import importutils"},{"line_number":176,"context_line":"    service_lib \u003d importutils.import_module(\u0027neutron_%s\u0027 %"},{"line_number":177,"context_line":"                                            neutron_config.service)"},{"line_number":178,"context_line":"    location \u003d os.path.join(os.path.dirname(service_lib.__file__),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_07618c04","line":175,"in_reply_to":"3a961159_27c84854","updated":"2014-12-14 18:11:19.000000000","message":"sigh, gary is right.","commit_id":"b5b1891810dbec02cd1b487985f4bf3608169be7"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"cb87f0742473afd7539b323b12d5689fe02b786c","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    location \u003d \u0027neutron.db.migration:alembic_migrations\u0027"},{"line_number":173,"context_line":"    if not neutron_config.service:"},{"line_number":174,"context_line":"        return location"},{"line_number":175,"context_line":"    from oslo.utils import importutils"},{"line_number":176,"context_line":"    service_lib \u003d importutils.import_module(\u0027neutron_%s\u0027 %"},{"line_number":177,"context_line":"                                            neutron_config.service)"},{"line_number":178,"context_line":"    location \u003d os.path.join(os.path.dirname(service_lib.__file__),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_12d1c822","line":175,"in_reply_to":"3a961159_b2d6344d","updated":"2014-12-14 20:06:12.000000000","message":"I agree with Henry on this.  However, if another patch set is needed I can/will move it to the top.  Obviously, if there is strong opposition to this I\u0027ll move it to the top as I\u0027m not strongly in favor of one.","commit_id":"b5b1891810dbec02cd1b487985f4bf3608169be7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"152ec5bc593aa1cc4661097e82919f022efa86ba","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    service_lib \u003d importutils.import_module(\u0027neutron_%s\u0027 %"},{"line_number":177,"context_line":"                                            neutron_config.service)"},{"line_number":178,"context_line":"    location \u003d os.path.join(os.path.dirname(service_lib.__file__),"},{"line_number":179,"context_line":"                            SERVICES_SCRIPT_LOCATION)"},{"line_number":180,"context_line":"    return location"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_d20bc07a","line":179,"updated":"2014-12-14 21:07:53.000000000","message":"Based on my above comment, do we need to use the real file path here?","commit_id":"b5b1891810dbec02cd1b487985f4bf3608169be7"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"22d7bf5b97ab0bcc8659a9bad28ffc8a9f58a364","unresolved":false,"context_lines":[{"line_number":27,"context_line":"FWAAS_SERVICE \u003d \u0027fwaas\u0027"},{"line_number":28,"context_line":"VPNAAS_SERVICE \u003d \u0027vpnaas\u0027"},{"line_number":29,"context_line":"VALID_SERVICES \u003d (LBAAS_SERVICE, FWAAS_SERVICE, VPNAAS_SERVICE)"},{"line_number":30,"context_line":"SERVICES_SCRIPT_LOCATION \u003d \u0027db/migration/alembic_migrations\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"_core_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_0a6eba96","line":30,"updated":"2014-12-16 14:18:42.000000000","message":"Not used.","commit_id":"d857e8a80b48a7037bc37a390a001f6d76594c7a"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"028a68590a0d27d5f9baf44b1711de44a635fed0","unresolved":false,"context_lines":[{"line_number":27,"context_line":"FWAAS_SERVICE \u003d \u0027fwaas\u0027"},{"line_number":28,"context_line":"VPNAAS_SERVICE \u003d \u0027vpnaas\u0027"},{"line_number":29,"context_line":"VALID_SERVICES \u003d (LBAAS_SERVICE, FWAAS_SERVICE, VPNAAS_SERVICE)"},{"line_number":30,"context_line":"SERVICES_SCRIPT_LOCATION \u003d \u0027db/migration/alembic_migrations\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"_core_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_2a49af8b","line":30,"in_reply_to":"3a961159_0a6eba96","updated":"2014-12-16 16:55:23.000000000","message":"Damnit sorry :(\n\nDone.","commit_id":"d857e8a80b48a7037bc37a390a001f6d76594c7a"}]}
