)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1ea5ab618796bb18ecd6b3a73e985080b968ddf5","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Correct `find_migrate_repo` usage"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The `find_migrate_repo` function never used with an argument although the"},{"line_number":10,"context_line":"function interface is presuppose an optional argument named"},{"line_number":11,"context_line":"`package`. The wrong function usage makes the function redundant (the"},{"line_number":12,"context_line":"only one string is needed there, all other are never executed) and forces"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAUH%2F%2BHnA%3D","line":9,"updated":"2014-01-29 23:43:51.000000000","message":"change \"function never\" to \"function was never\" (add \"was\")","commit_id":"ef01d8de903477b65cf0a55f56f2dbe79a8c6e09"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1ea5ab618796bb18ecd6b3a73e985080b968ddf5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Correct `find_migrate_repo` usage"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The `find_migrate_repo` function never used with an argument although the"},{"line_number":10,"context_line":"function interface is presuppose an optional argument named"},{"line_number":11,"context_line":"`package`. The wrong function usage makes the function redundant (the"},{"line_number":12,"context_line":"only one string is needed there, all other are never executed) and forces"},{"line_number":13,"context_line":"redundant code lines in other modules."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAUH%2F%2BHm8%3D","line":10,"updated":"2014-01-29 23:43:51.000000000","message":"change \"is presuppose\" to \"presupposes\"","commit_id":"ef01d8de903477b65cf0a55f56f2dbe79a8c6e09"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1ea5ab618796bb18ecd6b3a73e985080b968ddf5","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The `find_migrate_repo` function never used with an argument although the"},{"line_number":10,"context_line":"function interface is presuppose an optional argument named"},{"line_number":11,"context_line":"`package`. The wrong function usage makes the function redundant (the"},{"line_number":12,"context_line":"only one string is needed there, all other are never executed) and forces"},{"line_number":13,"context_line":"redundant code lines in other modules."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"$ grep -r \"find_migrate_repo\" keystone"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAUH%2F%2BHmw%3D","line":12,"updated":"2014-01-29 23:43:51.000000000","message":"change \"the only one string\" to \"only one string\"\n\nchange \"all other\" to \"all others\"","commit_id":"ef01d8de903477b65cf0a55f56f2dbe79a8c6e09"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1ea5ab618796bb18ecd6b3a73e985080b968ddf5","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    keystone/common/sql/migration.py: repo_path \u003d find_migrate_repo()"},{"line_number":19,"context_line":"    keystone/common/sql/migration.py: repo_path \u003d find_migrate_repo()"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Changed several function interfaces. Removed redundant code in the modules."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Closes-Bug: #1273336"},{"line_number":24,"context_line":"Change-Id: Id62a1859a7e72139d25dfe91d29805660b4b7394"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAUH%2F%2BHmo%3D","line":21,"updated":"2014-01-29 23:43:51.000000000","message":"Remove this line since it\u0027s obvious from the code provided.","commit_id":"ef01d8de903477b65cf0a55f56f2dbe79a8c6e09"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7cf6d2138307055c006a7e37769f4ef7ffbfdbc4","unresolved":false,"context_lines":[{"line_number":10,"context_line":"function interface presupposes an optional argument named"},{"line_number":11,"context_line":"`package`. The wrong function usage makes the function redundant (only one"},{"line_number":12,"context_line":"string is needed there, all others are never executed) and forces redundant"},{"line_number":13,"context_line":"code lines in other modules."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"$ grep -r \"find_migrate_repo\" keystone"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"AAAAUX%2F%2F6JA%3D","line":13,"updated":"2014-02-10 02:03:10.000000000","message":"the comment here should make it clear what the right way to use find_migrate_repo is.","commit_id":"5e073b1fbb3b49376f983cb0c67a1d8dc4ab68e5"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"2b6e7c243292c197dd2b818d34fb594b393a26ca","unresolved":false,"context_lines":[{"line_number":10,"context_line":"function interface presupposes an optional argument named"},{"line_number":11,"context_line":"`package`. The wrong function usage makes the function redundant (only one"},{"line_number":12,"context_line":"string is needed there, all others are never executed) and forces redundant"},{"line_number":13,"context_line":"code lines in other modules."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"$ grep -r \"find_migrate_repo\" keystone"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"AAAAUX%2F%2F4Nc%3D","line":13,"in_reply_to":"AAAAUX%2F%2F6JA%3D","updated":"2014-02-10 08:13:43.000000000","message":"Done","commit_id":"5e073b1fbb3b49376f983cb0c67a1d8dc4ab68e5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"715430706c13320368d66ecacfbedd3abc69134f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"::db_version: [package]"},{"line_number":27,"context_line":"::db_version_control: [version, [package]]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"`find_migrate_repo` raises an error when migrate repository path doesn\u0027t"},{"line_number":30,"context_line":"exist. The error should be handeled to prevent further unexpected behaviour."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Closes-Bug: #1273336"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"AAAAUX%2F%2Febg%3D","line":29,"updated":"2014-02-12 22:55:22.000000000","message":"change \"when migrate\" to \"when the migrate\"","commit_id":"45ed360af3080812fa27381a859e8bad31c9b471"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"715430706c13320368d66ecacfbedd3abc69134f","unresolved":false,"context_lines":[{"line_number":27,"context_line":"::db_version_control: [version, [package]]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"`find_migrate_repo` raises an error when migrate repository path doesn\u0027t"},{"line_number":30,"context_line":"exist. The error should be handeled to prevent further unexpected behaviour."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Closes-Bug: #1273336"},{"line_number":33,"context_line":"Change-Id: Id62a1859a7e72139d25dfe91d29805660b4b7394"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"AAAAUX%2F%2Febc%3D","line":30,"updated":"2014-02-12 22:55:22.000000000","message":"change \"handeled\" to \"handled\"","commit_id":"45ed360af3080812fa27381a859e8bad31c9b471"}],"keystone/cli.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3f28a6b4c7f1ff1c1d6caa9a73a58e302366c59f","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                migration.db_version_control(repo\u003dpackage)"},{"line_number":87,"context_line":"            except exceptions.DatabaseAlreadyControlledError:"},{"line_number":88,"context_line":"                pass"},{"line_number":89,"context_line":"            migration.db_sync(repo\u003dpackage)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class DbVersion(BaseApp):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BQRQ%3D","line":89,"updated":"2014-01-28 17:02:16.000000000","message":"we need to continue to support the version option.","commit_id":"ac623327b4960e57ee955988f842fe9e252ae13a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"14bc12563b3e11a2490da5b9ac6724e1642bfa32","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                migration.db_version_control(repo\u003dpackage)"},{"line_number":87,"context_line":"            except exceptions.DatabaseAlreadyControlledError:"},{"line_number":88,"context_line":"                pass"},{"line_number":89,"context_line":"            migration.db_sync(repo\u003dpackage)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class DbVersion(BaseApp):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BKcs%3D","line":89,"in_reply_to":"AAAAUH%2F%2BQRQ%3D","updated":"2014-01-29 15:18:23.000000000","message":"Done","commit_id":"ac623327b4960e57ee955988f842fe9e252ae13a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"e128f90879cd586069281e22c2e22edce211e7c0","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        if not extension:"},{"line_number":74,"context_line":"            migration.db_sync(version\u003dversion)"},{"line_number":75,"context_line":"        else:"},{"line_number":76,"context_line":"            package_name \u003d \u0027.\u0027.join((contrib.__name__, extension))"},{"line_number":77,"context_line":"            try:"},{"line_number":78,"context_line":"                package \u003d importutils.import_module(package_name)"},{"line_number":79,"context_line":"            except ImportError:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2F9fI%3D","line":76,"updated":"2014-02-08 10:32:49.000000000","message":"We need to find out does migrate repository exist, instead of it we inquire does extension package exist. And totally ignore possible absence of migration repository.","commit_id":"65fff1ff9d89c7f0696c6868f83d8a493e1020c1"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"217a64224416e33e630a580bdcbc0bba9b71a046","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            package \u003d importutils.import_module(package_name)"},{"line_number":78,"context_line":"            migrate_repo_path \u003d os.path.abspath(os.path.dirname("},{"line_number":79,"context_line":"                os.path.join(package.__file__, \u0027migrate_repo\u0027)))"},{"line_number":80,"context_line":"            if not os.path.isdir(migrate_repo_path):"},{"line_number":81,"context_line":"                print(_(\"This extension does not provide migrations.\"))"},{"line_number":82,"context_line":"                exit(0)"},{"line_number":83,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2F9Qg%3D","line":80,"updated":"2014-02-08 13:46:34.000000000","message":"`migration` functions logic is changed: `db_sync` and `db_version_control` take package, not path. We must check for migrate repository existence. Catching ImportError does not help with acknowledgment of migrate repository absence any more.","commit_id":"112d7dc2086d02446877b41b9a482bca4631713e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7cf6d2138307055c006a7e37769f4ef7ffbfdbc4","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        extension \u003d CONF.command.extension"},{"line_number":74,"context_line":"        if extension:"},{"line_number":75,"context_line":"            package_name \u003d \u0027.\u0027.join((contrib.__name__, extension))"},{"line_number":76,"context_line":"            package \u003d importutils.import_module(package_name)"},{"line_number":77,"context_line":"            try:"},{"line_number":78,"context_line":"                migration.db_version_control(package\u003dpackage)"},{"line_number":79,"context_line":"                migration.db_sync(version\u003dversion, package\u003dpackage)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUX%2F%2F6IE%3D","line":76,"updated":"2014-02-10 02:03:10.000000000","message":"Seems like this could fail because the user provided an extension that doesn\u0027t exist. We should be able to provide a better error for this... you don\u0027t need to fix this here because it was an existing problem.","commit_id":"5e073b1fbb3b49376f983cb0c67a1d8dc4ab68e5"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"2b6e7c243292c197dd2b818d34fb594b393a26ca","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        extension \u003d CONF.command.extension"},{"line_number":74,"context_line":"        if extension:"},{"line_number":75,"context_line":"            package_name \u003d \u0027.\u0027.join((contrib.__name__, extension))"},{"line_number":76,"context_line":"            package \u003d importutils.import_module(package_name)"},{"line_number":77,"context_line":"            try:"},{"line_number":78,"context_line":"                migration.db_version_control(package\u003dpackage)"},{"line_number":79,"context_line":"                migration.db_sync(version\u003dversion, package\u003dpackage)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUX%2F%2F4QM%3D","line":76,"in_reply_to":"AAAAUX%2F%2F6IE%3D","updated":"2014-02-10 08:13:43.000000000","message":"Ok, I thought about it. I\u0027ll start another patch, after fourth it can\u0027t be worse :)","commit_id":"5e073b1fbb3b49376f983cb0c67a1d8dc4ab68e5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7cf6d2138307055c006a7e37769f4ef7ffbfdbc4","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            try:"},{"line_number":78,"context_line":"                migration.db_version_control(package\u003dpackage)"},{"line_number":79,"context_line":"                migration.db_sync(version\u003dversion, package\u003dpackage)"},{"line_number":80,"context_line":"            except exception.Error as e:"},{"line_number":81,"context_line":"                print(e)"},{"line_number":82,"context_line":"                exit(0)"},{"line_number":83,"context_line":"            # Register the repo with the version control API"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUX%2F%2F6H0%3D","line":80,"updated":"2014-02-10 02:03:10.000000000","message":"add a comment why need to catch this exception.","commit_id":"5e073b1fbb3b49376f983cb0c67a1d8dc4ab68e5"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"2b6e7c243292c197dd2b818d34fb594b393a26ca","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            try:"},{"line_number":78,"context_line":"                migration.db_version_control(package\u003dpackage)"},{"line_number":79,"context_line":"                migration.db_sync(version\u003dversion, package\u003dpackage)"},{"line_number":80,"context_line":"            except exception.Error as e:"},{"line_number":81,"context_line":"                print(e)"},{"line_number":82,"context_line":"                exit(0)"},{"line_number":83,"context_line":"            # Register the repo with the version control API"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUX%2F%2F4QI%3D","line":80,"in_reply_to":"AAAAUX%2F%2F6H0%3D","updated":"2014-02-10 08:13:43.000000000","message":"Done","commit_id":"5e073b1fbb3b49376f983cb0c67a1d8dc4ab68e5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7cf6d2138307055c006a7e37769f4ef7ffbfdbc4","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            package \u003d importutils.import_module(package_name)"},{"line_number":111,"context_line":"            try:"},{"line_number":112,"context_line":"                print(migration.db_version(package))"},{"line_number":113,"context_line":"            except exception.Error as e:"},{"line_number":114,"context_line":"                print(e)"},{"line_number":115,"context_line":"                exit(0)"},{"line_number":116,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUX%2F%2F6Ig%3D","line":113,"updated":"2014-02-10 02:03:10.000000000","message":"Add a comment why catching exception.Error here... I suspect there\u0027s lots of reasons that exception.Error might be raised and not just for the case where the extension doesn\u0027t provide migration. So maybe it would be better to catch an exception specific to this problem.","commit_id":"5e073b1fbb3b49376f983cb0c67a1d8dc4ab68e5"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"2b6e7c243292c197dd2b818d34fb594b393a26ca","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            package \u003d importutils.import_module(package_name)"},{"line_number":111,"context_line":"            try:"},{"line_number":112,"context_line":"                print(migration.db_version(package))"},{"line_number":113,"context_line":"            except exception.Error as e:"},{"line_number":114,"context_line":"                print(e)"},{"line_number":115,"context_line":"                exit(0)"},{"line_number":116,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUX%2F%2F4N4%3D","line":113,"in_reply_to":"AAAAUX%2F%2F6Ig%3D","updated":"2014-02-10 08:13:43.000000000","message":"Done","commit_id":"5e073b1fbb3b49376f983cb0c67a1d8dc4ab68e5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7cf6d2138307055c006a7e37769f4ef7ffbfdbc4","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                print(migration.db_version(package))"},{"line_number":113,"context_line":"            except exception.Error as e:"},{"line_number":114,"context_line":"                print(e)"},{"line_number":115,"context_line":"                exit(0)"},{"line_number":116,"context_line":"        else:"},{"line_number":117,"context_line":"            print(migration.db_version())"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUX%2F%2F6IY%3D","line":115,"updated":"2014-02-10 02:03:10.000000000","message":"we used to exit 1 if the extension didn\u0027t provide a migration. We should keep this behavior for backwards compatibility.","commit_id":"5e073b1fbb3b49376f983cb0c67a1d8dc4ab68e5"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"2b6e7c243292c197dd2b818d34fb594b393a26ca","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                print(migration.db_version(package))"},{"line_number":113,"context_line":"            except exception.Error as e:"},{"line_number":114,"context_line":"                print(e)"},{"line_number":115,"context_line":"                exit(0)"},{"line_number":116,"context_line":"        else:"},{"line_number":117,"context_line":"            print(migration.db_version())"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUX%2F%2F4OM%3D","line":115,"in_reply_to":"AAAAUX%2F%2F6IY%3D","updated":"2014-02-10 08:13:43.000000000","message":"Explain to me please, why `DbSync.main` uses 0? If it is an error in general it must be 1 in both of functions, but if it isn\u0027t — 0 must be in both of functions. ...at least at a glance.","commit_id":"5e073b1fbb3b49376f983cb0c67a1d8dc4ab68e5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"715430706c13320368d66ecacfbedd3abc69134f","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    def main():"},{"line_number":72,"context_line":"        version \u003d CONF.command.version"},{"line_number":73,"context_line":"        extension \u003d CONF.command.extension"},{"line_number":74,"context_line":"        if extension:"},{"line_number":75,"context_line":"            package_name \u003d \u0027.\u0027.join((contrib.__name__, extension))"},{"line_number":76,"context_line":"            package \u003d importutils.import_module(package_name)"},{"line_number":77,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUX%2F%2Fea8%3D","line":74,"updated":"2014-02-12 22:55:22.000000000","message":"It\u0027s unnecessary to change the if check. Suggest change this back to how it was done in the original code to minimize changes.","commit_id":"45ed360af3080812fa27381a859e8bad31c9b471"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"715430706c13320368d66ecacfbedd3abc69134f","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        extension \u003d CONF.command.extension"},{"line_number":74,"context_line":"        if extension:"},{"line_number":75,"context_line":"            package_name \u003d \u0027.\u0027.join((contrib.__name__, extension))"},{"line_number":76,"context_line":"            package \u003d importutils.import_module(package_name)"},{"line_number":77,"context_line":"            try:"},{"line_number":78,"context_line":"                migration.db_version_control(package\u003dpackage)"},{"line_number":79,"context_line":"                migration.db_sync(version\u003dversion, package\u003dpackage)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUX%2F%2Feao%3D","line":76,"updated":"2014-02-12 22:55:22.000000000","message":"this used to be in an \"except ImportError\" -- I think we should keep that behavior since that\u0027s not intended to be changed with this change.","commit_id":"45ed360af3080812fa27381a859e8bad31c9b471"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"715430706c13320368d66ecacfbedd3abc69134f","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            package \u003d importutils.import_module(package_name)"},{"line_number":77,"context_line":"            try:"},{"line_number":78,"context_line":"                migration.db_version_control(package\u003dpackage)"},{"line_number":79,"context_line":"                migration.db_sync(version\u003dversion, package\u003dpackage)"},{"line_number":80,"context_line":"            # In a case when an extension does not provide migration"},{"line_number":81,"context_line":"            # repository MigrationNotProvided will be raised. Further execution"},{"line_number":82,"context_line":"            # must be terminated, otherwise unobvious database errors are"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUX%2F%2FeaE%3D","line":79,"updated":"2014-02-12 22:55:22.000000000","message":"the call to\n\n migration.db_sync(version\u003dversion, package\u003dpackage)\n\nshould happen even if \"migration.db_version_control(package\u003dpackage)\" raised exceptions.DatabaseAlreadyControlledError.\n\nline 79 should be after line 92. (like it was before)\n\nAlternatively, move \"migration.db_version_control(package\u003dpackage)\" inside a try/except for exceptions.DatabaseAlreadyControlledError. -- something like this:\n\n try:\n     try:\n        migration.db_version_control(package\u003dpackage)\n     except exceptions.DatabaseAlreadyControlledError:\n        pass\n\n     migration.db_sync(version\u003dversion, package\u003dpackage)\n except exception.MigrationNotProvided as e:\n...","commit_id":"45ed360af3080812fa27381a859e8bad31c9b471"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"715430706c13320368d66ecacfbedd3abc69134f","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            # In a case when an extension does not provide migration"},{"line_number":81,"context_line":"            # repository MigrationNotProvided will be raised. Further execution"},{"line_number":82,"context_line":"            # must be terminated, otherwise unobvious database errors are"},{"line_number":83,"context_line":"            # guaranteed."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"            except exception.MigrationNotProvided as e:"},{"line_number":86,"context_line":"                print(e)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUX%2F%2FebM%3D","line":83,"updated":"2014-02-12 22:55:22.000000000","message":"with the improved name for the exception this comment isn\u0027t needed anymore in my opinion.","commit_id":"45ed360af3080812fa27381a859e8bad31c9b471"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"715430706c13320368d66ecacfbedd3abc69134f","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            try:"},{"line_number":117,"context_line":"                print(migration.db_version(package))"},{"line_number":118,"context_line":"            # In a case when an extension does not provide migration"},{"line_number":119,"context_line":"            # repository MigrationNotProvided error will be raised."},{"line_number":120,"context_line":"            except exception.MigrationNotProvided as e:"},{"line_number":121,"context_line":"                print(e)"},{"line_number":122,"context_line":"                exit(0)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUX%2F%2FebI%3D","line":119,"updated":"2014-02-12 22:55:22.000000000","message":"with the improved name for the exception this comment isn\u0027t needed anymore in my opinion.","commit_id":"45ed360af3080812fa27381a859e8bad31c9b471"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"fc13fcbb956aba90e6a0c12d77562be722ad2fe2","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                package \u003d importutils.import_module(package_name)"},{"line_number":116,"context_line":"            except ImportError:"},{"line_number":117,"context_line":"                raise ImportError(_(\"%s extension does not exist.\")"},{"line_number":118,"context_line":"                                  % package_name)"},{"line_number":119,"context_line":"            try:"},{"line_number":120,"context_line":"                print(migration.db_version(package))"},{"line_number":121,"context_line":"            except exception.MigrationNotProvided as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAUX%2F%2FKC4%3D","line":118,"updated":"2014-02-15 18:43:15.000000000","message":"since lines 113-118 are a copy of 75-80, suggest create a function to share.","commit_id":"7dcd6f03b88ac4c00e9c50e98f5318eac05527fd"}],"keystone/common/sql/migration.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3f28a6b4c7f1ff1c1d6caa9a73a58e302366c59f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    return result"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def db_sync(version\u003dNone, repo\u003dNone):"},{"line_number":53,"context_line":"    if version is not None:"},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            version \u003d int(version)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BQPU%3D","line":52,"updated":"2014-01-28 17:02:16.000000000","message":"suggest change \"repo\" to \"package\", since that\u0027s what\u0027s used already in find_migrate_repo (see line 78)","commit_id":"ac623327b4960e57ee955988f842fe9e252ae13a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"14bc12563b3e11a2490da5b9ac6724e1642bfa32","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    return result"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def db_sync(version\u003dNone, repo\u003dNone):"},{"line_number":53,"context_line":"    if version is not None:"},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            version \u003d int(version)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BKck%3D","line":52,"in_reply_to":"AAAAUH%2F%2BQPU%3D","updated":"2014-01-29 15:18:23.000000000","message":"Done","commit_id":"ac623327b4960e57ee955988f842fe9e252ae13a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3f28a6b4c7f1ff1c1d6caa9a73a58e302366c59f","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        except ValueError:"},{"line_number":57,"context_line":"            raise Exception(_(\u0027version should be an integer\u0027))"},{"line_number":58,"context_line":"    repo_path \u003d find_migrate_repo(repo)"},{"line_number":59,"context_line":"    current_version \u003d db_version(repo)"},{"line_number":60,"context_line":"    return migrate_repository(version, current_version, repo_path)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BQP0%3D","line":59,"updated":"2014-01-28 17:02:16.000000000","message":"suggest change \"repo\" to \"repo\u003drepo\" since it\u0027s a keyword parameter.","commit_id":"ac623327b4960e57ee955988f842fe9e252ae13a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"14bc12563b3e11a2490da5b9ac6724e1642bfa32","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        except ValueError:"},{"line_number":57,"context_line":"            raise Exception(_(\u0027version should be an integer\u0027))"},{"line_number":58,"context_line":"    repo_path \u003d find_migrate_repo(repo)"},{"line_number":59,"context_line":"    current_version \u003d db_version(repo)"},{"line_number":60,"context_line":"    return migrate_repository(version, current_version, repo_path)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BKcc%3D","line":59,"in_reply_to":"AAAAUH%2F%2BQP0%3D","updated":"2014-01-29 15:18:23.000000000","message":"Done","commit_id":"ac623327b4960e57ee955988f842fe9e252ae13a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3f28a6b4c7f1ff1c1d6caa9a73a58e302366c59f","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def db_version(repo\u003dNone):"},{"line_number":64,"context_line":"    repo_path \u003d find_migrate_repo(repo)"},{"line_number":65,"context_line":"    try:"},{"line_number":66,"context_line":"        return versioning_api.db_version(CONF.database.connection, repo_path)"},{"line_number":67,"context_line":"    except versioning_exceptions.DatabaseNotControlledError:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BQPk%3D","line":64,"updated":"2014-01-28 17:02:16.000000000","message":"suggest change \"repo\" to \"package\u003drepo\"","commit_id":"ac623327b4960e57ee955988f842fe9e252ae13a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3f28a6b4c7f1ff1c1d6caa9a73a58e302366c59f","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    try:"},{"line_number":66,"context_line":"        return versioning_api.db_version(CONF.database.connection, repo_path)"},{"line_number":67,"context_line":"    except versioning_exceptions.DatabaseNotControlledError:"},{"line_number":68,"context_line":"        return db_version_control(0, repo)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def db_version_control(version\u003dNone, repo\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BQPI%3D","line":68,"updated":"2014-01-28 17:02:16.000000000","message":"use named parameters -- version\u003d0, repo\u003drepo","commit_id":"ac623327b4960e57ee955988f842fe9e252ae13a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3f28a6b4c7f1ff1c1d6caa9a73a58e302366c59f","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def db_version_control(version\u003dNone, repo\u003dNone):"},{"line_number":72,"context_line":"    repo_path \u003d find_migrate_repo(repo)"},{"line_number":73,"context_line":"    versioning_api.version_control(CONF.database.connection, repo_path,"},{"line_number":74,"context_line":"                                   version)"},{"line_number":75,"context_line":"    return version"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BQPA%3D","line":72,"updated":"2014-01-28 17:02:16.000000000","message":"suggest change \"repo\" to \"package\u003drepo\"","commit_id":"ac623327b4960e57ee955988f842fe9e252ae13a"}]}
