)]}'
{"swift/proxy/controllers/obj.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"e3d3cb4e22a8c65dd9178d53baeba603a6f3b895","unresolved":false,"context_lines":[{"line_number":784,"context_line":"                return HTTPServerError(request\u003dreq)"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"            while len(item_list) \u003e\u003d 1 and item_list[-1]:"},{"line_number":787,"context_line":"                previous_version \u003d item_list.pop(-1)"},{"line_number":788,"context_line":"                # there are older versions so copy the previous version to the"},{"line_number":789,"context_line":"                # current object and delete the previous version"},{"line_number":790,"context_line":"                orig_container \u003d self.container_name"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXH%2F%2FYi8%3D","line":787,"updated":"2014-04-22 07:21:21.000000000","message":"I wonder if we can make a shorter conditional expression and a method call like following:\n\nwhile len(item_list) \u003e 0:\n    previous_version \u003d item_list.pop()","commit_id":"9fc26f17c40f867be186ba0bbd5ca1cf31472112"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"e3d3cb4e22a8c65dd9178d53baeba603a6f3b895","unresolved":false,"context_lines":[{"line_number":802,"context_line":"                                     environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027HEAD\u0027})"},{"line_number":803,"context_line":"                hresp \u003d self.GETorHEAD_base("},{"line_number":804,"context_line":"                    hreq, _(\u0027Object\u0027), self.app.object_ring, partition,"},{"line_number":805,"context_line":"                    hreq.swift_entity_path)"},{"line_number":806,"context_line":"                if hresp.status_int \u003d\u003d HTTP_NOT_FOUND:"},{"line_number":807,"context_line":"                    # the version isn\u0027t there so we\u0027ll try with previous"},{"line_number":808,"context_line":"                    self.container_name \u003d orig_container"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXH%2F%2FYg4%3D","line":805,"updated":"2014-04-22 07:21:21.000000000","message":"I would like to suggest to use COPY instead of HEAD to reduce the number of HTTP calls. (i.e. proxy should call COPY at first as same as before then retry to restore another object only when the COPY request get HTTP_NOT_FOUND response)","commit_id":"9fc26f17c40f867be186ba0bbd5ca1cf31472112"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"d1414b6d7e26977a9e55c4be9017e4d5082ee311","unresolved":false,"context_lines":[{"line_number":773,"context_line":"            try:"},{"line_number":774,"context_line":"                for last_item in self._listing_iter(lcontainer, lprefix,"},{"line_number":775,"context_line":"                                                    req.environ):"},{"line_number":776,"context_line":"                    item_list.append(last_item)"},{"line_number":777,"context_line":"            except ListingIterNotFound:"},{"line_number":778,"context_line":"                # no worries, last_item is None"},{"line_number":779,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_dda62d53","line":776,"updated":"2014-08-26 07:14:17.000000000","message":"Now that this bit of code isn\u0027t just grabbing the last item from the iterator anymore, for readability sake we should change the name from last item to something else.. maybe item.","commit_id":"2511d675b67e746e1a256b74184599225d64c33c"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"1e179427579311411944eb47ecfaefbe66392a03","unresolved":false,"context_lines":[{"line_number":807,"context_line":"                    # the version isn\u0027t there so we\u0027ll try with previous"},{"line_number":808,"context_line":"                    self.container_name \u003d orig_container"},{"line_number":809,"context_line":"                    self.object_name \u003d orig_obj"},{"line_number":810,"context_line":"                    continue"},{"line_number":811,"context_line":"                if is_client_error(copy_resp.status_int):"},{"line_number":812,"context_line":"                    # some user error, maybe permissions"},{"line_number":813,"context_line":"                    return HTTPPreconditionFailed(request\u003dreq)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ac7a964_6c10f101","line":810,"updated":"2014-08-15 14:04:18.000000000","message":"is there a scenario where this loop can get stuck in an infinite NOT_FOUND situation?","commit_id":"2511d675b67e746e1a256b74184599225d64c33c"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"d1414b6d7e26977a9e55c4be9017e4d5082ee311","unresolved":false,"context_lines":[{"line_number":807,"context_line":"                    # the version isn\u0027t there so we\u0027ll try with previous"},{"line_number":808,"context_line":"                    self.container_name \u003d orig_container"},{"line_number":809,"context_line":"                    self.object_name \u003d orig_obj"},{"line_number":810,"context_line":"                    continue"},{"line_number":811,"context_line":"                if is_client_error(copy_resp.status_int):"},{"line_number":812,"context_line":"                    # some user error, maybe permissions"},{"line_number":813,"context_line":"                    return HTTPPreconditionFailed(request\u003dreq)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_38abaf8a","line":810,"in_reply_to":"7ac7a964_6c10f101","updated":"2014-08-26 07:14:17.000000000","message":"So long as the item_list gets popped every iteration and nothing is added to the list, it shouldn\u0027t fall into an infinite NOT_FOUND as far as I can tell from the code.","commit_id":"2511d675b67e746e1a256b74184599225d64c33c"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"6f4fafd426c991c2fd26b1bea69714ba9f12ab7a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    HTTPServerError, HTTPServiceUnavailable, Request, \\"},{"line_number":58,"context_line":"    HTTPClientDisconnect, HTTPNotImplemented"},{"line_number":59,"context_line":"from swift.common.request_helpers import is_sys_or_user_meta, is_sys_meta, \\"},{"line_number":60,"context_line":"    remove_items, copy_header_subset"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def copy_headers_into(from_r, to_r):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_c51fdc6a","line":60,"updated":"2014-09-02 23:48:30.000000000","message":"I\u0027m not so sure I like the mix of different import syntax. All multi-line imports should either use \u0027\\\u0027 or \u0027( )\u0027 syntax.","commit_id":"edbd9cf54f75304886b9869a26409c9a8ae64fbc"},{"author":{"_account_id":5189,"name":"Yuan Zhou","email":"dunk007@gmail.com","username":"yuan-zhou"},"change_message_id":"30d8c730e60c16837d7183c740178e2c799ba5e7","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    HTTPServerError, HTTPServiceUnavailable, Request, \\"},{"line_number":58,"context_line":"    HTTPClientDisconnect, HTTPNotImplemented"},{"line_number":59,"context_line":"from swift.common.request_helpers import is_sys_or_user_meta, is_sys_meta, \\"},{"line_number":60,"context_line":"    remove_items, copy_header_subset"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def copy_headers_into(from_r, to_r):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_16ebdcb0","line":60,"in_reply_to":"fa98f980_c51fdc6a","updated":"2014-09-03 01:06:49.000000000","message":"Matthew, there are some other places using this mixed style. I think this deserves one standalone patch to do the fix.","commit_id":"edbd9cf54f75304886b9869a26409c9a8ae64fbc"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"6f4fafd426c991c2fd26b1bea69714ba9f12ab7a","unresolved":false,"context_lines":[{"line_number":802,"context_line":"            item_list \u003d []"},{"line_number":803,"context_line":"            try:"},{"line_number":804,"context_line":"                for _item in self._listing_iter(lcontainer, lprefix,"},{"line_number":805,"context_line":"                                                    req.environ):"},{"line_number":806,"context_line":"                    item_list.append(_item)"},{"line_number":807,"context_line":"            except ListingIterNotFound:"},{"line_number":808,"context_line":"                # no worries, last_item is None"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_e8c837aa","line":805,"updated":"2014-09-02 23:48:30.000000000","message":"Line 805 needs to line up with lcontainer:\n\n  for _item in self._listing_iter(lcontainer, lprefix,\n                                  req.environ):","commit_id":"edbd9cf54f75304886b9869a26409c9a8ae64fbc"},{"author":{"_account_id":5189,"name":"Yuan Zhou","email":"dunk007@gmail.com","username":"yuan-zhou"},"change_message_id":"30d8c730e60c16837d7183c740178e2c799ba5e7","unresolved":false,"context_lines":[{"line_number":802,"context_line":"            item_list \u003d []"},{"line_number":803,"context_line":"            try:"},{"line_number":804,"context_line":"                for _item in self._listing_iter(lcontainer, lprefix,"},{"line_number":805,"context_line":"                                                    req.environ):"},{"line_number":806,"context_line":"                    item_list.append(_item)"},{"line_number":807,"context_line":"            except ListingIterNotFound:"},{"line_number":808,"context_line":"                # no worries, last_item is None"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_f633b85f","line":805,"in_reply_to":"fa98f980_e8c837aa","updated":"2014-09-03 01:06:49.000000000","message":"Done","commit_id":"edbd9cf54f75304886b9869a26409c9a8ae64fbc"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"fcd1d9732875b363a3f9637924da6284b4ebc65a","unresolved":false,"context_lines":[{"line_number":1095,"context_line":"            #                PUT  DEL  DEL  DEL"},{"line_number":1096,"context_line":"            set_http_connect(200, 200, 200, 200, 200, 200, 200,"},{"line_number":1097,"context_line":"                             200, 200, 200, 201, 201,"},{"line_number":1098,"context_line":"                             201, 200, 200, 200,"},{"line_number":1099,"context_line":"                             give_connect\u003dtest_connect,"},{"line_number":1100,"context_line":"                             body_iter\u003dbody_iter,"},{"line_number":1101,"context_line":"                             headers\u003d{\u0027x-versions-location\u0027: \u0027foo\u0027})"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2FPUw%3D","line":1098,"updated":"2014-04-23 05:37:04.000000000","message":"This change looks not to be  needed anymore, doesn\u0027t it?","commit_id":"ce84d864e11f797d82ad4a89f3c82e8627166728"},{"author":{"_account_id":5189,"name":"Yuan Zhou","email":"dunk007@gmail.com","username":"yuan-zhou"},"change_message_id":"b126088565dad69473b8f6f20f5bb7053c1b1c79","unresolved":false,"context_lines":[{"line_number":1095,"context_line":"            #                PUT  DEL  DEL  DEL"},{"line_number":1096,"context_line":"            set_http_connect(200, 200, 200, 200, 200, 200, 200,"},{"line_number":1097,"context_line":"                             200, 200, 200, 201, 201,"},{"line_number":1098,"context_line":"                             201, 200, 200, 200,"},{"line_number":1099,"context_line":"                             give_connect\u003dtest_connect,"},{"line_number":1100,"context_line":"                             body_iter\u003dbody_iter,"},{"line_number":1101,"context_line":"                             headers\u003d{\u0027x-versions-location\u0027: \u0027foo\u0027})"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2FPKw%3D","line":1098,"in_reply_to":"AAAAXH%2F%2FPUw%3D","updated":"2014-04-23 06:18:13.000000000","message":"correct. I\u0027ll do a reset the changes here.","commit_id":"ce84d864e11f797d82ad4a89f3c82e8627166728"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"fcd1d9732875b363a3f9637924da6284b4ebc65a","unresolved":false,"context_lines":[{"line_number":1142,"context_line":"            set_http_connect(404, 404, 404,  # get for the previous version"},{"line_number":1143,"context_line":"                             200, 200, 200,  # get for the pre-previous"},{"line_number":1144,"context_line":"                             201, 201, 201,  # put move the pre-previous"},{"line_number":1145,"context_line":"                             201, 201, 201,  # delete for the pre-previous"},{"line_number":1146,"context_line":"                             give_connect\u003dtest_connect)"},{"line_number":1147,"context_line":"            req \u003d Request.blank(\u0027/v1/a/c/o\u0027,"},{"line_number":1148,"context_line":"                                environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027DELETE\u0027})"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2FPRw%3D","line":1145,"updated":"2014-04-23 05:37:04.000000000","message":"In my understanding, Delete object will return 204 when object-server delete the object correctly although I don\u0027t know why test_expirer_DELETE_on_versioned_object assumes them as 200...","commit_id":"ce84d864e11f797d82ad4a89f3c82e8627166728"},{"author":{"_account_id":5189,"name":"Yuan Zhou","email":"dunk007@gmail.com","username":"yuan-zhou"},"change_message_id":"b126088565dad69473b8f6f20f5bb7053c1b1c79","unresolved":false,"context_lines":[{"line_number":1142,"context_line":"            set_http_connect(404, 404, 404,  # get for the previous version"},{"line_number":1143,"context_line":"                             200, 200, 200,  # get for the pre-previous"},{"line_number":1144,"context_line":"                             201, 201, 201,  # put move the pre-previous"},{"line_number":1145,"context_line":"                             201, 201, 201,  # delete for the pre-previous"},{"line_number":1146,"context_line":"                             give_connect\u003dtest_connect)"},{"line_number":1147,"context_line":"            req \u003d Request.blank(\u0027/v1/a/c/o\u0027,"},{"line_number":1148,"context_line":"                                environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027DELETE\u0027})"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2FO94%3D","line":1145,"in_reply_to":"AAAAXH%2F%2FPRw%3D","updated":"2014-04-23 06:18:13.000000000","message":"204 looks a bit better. \nswift.common.http.is_success only checks 200 \u003c\u003d status \u003c\u003d 299 so the code is working.\nI\u0027ll change that as well.","commit_id":"ce84d864e11f797d82ad4a89f3c82e8627166728"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"6f4fafd426c991c2fd26b1bea69714ba9f12ab7a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"from swift.common import storage_policy"},{"line_number":61,"context_line":"from swift.common.storage_policy import StoragePolicy, \\"},{"line_number":62,"context_line":"    StoragePolicyCollection, POLICIES"},{"line_number":63,"context_line":"from swift.common.request_helpers import get_sys_meta_prefix"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"# mocks"},{"line_number":66,"context_line":"logging.getLogger().addHandler(logging.StreamHandler(sys.stdout))"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_c8a293fc","line":63,"updated":"2014-09-02 23:48:30.000000000","message":"Another mix of multi-line import syntax.","commit_id":"edbd9cf54f75304886b9869a26409c9a8ae64fbc"}]}
