)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f03e8ab82ed41dad6dbaca036f39f201686415a8","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Catch correct oslo.db exception"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now oslo.db wraps all the database exceptions into specific oslo.db"},{"line_number":10,"context_line":"exceptions. This is logically correct behavior, but a projects somewhere"},{"line_number":11,"context_line":"catches native Sqlalchemy exceptions."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I4576f19c4fd3db6742a6a2fbbca0e0e5400b792d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baada198_bc049b14","line":10,"updated":"2014-07-25 16:09:53.000000000","message":"I think this sentence got garbled somehow.","commit_id":"071b28c880b53aa3d5341351a7b63b5ed3c2a961"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"41cc54139b5d401b87109e27669c2acacc0bd9c3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Catch correct oslo.db exception"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now oslo.db wraps all the database exceptions into specific oslo.db"},{"line_number":10,"context_line":"exceptions. This is logically correct behavior, but a projects somewhere"},{"line_number":11,"context_line":"catches native Sqlalchemy exceptions."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I4576f19c4fd3db6742a6a2fbbca0e0e5400b792d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baada198_2c5836f8","line":10,"in_reply_to":"baada198_bc049b14","updated":"2014-07-28 08:20:59.000000000","message":"Done","commit_id":"071b28c880b53aa3d5341351a7b63b5ed3c2a961"}],"keystone/tests/test_sql_upgrade.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d73bf192d3357df535391766ff260245b169e79c","unresolved":false,"context_lines":[{"line_number":1195,"context_line":"        add_region(region_unique_table)"},{"line_number":1196,"context_line":"        self.assertEqual(1, session.query(region_unique_table).count())"},{"line_number":1197,"context_line":"        # verify the unique constraint is enforced"},{"line_number":1198,"context_line":"        self.assertRaises("},{"line_number":1199,"context_line":"            (sqlalchemy.exc.IntegrityError, db_exception.DBDuplicateEntry),"},{"line_number":1200,"context_line":"            add_region,"},{"line_number":1201,"context_line":"            table\u003dregion_unique_table)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_bc69fbc1","line":1198,"updated":"2014-07-25 16:12:27.000000000","message":"an inline comment explaining why both exceptions are possible/allowed here would be appreciated; otherwise, it just looks like it\u0027s asserting more ambiguous behavior","commit_id":"071b28c880b53aa3d5341351a7b63b5ed3c2a961"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"41cc54139b5d401b87109e27669c2acacc0bd9c3","unresolved":false,"context_lines":[{"line_number":1195,"context_line":"        add_region(region_unique_table)"},{"line_number":1196,"context_line":"        self.assertEqual(1, session.query(region_unique_table).count())"},{"line_number":1197,"context_line":"        # verify the unique constraint is enforced"},{"line_number":1198,"context_line":"        self.assertRaises("},{"line_number":1199,"context_line":"            (sqlalchemy.exc.IntegrityError, db_exception.DBDuplicateEntry),"},{"line_number":1200,"context_line":"            add_region,"},{"line_number":1201,"context_line":"            table\u003dregion_unique_table)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_8c686289","line":1198,"in_reply_to":"baada198_bc69fbc1","updated":"2014-07-28 08:20:59.000000000","message":"Done","commit_id":"071b28c880b53aa3d5341351a7b63b5ed3c2a961"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f03e8ab82ed41dad6dbaca036f39f201686415a8","unresolved":false,"context_lines":[{"line_number":1196,"context_line":"        self.assertEqual(1, session.query(region_unique_table).count())"},{"line_number":1197,"context_line":"        # verify the unique constraint is enforced"},{"line_number":1198,"context_line":"        self.assertRaises("},{"line_number":1199,"context_line":"            (sqlalchemy.exc.IntegrityError, db_exception.DBDuplicateEntry),"},{"line_number":1200,"context_line":"            add_region,"},{"line_number":1201,"context_line":"            table\u003dregion_unique_table)"},{"line_number":1202,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_f97545cc","line":1199,"updated":"2014-07-25 16:09:53.000000000","message":"Tests shouldn\u0027t be ambiguous like this. Add a note for why we need to do check for multiple exceptions (I\u0027d expect we\u0027d be able to remove sqlalchemy.exc.IntegrityError in the future sometime, so explain when it can be removed).","commit_id":"071b28c880b53aa3d5341351a7b63b5ed3c2a961"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"41cc54139b5d401b87109e27669c2acacc0bd9c3","unresolved":false,"context_lines":[{"line_number":1196,"context_line":"        self.assertEqual(1, session.query(region_unique_table).count())"},{"line_number":1197,"context_line":"        # verify the unique constraint is enforced"},{"line_number":1198,"context_line":"        self.assertRaises("},{"line_number":1199,"context_line":"            (sqlalchemy.exc.IntegrityError, db_exception.DBDuplicateEntry),"},{"line_number":1200,"context_line":"            add_region,"},{"line_number":1201,"context_line":"            table\u003dregion_unique_table)"},{"line_number":1202,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_6c6dce98","line":1199,"in_reply_to":"baada198_f97545cc","updated":"2014-07-28 08:20:59.000000000","message":"Done","commit_id":"071b28c880b53aa3d5341351a7b63b5ed3c2a961"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"eab1c02b57fb144a368a7ef9cc8b99fe8d9a4418","unresolved":false,"context_lines":[{"line_number":1196,"context_line":"        self.assertEqual(1, session.query(region_unique_table).count())"},{"line_number":1197,"context_line":"        # verify the unique constraint is enforced"},{"line_number":1198,"context_line":"        self.assertRaises("},{"line_number":1199,"context_line":"            # NOTE (I159): Since oslo.db wraps all the database exceptions into"},{"line_number":1200,"context_line":"            # more specific exception objects, we should catch both of"},{"line_number":1201,"context_line":"            # sqlalchemy and oslo.db exceptions."},{"line_number":1202,"context_line":"            # FIXME (I159): When the global requirements will be updated with"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_4c3f2a25","line":1199,"updated":"2014-07-28 09:02:05.000000000","message":"not sure it\u0027s worthwhile to have both NOTE and FIXME comments, but the change itself is correct :P","commit_id":"6374df12d8e3d8586e1a3747e952fed7fd45da99"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"7e5ffbf69156b9b38d55431942d7fb757d51a659","unresolved":false,"context_lines":[{"line_number":1196,"context_line":"        self.assertEqual(1, session.query(region_unique_table).count())"},{"line_number":1197,"context_line":"        # verify the unique constraint is enforced"},{"line_number":1198,"context_line":"        self.assertRaises("},{"line_number":1199,"context_line":"            # NOTE (I159): Since oslo.db wraps all the database exceptions into"},{"line_number":1200,"context_line":"            # more specific exception objects, we should catch both of"},{"line_number":1201,"context_line":"            # sqlalchemy and oslo.db exceptions."},{"line_number":1202,"context_line":"            # FIXME (I159): When the global requirements will be updated with"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_227acfba","line":1199,"in_reply_to":"baada198_06a3429e","updated":"2014-07-29 09:32:21.000000000","message":"Done","commit_id":"6374df12d8e3d8586e1a3747e952fed7fd45da99"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e1bc103a86677009873fb34a6e9666cdb3434996","unresolved":false,"context_lines":[{"line_number":1196,"context_line":"        self.assertEqual(1, session.query(region_unique_table).count())"},{"line_number":1197,"context_line":"        # verify the unique constraint is enforced"},{"line_number":1198,"context_line":"        self.assertRaises("},{"line_number":1199,"context_line":"            # NOTE (I159): Since oslo.db wraps all the database exceptions into"},{"line_number":1200,"context_line":"            # more specific exception objects, we should catch both of"},{"line_number":1201,"context_line":"            # sqlalchemy and oslo.db exceptions."},{"line_number":1202,"context_line":"            # FIXME (I159): When the global requirements will be updated with"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_06a3429e","line":1199,"in_reply_to":"baada198_4c3f2a25","updated":"2014-07-28 14:11:19.000000000","message":"++ addressing the FIXME should result in both the NOTE and FIXME being removed","commit_id":"6374df12d8e3d8586e1a3747e952fed7fd45da99"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"f59dcf43d86f0a9374d67b3eb8573750319b1918","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"        self.assertRaises("},{"line_number":1199,"context_line":"            # NOTE (I159): Since oslo.db wraps all the database exceptions into"},{"line_number":1200,"context_line":"            # more specific exception objects, we should catch both of"},{"line_number":1201,"context_line":"            # sqlalchemy and oslo.db exceptions."},{"line_number":1202,"context_line":"            # FIXME (I159): When the global requirements will be updated with"},{"line_number":1203,"context_line":"            # the version fixes exceptions wrapping, IntegrityError must be"},{"line_number":1204,"context_line":"            # removed from the tuple."}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_e60bae79","line":1201,"updated":"2014-07-28 14:10:31.000000000","message":"I think this note is just as confusing as having no note. I\u0027d rather have it explain how it\u0027s possible for two difference exceptions to the raised.","commit_id":"6374df12d8e3d8586e1a3747e952fed7fd45da99"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"7e5ffbf69156b9b38d55431942d7fb757d51a659","unresolved":false,"context_lines":[{"line_number":1198,"context_line":"        self.assertRaises("},{"line_number":1199,"context_line":"            # NOTE (I159): Since oslo.db wraps all the database exceptions into"},{"line_number":1200,"context_line":"            # more specific exception objects, we should catch both of"},{"line_number":1201,"context_line":"            # sqlalchemy and oslo.db exceptions."},{"line_number":1202,"context_line":"            # FIXME (I159): When the global requirements will be updated with"},{"line_number":1203,"context_line":"            # the version fixes exceptions wrapping, IntegrityError must be"},{"line_number":1204,"context_line":"            # removed from the tuple."}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_82e47ba9","line":1201,"in_reply_to":"baada198_e60bae79","updated":"2014-07-29 09:32:21.000000000","message":"I thought I explained it. Now we have wrapped exceptions, which are different type than it were previously. I\u0027ll try to rephrase, but if you have a concrete tips, you welcome to advice.\n\nThanks.","commit_id":"6374df12d8e3d8586e1a3747e952fed7fd45da99"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"25d0d44c40b17c99ebfc5534645d3a1cb56e7590","unresolved":false,"context_lines":[{"line_number":1199,"context_line":"            # NOTE (I159): Since oslo.db wraps all the database exceptions into"},{"line_number":1200,"context_line":"            # more specific exception objects, we should catch both of"},{"line_number":1201,"context_line":"            # sqlalchemy and oslo.db exceptions."},{"line_number":1202,"context_line":"            # FIXME (I159): When the global requirements will be updated with"},{"line_number":1203,"context_line":"            # the version fixes exceptions wrapping, IntegrityError must be"},{"line_number":1204,"context_line":"            # removed from the tuple."},{"line_number":1205,"context_line":"            (sqlalchemy.exc.IntegrityError, db_exception.DBDuplicateEntry),"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_acc97b7c","line":1202,"updated":"2014-07-29 06:02:30.000000000","message":"s/\"will be\"/is","commit_id":"6374df12d8e3d8586e1a3747e952fed7fd45da99"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"7e5ffbf69156b9b38d55431942d7fb757d51a659","unresolved":false,"context_lines":[{"line_number":1199,"context_line":"            # NOTE (I159): Since oslo.db wraps all the database exceptions into"},{"line_number":1200,"context_line":"            # more specific exception objects, we should catch both of"},{"line_number":1201,"context_line":"            # sqlalchemy and oslo.db exceptions."},{"line_number":1202,"context_line":"            # FIXME (I159): When the global requirements will be updated with"},{"line_number":1203,"context_line":"            # the version fixes exceptions wrapping, IntegrityError must be"},{"line_number":1204,"context_line":"            # removed from the tuple."},{"line_number":1205,"context_line":"            (sqlalchemy.exc.IntegrityError, db_exception.DBDuplicateEntry),"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_82b2bb94","line":1202,"in_reply_to":"baada198_acc97b7c","updated":"2014-07-29 09:32:21.000000000","message":"I\u0027m sorry, I\u0027m not native speaker... But it is not updated yet.\n\nAnyway done.","commit_id":"6374df12d8e3d8586e1a3747e952fed7fd45da99"}]}
