)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1567030004adafa455dec41591cccf81790f7dc2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"c1f02abe_df5ee91f","updated":"2025-09-02 10:50:01.000000000","message":"merging this and leaving the TODOs for follow up patches","commit_id":"d615069b04084d6a4e5c92a3743fb12b4b78786b"}],"swift/common/middleware/versioned_writes/object_versioning.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1abf1466432a2f529ac5668c1bf768c89268fc43","unresolved":true,"context_lines":[{"line_number":750,"context_line":"        else:"},{"line_number":751,"context_line":"            # de-facto null version (never been copied to versions container)"},{"line_number":752,"context_line":"            version_is_latest \u003d version \u003d\u003d \u0027null\u0027"},{"line_number":753,"context_line":"            resp_version_id \u003d None"},{"line_number":754,"context_line":"        if not version_is_latest:"},{"line_number":755,"context_line":"            # If there\u0027s no current version (i.e., tombstone or unversioned"},{"line_number":756,"context_line":"            # object) or if current version links to another version, then"}],"source_content_type":"text/x-python","patch_set":5,"id":"108d9483_81ce1aca","line":753,"updated":"2025-08-22 11:53:38.000000000","message":"I\u0027m still not sure I have the best/most intuitive set of flags here","commit_id":"d615069b04084d6a4e5c92a3743fb12b4b78786b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1abf1466432a2f529ac5668c1bf768c89268fc43","unresolved":true,"context_lines":[{"line_number":777,"context_line":"        if self.s3_compat and (version_is_latest or not resp_version_id):"},{"line_number":778,"context_line":"            # The only in-tree use for this header is in the s3api object"},{"line_number":779,"context_line":"            # response handler, which performs a restore-on-delete if the"},{"line_number":780,"context_line":"            # header is \u0027none\u0027."},{"line_number":781,"context_line":"            resp.headers[\u0027X-Object-Current-Version-Id\u0027] \u003d \u0027none\u0027"},{"line_number":782,"context_line":"        elif not resp_version_id:"},{"line_number":783,"context_line":"            # For backwards compatibility with any out-of-tree use case, \u0027null\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"4c7778e4_8bb143a7","line":780,"updated":"2025-08-22 11:53:38.000000000","message":"maybe restore-on-delete could be implemented here in object-versioning middleware (conditional on s3-compat mode) so that we can avoid this header-signalling to the s3api","commit_id":"d615069b04084d6a4e5c92a3743fb12b4b78786b"}]}
