)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b58c8eb7deba9439d4564f0794128e4a26b733a3","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"While adding support for aliases, add support for legacy microversion"},{"line_number":15,"context_line":"headers which are driven from the same data. It is not possible to know"},{"line_number":16,"context_line":"whethera service should get old or new microversion headers, but the"},{"line_number":17,"context_line":"services properly ignore the old version if they support the new"},{"line_number":18,"context_line":"version, and prefer the new version if they support it."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ff346bd7_9c768306","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":8},"updated":"2017-07-24 16:18:50.000000000","message":"whether a","commit_id":"6c4c0effb1daea75ad33caca31c6638189f1c1fe"}],"keystoneauth1/access/service_catalog.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a76b11786d7bd5aac7704b59e06882875a8e613b","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                        endpoint_id\u003dendpoint[\u0027id\u0027],"},{"line_number":209,"context_line":"                        raw_endpoint\u003dendpoint[\u0027raw_endpoint\u0027]))"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        if service_type and len(matching_endpoints.keys()) \u003e 1:"},{"line_number":212,"context_line":"            # We have matched a requested service_type but it was an alias"},{"line_number":213,"context_line":"            # and there was also an entry for the official type. Just return"},{"line_number":214,"context_line":"            # the entry that was requested."}],"source_content_type":"text/x-python","patch_set":2,"id":"1f1a1f67_9b298f8b","line":211,"range":{"start_line":211,"start_character":50,"end_line":211,"end_character":57},"updated":"2017-07-17 22:40:20.000000000","message":"this could have been omitted","commit_id":"6c4c0effb1daea75ad33caca31c6638189f1c1fe"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"e44bfdb0fee90601356a6bff420ab11ca8ebfd17","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                        endpoint_id\u003dendpoint[\u0027id\u0027],"},{"line_number":209,"context_line":"                        raw_endpoint\u003dendpoint[\u0027raw_endpoint\u0027]))"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        if service_type and len(matching_endpoints.keys()) \u003e 1:"},{"line_number":212,"context_line":"            # We have matched a requested service_type but it was an alias"},{"line_number":213,"context_line":"            # and there was also an entry for the official type. Just return"},{"line_number":214,"context_line":"            # the entry that was requested."}],"source_content_type":"text/x-python","patch_set":2,"id":"1f1a1f67_089c0568","line":211,"range":{"start_line":211,"start_character":50,"end_line":211,"end_character":57},"in_reply_to":"1f1a1f67_69294888","updated":"2017-07-18 09:36:00.000000000","message":"fair enough","commit_id":"6c4c0effb1daea75ad33caca31c6638189f1c1fe"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9433de5e904c953c7bacf5f7f10ef87e80147edc","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                        endpoint_id\u003dendpoint[\u0027id\u0027],"},{"line_number":209,"context_line":"                        raw_endpoint\u003dendpoint[\u0027raw_endpoint\u0027]))"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        if service_type and len(matching_endpoints.keys()) \u003e 1:"},{"line_number":212,"context_line":"            # We have matched a requested service_type but it was an alias"},{"line_number":213,"context_line":"            # and there was also an entry for the official type. Just return"},{"line_number":214,"context_line":"            # the entry that was requested."}],"source_content_type":"text/x-python","patch_set":2,"id":"1f1a1f67_69294888","line":211,"range":{"start_line":211,"start_character":50,"end_line":211,"end_character":57},"in_reply_to":"1f1a1f67_9b298f8b","updated":"2017-07-18 02:39:50.000000000","message":"Agree; though some prefer it for clarity [1].\n\n[1] https://review.openstack.org/#/c/476631/18/nova/scheduler/filter_scheduler.py@141","commit_id":"6c4c0effb1daea75ad33caca31c6638189f1c1fe"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b58c8eb7deba9439d4564f0794128e4a26b733a3","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                        raw_endpoint\u003dendpoint[\u0027raw_endpoint\u0027]))"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        if service_type and len(matching_endpoints.keys()) \u003e 1:"},{"line_number":212,"context_line":"            # We have matched a requested service_type but it was an alias"},{"line_number":213,"context_line":"            # and there was also an entry for the official type. Just return"},{"line_number":214,"context_line":"            # the entry that was requested."},{"line_number":215,"context_line":"            for key in list(matching_endpoints.keys()):"},{"line_number":216,"context_line":"                if key !\u003d service_type:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff346bd7_1fdde541","line":213,"range":{"start_line":212,"start_character":12,"end_line":213,"end_character":64},"updated":"2017-07-24 16:18:50.000000000","message":"I don\u0027t understand the basis for this assertion.\n\nL176-7 will succeed if service_type is specified and is the official type or any alias related to service_type.\n\nSo I believe if the sets {service_type} and {matching_endpoints.keys()} are disjoint (e.g. the catalog contains only the official type and service_type is an alias), we\u0027ll come up empty here.\n\nWe should have unit test for this addition to prove that one way or the other.","commit_id":"6c4c0effb1daea75ad33caca31c6638189f1c1fe"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a76b11786d7bd5aac7704b59e06882875a8e613b","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            # We have matched a requested service_type but it was an alias"},{"line_number":213,"context_line":"            # and there was also an entry for the official type. Just return"},{"line_number":214,"context_line":"            # the entry that was requested."},{"line_number":215,"context_line":"            for key in list(matching_endpoints.keys()):"},{"line_number":216,"context_line":"                if key !\u003d service_type:"},{"line_number":217,"context_line":"                    del matching_endpoints[key]"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1f1a1f67_db3267f2","line":215,"range":{"start_line":215,"start_character":12,"end_line":215,"end_character":54},"updated":"2017-07-17 22:40:20.000000000","message":"is there a reason to do this munging instead of just\n\nfor key in matching_endpoints:\n\n?","commit_id":"6c4c0effb1daea75ad33caca31c6638189f1c1fe"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"e44bfdb0fee90601356a6bff420ab11ca8ebfd17","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            # We have matched a requested service_type but it was an alias"},{"line_number":213,"context_line":"            # and there was also an entry for the official type. Just return"},{"line_number":214,"context_line":"            # the entry that was requested."},{"line_number":215,"context_line":"            for key in list(matching_endpoints.keys()):"},{"line_number":216,"context_line":"                if key !\u003d service_type:"},{"line_number":217,"context_line":"                    del matching_endpoints[key]"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1f1a1f67_48967d4e","line":215,"range":{"start_line":215,"start_character":12,"end_line":215,"end_character":54},"in_reply_to":"1f1a1f67_4620bbac","updated":"2017-07-18 09:36:00.000000000","message":"gotcha, thanks","commit_id":"6c4c0effb1daea75ad33caca31c6638189f1c1fe"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9433de5e904c953c7bacf5f7f10ef87e80147edc","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            # We have matched a requested service_type but it was an alias"},{"line_number":213,"context_line":"            # and there was also an entry for the official type. Just return"},{"line_number":214,"context_line":"            # the entry that was requested."},{"line_number":215,"context_line":"            for key in list(matching_endpoints.keys()):"},{"line_number":216,"context_line":"                if key !\u003d service_type:"},{"line_number":217,"context_line":"                    del matching_endpoints[key]"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1f1a1f67_4620bbac","line":215,"range":{"start_line":215,"start_character":12,"end_line":215,"end_character":54},"in_reply_to":"1f1a1f67_db3267f2","updated":"2017-07-18 02:39:50.000000000","message":"Because you can\u0027t delete a key on a dict while you\u0027re iterating on it, which `for key in dict.keys()` will do in py3; and `for key in dict` will do in py2/py3.  The list() makes an actual copy of the keys to iterate over, leaving the dict safely changeable.\n\nThe .keys() could be removed, but see above.","commit_id":"6c4c0effb1daea75ad33caca31c6638189f1c1fe"}],"keystoneauth1/session.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b58c8eb7deba9439d4564f0794128e4a26b733a3","unresolved":false,"context_lines":[{"line_number":442,"context_line":"        # Pass in all of the aliases. Cinder expects \u0027volume\u0027 which is one of"},{"line_number":443,"context_line":"        # its aliases but is not its official type. magnum expects"},{"line_number":444,"context_line":"        # \u0027container-infra\u0027"},{"line_number":445,"context_line":"        microversion_string \u003d \", \".join(["},{"line_number":446,"context_line":"            \"{mv_type} {mv_version}\".format(mv_type\u003dmv_type,"},{"line_number":447,"context_line":"                                            mv_version\u003dmicroversion_version)"},{"line_number":448,"context_line":"            for mv_type in manager.get_all_types(service_type)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff346bd7_bf5c994b","line":445,"range":{"start_line":445,"start_character":30,"end_line":445,"end_character":34},"updated":"2017-07-24 16:18:50.000000000","message":"Really?  The microversion client code handles e.g.\n\n \"OpenStack-API-Version\": \"volume 2.34, volumev2 2.34, volumev3 2.34, block-storage 2.34\"\n\n?  Is this true for all alias-havin services?","commit_id":"6c4c0effb1daea75ad33caca31c6638189f1c1fe"}]}
