)]}'
{"swift/common/middleware/copy.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5802c520d040e2097690458394cda91dedbd9209","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        params \u003d sink_req.params"},{"line_number":377,"context_line":"        params_updated \u003d False"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"        if params.get(\u0027multipart-manifest\u0027) \u003d\u003d \u0027get\u0027:"},{"line_number":380,"context_line":"            if \u0027X-Static-Large-Object\u0027 in source_resp.headers:"},{"line_number":381,"context_line":"                params[\u0027multipart-manifest\u0027] \u003d \u0027put\u0027"},{"line_number":382,"context_line":"            if \u0027X-Object-Manifest\u0027 in source_resp.headers:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5faad753_2804437b","line":379,"updated":"2019-09-05 22:39:52.000000000","message":"We\u0027re already mucking with PUT params based on knowledge of middlewares expected to be right of us... so I guess this is tolerable?","commit_id":"1b1913af93b200de1998d6bc86450ec59e3c4aa6"}],"swift/common/middleware/versioned_writes.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f3ad0419a2b1bcfa81239f20fada00e625355d87","unresolved":false,"context_lines":[{"line_number":863,"context_line":"    def handle_versioned_request(self, req, versions_cont, api_version,"},{"line_number":864,"context_line":"                                 account, container, obj, version):"},{"line_number":865,"context_line":"        try:"},{"line_number":866,"context_line":"            Timestamp(version)"},{"line_number":867,"context_line":"        except ValueError:"},{"line_number":868,"context_line":"            raise HTTPBadRequest(\u0027invalid version param\u0027)"},{"line_number":869,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_18b7c7da","line":866,"range":{"start_line":866,"start_character":12,"end_line":866,"end_character":30},"updated":"2019-08-30 20:54:38.000000000","message":"Oh, right -- gotta check for \u0027null\u0027, too.","commit_id":"9dc1950b0210391b075ed056c8c20396777bc151"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5802c520d040e2097690458394cda91dedbd9209","unresolved":false,"context_lines":[{"line_number":863,"context_line":"    def handle_versioned_request(self, req, versions_cont, api_version,"},{"line_number":864,"context_line":"                                 account, container, obj, version):"},{"line_number":865,"context_line":"        try:"},{"line_number":866,"context_line":"            Timestamp(version)"},{"line_number":867,"context_line":"        except ValueError:"},{"line_number":868,"context_line":"            raise HTTPBadRequest(\u0027invalid version param\u0027)"},{"line_number":869,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5faad753_c8cfaf55","line":866,"range":{"start_line":866,"start_character":12,"end_line":866,"end_character":30},"in_reply_to":"7faddb67_18b7c7da","updated":"2019-09-05 22:39:52.000000000","message":"Done","commit_id":"9dc1950b0210391b075ed056c8c20396777bc151"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f3ad0419a2b1bcfa81239f20fada00e625355d87","unresolved":false,"context_lines":[{"line_number":868,"context_line":"            raise HTTPBadRequest(\u0027invalid version param\u0027)"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":"        if req.method \u003d\u003d \u0027DELETE\u0027:"},{"line_number":871,"context_line":"            # XXXX"},{"line_number":872,"context_line":"            return self.handle_delete_version("},{"line_number":873,"context_line":"                req, versions_cont, api_version, account,"},{"line_number":874,"context_line":"                container, obj, req.params[\u0027version\u0027])"},{"line_number":875,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_b8cb1370","line":872,"range":{"start_line":871,"start_character":12,"end_line":872,"end_character":46},"updated":"2019-08-30 20:54:38.000000000","message":"LOL! I forgot that I still need to implement the tricky part...","commit_id":"9dc1950b0210391b075ed056c8c20396777bc151"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5802c520d040e2097690458394cda91dedbd9209","unresolved":false,"context_lines":[{"line_number":868,"context_line":"            raise HTTPBadRequest(\u0027invalid version param\u0027)"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":"        if req.method \u003d\u003d \u0027DELETE\u0027:"},{"line_number":871,"context_line":"            # XXXX"},{"line_number":872,"context_line":"            return self.handle_delete_version("},{"line_number":873,"context_line":"                req, versions_cont, api_version, account,"},{"line_number":874,"context_line":"                container, obj, req.params[\u0027version\u0027])"},{"line_number":875,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5faad753_a8d6f3f0","line":872,"range":{"start_line":871,"start_character":12,"end_line":872,"end_character":46},"in_reply_to":"7faddb67_b8cb1370","updated":"2019-09-05 22:39:52.000000000","message":"Done","commit_id":"9dc1950b0210391b075ed056c8c20396777bc151"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f3ad0419a2b1bcfa81239f20fada00e625355d87","unresolved":false,"context_lines":[{"line_number":873,"context_line":"                req, versions_cont, api_version, account,"},{"line_number":874,"context_line":"                container, obj, req.params[\u0027version\u0027])"},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"        if version !\u003d \u0027null\u0027:"},{"line_number":877,"context_line":"            # just re-write the path; everything else goes through normally"},{"line_number":878,"context_line":"            req.path_info \u003d \"/%s/%s/%s/%s\" % ("},{"line_number":879,"context_line":"                api_version, account, versions_cont,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_58721f4c","line":876,"updated":"2019-08-30 20:54:38.000000000","message":"When version\u0027s null, we should probably do a HEAD on the \"current\" name -- if a versions-link, respond 404.","commit_id":"9dc1950b0210391b075ed056c8c20396777bc151"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5802c520d040e2097690458394cda91dedbd9209","unresolved":false,"context_lines":[{"line_number":873,"context_line":"                req, versions_cont, api_version, account,"},{"line_number":874,"context_line":"                container, obj, req.params[\u0027version\u0027])"},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"        if version !\u003d \u0027null\u0027:"},{"line_number":877,"context_line":"            # just re-write the path; everything else goes through normally"},{"line_number":878,"context_line":"            req.path_info \u003d \"/%s/%s/%s/%s\" % ("},{"line_number":879,"context_line":"                api_version, account, versions_cont,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5faad753_680a3b8b","line":876,"in_reply_to":"7faddb67_58721f4c","updated":"2019-09-05 22:39:52.000000000","message":"Done","commit_id":"9dc1950b0210391b075ed056c8c20396777bc151"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f3ad0419a2b1bcfa81239f20fada00e625355d87","unresolved":false,"context_lines":[{"line_number":1166,"context_line":"                is_enabled \u003d True"},{"line_number":1167,"context_line":""},{"line_number":1168,"context_line":"        if req.params.get(\u0027version\u0027):"},{"line_number":1169,"context_line":"            if req.method \u003d\u003d \u0027PUT\u0027:"},{"line_number":1170,"context_line":"                return HTTPBadRequest("},{"line_number":1171,"context_line":"                    \u0027cannot PUT a specific version\u0027, request\u003dreq)"},{"line_number":1172,"context_line":"            elif not versions_cont or versioning_mode !\u003d \u0027bezos\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_b3c7b445","line":1169,"range":{"start_line":1169,"start_character":12,"end_line":1169,"end_character":35},"updated":"2019-08-30 20:54:38.000000000","message":"One of the following needs to happen:\n\n- this code looks for whether it\u0027s coming from the copy middleware,\n- copy looks for and pops off any version param on PUT, or\n- we drop this entirely and just ignore version params on PUT.","commit_id":"9dc1950b0210391b075ed056c8c20396777bc151"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5802c520d040e2097690458394cda91dedbd9209","unresolved":false,"context_lines":[{"line_number":1166,"context_line":"                is_enabled \u003d True"},{"line_number":1167,"context_line":""},{"line_number":1168,"context_line":"        if req.params.get(\u0027version\u0027):"},{"line_number":1169,"context_line":"            if req.method \u003d\u003d \u0027PUT\u0027:"},{"line_number":1170,"context_line":"                return HTTPBadRequest("},{"line_number":1171,"context_line":"                    \u0027cannot PUT a specific version\u0027, request\u003dreq)"},{"line_number":1172,"context_line":"            elif not versions_cont or versioning_mode !\u003d \u0027bezos\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5faad753_4805ff79","line":1169,"range":{"start_line":1169,"start_character":12,"end_line":1169,"end_character":35},"in_reply_to":"7faddb67_b3c7b445","updated":"2019-09-05 22:39:52.000000000","message":"Went with the second one.","commit_id":"9dc1950b0210391b075ed056c8c20396777bc151"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5802c520d040e2097690458394cda91dedbd9209","unresolved":false,"context_lines":[{"line_number":1239,"context_line":"                for i in reversed(to_delete):"},{"line_number":1240,"context_line":"                    del listing[i]"},{"line_number":1241,"context_line":"                body \u003d json.dumps(list(heapq.merge("},{"line_number":1242,"context_line":"                    null_listing, listing, key\u003dlambda item: item[\u0027name\u0027]"},{"line_number":1243,"context_line":"                ))).encode(\u0027ascii\u0027)"},{"line_number":1244,"context_line":"                self.update_content_length(len(body))"},{"line_number":1245,"context_line":"                app_resp \u003d [body]"}],"source_content_type":"text/x-python","patch_set":2,"id":"5faad753_c8a1ef97","line":1242,"range":{"start_line":1242,"start_character":43,"end_line":1242,"end_character":72},"updated":"2019-09-05 22:39:52.000000000","message":"https://docs.python.org/3/library/heapq.html#heapq.merge :-(\n\n\u003e Changed in version 3.5: Added the optional key and reverse parameters.","commit_id":"1b1913af93b200de1998d6bc86450ec59e3c4aa6"}]}
