)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"28c935bd2d32d926be4e5175bc2236511fcabbd9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Adam Young \u003cayoung@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-06-10 20:39:34 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"check for constraint before dropping"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ieff57d17f224ec31523bfcce288818a08d64f98a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAPX%2F%2FxH0%3D","line":7,"updated":"2013-06-11 01:38:08.000000000","message":"Reference bug?","commit_id":"5c4170ae48f555b6cc01f1604108840be2b93fc4"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"76180ea272e2270dd18908b258884b020d7f008b","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2013-06-18 17:28:40 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"check for constraint before dropping"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ieff57d17f224ec31523bfcce288818a08d64f98a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAPn%2F%2F4Rk%3D","line":8,"updated":"2013-06-19 06:14:17.000000000","message":"wants a description of why. This was commented on when this was submitted the first time and said that there should always be a foreign key constraint.","commit_id":"be63e1ec5c93fbaf81916c3ae887235e1c25c9cb"}],"keystone/common/sql/migration_helpers.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"76180ea272e2270dd18908b258884b020d7f008b","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    if len(fkeys):"},{"line_number":31,"context_line":"        return fkeys[0].name"},{"line_number":32,"context_line":"    else:"},{"line_number":33,"context_line":"        return None"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"#  remove_constraints and add_constraints both accept a list of dictionaries"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F4SM%3D","line":33,"updated":"2013-06-19 06:14:17.000000000","message":"it\u0027s petty but if you do fkeys \u003d [ fk.name for fk in table.constraints ...\nand then just return fkeys","commit_id":"be63e1ec5c93fbaf81916c3ae887235e1c25c9cb"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"76180ea272e2270dd18908b258884b020d7f008b","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                           (constraint_def[\u0027table\u0027],"},{"line_number":48,"context_line":"                            constraint_def[\u0027fk_column\u0027]))"},{"line_number":49,"context_line":"        if constraint_name is None:"},{"line_number":50,"context_line":"            continue"},{"line_number":51,"context_line":"        migrate.ForeignKeyConstraint("},{"line_number":52,"context_line":"            columns\u003d[getattr(constraint_def[\u0027table\u0027].c,"},{"line_number":53,"context_line":"                             constraint_def[\u0027fk_column\u0027])],"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F4R4%3D","line":50,"updated":"2013-06-19 06:14:17.000000000","message":"Then you can replace this with a \n\nfor contraint_name in constraint_names:\n    migrate.ForeinKeyConstraint(....","commit_id":"be63e1ec5c93fbaf81916c3ae887235e1c25c9cb"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"50810bff45532e4042a7e16e8f032fef1dc1220f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"#  Constraints.  SQLAlchemy does not yet attempt to determine the name"},{"line_number":24,"context_line":"#  for the constraint, and instead attempts to deduce it from the column."},{"line_number":25,"context_line":"#  This fails on MySQL."},{"line_number":26,"context_line":"def get_fkey_constraint_name(table, column_name):"},{"line_number":27,"context_line":"    fkeys \u003d [fk.name for fk in table.constraints"},{"line_number":28,"context_line":"             if (column_name in fk.columns and"},{"line_number":29,"context_line":"                 isinstance(fk, sqlalchemy.ForeignKeyConstraint))]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FnYo%3D","line":26,"updated":"2013-06-26 17:37:10.000000000","message":"this was returning a single name, and now it\u0027s returning an iterable; the method name does not reflect that","commit_id":"689bd20ce6f3b870b9251be99fb4c2008f466e16"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"f8c95504534a24663bb3651fb6aded9773a4db2e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"#  Constraints.  SQLAlchemy does not yet attempt to determine the name"},{"line_number":24,"context_line":"#  for the constraint, and instead attempts to deduce it from the column."},{"line_number":25,"context_line":"#  This fails on MySQL."},{"line_number":26,"context_line":"def get_fkey_constraint_name(table, column_name):"},{"line_number":27,"context_line":"    fkeys \u003d [fk.name for fk in table.constraints"},{"line_number":28,"context_line":"             if (column_name in fk.columns and"},{"line_number":29,"context_line":"                 isinstance(fk, sqlalchemy.ForeignKeyConstraint))]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FhJI%3D","line":26,"in_reply_to":"AAAAPn%2F%2FnYo%3D","updated":"2013-06-28 17:26:39.000000000","message":"Done","commit_id":"689bd20ce6f3b870b9251be99fb4c2008f466e16"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"50810bff45532e4042a7e16e8f032fef1dc1220f","unresolved":false,"context_lines":[{"line_number":40,"context_line":"#               for the constraint."},{"line_number":41,"context_line":"def remove_constraints(constraints):"},{"line_number":42,"context_line":"    for constraint_def in constraints:"},{"line_number":43,"context_line":"        for constraint_name in (get_fkey_constraint_name"},{"line_number":44,"context_line":"                                (constraint_def[\u0027table\u0027],"},{"line_number":45,"context_line":"                                 constraint_def[\u0027fk_column\u0027])):"},{"line_number":46,"context_line":"            migrate.ForeignKeyConstraint("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FnYc%3D","line":43,"updated":"2013-06-26 17:37:10.000000000","message":"it\u0027s not clear that this is an iterable","commit_id":"689bd20ce6f3b870b9251be99fb4c2008f466e16"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"f8c95504534a24663bb3651fb6aded9773a4db2e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"#               for the constraint."},{"line_number":41,"context_line":"def remove_constraints(constraints):"},{"line_number":42,"context_line":"    for constraint_def in constraints:"},{"line_number":43,"context_line":"        for constraint_name in (get_fkey_constraint_name"},{"line_number":44,"context_line":"                                (constraint_def[\u0027table\u0027],"},{"line_number":45,"context_line":"                                 constraint_def[\u0027fk_column\u0027])):"},{"line_number":46,"context_line":"            migrate.ForeignKeyConstraint("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FhJA%3D","line":43,"in_reply_to":"AAAAPn%2F%2FnYc%3D","updated":"2013-06-28 17:26:39.000000000","message":"Done","commit_id":"689bd20ce6f3b870b9251be99fb4c2008f466e16"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"50810bff45532e4042a7e16e8f032fef1dc1220f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    for constraint_def in constraints:"},{"line_number":43,"context_line":"        for constraint_name in (get_fkey_constraint_name"},{"line_number":44,"context_line":"                                (constraint_def[\u0027table\u0027],"},{"line_number":45,"context_line":"                                 constraint_def[\u0027fk_column\u0027])):"},{"line_number":46,"context_line":"            migrate.ForeignKeyConstraint("},{"line_number":47,"context_line":"                columns\u003d[getattr(constraint_def[\u0027table\u0027].c,"},{"line_number":48,"context_line":"                                 constraint_def[\u0027fk_column\u0027])],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FnZA%3D","line":45,"updated":"2013-06-26 17:37:10.000000000","message":"paren placement makes this really hard to read","commit_id":"689bd20ce6f3b870b9251be99fb4c2008f466e16"}]}
