)]}'
{"glance_store/_drivers/http.py":[{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"b8e014a98dd0c3c55e219841b3ccb1cad5522c26","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        if netloc \u003d\u003d \u0027\u0027:"},{"line_number":91,"context_line":"            LOG.info(_(\"No address specified in HTTP URL\"))"},{"line_number":92,"context_line":"            raise exceptions.BadStoreUri(uri\u003duri)"},{"line_number":93,"context_line":"        else:"},{"line_number":94,"context_line":"            # if port is present in host validate the port value to ensure"},{"line_number":95,"context_line":"            # the port is numeric"},{"line_number":96,"context_line":"            i \u003d netloc.rfind(\u0027:\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_bb7e48ad","line":93,"updated":"2015-08-25 18:22:40.000000000","message":"I don\u0027t understand how this code relates to the commit message, and it looks like it doesn\u0027t fix the bug.","commit_id":"2be049a46da5b69ef320b17f7d7a36464610b9e8"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"d200e5302d0afce14e16cc15e39c1e64ceee3491","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        if netloc \u003d\u003d \u0027\u0027:"},{"line_number":91,"context_line":"            LOG.info(_(\"No address specified in HTTP URL\"))"},{"line_number":92,"context_line":"            raise exceptions.BadStoreUri(uri\u003duri)"},{"line_number":93,"context_line":"        else:"},{"line_number":94,"context_line":"            # if port is present in host validate the port value to ensure"},{"line_number":95,"context_line":"            # the port is numeric"},{"line_number":96,"context_line":"            i \u003d netloc.rfind(\u0027:\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_9ce31ed8","line":93,"in_reply_to":"fa1b9901_bb7e48ad","updated":"2015-08-26 08:49:55.000000000","message":"scp-like addresses looks like this:\n127.0.0.1:~/some_address that is not acceptable for python http_client lib because it tries to recognize ~ as port.\nBut you are right, I need to update commit-message.","commit_id":"2be049a46da5b69ef320b17f7d7a36464610b9e8"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"b8e014a98dd0c3c55e219841b3ccb1cad5522c26","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            # the port is numeric"},{"line_number":96,"context_line":"            i \u003d netloc.rfind(\u0027:\u0027)"},{"line_number":97,"context_line":"            j \u003d netloc.rfind(\u0027]\u0027)"},{"line_number":98,"context_line":"            # IPv6 addresses has : in body"},{"line_number":99,"context_line":"            if i \u003e j:"},{"line_number":100,"context_line":"                port \u003d netloc[i+1:]"},{"line_number":101,"context_line":"                if port:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_5b460c7c","line":98,"updated":"2015-08-25 18:22:40.000000000","message":"have :)","commit_id":"2be049a46da5b69ef320b17f7d7a36464610b9e8"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"d200e5302d0afce14e16cc15e39c1e64ceee3491","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            # the port is numeric"},{"line_number":96,"context_line":"            i \u003d netloc.rfind(\u0027:\u0027)"},{"line_number":97,"context_line":"            j \u003d netloc.rfind(\u0027]\u0027)"},{"line_number":98,"context_line":"            # IPv6 addresses has : in body"},{"line_number":99,"context_line":"            if i \u003e j:"},{"line_number":100,"context_line":"                port \u003d netloc[i+1:]"},{"line_number":101,"context_line":"                if port:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_bce862b4","line":98,"in_reply_to":"fa1b9901_5b460c7c","updated":"2015-08-26 08:49:55.000000000","message":"Done","commit_id":"2be049a46da5b69ef320b17f7d7a36464610b9e8"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"b8e014a98dd0c3c55e219841b3ccb1cad5522c26","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                port \u003d netloc[i+1:]"},{"line_number":101,"context_line":"                if port:"},{"line_number":102,"context_line":"                    try:"},{"line_number":103,"context_line":"                        int(port)"},{"line_number":104,"context_line":"                    except ValueError:"},{"line_number":105,"context_line":"                        LOG.exception(_(\u0027Incorrect host port specified in URL.\u0027"},{"line_number":106,"context_line":"                                        \u0027 Port value should be numeric.\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_7870b3a4","line":103,"updated":"2015-08-25 18:22:40.000000000","message":"All the things you want to do can be implemented in two lines:\n\naddr, _, port \u003d netloc.rpartition(\u0027:\u0027)\n\nif port and not port.isdigit():\n    raise exceptions.BadStoreUri(uri\u003duri)","commit_id":"2be049a46da5b69ef320b17f7d7a36464610b9e8"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"10d5efe2f4890edc055d1ba38bccb4358b0134a8","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                port \u003d netloc[i+1:]"},{"line_number":101,"context_line":"                if port:"},{"line_number":102,"context_line":"                    try:"},{"line_number":103,"context_line":"                        int(port)"},{"line_number":104,"context_line":"                    except ValueError:"},{"line_number":105,"context_line":"                        LOG.exception(_(\u0027Incorrect host port specified in URL.\u0027"},{"line_number":106,"context_line":"                                        \u0027 Port value should be numeric.\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_773f43b4","line":103,"in_reply_to":"fa1b9901_1cd86e1d","updated":"2015-08-26 09:07:13.000000000","message":"Ok, I rechecked your suggestion and it turns out that it doesn\u0027t support IPV6\nbecause IPV6 has the following format:\n[1200:1:1..]:8000","commit_id":"2be049a46da5b69ef320b17f7d7a36464610b9e8"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"d200e5302d0afce14e16cc15e39c1e64ceee3491","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                port \u003d netloc[i+1:]"},{"line_number":101,"context_line":"                if port:"},{"line_number":102,"context_line":"                    try:"},{"line_number":103,"context_line":"                        int(port)"},{"line_number":104,"context_line":"                    except ValueError:"},{"line_number":105,"context_line":"                        LOG.exception(_(\u0027Incorrect host port specified in URL.\u0027"},{"line_number":106,"context_line":"                                        \u0027 Port value should be numeric.\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_1cd86e1d","line":103,"in_reply_to":"fa1b9901_7870b3a4","updated":"2015-08-26 08:49:55.000000000","message":"Thanks a lot for suggestion.","commit_id":"2be049a46da5b69ef320b17f7d7a36464610b9e8"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"6316dba6d09a26fc886487f5505708375227d070","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            i \u003d netloc.rfind(\u0027:\u0027)"},{"line_number":96,"context_line":"            j \u003d netloc.rfind(\u0027]\u0027)"},{"line_number":97,"context_line":"            # IPv6 address has the following format [1223:0:0:..]:\u003csome_port\u003e"},{"line_number":98,"context_line":"            # we need to be sure that we are validating port in both IPv4,IPv6"},{"line_number":99,"context_line":"            if i \u003e j:"},{"line_number":100,"context_line":"                port \u003d netloc[i + 1:]"},{"line_number":101,"context_line":"                if port:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_bde859e3","line":98,"updated":"2015-08-26 10:57:17.000000000","message":"You\u0027re right here. I forgot about IPv6.\n\n#IPv6 address always contains more than 2 colons\n\ndelimiter \u003d \"]:\" if netloc.count(\":\") \u003e 2 else \":\"\n\n_, _, port \u003d netloc.partition(delimiter)\n\nif port and not port.isdigit():\n    raise exceptions.BadStoreUri(uri\u003duri)","commit_id":"3e569dd6398dfb920d40e005b6cb122f31908f30"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"3d6b50a1323c2afb6cbefa74a2e9d7462fb44b9c","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            i \u003d netloc.rfind(\u0027:\u0027)"},{"line_number":96,"context_line":"            j \u003d netloc.rfind(\u0027]\u0027)"},{"line_number":97,"context_line":"            # IPv6 address has the following format [1223:0:0:..]:\u003csome_port\u003e"},{"line_number":98,"context_line":"            # we need to be sure that we are validating port in both IPv4,IPv6"},{"line_number":99,"context_line":"            if i \u003e j:"},{"line_number":100,"context_line":"                port \u003d netloc[i + 1:]"},{"line_number":101,"context_line":"                if port:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_c9946b8c","line":98,"in_reply_to":"fa1b9901_bde859e3","updated":"2015-08-26 12:45:16.000000000","message":"Thanks for suggestion.\nOne correction: IPv6 can contain 2 colons as stated here:\nhttp://www.rfc-editor.org/rfc/rfc2732.txt\nAdditionally, URI format can also be quite different and contain user information(with colons like \u003cusername:password@host:port\u003e):\nhttps://en.wikipedia.org/wiki/Uniform_resource_identifier#Syntax.\nFinally, it seems that the current implementation is correct.\nI checked the standard python library (urlparse) - they are using the same approach.","commit_id":"3e569dd6398dfb920d40e005b6cb122f31908f30"}],"glance_store/tests/unit/test_http_store.py":[{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"6316dba6d09a26fc886487f5505708375227d070","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        self.assertRaises(exceptions.BadStoreUri,"},{"line_number":158,"context_line":"                          location.get_location_from_uri, uri)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def test_http_get_raises_remote_service_unavailable(self):"},{"line_number":161,"context_line":"        \"\"\"Test http store raises RemoteServiceUnavailable.\"\"\""},{"line_number":162,"context_line":"        uri \u003d \"http://netloc/path/to/file.tar.gz\""},{"line_number":163,"context_line":"        loc \u003d location.get_location_from_uri(uri, conf\u003dself.conf)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_da0af325","line":160,"updated":"2015-08-26 10:57:17.000000000","message":"Please add a test to check urls like \"127.0.0.1:some_text\" and if you add ipv6 support write several tests on it too. \"[1080::8:800:200C:417A]:80\" and just \"1080::8:800:200C:417A\"","commit_id":"3e569dd6398dfb920d40e005b6cb122f31908f30"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"3d6b50a1323c2afb6cbefa74a2e9d7462fb44b9c","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        self.assertRaises(exceptions.BadStoreUri,"},{"line_number":158,"context_line":"                          location.get_location_from_uri, uri)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def test_http_get_raises_remote_service_unavailable(self):"},{"line_number":161,"context_line":"        \"\"\"Test http store raises RemoteServiceUnavailable.\"\"\""},{"line_number":162,"context_line":"        uri \u003d \"http://netloc/path/to/file.tar.gz\""},{"line_number":163,"context_line":"        loc \u003d location.get_location_from_uri(uri, conf\u003dself.conf)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_7bb3a64d","line":160,"in_reply_to":"fa1b9901_da0af325","updated":"2015-08-26 12:45:16.000000000","message":"Done","commit_id":"3e569dd6398dfb920d40e005b6cb122f31908f30"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"7ea50fb4219c4c293945659ceab3fad0f2c52c74","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            \"http://[1080::8:800:200C:417A]:80/ubuntu.iso\""},{"line_number":161,"context_line":"        ]"},{"line_number":162,"context_line":"        for uri in uris:"},{"line_number":163,"context_line":"            location.get_location_from_uri(uri)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def test_http_store_location_initialization_with_invalid_url(self):"},{"line_number":166,"context_line":"        \"\"\"Test store location initialization from incorrect uris.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_7d031474","line":163,"updated":"2015-09-25 19:19:01.000000000","message":"as this test does not have any assert, is it required???","commit_id":"caf646af81118af114d38320b83146ff6ae95a07"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"7b52d4e5963e4899152c64aa5f0cbd92a7c24979","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            \"http://[1080::8:800:200C:417A]:80/ubuntu.iso\""},{"line_number":161,"context_line":"        ]"},{"line_number":162,"context_line":"        for uri in uris:"},{"line_number":163,"context_line":"            location.get_location_from_uri(uri)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def test_http_store_location_initialization_with_invalid_url(self):"},{"line_number":166,"context_line":"        \"\"\"Test store location initialization from incorrect uris.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_ee70b0de","line":163,"in_reply_to":"9a1a9d01_7d031474","updated":"2015-09-28 08:06:15.000000000","message":"Yep, why not. IMO, it is normal situation for positive tests.","commit_id":"caf646af81118af114d38320b83146ff6ae95a07"}]}
