)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b71d061a921bd9dd74c3c6579e860f4c385c284","unresolved":false,"context_lines":[{"line_number":22,"context_line":"structures being compared at the top level. This should help debugging"},{"line_number":23,"context_line":"racey unit test in the gate like"},{"line_number":24,"context_line":"test_describe_instances_with_filters_tags."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: I6f6e961a3c63f9f86fe9b21ce6c16a2e634e9ce5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a50d1a3_46e54ada","line":25,"updated":"2015-07-30 14:24:46.000000000","message":"It\u0027d be nice to have a bug associated to this so we could fingerprint in elastic-recheck and backport the change to stable (which we can anyway, but it\u0027s nicer for tracking).","commit_id":"01205187e77ab2c80101ea63a63b73d33d48b983"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f2eb4aaf0ed9d05b6154af63ab59c5a6f7f26dc3","unresolved":false,"context_lines":[{"line_number":22,"context_line":"structures being compared at the top level. This should help debugging"},{"line_number":23,"context_line":"racey unit test in the gate like"},{"line_number":24,"context_line":"test_describe_instances_with_filters_tags."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: I6f6e961a3c63f9f86fe9b21ce6c16a2e634e9ce5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a50d1a3_c6f07a94","line":25,"in_reply_to":"3a50d1a3_46e54ada","updated":"2015-07-30 14:25:43.000000000","message":"Ooo there is bug 1479780 and you opened it. :)","commit_id":"01205187e77ab2c80101ea63a63b73d33d48b983"}],"nova/test.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"04a911c9260b6b30b8b28a67f2308d33fd7cd7bd","unresolved":false,"context_lines":[{"line_number":347,"context_line":"            # inverting the observed / expected because testtools"},{"line_number":348,"context_line":"            # error messages assume expected is second. Possibly makes"},{"line_number":349,"context_line":"            # reading the error messages less confusing."},{"line_number":350,"context_line":"            raise testtools.matchers.MismatchError(observed, expected,"},{"line_number":351,"context_line":"                                          inner_mismatch, verbose\u003dTrue)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    def assertPublicAPISignatures(self, baseinst, inst):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_86fd920a","line":350,"updated":"2015-07-30 14:14:10.000000000","message":"Here is the init:\n\nhttps://github.com/testing-cabal/testtools/blob/master/testtools/matchers/_impl.py#L116\n\ndef __init__(self, matchee, matcher, mismatch, verbose\u003dFalse):\n\nRepresented here:\n\nhttps://github.com/testing-cabal/testtools/blob/master/testtools/matchers/_impl.py#L123\n\nIt\u0027s a little confusing but this looks right.","commit_id":"01205187e77ab2c80101ea63a63b73d33d48b983"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"2237916a8d7450d2f3b58803d80f4de645311c70","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        try:"},{"line_number":344,"context_line":"            inner(expected, observed)"},{"line_number":345,"context_line":"        except testtools.matchers.MismatchError as e:"},{"line_number":346,"context_line":"            inner_mismatch \u003d e.mismatch"},{"line_number":347,"context_line":"            # inverting the observed / expected because testtools"},{"line_number":348,"context_line":"            # error messages assume expected is second. Possibly makes"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_b50c643c","line":345,"updated":"2015-07-30 19:38:45.000000000","message":"As written this needs to catch AssertionError [thats the contract of assertEquals]. I think you could get a bunch more out of this by having the whole ting be a matcher.\n\ne.g.\n\n def assertJsonEqual(self, expected, observed):\n     self.assertThat(observed, JsonEquals(expected))\n\nand JsonEquals would then be expressed through composing/used matchers which will let you depend on that API.","commit_id":"858e6bcb579717a42e0e3c0cf1f04fbc6cc62ef2"}],"nova/tests/unit/test_test.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c43e3b4a83f6d0d5d4ccaf530d18b4699f1f159f","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        }"},{"line_number":106,"context_line":"        try:"},{"line_number":107,"context_line":"            self.assertJsonEqual(expected, observed)"},{"line_number":108,"context_line":"            self.fail(\"This should have raised a mismatch exception\")"},{"line_number":109,"context_line":"        except Exception as e:"},{"line_number":110,"context_line":"            # error reported is going to be a cryptic length failure"},{"line_number":111,"context_line":"            # on the level2 structure."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_1558d189","line":108,"updated":"2015-07-30 11:15:36.000000000","message":"maybe this should go in \"else\" branch, so that we try to handle it with \"except\" block?","commit_id":"f3d332ae91460cb54fe6a46ef4342ef8999d9a08"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"127c39615438f19cd63988c9082aa1ca747904ab","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        }"},{"line_number":106,"context_line":"        try:"},{"line_number":107,"context_line":"            self.assertJsonEqual(expected, observed)"},{"line_number":108,"context_line":"            self.fail(\"This should have raised a mismatch exception\")"},{"line_number":109,"context_line":"        except Exception as e:"},{"line_number":110,"context_line":"            # error reported is going to be a cryptic length failure"},{"line_number":111,"context_line":"            # on the level2 structure."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_1510d158","line":108,"in_reply_to":"3a50d1a3_1558d189","updated":"2015-07-30 11:24:29.000000000","message":"good point, thanks","commit_id":"f3d332ae91460cb54fe6a46ef4342ef8999d9a08"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c43e3b4a83f6d0d5d4ccaf530d18b4699f1f159f","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        }"},{"line_number":135,"context_line":"        try:"},{"line_number":136,"context_line":"            self.assertJsonEqual(expected, observed)"},{"line_number":137,"context_line":"            self.fail(\"This should have raised a mismatch exception\")"},{"line_number":138,"context_line":"        except Exception as e:"},{"line_number":139,"context_line":"            # error reported is going to be a cryptic length failure"},{"line_number":140,"context_line":"            # on the level2 structure."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_75f1156a","line":137,"updated":"2015-07-30 11:15:36.000000000","message":"ditto","commit_id":"f3d332ae91460cb54fe6a46ef4342ef8999d9a08"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"127c39615438f19cd63988c9082aa1ca747904ab","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        }"},{"line_number":135,"context_line":"        try:"},{"line_number":136,"context_line":"            self.assertJsonEqual(expected, observed)"},{"line_number":137,"context_line":"            self.fail(\"This should have raised a mismatch exception\")"},{"line_number":138,"context_line":"        except Exception as e:"},{"line_number":139,"context_line":"            # error reported is going to be a cryptic length failure"},{"line_number":140,"context_line":"            # on the level2 structure."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_b846b44d","line":137,"in_reply_to":"3a50d1a3_75f1156a","updated":"2015-07-30 11:24:29.000000000","message":"Done","commit_id":"f3d332ae91460cb54fe6a46ef4342ef8999d9a08"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"91eb107204f5c6dd41b4c1ca0d7846f2fa5ddf4d","unresolved":false,"context_lines":[{"line_number":137,"context_line":"            self.assertJsonEqual(expected, observed)"},{"line_number":138,"context_line":"        except Exception as e:"},{"line_number":139,"context_line":"            # error reported is going to be a cryptic length failure"},{"line_number":140,"context_line":"            # on the level2 structure."},{"line_number":141,"context_line":"            self.assertEqual(e.mismatch.describe(), \"\u0027b\u0027 !\u003d \u0027c\u0027\")"},{"line_number":142,"context_line":"            self.assertIn("},{"line_number":143,"context_line":"                \"Matchee: {\u0027top\u0027: {\u0027l1\u0027: {\u0027l2\u0027: [\u0027c\u0027, \u0027a\u0027, \u0027d\u0027]}}}\","}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_5acf5929","line":140,"updated":"2015-07-30 15:44:48.000000000","message":"femtonit: The comment is incorrect","commit_id":"858e6bcb579717a42e0e3c0cf1f04fbc6cc62ef2"}]}
