)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"a712ff2b704cb68c8a57aec380fbe2dfcb6ea9b6","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-08-09 10:36:37 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add test to check CURRENT in version negotiation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I9e93b0f075eb6129c912dfca0a5d005f71bbc253"},{"line_number":10,"context_line":"Co-Authored-By: Nikhil Komawar \u003cnik.komawar@gmail.com\u003e"},{"line_number":11,"context_line":"Co-Authored-By: Brian Rosmaita \u003cbrian.rosmaita@rackspace.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9ad45d7e_4773bc80","line":8,"updated":"2016-08-09 14:44:42.000000000","message":"How about we add the gist here explaining what happened with the bug and how it\u0027s addressed here?","commit_id":"c398ca9f76209ba1b47c5dd878b56b1e290bda8a"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f046484f26dcbeb5475d5cc1bf2b00402b36e40d","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-08-09 10:36:37 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add test to check CURRENT in version negotiation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I9e93b0f075eb6129c912dfca0a5d005f71bbc253"},{"line_number":10,"context_line":"Co-Authored-By: Nikhil Komawar \u003cnik.komawar@gmail.com\u003e"},{"line_number":11,"context_line":"Co-Authored-By: Brian Rosmaita \u003cbrian.rosmaita@rackspace.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9ad45d7e_ea70b5de","line":8,"in_reply_to":"9ad45d7e_4773bc80","updated":"2016-08-09 15:07:33.000000000","message":"Done","commit_id":"c398ca9f76209ba1b47c5dd878b56b1e290bda8a"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"aada8134f8f48f56fdc3b85b0733f0692ba55f6d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"to grab the CURRENT version from the \u0027versions\u0027 response and verify"},{"line_number":12,"context_line":"that it\u0027s negotiated correctly so that this kind of partial update"},{"line_number":13,"context_line":"situation won\u0027t happen again."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Partial-Bug: #1609571"},{"line_number":16,"context_line":"Change-Id: I9e93b0f075eb6129c912dfca0a5d005f71bbc253"},{"line_number":17,"context_line":"Co-Authored-By: Nikhil Komawar \u003cnik.komawar@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9ad45d7e_f1ba4a09","line":14,"updated":"2016-08-10 04:54:22.000000000","message":"Need to mention addition of a new class to test supported and deprecated versions too.","commit_id":"899264663dff82ff4e51754b6e1879eec6e28270"}],"glance/tests/unit/test_versions.py":[{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"a712ff2b704cb68c8a57aec380fbe2dfcb6ea9b6","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        self.assertEqual(\u0027/v2/images\u0027, request.path_info)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def test_current_is_negotiated_as_v2(self):"},{"line_number":277,"context_line":"        # NOTE(rosmaita): make sure the CURRENT version is negotiated properly"},{"line_number":278,"context_line":"        # (there was a bug where the versions response was correct, but the"},{"line_number":279,"context_line":"        # negotiation had not been updated)"},{"line_number":280,"context_line":"        request \u003d webob.Request.blank(\u0027/\u0027, base_url\u003d\u0027http://127.0.0.1:9292/\u0027)"},{"line_number":281,"context_line":"        request.accept \u003d \u0027application/json\u0027"},{"line_number":282,"context_line":"        self.config(bind_host\u003d\u0027127.0.0.1\u0027, bind_port\u003d9292)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_a79ef8b5","line":279,"range":{"start_line":277,"start_character":8,"end_line":279,"end_character":43},"updated":"2016-08-09 14:44:42.000000000","message":"Can we include the bug url or ID here?","commit_id":"c398ca9f76209ba1b47c5dd878b56b1e290bda8a"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f046484f26dcbeb5475d5cc1bf2b00402b36e40d","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        self.assertEqual(\u0027/v2/images\u0027, request.path_info)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def test_current_is_negotiated_as_v2(self):"},{"line_number":277,"context_line":"        # NOTE(rosmaita): make sure the CURRENT version is negotiated properly"},{"line_number":278,"context_line":"        # (there was a bug where the versions response was correct, but the"},{"line_number":279,"context_line":"        # negotiation had not been updated)"},{"line_number":280,"context_line":"        request \u003d webob.Request.blank(\u0027/\u0027, base_url\u003d\u0027http://127.0.0.1:9292/\u0027)"},{"line_number":281,"context_line":"        request.accept \u003d \u0027application/json\u0027"},{"line_number":282,"context_line":"        self.config(bind_host\u003d\u0027127.0.0.1\u0027, bind_port\u003d9292)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_0a3c29e1","line":279,"range":{"start_line":277,"start_character":8,"end_line":279,"end_character":43},"in_reply_to":"9ad45d7e_a79ef8b5","updated":"2016-08-09 15:07:33.000000000","message":"I was being lazy, thanks for calling me out!","commit_id":"c398ca9f76209ba1b47c5dd878b56b1e290bda8a"},{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"848012114dda51de235fc645fc4eb4fe52507236","unresolved":false,"context_lines":[{"line_number":276,"context_line":"    def test_current_is_negotiated_as_v2(self):"},{"line_number":277,"context_line":"        # NOTE(rosmaita): Bug 1609571: the versions response was correct, but"},{"line_number":278,"context_line":"        # the negotiation had not been updated for the CURRENT version"},{"line_number":279,"context_line":"        request \u003d webob.Request.blank(\u0027/\u0027, base_url\u003d\u0027http://127.0.0.1:9292/\u0027)"},{"line_number":280,"context_line":"        request.accept \u003d \u0027application/json\u0027"},{"line_number":281,"context_line":"        self.config(bind_host\u003d\u0027127.0.0.1\u0027, bind_port\u003d9292)"},{"line_number":282,"context_line":"        resp \u003d versions.Controller().index(request)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_7b35b5d8","line":279,"range":{"start_line":279,"start_character":41,"end_line":279,"end_character":76},"updated":"2016-08-09 15:36:01.000000000","message":"This isn\u0027t necessary.","commit_id":"31c70a12c7f5ab7b2799a0d1c014e40c4ecb3687"},{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"848012114dda51de235fc645fc4eb4fe52507236","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        # the negotiation had not been updated for the CURRENT version"},{"line_number":279,"context_line":"        request \u003d webob.Request.blank(\u0027/\u0027, base_url\u003d\u0027http://127.0.0.1:9292/\u0027)"},{"line_number":280,"context_line":"        request.accept \u003d \u0027application/json\u0027"},{"line_number":281,"context_line":"        self.config(bind_host\u003d\u0027127.0.0.1\u0027, bind_port\u003d9292)"},{"line_number":282,"context_line":"        resp \u003d versions.Controller().index(request)"},{"line_number":283,"context_line":"        for v in jsonutils.loads(resp.body)[\u0027versions\u0027]:"},{"line_number":284,"context_line":"            if v[\u0027status\u0027] \u003d\u003d \u0027CURRENT\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_1b3d99bb","line":281,"range":{"start_line":281,"start_character":8,"end_line":281,"end_character":58},"updated":"2016-08-09 15:36:01.000000000","message":"And, this as well.","commit_id":"31c70a12c7f5ab7b2799a0d1c014e40c4ecb3687"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"adf70c5a1785ba0afbdfc8f70b14ebbe2ef424c3","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        # the negotiation had not been updated for the CURRENT version"},{"line_number":279,"context_line":"        request \u003d webob.Request.blank(\u0027/\u0027, base_url\u003d\u0027http://127.0.0.1:9292/\u0027)"},{"line_number":280,"context_line":"        request.accept \u003d \u0027application/json\u0027"},{"line_number":281,"context_line":"        self.config(bind_host\u003d\u0027127.0.0.1\u0027, bind_port\u003d9292)"},{"line_number":282,"context_line":"        resp \u003d versions.Controller().index(request)"},{"line_number":283,"context_line":"        for v in jsonutils.loads(resp.body)[\u0027versions\u0027]:"},{"line_number":284,"context_line":"            if v[\u0027status\u0027] \u003d\u003d \u0027CURRENT\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_1e8462d2","line":281,"range":{"start_line":281,"start_character":8,"end_line":281,"end_character":58},"in_reply_to":"9ad45d7e_1b3d99bb","updated":"2016-08-09 17:20:05.000000000","message":"That\u0027s what I get for copying from other tests without thinking everything through!  Thanks for catching this.","commit_id":"31c70a12c7f5ab7b2799a0d1c014e40c4ecb3687"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"f1fca2c119a23117a058a3dbbc798a7c920188df","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        # the negotiation had not been updated for the CURRENT version"},{"line_number":279,"context_line":"        request \u003d webob.Request.blank(\u0027/\u0027)"},{"line_number":280,"context_line":"        request.accept \u003d \u0027application/json\u0027"},{"line_number":281,"context_line":"        resp \u003d versions.Controller().index(request)"},{"line_number":282,"context_line":"        for v in jsonutils.loads(resp.body)[\u0027versions\u0027]:"},{"line_number":283,"context_line":"            if v[\u0027status\u0027] \u003d\u003d \u0027CURRENT\u0027:"},{"line_number":284,"context_line":"                current_id \u003d v[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_f4a88fdd","line":281,"range":{"start_line":281,"start_character":8,"end_line":281,"end_character":51},"updated":"2016-08-09 18:01:57.000000000","message":"This is the reason why I think we need to have a separate class of this test.\n\nWhile I do not see any issue with the test (thanks for cleaning up the wip patch!), I had realized yesterday while working on it that we will need to call the versions module for a response. That response is the basis for identifying the CURRENT.\n\nSo, this test doesn\u0027t really belong in either of the classes in this module viz. VersionsTest or VersionNegotiationTest. From a purist view, I would say we would need to have another class that multiple-inherits from the above two classes.\n\nNevertheless, we should keep the test simple and call this new class a based on the test for CURRENT (you know I don\u0027t like to nitpick on names so no recommendations!). That class is okay to use both Controller and VersionNegotiationFilter and will preserve the purpose of the above two classes.","commit_id":"6a62406ab6607861d57e96cf77d4883369921635"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"3b889a2f20223119d56429d0f507d03fae51f1cd","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        for v in jsonutils.loads(resp.body)[\u0027versions\u0027]:"},{"line_number":302,"context_line":"            if v[\u0027status\u0027] \u003d\u003d \u0027CURRENT\u0027:"},{"line_number":303,"context_line":"                current_id \u003d v[\u0027id\u0027]"},{"line_number":304,"context_line":"        self.assertIsNotNone(current_id)"},{"line_number":305,"context_line":"        request \u003d webob.Request.blank(\"/%s/images\" % current_id)"},{"line_number":306,"context_line":"        self.middleware.process_request(request)"},{"line_number":307,"context_line":"        major, minor \u003d current_id.split(\u0027.\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_fe421c3d","line":304,"range":{"start_line":304,"start_character":29,"end_line":304,"end_character":39},"updated":"2016-08-10 01:30:59.000000000","message":"Please note, current_id is undefined if there\u0027s no CURRENT and this will give error rather than failing which is not what you intend to test with the not none assertion.","commit_id":"c47c8ad1538a10c0842898e3fc661991867cd4a7"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"3b889a2f20223119d56429d0f507d03fae51f1cd","unresolved":false,"context_lines":[{"line_number":322,"context_line":"            self.assertEqual(expected, request.path_info)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def test_deprecated_is_negotiated(self):"},{"line_number":325,"context_line":"        request \u003d webob.Request.blank(\u0027/\u0027)"},{"line_number":326,"context_line":"        request.accept \u003d \u0027application/json\u0027"},{"line_number":327,"context_line":"        resp \u003d versions.Controller().index(request)"},{"line_number":328,"context_line":"        v_list \u003d jsonutils.loads(resp.body)[\u0027versions\u0027]"},{"line_number":329,"context_line":"        to_check \u003d [ v[\u0027id\u0027] for v in v_list if v[\u0027status\u0027] \u003d\u003d \u0027DEPRECATED\u0027 ]"},{"line_number":330,"context_line":"        for v in to_check:"},{"line_number":331,"context_line":"            major, minor \u003d v.split(\u0027.\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_5e6248ae","line":328,"range":{"start_line":325,"start_character":8,"end_line":328,"end_character":55},"updated":"2016-08-10 01:30:59.000000000","message":"I think you can carve out at least this block of code into a private method in this class as it\u0027s being shared by more than a couple of methods here.\n\nYou can think of having a method for the checks of CURRENT, SUPPORTED, DEPRECATED too but I think that will be unnecessary.","commit_id":"c47c8ad1538a10c0842898e3fc661991867cd4a7"},{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"5be1aceb777110bdb26dd88246897351c3fd51bc","unresolved":false,"context_lines":[{"line_number":301,"context_line":"    def _assert_version_is_negotiated(self, version_id):"},{"line_number":302,"context_line":"        request \u003d webob.Request.blank(\"/%s/images\" % version_id)"},{"line_number":303,"context_line":"        self.middleware.process_request(request)"},{"line_number":304,"context_line":"        major, minor \u003d version_id.split(\u0027.\u0027)"},{"line_number":305,"context_line":"        expected \u003d \"/%s/images\" % major"},{"line_number":306,"context_line":"        self.assertEqual(expected, request.path_info)"},{"line_number":307,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9ad45d7e_88444fb7","line":304,"range":{"start_line":304,"start_character":7,"end_line":304,"end_character":44},"updated":"2016-08-10 22:20:04.000000000","message":"This can be as following since we don\u0027t use minor at all\nmajor, _ \u003d version_id.split(\u0027.\u0027)\n\nor this can even be\nmajor \u003d version_id.split(\u0027.\u0027,1)[0]\n\nThe picky side of me says we should go with the second one.\nBut, I don\u0027t insist :)","commit_id":"26d94623c0dd1fb256781b4381b16787e37faafc"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"53f0845640fc201c723db250af9196816152c609","unresolved":false,"context_lines":[{"line_number":301,"context_line":"    def _assert_version_is_negotiated(self, version_id):"},{"line_number":302,"context_line":"        request \u003d webob.Request.blank(\"/%s/images\" % version_id)"},{"line_number":303,"context_line":"        self.middleware.process_request(request)"},{"line_number":304,"context_line":"        major, minor \u003d version_id.split(\u0027.\u0027)"},{"line_number":305,"context_line":"        expected \u003d \"/%s/images\" % major"},{"line_number":306,"context_line":"        self.assertEqual(expected, request.path_info)"},{"line_number":307,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9ad45d7e_fc3e6c89","line":304,"range":{"start_line":304,"start_character":7,"end_line":304,"end_character":44},"in_reply_to":"9ad45d7e_88444fb7","updated":"2016-08-10 22:25:28.000000000","message":"I thought about it \u0026 ignored but for completeness sake and for keeping your perfectionist badge, I am good with your suggested change.","commit_id":"26d94623c0dd1fb256781b4381b16787e37faafc"}]}
