)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"15d428a88da80db4c81a6fa43f9b204ecd787c07","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"0e456285_80510c40","updated":"2026-03-25 16:42:52.000000000","message":"Couple opportunities to strengthen tests, but could do that as follow-up.","commit_id":"95ca0af6cf5dbfbbb54bd390f9c86e2f0b188a9a"}],"swift/common/middleware/s3api/controllers/bucket.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"15d428a88da80db4c81a6fa43f9b204ecd787c07","unresolved":true,"context_lines":[{"line_number":175,"context_line":"                SubElement(elem, \u0027NextKeyMarker\u0027).text \u003d \\"},{"line_number":176,"context_line":"                    objects[-1][\u0027name\u0027]"},{"line_number":177,"context_line":"                SubElement(elem, \u0027NextVersionIdMarker\u0027).text \u003d \\"},{"line_number":178,"context_line":"                    objects[-1].get(\u0027version_id\u0027) or \u0027null\u0027"},{"line_number":179,"context_line":"            if \u0027subdir\u0027 in objects[-1]:"},{"line_number":180,"context_line":"                SubElement(elem, \u0027NextKeyMarker\u0027).text \u003d \\"},{"line_number":181,"context_line":"                    objects[-1][\u0027subdir\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"0b9ee123_af54cd81","line":178,"updated":"2026-03-25 16:42:52.000000000","message":"\\*sigh\\* https://github.com/openstack/swift/blob/2.37.1/swift/common/middleware/versioned_writes/object_versioning.py#L1201","commit_id":"95ca0af6cf5dbfbbb54bd390f9c86e2f0b188a9a"}],"test/s3api/test_versioning.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"15d428a88da80db4c81a6fa43f9b204ecd787c07","unresolved":true,"context_lines":[{"line_number":646,"context_line":"        } for o in resp.get(\u0027Versions\u0027, [])]"},{"line_number":647,"context_line":"        self.assertEqual(expected[3:], objs)"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"    def test_list_objects(self):"},{"line_number":650,"context_line":"        etags \u003d defaultdict(list)"},{"line_number":651,"context_line":"        for i in range(3):"},{"line_number":652,"context_line":"            obj_name \u003d self.create_name(\u0027versioned-obj\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"30b80057_5ac95010","line":649,"updated":"2026-03-25 16:42:52.000000000","message":"I wonder if this test should also include some `null` versions...","commit_id":"95ca0af6cf5dbfbbb54bd390f9c86e2f0b188a9a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"15d428a88da80db4c81a6fa43f9b204ecd787c07","unresolved":true,"context_lines":[{"line_number":701,"context_line":"            self._sanitize_obj_listing(obj)"},{"line_number":702,"context_line":"            versions.append(obj.pop(\u0027VersionId\u0027))"},{"line_number":703,"context_line":"        self.assertEqual(expected, objs)"},{"line_number":704,"context_line":"        self.assertFalse(resp.get(\u0027IsTruncated\u0027))"},{"line_number":705,"context_line":"        self.assertNotIn(\u0027NextKeyMarker\u0027, resp)"},{"line_number":706,"context_line":"        self.assertNotIn(\u0027NextVersionIdMarker\u0027, resp)"},{"line_number":707,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"de285ce7_cba7c934","line":704,"updated":"2026-03-25 16:42:52.000000000","message":"Stronger as `self.assertIs(False, resp.get(\u0027IsTruncated\u0027))`","commit_id":"95ca0af6cf5dbfbbb54bd390f9c86e2f0b188a9a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"15d428a88da80db4c81a6fa43f9b204ecd787c07","unresolved":true,"context_lines":[{"line_number":710,"context_line":"        objs \u003d resp.get(\u0027Versions\u0027, [])"},{"line_number":711,"context_line":"        for obj in objs:"},{"line_number":712,"context_line":"            self._sanitize_obj_listing(obj)"},{"line_number":713,"context_line":"            obj.pop(\u0027VersionId\u0027)"},{"line_number":714,"context_line":"        self.assertEqual(expected[:1], objs)"},{"line_number":715,"context_line":"        self.assertTrue(resp.get(\u0027IsTruncated\u0027))"},{"line_number":716,"context_line":"        self.assertEqual(expected[0][\u0027Key\u0027], resp.get(\u0027NextKeyMarker\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"863cac5d_6c834384","line":713,"updated":"2026-03-25 16:42:52.000000000","message":"Should we make this more like `self.assertEqual(versions[0], obj.pop(\u0027VersionId\u0027))`? I feel like that\u0027d strengthen the `self.assertEqual(versions[0], resp.get(\u0027NextVersionIdMarker\u0027))` below.","commit_id":"95ca0af6cf5dbfbbb54bd390f9c86e2f0b188a9a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"15d428a88da80db4c81a6fa43f9b204ecd787c07","unresolved":true,"context_lines":[{"line_number":714,"context_line":"        self.assertEqual(expected[:1], objs)"},{"line_number":715,"context_line":"        self.assertTrue(resp.get(\u0027IsTruncated\u0027))"},{"line_number":716,"context_line":"        self.assertEqual(expected[0][\u0027Key\u0027], resp.get(\u0027NextKeyMarker\u0027))"},{"line_number":717,"context_line":"        self.assertEqual(versions[0], resp.get(\u0027NextVersionIdMarker\u0027))"},{"line_number":718,"context_line":""},{"line_number":719,"context_line":"        resp \u003d self.client.list_object_versions("},{"line_number":720,"context_line":"            Bucket\u003dself.bucket_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"908654a4_025fe30c","line":717,"updated":"2026-03-25 16:42:52.000000000","message":"Backing out the swift change, it blows up here like\n```\n        self.assertEqual(expected[0][\u0027Key\u0027], resp.get(\u0027NextKeyMarker\u0027))\n\u003e       self.assertEqual(versions[0], resp.get(\u0027NextVersionIdMarker\u0027))\nE       AssertionError: \u00271774456585.61739\u0027 !\u003d \u0027null\u0027\nE       - 1774456585.61739\nE       + null\n```\n👍","commit_id":"95ca0af6cf5dbfbbb54bd390f9c86e2f0b188a9a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"15d428a88da80db4c81a6fa43f9b204ecd787c07","unresolved":true,"context_lines":[{"line_number":724,"context_line":"        objs \u003d resp.get(\u0027Versions\u0027, [])"},{"line_number":725,"context_line":"        for obj in objs:"},{"line_number":726,"context_line":"            self._sanitize_obj_listing(obj)"},{"line_number":727,"context_line":"            obj.pop(\u0027VersionId\u0027)"},{"line_number":728,"context_line":"        self.assertEqual(expected[1:2], objs)"},{"line_number":729,"context_line":"        self.assertTrue(resp.get(\u0027IsTruncated\u0027))"},{"line_number":730,"context_line":"        self.assertEqual(expected[1][\u0027Key\u0027], resp.get(\u0027NextKeyMarker\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"fb3dc588_bd1c5096","line":727,"updated":"2026-03-25 16:42:52.000000000","message":"Similarly here: `self.assertEqual(versions[1], obj.pop(\u0027VersionId\u0027))`, maybe?","commit_id":"95ca0af6cf5dbfbbb54bd390f9c86e2f0b188a9a"}]}
