)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7ae2202b5f863f5dd78924eb973d7a7e680a6d6c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"* Added `repo_name` attribute with default value as `migrate_repo`. Allow"},{"line_number":10,"context_line":"flexibly look for migrate repos with different names."},{"line_number":11,"context_line":"* Abridged logic of dependency from a module location."},{"line_number":12,"context_line":"* Raising of appropriate error."},{"line_number":13,"context_line":"* Moved to `common.utils`. Required to synchronize with"},{"line_number":14,"context_line":"`openstack.common.db.sqlalchemy.migration`"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAUH%2F96SI%3D","line":12,"updated":"2014-02-01 15:36:52.000000000","message":"this sounds like it\u0027s fixing a bug and not refactoring.","commit_id":"638c01cc06b2b754038b00edb29688e949903c56"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"254606d064aa21bbe2d22e7083dcefa779eb12a4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"* Added `repo_name` attribute with default value as `migrate_repo`. Allow"},{"line_number":10,"context_line":"flexibly look for migrate repos with different names."},{"line_number":11,"context_line":"* Abridged logic of dependency from a module location."},{"line_number":12,"context_line":"* Raising of appropriate error."},{"line_number":13,"context_line":"* Moved to `common.utils`. Required to synchronize with"},{"line_number":14,"context_line":"`openstack.common.db.sqlalchemy.migration`"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAUH%2F91mY%3D","line":12,"in_reply_to":"AAAAUH%2F94mw%3D","updated":"2014-02-03 13:37:10.000000000","message":"This is absolutely different function compared with an original one. So I do not think it is good idea to change the way of error raising of the original function and in the next patch delete it without any traces. But if you think it is ok, no problem — I\u0027ll do it!","commit_id":"638c01cc06b2b754038b00edb29688e949903c56"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"303fc94b783d17284df3e05ba37acf6ff6a97438","unresolved":false,"context_lines":[{"line_number":9,"context_line":"* Added `repo_name` attribute with default value as `migrate_repo`. Allow"},{"line_number":10,"context_line":"flexibly look for migrate repos with different names."},{"line_number":11,"context_line":"* Abridged logic of dependency from a module location."},{"line_number":12,"context_line":"* Raising of appropriate error."},{"line_number":13,"context_line":"* Moved to `common.utils`. Required to synchronize with"},{"line_number":14,"context_line":"`openstack.common.db.sqlalchemy.migration`"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAUH%2F94mw%3D","line":12,"in_reply_to":"AAAAUH%2F94q4%3D","updated":"2014-02-02 13:38:35.000000000","message":"I suggest split it out into a separate commit.","commit_id":"638c01cc06b2b754038b00edb29688e949903c56"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"4d483e0509e46a7a4dd8d23f6f14b57ce9264fc6","unresolved":false,"context_lines":[{"line_number":9,"context_line":"* Added `repo_name` attribute with default value as `migrate_repo`. Allow"},{"line_number":10,"context_line":"flexibly look for migrate repos with different names."},{"line_number":11,"context_line":"* Abridged logic of dependency from a module location."},{"line_number":12,"context_line":"* Raising of appropriate error."},{"line_number":13,"context_line":"* Moved to `common.utils`. Required to synchronize with"},{"line_number":14,"context_line":"`openstack.common.db.sqlalchemy.migration`"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAUH%2F94q4%3D","line":12,"in_reply_to":"AAAAUH%2F96SI%3D","updated":"2014-02-02 12:27:30.000000000","message":"What is your suggestion for it?","commit_id":"638c01cc06b2b754038b00edb29688e949903c56"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"270450bc8df6644091ff148df0318e6846955247","unresolved":false,"context_lines":[{"line_number":9,"context_line":"* Added `repo_name` attribute with default value as `migrate_repo`. Allow"},{"line_number":10,"context_line":"flexibly look for migrate repos with different names."},{"line_number":11,"context_line":"* Abridged logic of dependency from a module location."},{"line_number":12,"context_line":"* Raising of appropriate error."},{"line_number":13,"context_line":"* Moved to `common.utils`. Required to synchronize with"},{"line_number":14,"context_line":"`openstack.common.db.sqlalchemy.migration`"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"AAAAUX%2F%2F6HU%3D","line":12,"updated":"2014-02-10 02:04:11.000000000","message":"Wasn\u0027t this moved to a different commit?","commit_id":"7025336eec7f04cdeea38f63e5f17a87a85b675b"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"6c94c66bafaf5aa83f06719261ac67a3e169e233","unresolved":false,"context_lines":[{"line_number":9,"context_line":"* Added `repo_name` attribute with default value as `migrate_repo`. Allow"},{"line_number":10,"context_line":"flexibly look for migrate repos with different names."},{"line_number":11,"context_line":"* Abridged logic of dependency from a module location."},{"line_number":12,"context_line":"* Raising of appropriate error."},{"line_number":13,"context_line":"* Moved to `common.utils`. Required to synchronize with"},{"line_number":14,"context_line":"`openstack.common.db.sqlalchemy.migration`"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"AAAAUX%2F%2F4TA%3D","line":12,"in_reply_to":"AAAAUX%2F%2F6HU%3D","updated":"2014-02-10 07:55:53.000000000","message":"Yes, it was.","commit_id":"7025336eec7f04cdeea38f63e5f17a87a85b675b"}],"keystone/common/sql/migration_helpers.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7ae2202b5f863f5dd78924eb973d7a7e680a6d6c","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"def find_migrate_repo(package\u003dNone, repo_name\u003d\u0027migrate_repo\u0027):"},{"line_number":105,"context_line":"    package \u003d package or sql"},{"line_number":106,"context_line":"    path \u003d os.path.abspath(os.path.join("},{"line_number":107,"context_line":"        os.path.dirname(package.__file__), repo_name))"},{"line_number":108,"context_line":"    if os.path.isdir(path):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F96SE%3D","line":105,"updated":"2014-02-01 15:36:52.000000000","message":"can sql be the default on line 104?","commit_id":"638c01cc06b2b754038b00edb29688e949903c56"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"303fc94b783d17284df3e05ba37acf6ff6a97438","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"def find_migrate_repo(package\u003dNone, repo_name\u003d\u0027migrate_repo\u0027):"},{"line_number":105,"context_line":"    package \u003d package or sql"},{"line_number":106,"context_line":"    path \u003d os.path.abspath(os.path.join("},{"line_number":107,"context_line":"        os.path.dirname(package.__file__), repo_name))"},{"line_number":108,"context_line":"    if os.path.isdir(path):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F94mo%3D","line":105,"in_reply_to":"AAAAUH%2F94qk%3D","updated":"2014-02-02 13:38:35.000000000","message":"ok, makes sense.","commit_id":"638c01cc06b2b754038b00edb29688e949903c56"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"4d483e0509e46a7a4dd8d23f6f14b57ce9264fc6","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"def find_migrate_repo(package\u003dNone, repo_name\u003d\u0027migrate_repo\u0027):"},{"line_number":105,"context_line":"    package \u003d package or sql"},{"line_number":106,"context_line":"    path \u003d os.path.abspath(os.path.join("},{"line_number":107,"context_line":"        os.path.dirname(package.__file__), repo_name))"},{"line_number":108,"context_line":"    if os.path.isdir(path):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F94qk%3D","line":105,"in_reply_to":"AAAAUH%2F96SE%3D","updated":"2014-02-02 12:27:30.000000000","message":"Yes, but it is depends... Because several functions from `migration.py`, which call the `find_migrate_repo`  function, have optional keyword argument `package`, so they can pass `None` directly to the function. In this case line 107 might be cause of `AttributeError`. So, yes, it can be default on line 104, but only with changing of interfaces of `migration` functions.","commit_id":"638c01cc06b2b754038b00edb29688e949903c56"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7ae2202b5f863f5dd78924eb973d7a7e680a6d6c","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    if os.path.isdir(path):"},{"line_number":109,"context_line":"        return path"},{"line_number":110,"context_line":"    raise OSError(errno\u003derrno.ENOENT, filename\u003dpath,"},{"line_number":111,"context_line":"                  strerror\u003d\"No such file or directory\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F96SA%3D","line":111,"updated":"2014-02-01 15:36:52.000000000","message":"The error message isn\u0027t appropriate -- there might be a file with the name, since the code requires that it\u0027s a directory. Suggest raise an exception with a message that will help the admin figure out what the problem is.\n\ne.g.\n\n raise Exception(_(\"The migration repository path at %s doesn\u0027t exist or isn\u0027t a directory.\"))\n\nAlso, put string in _() for translation.\n\nAlso, could use a unit test.","commit_id":"638c01cc06b2b754038b00edb29688e949903c56"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"4d483e0509e46a7a4dd8d23f6f14b57ce9264fc6","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    if os.path.isdir(path):"},{"line_number":109,"context_line":"        return path"},{"line_number":110,"context_line":"    raise OSError(errno\u003derrno.ENOENT, filename\u003dpath,"},{"line_number":111,"context_line":"                  strerror\u003d\"No such file or directory\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F94qg%3D","line":111,"in_reply_to":"AAAAUH%2F96SA%3D","updated":"2014-02-02 12:27:30.000000000","message":"Done","commit_id":"638c01cc06b2b754038b00edb29688e949903c56"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"62239ab101a250ea7d5a60c7358b291c161346b8","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        return path"},{"line_number":110,"context_line":"    raise OSError(errno\u003derrno.ENOENT, filename\u003dpath,"},{"line_number":111,"context_line":"                  strerror\u003d\"The migration repository path at %s \""},{"line_number":112,"context_line":"                           \"doesn\u0027t exist or isn\u0027t a directory.\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F9ypE%3D","line":112,"updated":"2014-02-03 21:58:05.000000000","message":"wrap the string in _() for translation.\n\nAlso, doesn\u0027t the filename have to be %-ed in?\n\nSuggest change this from OSError to a keystone exception since it\u0027s not an OSError.","commit_id":"1195025f3fc3bf4f609835e87b8ebc9ac26365cf"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"489e88aeef143167fe7f0333332260fc1cfb84e9","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        return path"},{"line_number":110,"context_line":"    raise OSError(errno\u003derrno.ENOENT, filename\u003dpath,"},{"line_number":111,"context_line":"                  strerror\u003d\"The migration repository path at %s \""},{"line_number":112,"context_line":"                           \"doesn\u0027t exist or isn\u0027t a directory.\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F9wpw%3D","line":112,"in_reply_to":"AAAAUH%2F9ypE%3D","updated":"2014-02-04 09:27:02.000000000","message":"What the Keystone exception do you talking about?","commit_id":"1195025f3fc3bf4f609835e87b8ebc9ac26365cf"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"762d5761a92580b718d313789401f2888d2e05b3","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        return path"},{"line_number":110,"context_line":"    raise OSError(errno\u003derrno.ENOENT, filename\u003dpath,"},{"line_number":111,"context_line":"                  strerror\u003d_(\"The migration repository path at %s \""},{"line_number":112,"context_line":"                             \"doesn\u0027t exist or isn\u0027t a directory.\") % path)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F9sV0%3D","line":112,"updated":"2014-02-04 22:35:53.000000000","message":"I don\u0027t think that keystone code should be raising OSError since we\u0027re not the os package. keystone defines its own exceptions in keystone.exception... looks like keystone.exception.Error could be raised here.","commit_id":"d90babe5a5cfb0d102e1526e3e01149f9ce4a0d1"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"a4357803c898093757b20cbac579fc459c6602d1","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        return path"},{"line_number":110,"context_line":"    raise OSError(errno\u003derrno.ENOENT, filename\u003dpath,"},{"line_number":111,"context_line":"                  strerror\u003d_(\"The migration repository path at %s \""},{"line_number":112,"context_line":"                             \"doesn\u0027t exist or isn\u0027t a directory.\") % path)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F9qiY%3D","line":112,"in_reply_to":"AAAAUH%2F9sV0%3D","updated":"2014-02-05 08:00:20.000000000","message":"Done","commit_id":"d90babe5a5cfb0d102e1526e3e01149f9ce4a0d1"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"f6d0fe847d2f589efb248f4d12fbfc3ef9bcd6b7","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        os.path.dirname(package.__file__), repo_name))"},{"line_number":106,"context_line":"    if os.path.isdir(path):"},{"line_number":107,"context_line":"        return path"},{"line_number":108,"context_line":"    raise exception.Error(message\u003d_(\"The migration repository path at %s \""},{"line_number":109,"context_line":"                          \"doesn\u0027t exist or isn\u0027t a directory.\") % path)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUX%2F%2FQng%3D","line":108,"updated":"2014-02-14 13:23:10.000000000","message":"Incorrect error class.","commit_id":"0026b56c444eb78845ac0e12bf81b98854f7de3f"}],"keystone/common/utils.py":[{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"24c4a0c02303a9b739579b886edd083f68383264","unresolved":false,"context_lines":[{"line_number":530,"context_line":"    set_permissions(path, mode, user, group, log)"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"def find_migrate_repo(module, repo_name\u003d\u0027migrate_repo\u0027):"},{"line_number":534,"context_line":"    path \u003d os.path.abspath(os.path.join("},{"line_number":535,"context_line":"        os.path.dirname(module.__file__), repo_name))"},{"line_number":536,"context_line":"    if os.path.isdir(path):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BKxM%3D","line":533,"updated":"2014-01-29 15:27:20.000000000","message":"Unfortunately it is impossible to use `sql` module as default value because of a090d962a0c595860e4a61d0e8cc8b3ea728a857. Now it is fraught of cyclic import issue.","commit_id":"ddc25d0b6e2fb0db125b2a62ae69fe296049a283"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"aa61792f568063318406237654b4ca9f8473aa55","unresolved":false,"context_lines":[{"line_number":530,"context_line":"    set_permissions(path, mode, user, group, log)"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"def find_migrate_repo(module, repo_name\u003d\u0027migrate_repo\u0027):"},{"line_number":534,"context_line":"    path \u003d os.path.abspath(os.path.join("},{"line_number":535,"context_line":"        os.path.dirname(module.__file__), repo_name))"},{"line_number":536,"context_line":"    if os.path.isdir(path):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BFz0%3D","line":533,"in_reply_to":"AAAAUH%2F%2BHkQ%3D","updated":"2014-01-30 08:10:36.000000000","message":"Sure, `migration_helpers.py` is perfect place for it.","commit_id":"ddc25d0b6e2fb0db125b2a62ae69fe296049a283"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b781b7a911bf80622c2c997bc67c1e815ae05c5a","unresolved":false,"context_lines":[{"line_number":530,"context_line":"    set_permissions(path, mode, user, group, log)"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"def find_migrate_repo(module, repo_name\u003d\u0027migrate_repo\u0027):"},{"line_number":534,"context_line":"    path \u003d os.path.abspath(os.path.join("},{"line_number":535,"context_line":"        os.path.dirname(module.__file__), repo_name))"},{"line_number":536,"context_line":"    if os.path.isdir(path):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BHkQ%3D","line":533,"in_reply_to":"AAAAUH%2F%2BKxM%3D","updated":"2014-01-29 23:45:42.000000000","message":"can this be moved to the sql module?","commit_id":"ddc25d0b6e2fb0db125b2a62ae69fe296049a283"}]}
