)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"79a913eb0c8ccc27978e873874111efcbf2637ff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"bd477003_a92e371d","updated":"2026-07-08 12:10:53.000000000","message":"recheck","commit_id":"8dece4eb1698e1fd69d25df78f4c4d1adabc2f33"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"f4d51267c7239cefceb35bb4b627144d97ae1b20","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"528998b2_65fca601","updated":"2026-07-08 20:40:46.000000000","message":"recheck","commit_id":"464ec8cfe21d80db75da9f5ec0c229e006ce3693"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"636c06c558b4deb09758095993c9e67ad73cbf43","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"2ef8a7ad_8a6262b6","updated":"2026-07-09 16:31:36.000000000","message":"recheck","commit_id":"bde6e0e2456bffa289c3692c30a01c27d83ada1a"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"d904109cef571adf820bdbb1fc5dbcb57d123fa5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"51f1ad8e_543e61aa","updated":"2026-07-09 20:53:27.000000000","message":"recheck","commit_id":"dbc37ad217720f6c1fe3ef70e4893f7955d5396c"}],"glance/common/store_utils.py":[{"author":{"_account_id":38762,"name":"Sahil Kumbhar","display_name":"sakumbha","email":"sakumbha@redhat.com","username":"sakumbha"},"change_message_id":"52553913e7def04926c9eec2c621f58217bc764c","unresolved":true,"context_lines":[{"line_number":258,"context_line":"        start \u003d scheme_sep + len(\u0027://\u0027)"},{"line_number":259,"context_line":"        at \u003d url.rfind(\u0027@\u0027, start)"},{"line_number":260,"context_line":"        if at !\u003d -1:"},{"line_number":261,"context_line":"            user, sep, secret \u003d url[start:at].partition(\u0027:\u0027)"},{"line_number":262,"context_line":"            userinfo \u003d urlparse.quote(user, safe\u003d\u0027\u0027)"},{"line_number":263,"context_line":"            if sep:"},{"line_number":264,"context_line":"                userinfo +\u003d \u0027:\u0027 + urlparse.quote(secret, safe\u003d\u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"32e0016a_5a328963","line":261,"range":{"start_line":261,"start_character":12,"end_line":261,"end_character":16},"updated":"2026-07-09 10:53:44.000000000","message":"can you use `access` for `user` i think it will help future readers.","commit_id":"10e539cd868ad75421b8c64e3b57acf360c9ab2e"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"636c06c558b4deb09758095993c9e67ad73cbf43","unresolved":true,"context_lines":[{"line_number":258,"context_line":"        start \u003d scheme_sep + len(\u0027://\u0027)"},{"line_number":259,"context_line":"        at \u003d url.rfind(\u0027@\u0027, start)"},{"line_number":260,"context_line":"        if at !\u003d -1:"},{"line_number":261,"context_line":"            user, sep, secret \u003d url[start:at].partition(\u0027:\u0027)"},{"line_number":262,"context_line":"            userinfo \u003d urlparse.quote(user, safe\u003d\u0027\u0027)"},{"line_number":263,"context_line":"            if sep:"},{"line_number":264,"context_line":"                userinfo +\u003d \u0027:\u0027 + urlparse.quote(secret, safe\u003d\u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"f5a60d49_b4709dc5","line":261,"range":{"start_line":261,"start_character":12,"end_line":261,"end_character":16},"in_reply_to":"32e0016a_5a328963","updated":"2026-07-09 16:31:36.000000000","message":"done.","commit_id":"10e539cd868ad75421b8c64e3b57acf360c9ab2e"},{"author":{"_account_id":38762,"name":"Sahil Kumbhar","display_name":"sakumbha","email":"sakumbha@redhat.com","username":"sakumbha"},"change_message_id":"02b951d1d24706e33af0abb8a38431bec835fd92","unresolved":true,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"def _construct_s3_location(s3loc, store_instance):"},{"line_number":278,"context_line":"    \"\"\"The new location will reflect changes only in the credentials.\"\"\""},{"line_number":279,"context_line":"    key \u003d getattr(store_instance, \u0027access_key\u0027)"},{"line_number":280,"context_line":"    secret \u003d getattr(store_instance, \u0027secret_key\u0027)"},{"line_number":281,"context_line":"    new_netloc \u003d \"%s:%s@%s\" % (key, secret, s3loc[\u0027host\u0027])"},{"line_number":282,"context_line":"    return urlparse.urlunparse(("},{"line_number":283,"context_line":"        s3loc[\u0027parsed\u0027].scheme,"}],"source_content_type":"text/x-python","patch_set":1,"id":"30ef7b5a_1d1bd6ee","line":280,"range":{"start_line":279,"start_character":0,"end_line":280,"end_character":50},"updated":"2026-07-08 10:06:39.000000000","message":"I think this can be written more simply by -\n`key \u003d store_instance.access_key`\n`secret \u003d store_instance.secret_key`","commit_id":"10e539cd868ad75421b8c64e3b57acf360c9ab2e"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"79a913eb0c8ccc27978e873874111efcbf2637ff","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"def _construct_s3_location(s3loc, store_instance):"},{"line_number":278,"context_line":"    \"\"\"The new location will reflect changes only in the credentials.\"\"\""},{"line_number":279,"context_line":"    key \u003d getattr(store_instance, \u0027access_key\u0027)"},{"line_number":280,"context_line":"    secret \u003d getattr(store_instance, \u0027secret_key\u0027)"},{"line_number":281,"context_line":"    new_netloc \u003d \"%s:%s@%s\" % (key, secret, s3loc[\u0027host\u0027])"},{"line_number":282,"context_line":"    return urlparse.urlunparse(("},{"line_number":283,"context_line":"        s3loc[\u0027parsed\u0027].scheme,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5284ef8b_b229bd34","line":280,"range":{"start_line":279,"start_character":0,"end_line":280,"end_character":50},"in_reply_to":"30ef7b5a_1d1bd6ee","updated":"2026-07-08 12:10:53.000000000","message":"Acknowledged","commit_id":"10e539cd868ad75421b8c64e3b57acf360c9ab2e"}],"glance/tests/unit/common/test_utils.py":[{"author":{"_account_id":38762,"name":"Sahil Kumbhar","display_name":"sakumbha","email":"sakumbha@redhat.com","username":"sakumbha"},"change_message_id":"02b951d1d24706e33af0abb8a38431bec835fd92","unresolved":true,"context_lines":[{"line_number":1563,"context_line":"                \"desc\": \"s3 url must not update with fragment\","},{"line_number":1564,"context_line":"            },"},{"line_number":1565,"context_line":"            {"},{"line_number":1566,"context_line":"                \"url\": f\"s3://key1:secret1@{s3host}/s{s3bucket}/o6\","},{"line_number":1567,"context_line":"                \"expect\": f\"s3://{s3key}:{s3secret}@{s3host}/s{s3bucket}/o6\","},{"line_number":1568,"context_line":"                \"store\": \"s3_store\","},{"line_number":1569,"context_line":"                \"changed\": True,"}],"source_content_type":"text/x-python","patch_set":1,"id":"31ca62ee_0b2771b7","line":1566,"range":{"start_line":1566,"start_character":52,"end_line":1566,"end_character":63},"updated":"2026-07-08 10:06:39.000000000","message":"is `s{s3bucket}` a typo or added intentionally?","commit_id":"10e539cd868ad75421b8c64e3b57acf360c9ab2e"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"79a913eb0c8ccc27978e873874111efcbf2637ff","unresolved":false,"context_lines":[{"line_number":1563,"context_line":"                \"desc\": \"s3 url must not update with fragment\","},{"line_number":1564,"context_line":"            },"},{"line_number":1565,"context_line":"            {"},{"line_number":1566,"context_line":"                \"url\": f\"s3://key1:secret1@{s3host}/s{s3bucket}/o6\","},{"line_number":1567,"context_line":"                \"expect\": f\"s3://{s3key}:{s3secret}@{s3host}/s{s3bucket}/o6\","},{"line_number":1568,"context_line":"                \"store\": \"s3_store\","},{"line_number":1569,"context_line":"                \"changed\": True,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f0245b5_c083b53b","line":1566,"range":{"start_line":1566,"start_character":52,"end_line":1566,"end_character":63},"in_reply_to":"31ca62ee_0b2771b7","updated":"2026-07-08 12:10:53.000000000","message":"misspelling","commit_id":"10e539cd868ad75421b8c64e3b57acf360c9ab2e"},{"author":{"_account_id":38762,"name":"Sahil Kumbhar","display_name":"sakumbha","email":"sakumbha@redhat.com","username":"sakumbha"},"change_message_id":"02b951d1d24706e33af0abb8a38431bec835fd92","unresolved":true,"context_lines":[{"line_number":1564,"context_line":"            },"},{"line_number":1565,"context_line":"            {"},{"line_number":1566,"context_line":"                \"url\": f\"s3://key1:secret1@{s3host}/s{s3bucket}/o6\","},{"line_number":1567,"context_line":"                \"expect\": f\"s3://{s3key}:{s3secret}@{s3host}/s{s3bucket}/o6\","},{"line_number":1568,"context_line":"                \"store\": \"s3_store\","},{"line_number":1569,"context_line":"                \"changed\": True,"},{"line_number":1570,"context_line":"                \"desc\": \"s3 url\","}],"source_content_type":"text/x-python","patch_set":1,"id":"18d21405_850ffd4d","line":1567,"range":{"start_line":1567,"start_character":61,"end_line":1567,"end_character":72},"updated":"2026-07-08 10:06:39.000000000","message":"ditto","commit_id":"10e539cd868ad75421b8c64e3b57acf360c9ab2e"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"79a913eb0c8ccc27978e873874111efcbf2637ff","unresolved":false,"context_lines":[{"line_number":1564,"context_line":"            },"},{"line_number":1565,"context_line":"            {"},{"line_number":1566,"context_line":"                \"url\": f\"s3://key1:secret1@{s3host}/s{s3bucket}/o6\","},{"line_number":1567,"context_line":"                \"expect\": f\"s3://{s3key}:{s3secret}@{s3host}/s{s3bucket}/o6\","},{"line_number":1568,"context_line":"                \"store\": \"s3_store\","},{"line_number":1569,"context_line":"                \"changed\": True,"},{"line_number":1570,"context_line":"                \"desc\": \"s3 url\","}],"source_content_type":"text/x-python","patch_set":1,"id":"96767be4_e0f5ccaf","line":1567,"range":{"start_line":1567,"start_character":61,"end_line":1567,"end_character":72},"in_reply_to":"18d21405_850ffd4d","updated":"2026-07-08 12:10:53.000000000","message":"Acknowledged","commit_id":"10e539cd868ad75421b8c64e3b57acf360c9ab2e"},{"author":{"_account_id":38762,"name":"Sahil Kumbhar","display_name":"sakumbha","email":"sakumbha@redhat.com","username":"sakumbha"},"change_message_id":"02b951d1d24706e33af0abb8a38431bec835fd92","unresolved":true,"context_lines":[{"line_number":1592,"context_line":"                expected,"},{"line_number":1593,"context_line":"                \"test item [%s]\" % (test_case[\u0027desc\u0027])"},{"line_number":1594,"context_line":"            )"},{"line_number":1595,"context_line":""},{"line_number":1596,"context_line":"    @mock.patch(\u0027glance.common.store_utils.store_api\u0027)"},{"line_number":1597,"context_line":"    @mock.patch(\u0027glance.common.store_utils.CONF\u0027)"},{"line_number":1598,"context_line":"    def test_update_s3_credentials_different_object_path("}],"source_content_type":"text/x-python","patch_set":1,"id":"737c5d72_140a9307","line":1595,"updated":"2026-07-08 10:06:39.000000000","message":"According to bug report, Need test cases for `@` \u0026 `:` in secrets.","commit_id":"10e539cd868ad75421b8c64e3b57acf360c9ab2e"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"79a913eb0c8ccc27978e873874111efcbf2637ff","unresolved":true,"context_lines":[{"line_number":1592,"context_line":"                expected,"},{"line_number":1593,"context_line":"                \"test item [%s]\" % (test_case[\u0027desc\u0027])"},{"line_number":1594,"context_line":"            )"},{"line_number":1595,"context_line":""},{"line_number":1596,"context_line":"    @mock.patch(\u0027glance.common.store_utils.store_api\u0027)"},{"line_number":1597,"context_line":"    @mock.patch(\u0027glance.common.store_utils.CONF\u0027)"},{"line_number":1598,"context_line":"    def test_update_s3_credentials_different_object_path("}],"source_content_type":"text/x-python","patch_set":1,"id":"f21313fb_a225d2bf","line":1595,"in_reply_to":"737c5d72_140a9307","updated":"2026-07-08 12:10:53.000000000","message":"Test cases added.","commit_id":"10e539cd868ad75421b8c64e3b57acf360c9ab2e"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"14f6d3515c31c433396dc6ccaa782e73b4b46eaf","unresolved":false,"context_lines":[{"line_number":1578,"context_line":"            },"},{"line_number":1579,"context_line":"            {"},{"line_number":1580,"context_line":"                \"url\": f\"s3+https://ke:y1:sec::tret@t1@{s3host}/{s3bucket}/o6\","},{"line_number":1581,"context_line":"                \"expect\": f\"s3+https://{s3key}:{s3secret_fw_slash}@{s3host}/{s3bucket}/o6\","},{"line_number":1582,"context_line":"                \"store\": \"s3_store_1\","},{"line_number":1583,"context_line":"                \"changed\": True,"},{"line_number":1584,"context_line":"                \"desc\": \"s3 url must update old secret with \u0027@\u0027 and \u0027:\u0027 signs\","}],"source_content_type":"text/x-python","patch_set":2,"id":"b7118a65_42e64ce4","line":1581,"updated":"2026-07-08 14:19:35.000000000","message":"pep8: E501 line too long (91 \u003e 79 characters)","commit_id":"8dece4eb1698e1fd69d25df78f4c4d1adabc2f33"}]}
