)]}'
{"swift/proxy/controllers/base.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7c311e68acf316ef18901d09f9a62846f60d7bd3","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    info \u003d _get_object_info(app, env, account, container, obj,"},{"line_number":290,"context_line":"                            swift_source\u003dswift_source)"},{"line_number":291,"context_line":"    if info:"},{"line_number":292,"context_line":"        info \u003d info.copy()"},{"line_number":293,"context_line":"    else:"},{"line_number":294,"context_line":"        info \u003d headers_to_object_info({}, 0)"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_3b600dcf","line":292,"range":{"start_line":292,"start_character":15,"end_line":292,"end_character":26},"updated":"2016-04-26 19:13:11.000000000","message":"Not copy.deepcopy(info)? What about the nested meta/sysmeta dicts?","commit_id":"d484bcd96abcf7bbaec65bc4ceb803e776c533c6"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"44f2320f99597cae236b468d17c921e2e561afa5","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    info \u003d _get_object_info(app, env, account, container, obj,"},{"line_number":290,"context_line":"                            swift_source\u003dswift_source)"},{"line_number":291,"context_line":"    if info:"},{"line_number":292,"context_line":"        info \u003d info.copy()"},{"line_number":293,"context_line":"    else:"},{"line_number":294,"context_line":"        info \u003d headers_to_object_info({}, 0)"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_746a2b82","line":292,"in_reply_to":"1a122d0e_3b600dcf","updated":"2016-04-29 20:46:03.000000000","message":"I was only protecting against the mutation in this function, but you\u0027re right, it\u0027s better to protect the cached values from some caller getting after them.\n\nCan we just rewrite this whole thing in Clojure? /s","commit_id":"d484bcd96abcf7bbaec65bc4ceb803e776c533c6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7c311e68acf316ef18901d09f9a62846f60d7bd3","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        if not is_autocreate_account:"},{"line_number":333,"context_line":"            account_info \u003d get_account_info(env, app, swift_source)"},{"line_number":334,"context_line":"            if not account_info or not is_success(account_info[\u0027status\u0027]):"},{"line_number":335,"context_line":"                return headers_to_container_info({}, 0)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        req \u003d _prepare_pre_auth_info_request("},{"line_number":338,"context_line":"            env, (\"/%s/%s/%s\" % (version, account, container)),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_1b50b1d3","line":335,"updated":"2016-04-26 19:13:11.000000000","message":"Immediate return? Not gonna set storage_policy?","commit_id":"d484bcd96abcf7bbaec65bc4ceb803e776c533c6"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"44f2320f99597cae236b468d17c921e2e561afa5","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        if not is_autocreate_account:"},{"line_number":333,"context_line":"            account_info \u003d get_account_info(env, app, swift_source)"},{"line_number":334,"context_line":"            if not account_info or not is_success(account_info[\u0027status\u0027]):"},{"line_number":335,"context_line":"                return headers_to_container_info({}, 0)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        req \u003d _prepare_pre_auth_info_request("},{"line_number":338,"context_line":"            env, (\"/%s/%s/%s\" % (version, account, container)),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_14f657d6","line":335,"in_reply_to":"1a122d0e_1b50b1d3","updated":"2016-04-29 20:46:03.000000000","message":"headers_to_container_info() sets it.\n\nThe one in this function kicks in when we find old data in memcache during an upgrade.","commit_id":"d484bcd96abcf7bbaec65bc4ceb803e776c533c6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7c311e68acf316ef18901d09f9a62846f60d7bd3","unresolved":false,"context_lines":[{"line_number":347,"context_line":"            info \u003d set_info_cache(app, env, account, container, resp)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    if info:"},{"line_number":350,"context_line":"        info \u003d info.copy()  # avoid mutating what\u0027s in swift.infocache"},{"line_number":351,"context_line":"    else:"},{"line_number":352,"context_line":"        info \u003d headers_to_container_info({}, 0)"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_1b18b174","line":350,"range":{"start_line":350,"start_character":20,"end_line":350,"end_character":24},"updated":"2016-04-26 19:13:11.000000000","message":"Ditto on the need for deepcopy.","commit_id":"d484bcd96abcf7bbaec65bc4ceb803e776c533c6"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"44f2320f99597cae236b468d17c921e2e561afa5","unresolved":false,"context_lines":[{"line_number":347,"context_line":"            info \u003d set_info_cache(app, env, account, container, resp)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    if info:"},{"line_number":350,"context_line":"        info \u003d info.copy()  # avoid mutating what\u0027s in swift.infocache"},{"line_number":351,"context_line":"    else:"},{"line_number":352,"context_line":"        info \u003d headers_to_container_info({}, 0)"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_9430a79f","line":350,"in_reply_to":"1a122d0e_1b18b174","updated":"2016-04-29 20:46:03.000000000","message":"Done","commit_id":"d484bcd96abcf7bbaec65bc4ceb803e776c533c6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7c311e68acf316ef18901d09f9a62846f60d7bd3","unresolved":false,"context_lines":[{"line_number":469,"context_line":"    :param  container: the unquoted container name or None"},{"line_number":470,"context_line":"    :param  resp: the response received or None if info cache should be cleared"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    :returns: the info that was placed into the cache"},{"line_number":473,"context_line":"    \"\"\""},{"line_number":474,"context_line":"    infocache \u003d env.setdefault(\u0027swift.infocache\u0027, {})"},{"line_number":475,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_5b1869d3","line":472,"updated":"2016-04-26 19:13:11.000000000","message":"...or None, if the request status was not in (404, 410, 2xx).","commit_id":"d484bcd96abcf7bbaec65bc4ceb803e776c533c6"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"44f2320f99597cae236b468d17c921e2e561afa5","unresolved":false,"context_lines":[{"line_number":469,"context_line":"    :param  container: the unquoted container name or None"},{"line_number":470,"context_line":"    :param  resp: the response received or None if info cache should be cleared"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    :returns: the info that was placed into the cache"},{"line_number":473,"context_line":"    \"\"\""},{"line_number":474,"context_line":"    infocache \u003d env.setdefault(\u0027swift.infocache\u0027, {})"},{"line_number":475,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_34227352","line":472,"in_reply_to":"1a122d0e_5b1869d3","updated":"2016-04-29 20:46:03.000000000","message":"Done","commit_id":"d484bcd96abcf7bbaec65bc4ceb803e776c533c6"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7c311e68acf316ef18901d09f9a62846f60d7bd3","unresolved":false,"context_lines":[{"line_number":632,"context_line":""},{"line_number":633,"context_line":"    # Make per-request caching work if possible"},{"line_number":634,"context_line":"    if \u0027swift.infocache\u0027 in env:"},{"line_number":635,"context_line":"        newenv[\u0027swift.infocache\u0027] \u003d env[\u0027swift.infocache\u0027]"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"    # Note that Request.blank expects quoted path"},{"line_number":638,"context_line":"    return Request.blank(quote(path), environ\u003dnewenv)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_7e1393b8","line":635,"updated":"2016-04-26 19:13:11.000000000","message":"Should we just include this block in the parent commit? It seems more in keeping with the \"Make info caching work across subrequests\" goal.","commit_id":"d484bcd96abcf7bbaec65bc4ceb803e776c533c6"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"44f2320f99597cae236b468d17c921e2e561afa5","unresolved":false,"context_lines":[{"line_number":632,"context_line":""},{"line_number":633,"context_line":"    # Make per-request caching work if possible"},{"line_number":634,"context_line":"    if \u0027swift.infocache\u0027 in env:"},{"line_number":635,"context_line":"        newenv[\u0027swift.infocache\u0027] \u003d env[\u0027swift.infocache\u0027]"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"    # Note that Request.blank expects quoted path"},{"line_number":638,"context_line":"    return Request.blank(quote(path), environ\u003dnewenv)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a122d0e_b4d4c31f","line":635,"in_reply_to":"1a122d0e_7e1393b8","updated":"2016-04-29 20:46:03.000000000","message":"Probably not a bad idea.","commit_id":"d484bcd96abcf7bbaec65bc4ceb803e776c533c6"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"8f001c0b88a1b4936f3fd6288f51061cc71f85e7","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        if info.get(field) is None:"},{"line_number":299,"context_line":"            info[field] \u003d 0"},{"line_number":300,"context_line":"        else:"},{"line_number":301,"context_line":"            info[field] \u003d int(info[field])"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    return info"},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_6feff6e8","line":301,"updated":"2016-04-29 21:52:18.000000000","message":"Is this not the same as   info[field] \u003d int(info.get(field,0))\nI mean sure, it converts an integer zero into an integer again but hey...","commit_id":"f4c3bfb5e4a76d9889e81fd22f6a262765f413b2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1cfdda9659c5ad3e3f62f15afc8673164e68bfa0","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        if info.get(field) is None:"},{"line_number":299,"context_line":"            info[field] \u003d 0"},{"line_number":300,"context_line":"        else:"},{"line_number":301,"context_line":"            info[field] \u003d int(info[field])"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    return info"},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_331e080e","line":301,"in_reply_to":"1a122d0e_6feff6e8","updated":"2016-04-29 22:19:09.000000000","message":"We\u0027ve already got\n\n \u0027length\u0027: headers.get(\u0027content-length\u0027)\n\nin headers_to_object_info; int(info.get(field, 0)) could still TypeError.\n\nIf we *really* wanted to get into some bikeshedding, there\u0027s always\n\n info[field] \u003d int(info.get(field) or 0)","commit_id":"f4c3bfb5e4a76d9889e81fd22f6a262765f413b2"}],"swift/proxy/controllers/container.py":[{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"979727dbebb9a4a9ef34fc4bed25ed68a14b9319","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            for key in self.app.swift_owner_headers:"},{"line_number":118,"context_line":"                if key in resp.headers:"},{"line_number":119,"context_line":"                    del resp.headers[key]"},{"line_number":120,"context_line":"        resp.headers[\u0027X-Backend-Recheck-Account-Existence\u0027] \u003d str("},{"line_number":121,"context_line":"            self.app.recheck_container_existence)"},{"line_number":122,"context_line":"        return resp"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_7e775b3a","line":120,"range":{"start_line":120,"start_character":32,"end_line":120,"end_character":39},"updated":"2016-03-02 13:31:27.000000000","message":"should this be: X-Backend-Recheck-Container-Existence ?\nalso, why not set this before calling set_info_cache as it was don in the account GETorHEAD method?","commit_id":"3a93cd7bf14520cfb3832524bd874c56ab90f287"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"eb5ca06eb9ec9d5f05c774fc0a02a431763f73ac","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            for key in self.app.swift_owner_headers:"},{"line_number":118,"context_line":"                if key in resp.headers:"},{"line_number":119,"context_line":"                    del resp.headers[key]"},{"line_number":120,"context_line":"        resp.headers[\u0027X-Backend-Recheck-Account-Existence\u0027] \u003d str("},{"line_number":121,"context_line":"            self.app.recheck_container_existence)"},{"line_number":122,"context_line":"        return resp"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_663b379d","line":120,"range":{"start_line":120,"start_character":32,"end_line":120,"end_character":39},"in_reply_to":"7af24918_7e775b3a","updated":"2016-03-02 17:20:06.000000000","message":"will fix","commit_id":"3a93cd7bf14520cfb3832524bd874c56ab90f287"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"979727dbebb9a4a9ef34fc4bed25ed68a14b9319","unresolved":false,"context_lines":[{"line_number":1074,"context_line":"    # XXX this thing purports to be about memcache, but it just sets"},{"line_number":1075,"context_line":"    # container_info up to do this crazy shit, and that ends up stubbing out"},{"line_number":1076,"context_line":"    # get_container_info, so no matter what you do in there to try to fix up"},{"line_number":1077,"context_line":"    # old shitty cached values, your code DOESN\u0027T EVEN RUN HAHA FUCK YOU"},{"line_number":1078,"context_line":""},{"line_number":1079,"context_line":"    # in this case policy_index is missing"},{"line_number":1080,"context_line":"    container_info \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_39fa0dbe","line":1077,"updated":"2016-03-02 13:31:27.000000000","message":"?","commit_id":"3a93cd7bf14520cfb3832524bd874c56ab90f287"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"eb5ca06eb9ec9d5f05c774fc0a02a431763f73ac","unresolved":false,"context_lines":[{"line_number":1074,"context_line":"    # XXX this thing purports to be about memcache, but it just sets"},{"line_number":1075,"context_line":"    # container_info up to do this crazy shit, and that ends up stubbing out"},{"line_number":1076,"context_line":"    # get_container_info, so no matter what you do in there to try to fix up"},{"line_number":1077,"context_line":"    # old shitty cached values, your code DOESN\u0027T EVEN RUN HAHA FUCK YOU"},{"line_number":1078,"context_line":""},{"line_number":1079,"context_line":"    # in this case policy_index is missing"},{"line_number":1080,"context_line":"    container_info \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_04d0731e","line":1077,"in_reply_to":"7af24918_39fa0dbe","updated":"2016-03-02 17:20:06.000000000","message":"Uhh... too many late nights debugging this code.\n\nAnyhow, this test is bunk anyway (asserting a 503 on stale cache?) so I\u0027m deleting it.\n\nSorry about the swearing.","commit_id":"3a93cd7bf14520cfb3832524bd874c56ab90f287"}]}
