)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d2e978c17a44b1feda8d2e33e3754b187e03c828","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Additionally, update the functests so this sort of thing would"},{"line_number":13,"context_line":"have been caught at the gate."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Idc1907d19f90af7a086f45f8faecee9fbc3c69c2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"bacf61ea_0e2a4490","line":14,"updated":"2016-08-04 16:33:02.000000000","message":"Closes-Bug ?","commit_id":"f93f962bb024412c64aaab90bbdd4afd91d5a331"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8c14ed22c545ddc72fc9ff7dd2c9a88310584baf","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Additionally, update the functests so this sort of thing would"},{"line_number":13,"context_line":"have been caught at the gate."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Idc1907d19f90af7a086f45f8faecee9fbc3c69c2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"bacf61ea_90276ab5","line":14,"in_reply_to":"bacf61ea_0e2a4490","updated":"2016-08-04 17:55:46.000000000","message":"Done","commit_id":"f93f962bb024412c64aaab90bbdd4afd91d5a331"}],"test/functional/tests.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d2e978c17a44b1feda8d2e33e3754b187e03c828","unresolved":false,"context_lines":[{"line_number":603,"context_line":"            self.assertTrue(file_item.write_random())"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"        for format_type in [None, \u0027json\u0027, \u0027xml\u0027]:"},{"line_number":606,"context_line":"            results \u003d cont.files()"},{"line_number":607,"context_line":"            if isinstance(results[0], dict):"},{"line_number":608,"context_line":"                results \u003d [x.get(\u0027name\u0027, x.get(\u0027subdir\u0027)) for x in results]"},{"line_number":609,"context_line":"            self.assertEqual(results, [\u0027test\u0027, \u0027test-bar\u0027, \u0027test-foo\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_b8c25e83","line":606,"updated":"2016-08-04 16:33:02.000000000","message":"I guess you probably wanted to add a format param here as well. Otherwise the test for dict below is unnecessary.","commit_id":"f93f962bb024412c64aaab90bbdd4afd91d5a331"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8c14ed22c545ddc72fc9ff7dd2c9a88310584baf","unresolved":false,"context_lines":[{"line_number":603,"context_line":"            self.assertTrue(file_item.write_random())"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"        for format_type in [None, \u0027json\u0027, \u0027xml\u0027]:"},{"line_number":606,"context_line":"            results \u003d cont.files()"},{"line_number":607,"context_line":"            if isinstance(results[0], dict):"},{"line_number":608,"context_line":"                results \u003d [x.get(\u0027name\u0027, x.get(\u0027subdir\u0027)) for x in results]"},{"line_number":609,"context_line":"            self.assertEqual(results, [\u0027test\u0027, \u0027test-bar\u0027, \u0027test-foo\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_9083ea55","line":606,"in_reply_to":"bacf61ea_b8c25e83","updated":"2016-08-04 17:55:46.000000000","message":"Done","commit_id":"f93f962bb024412c64aaab90bbdd4afd91d5a331"}],"test/unit/common/middleware/crypto/test_decrypter.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d2e978c17a44b1feda8d2e33e3754b187e03c828","unresolved":false,"context_lines":[{"line_number":867,"context_line":"        self.assertIn(\u0027\u0027, names)"},{"line_number":868,"context_line":"        self.assertEqual(0, calls[0])"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":"    def test_GET_container_json(self):"},{"line_number":871,"context_line":"        content_type_1 \u003d u\u0027\\uF10F\\uD20D\\uB30B\\u9409\u0027"},{"line_number":872,"context_line":"        content_type_2 \u003d \u0027text/plain; param\u003dfoo\u0027"},{"line_number":873,"context_line":"        pt_etag1 \u003d \u0027c6e8196d7f0fff6444b90861fe8d609d\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_8eb8f476","line":870,"updated":"2016-08-04 16:33:02.000000000","message":"ok. with the fix reverted, this test produces:\n\n  Error\nTraceback (most recent call last):\n  File \"/home/anc/0dev/swift/test/unit/common/middleware/crypto/test_decrypter.py\", line 896, in test_GET_container_json\n    resp \u003d self._make_cont_get_req(fake_body, \u0027json\u0027)\n  File \"/home/anc/0dev/swift/test/unit/common/middleware/crypto/test_decrypter.py\", line 848, in _make_cont_get_req\n    return req.get_response(self.decrypter)\n  File \"/home/anc/0dev/swift/swift/common/swob.py\", line 1006, in get_response\n    status, headers, app_iter \u003d self.call_application(application)\n  File \"/home/anc/0dev/swift/swift/common/swob.py\", line 992, in call_application\n    app_iter \u003d application(self.environ, start_response)\n  File \"/home/anc/0dev/swift/swift/common/middleware/crypto/decrypter.py\", line 447, in __call__\n    return handler(req, start_response)\n  File \"/home/anc/0dev/swift/swift/common/middleware/crypto/decrypter.py\", line 364, in handle_get\n    app_resp \u003d handler(keys[\u0027container\u0027], app_resp)\n  File \"/home/anc/0dev/swift/swift/common/middleware/crypto/decrypter.py\", line 393, in process_json_resp\n    for obj_dict in body_json])\n  File \"/home/anc/0dev/swift/swift/common/middleware/crypto/decrypter.py\", line 398, in decrypt_obj_dict\n    ciphertext \u003d obj_dict[\u0027hash\u0027]\nKeyError: \u0027hash\u0027","commit_id":"f93f962bb024412c64aaab90bbdd4afd91d5a331"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d2e978c17a44b1feda8d2e33e3754b187e03c828","unresolved":false,"context_lines":[{"line_number":963,"context_line":""},{"line_number":964,"context_line":"    def _assert_element(self, name, expected, element):"},{"line_number":965,"context_line":"        self.assertEqual(element.tagName, name)"},{"line_number":966,"context_line":"        self._assert_element_contains_dict(expected, element)"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"    def _assert_element_contains_dict(self, expected, element):"},{"line_number":969,"context_line":"        for k, v in expected.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_0ebfe4aa","line":966,"updated":"2016-08-04 16:33:02.000000000","message":"nice","commit_id":"f93f962bb024412c64aaab90bbdd4afd91d5a331"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d2e978c17a44b1feda8d2e33e3754b187e03c828","unresolved":false,"context_lines":[{"line_number":983,"context_line":""},{"line_number":984,"context_line":"        fake_body \u003d \u0027\u0027\u0027\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e"},{"line_number":985,"context_line":"\u003ccontainer name\u003d\"testc\"\u003e\\"},{"line_number":986,"context_line":"\u003csubdir name\u003d\"subdir\"\u003e\u003cname\u003esubdir\u003c/name\u003e\u003c/subdir\u003e\\"},{"line_number":987,"context_line":"\u003cobject\u003e\u003chash\u003e\\"},{"line_number":988,"context_line":"\u0027\u0027\u0027 + encrypt_and_append_meta(pt_etag1.encode(\u0027utf8\u0027), key) + \u0027\u0027\u0027\\"},{"line_number":989,"context_line":"\u003c/hash\u003e\u003ccontent_type\u003e\\"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_6e902044","line":986,"updated":"2016-08-04 16:33:02.000000000","message":"nit: might be worth making the listing \u0027name\u0027 be different from the element name, so:\n\n  \u003csubdir name\u003d\"test-subdir\"\u003e\u003cname\u003etest-subdir\u003c/name\u003e\u003c/subdir\u003e\n\njust in case we ever manage to regress the decrypter so that it places \u0027subdir\u0027 in the name fields","commit_id":"f93f962bb024412c64aaab90bbdd4afd91d5a331"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8c14ed22c545ddc72fc9ff7dd2c9a88310584baf","unresolved":false,"context_lines":[{"line_number":983,"context_line":""},{"line_number":984,"context_line":"        fake_body \u003d \u0027\u0027\u0027\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e"},{"line_number":985,"context_line":"\u003ccontainer name\u003d\"testc\"\u003e\\"},{"line_number":986,"context_line":"\u003csubdir name\u003d\"subdir\"\u003e\u003cname\u003esubdir\u003c/name\u003e\u003c/subdir\u003e\\"},{"line_number":987,"context_line":"\u003cobject\u003e\u003chash\u003e\\"},{"line_number":988,"context_line":"\u0027\u0027\u0027 + encrypt_and_append_meta(pt_etag1.encode(\u0027utf8\u0027), key) + \u0027\u0027\u0027\\"},{"line_number":989,"context_line":"\u003c/hash\u003e\u003ccontent_type\u003e\\"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_f0f7c6d0","line":986,"in_reply_to":"bacf61ea_6e902044","updated":"2016-08-04 17:55:46.000000000","message":"Done","commit_id":"f93f962bb024412c64aaab90bbdd4afd91d5a331"}]}
