)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"cc9793bca158d6d4a16511a574507f30b8038bcf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"cae3a944_8e8a03cb","updated":"2024-11-04 11:22:10.000000000","message":"@ Tim I put an equivalent patch (but with fixes) on master https://review.opendev.org/c/openstack/swift/+/934031","commit_id":"f339d98f2e226e70e6afc5e41b3fb8bcbfb9550d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9b9f22ed77ef946b297a15e05f60529aff1ca18e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e744f1b4_fe548a58","updated":"2024-11-01 20:14:11.000000000","message":"Do we want this on feature/mpu, or master?","commit_id":"f339d98f2e226e70e6afc5e41b3fb8bcbfb9550d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9b11ef603ea2ff0800562825b210a89af4a3e715","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2a211455_a46f45f9","in_reply_to":"cae3a944_8e8a03cb","updated":"2024-11-04 19:29:20.000000000","message":"Love it! Merged, and bringing it in here with https://review.opendev.org/c/openstack/swift/+/934081","commit_id":"f339d98f2e226e70e6afc5e41b3fb8bcbfb9550d"}],"test/functional/swift_test_client.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9b9f22ed77ef946b297a15e05f60529aff1ca18e","unresolved":true,"context_lines":[{"line_number":895,"context_line":"            return self.conn.response"},{"line_number":896,"context_line":"        return True"},{"line_number":897,"context_line":""},{"line_number":898,"context_line":"    def copy_from(self, dest_cont, dest_file, hdrs\u003dNone, parms\u003dNone, cfg\u003dNone,"},{"line_number":899,"context_line":"                  return_resp\u003dFalse):"},{"line_number":900,"context_line":"        \"\"\""},{"line_number":901,"context_line":"        Make a copy of this object using a PUT request with an X-Copy-From"}],"source_content_type":"text/x-python","patch_set":2,"id":"22265122_cb4fc765","line":898,"range":{"start_line":898,"start_character":8,"end_line":898,"end_character":17},"updated":"2024-11-01 20:14:11.000000000","message":"This feels more like a `copy_to` or even a `put_to` method... though I get why you named it as you did.","commit_id":"f339d98f2e226e70e6afc5e41b3fb8bcbfb9550d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"cc9793bca158d6d4a16511a574507f30b8038bcf","unresolved":false,"context_lines":[{"line_number":895,"context_line":"            return self.conn.response"},{"line_number":896,"context_line":"        return True"},{"line_number":897,"context_line":""},{"line_number":898,"context_line":"    def copy_from(self, dest_cont, dest_file, hdrs\u003dNone, parms\u003dNone, cfg\u003dNone,"},{"line_number":899,"context_line":"                  return_resp\u003dFalse):"},{"line_number":900,"context_line":"        \"\"\""},{"line_number":901,"context_line":"        Make a copy of this object using a PUT request with an X-Copy-From"}],"source_content_type":"text/x-python","patch_set":2,"id":"fd06f67e_ae8fdc17","line":898,"range":{"start_line":898,"start_character":8,"end_line":898,"end_character":17},"in_reply_to":"22265122_cb4fc765","updated":"2024-11-04 11:22:10.000000000","message":"yeah, I struggled with naming this because it\u0027s a method on the source and ``copy_from`` therefore sounds like it\u0027s copying to the source from some other object. But ``put_to`` loses all connection with the use of ``x-copy-from``, and my small brain needed help tracking which copy-like method was which 😄\n\nMaybe I should be very explicit? ``copy_using_put`` or ``copy_using_x_copy_from``\n\nI\u0027ll change it for a patch to master and we can haggle more there :)","commit_id":"f339d98f2e226e70e6afc5e41b3fb8bcbfb9550d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9b9f22ed77ef946b297a15e05f60529aff1ca18e","unresolved":true,"context_lines":[{"line_number":912,"context_line":"        path \u003d [dest_cont, dest_file]"},{"line_number":913,"context_line":"        if self.conn.make_request(\u0027PUT\u0027, path, hdrs\u003dheaders,"},{"line_number":914,"context_line":"                                  cfg\u003dcfg, parms\u003dparms) !\u003d 201:"},{"line_number":915,"context_line":"            raise ResponseError(self.conn.response, \u0027COPY\u0027,"},{"line_number":916,"context_line":"                                self.conn.make_path(self.path))"},{"line_number":917,"context_line":"        if return_resp:"},{"line_number":918,"context_line":"            return self.conn.response"}],"source_content_type":"text/x-python","patch_set":2,"id":"a34854e6_35730575","line":915,"range":{"start_line":915,"start_character":53,"end_line":915,"end_character":57},"updated":"2024-11-01 20:14:11.000000000","message":"Not `PUT`?","commit_id":"f339d98f2e226e70e6afc5e41b3fb8bcbfb9550d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"cc9793bca158d6d4a16511a574507f30b8038bcf","unresolved":false,"context_lines":[{"line_number":912,"context_line":"        path \u003d [dest_cont, dest_file]"},{"line_number":913,"context_line":"        if self.conn.make_request(\u0027PUT\u0027, path, hdrs\u003dheaders,"},{"line_number":914,"context_line":"                                  cfg\u003dcfg, parms\u003dparms) !\u003d 201:"},{"line_number":915,"context_line":"            raise ResponseError(self.conn.response, \u0027COPY\u0027,"},{"line_number":916,"context_line":"                                self.conn.make_path(self.path))"},{"line_number":917,"context_line":"        if return_resp:"},{"line_number":918,"context_line":"            return self.conn.response"}],"source_content_type":"text/x-python","patch_set":2,"id":"505aa21f_6582c042","line":915,"range":{"start_line":915,"start_character":53,"end_line":915,"end_character":57},"in_reply_to":"a34854e6_35730575","updated":"2024-11-04 11:22:10.000000000","message":"duh. good catch","commit_id":"f339d98f2e226e70e6afc5e41b3fb8bcbfb9550d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9b9f22ed77ef946b297a15e05f60529aff1ca18e","unresolved":true,"context_lines":[{"line_number":913,"context_line":"        if self.conn.make_request(\u0027PUT\u0027, path, hdrs\u003dheaders,"},{"line_number":914,"context_line":"                                  cfg\u003dcfg, parms\u003dparms) !\u003d 201:"},{"line_number":915,"context_line":"            raise ResponseError(self.conn.response, \u0027COPY\u0027,"},{"line_number":916,"context_line":"                                self.conn.make_path(self.path))"},{"line_number":917,"context_line":"        if return_resp:"},{"line_number":918,"context_line":"            return self.conn.response"},{"line_number":919,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"2df2f7e8_99cd9191","line":916,"range":{"start_line":916,"start_character":52,"end_line":916,"end_character":61},"updated":"2024-11-01 20:14:11.000000000","message":"Not `path`?","commit_id":"f339d98f2e226e70e6afc5e41b3fb8bcbfb9550d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"cc9793bca158d6d4a16511a574507f30b8038bcf","unresolved":false,"context_lines":[{"line_number":913,"context_line":"        if self.conn.make_request(\u0027PUT\u0027, path, hdrs\u003dheaders,"},{"line_number":914,"context_line":"                                  cfg\u003dcfg, parms\u003dparms) !\u003d 201:"},{"line_number":915,"context_line":"            raise ResponseError(self.conn.response, \u0027COPY\u0027,"},{"line_number":916,"context_line":"                                self.conn.make_path(self.path))"},{"line_number":917,"context_line":"        if return_resp:"},{"line_number":918,"context_line":"            return self.conn.response"},{"line_number":919,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"51ea696e_bc308cdb","line":916,"range":{"start_line":916,"start_character":52,"end_line":916,"end_character":61},"in_reply_to":"2df2f7e8_99cd9191","updated":"2024-11-04 11:22:10.000000000","message":"Done","commit_id":"f339d98f2e226e70e6afc5e41b3fb8bcbfb9550d"}],"test/functional/test_slo.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9b9f22ed77ef946b297a15e05f60529aff1ca18e","unresolved":true,"context_lines":[{"line_number":1166,"context_line":"    def test_slo_copy_the_manifest_using_x_copy_from(self):"},{"line_number":1167,"context_line":"        # as per test_slo_copy_the_manifest but using a PUT with x-copy-from"},{"line_number":1168,"context_line":"        source \u003d self.env.container.file(\"manifest-abcde\")"},{"line_number":1169,"context_line":"        source.initialize(parms\u003d{\u0027multipart-manifest\u0027: \u0027get\u0027})"},{"line_number":1170,"context_line":"        source_contents \u003d source.read(parms\u003d{\u0027multipart-manifest\u0027: \u0027get\u0027})"},{"line_number":1171,"context_line":"        source_json \u003d json.loads(source_contents)"},{"line_number":1172,"context_line":"        manifest_etag \u003d md5(source_contents, usedforsecurity\u003dFalse).hexdigest()"}],"source_content_type":"text/x-python","patch_set":2,"id":"690f5980_35d026f9","line":1169,"updated":"2024-11-01 20:14:11.000000000","message":"Looks like this was copied from `test_slo_copy_the_manifest_updating_metadata`, but I wonder why we do this `initialize`...","commit_id":"f339d98f2e226e70e6afc5e41b3fb8bcbfb9550d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9b11ef603ea2ff0800562825b210a89af4a3e715","unresolved":false,"context_lines":[{"line_number":1166,"context_line":"    def test_slo_copy_the_manifest_using_x_copy_from(self):"},{"line_number":1167,"context_line":"        # as per test_slo_copy_the_manifest but using a PUT with x-copy-from"},{"line_number":1168,"context_line":"        source \u003d self.env.container.file(\"manifest-abcde\")"},{"line_number":1169,"context_line":"        source.initialize(parms\u003d{\u0027multipart-manifest\u0027: \u0027get\u0027})"},{"line_number":1170,"context_line":"        source_contents \u003d source.read(parms\u003d{\u0027multipart-manifest\u0027: \u0027get\u0027})"},{"line_number":1171,"context_line":"        source_json \u003d json.loads(source_contents)"},{"line_number":1172,"context_line":"        manifest_etag \u003d md5(source_contents, usedforsecurity\u003dFalse).hexdigest()"}],"source_content_type":"text/x-python","patch_set":2,"id":"bfe4a71d_8434f417","line":1169,"in_reply_to":"2b6f183f_d1c42bdd","updated":"2024-11-04 19:29:20.000000000","message":"💡","commit_id":"f339d98f2e226e70e6afc5e41b3fb8bcbfb9550d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"cc9793bca158d6d4a16511a574507f30b8038bcf","unresolved":true,"context_lines":[{"line_number":1166,"context_line":"    def test_slo_copy_the_manifest_using_x_copy_from(self):"},{"line_number":1167,"context_line":"        # as per test_slo_copy_the_manifest but using a PUT with x-copy-from"},{"line_number":1168,"context_line":"        source \u003d self.env.container.file(\"manifest-abcde\")"},{"line_number":1169,"context_line":"        source.initialize(parms\u003d{\u0027multipart-manifest\u0027: \u0027get\u0027})"},{"line_number":1170,"context_line":"        source_contents \u003d source.read(parms\u003d{\u0027multipart-manifest\u0027: \u0027get\u0027})"},{"line_number":1171,"context_line":"        source_json \u003d json.loads(source_contents)"},{"line_number":1172,"context_line":"        manifest_etag \u003d md5(source_contents, usedforsecurity\u003dFalse).hexdigest()"}],"source_content_type":"text/x-python","patch_set":2,"id":"2b6f183f_d1c42bdd","line":1169,"in_reply_to":"690f5980_35d026f9","updated":"2024-11-04 11:22:10.000000000","message":"seems like it is necessary to populate ``source.etag`` which ``read`` doesn\u0027t do.","commit_id":"f339d98f2e226e70e6afc5e41b3fb8bcbfb9550d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9b9f22ed77ef946b297a15e05f60529aff1ca18e","unresolved":true,"context_lines":[{"line_number":1192,"context_line":"        except ValueError:"},{"line_number":1193,"context_line":"            self.fail(\"COPY didn\u0027t copy the manifest (invalid json on GET)\")"},{"line_number":1194,"context_line":"        self.assertEqual(source_json, copied_json)"},{"line_number":1195,"context_line":"        self.assertEqual(manifest_etag, copied.etag)"},{"line_number":1196,"context_line":""},{"line_number":1197,"context_line":"    def test_slo_copy_the_manifest_updating_metadata(self):"},{"line_number":1198,"context_line":"        source \u003d self.env.container.file(\"manifest-abcde\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"71c0944d_4595404c","line":1195,"updated":"2024-11-01 20:14:11.000000000","message":"OK, cool -- this part will verify that it really did get created as an SLO, rather than just a JSON document.","commit_id":"f339d98f2e226e70e6afc5e41b3fb8bcbfb9550d"}]}
