)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4e455786f6d2b302fcd77ac247b499b544ddcc3e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"fixed tests in test_matchers to pass with random PYTHONHASHSEED"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"changed order in dicts, build expceted string in runtime."},{"line_number":10,"context_line":"Partial-Bug: #1348818"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ia3c5dce2da50135a83121557eb677e9748c34443"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3ab451fb_2a0e9c34","line":9,"range":{"start_line":9,"start_character":30,"end_line":9,"end_character":38},"updated":"2015-04-17 17:52:46.000000000","message":"\"expected\" is misspelled","commit_id":"ef3ccb8aac6be2004c1666fe6e7f1b8fc34eca7a"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4d49bb8019218f8c416c83d4b041b28686a2e9bf","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"fixed tests in test_matchers to pass with random PYTHONHASHSEED"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"changed order in dicts, build expceted string in runtime."},{"line_number":10,"context_line":"Partial-Bug: #1348818"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ia3c5dce2da50135a83121557eb677e9748c34443"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"dac4157f_9bacfdee","line":9,"in_reply_to":"3ab451fb_2a0e9c34","updated":"2015-04-20 09:23:56.000000000","message":"Done","commit_id":"ef3ccb8aac6be2004c1666fe6e7f1b8fc34eca7a"}],"nova/tests/unit/matchers.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4e455786f6d2b302fcd77ac247b499b544ddcc3e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        d2keys \u003d set(d2.keys())"},{"line_number":83,"context_line":"        if d1keys !\u003d d2keys:"},{"line_number":84,"context_line":"            d1only \u003d sorted(d1keys - d2keys)"},{"line_number":85,"context_line":"            d2only \u003d sorted(d2keys - d1keys)"},{"line_number":86,"context_line":"            return DictKeysMismatch(d1only, d2only)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        for key in d1keys:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3ab451fb_6a04a414","line":85,"updated":"2015-04-17 17:52:46.000000000","message":"I\u0027m sure I\u0027m missing something, but why is this needed? AFAICT, this doesn\u0027t make anything pass, but just makes sure that the string in the error is sorted, is that right?","commit_id":"ef3ccb8aac6be2004c1666fe6e7f1b8fc34eca7a"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4d49bb8019218f8c416c83d4b041b28686a2e9bf","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        d2keys \u003d set(d2.keys())"},{"line_number":83,"context_line":"        if d1keys !\u003d d2keys:"},{"line_number":84,"context_line":"            d1only \u003d sorted(d1keys - d2keys)"},{"line_number":85,"context_line":"            d2only \u003d sorted(d2keys - d1keys)"},{"line_number":86,"context_line":"            return DictKeysMismatch(d1only, d2only)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        for key in d1keys:"}],"source_content_type":"text/x-python","patch_set":10,"id":"dac4157f_3b2611bb","line":85,"in_reply_to":"3ab451fb_6a04a414","updated":"2015-04-20 09:23:56.000000000","message":"Dan, we need to sort sets to guarantee, that mismatch messages would be the same.","commit_id":"ef3ccb8aac6be2004c1666fe6e7f1b8fc34eca7a"}],"nova/tests/unit/test_matchers.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"727140c9808234972446673d1504c0e4c9de8607","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        (\"IsSubDictOf({0})\".format("},{"line_number":131,"context_line":"            str(OrderedDict(sorted({\u0027foo\u0027: \u0027bar\u0027, \u0027baz\u0027: \u0027DONTCARE\u0027,"},{"line_number":132,"context_line":"                                    \u0027cat\u0027: {\u0027tabby\u0027: True,"},{"line_number":133,"context_line":"                                            \u0027fluffy\u0027: False}}.items())))),"},{"line_number":134,"context_line":"         matches_matcher),"},{"line_number":135,"context_line":"    ]"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_d6afe17b","line":133,"updated":"2015-03-11 10:53:05.000000000","message":"This would be more readable if you pulled this dict out into matches_dict as you\u0027ve done above.","commit_id":"b4cf509e94ff3147092ad85641c4362faf3c3d6b"}]}
