)]}'
{"nova/api/openstack/wsgi.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"bacbb3c188ec7638b7e93f012c73f5f3d7a87013","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"            # so later when we work through the list in order we find"},{"line_number":1012,"context_line":"            # the method which has the latest version which supports"},{"line_number":1013,"context_line":"            # the version requested."},{"line_number":1014,"context_line":"            # TODO(cyeoh): Add check to ensure that there are no overlapping"},{"line_number":1015,"context_line":"            # ranges of valid versions as that is amibiguous"},{"line_number":1016,"context_line":"            if Controller.check_for_versions_intersection(func_list):"},{"line_number":1017,"context_line":"                raise Exception(\"Overlapping in API versions of method {0}\"."},{"line_number":1018,"context_line":"                                format(func_name))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a061dce_c71b0ec9","line":1015,"range":{"start_line":1014,"start_character":12,"end_line":1015,"end_character":60},"updated":"2016-04-06 09:22:47.000000000","message":"I think we can remove this TODO comment","commit_id":"1897751a8dd51fcacfd3a0a1ed9822e244623142"},{"author":{"_account_id":12712,"name":"Gleb Stepanov","email":"gstepanov@mirantis.com","username":"stgleb"},"change_message_id":"7a28c49803a1fbf4e19b6bda20610503050925c0","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"            # so later when we work through the list in order we find"},{"line_number":1012,"context_line":"            # the method which has the latest version which supports"},{"line_number":1013,"context_line":"            # the version requested."},{"line_number":1014,"context_line":"            # TODO(cyeoh): Add check to ensure that there are no overlapping"},{"line_number":1015,"context_line":"            # ranges of valid versions as that is amibiguous"},{"line_number":1016,"context_line":"            if Controller.check_for_versions_intersection(func_list):"},{"line_number":1017,"context_line":"                raise Exception(\"Overlapping in API versions of method {0}\"."},{"line_number":1018,"context_line":"                                format(func_name))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a061dce_70a3d600","line":1015,"range":{"start_line":1014,"start_character":12,"end_line":1015,"end_character":60},"in_reply_to":"9a061dce_c71b0ec9","updated":"2016-04-06 10:12:27.000000000","message":"Yep, i\u0027ve just forget about that.","commit_id":"1897751a8dd51fcacfd3a0a1ed9822e244623142"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"b406c55c96ae495724e7f94369c56c1135e39d90","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"            # so later when we work through the list in order we find"},{"line_number":1012,"context_line":"            # the method which has the latest version which supports"},{"line_number":1013,"context_line":"            # the version requested."},{"line_number":1014,"context_line":"            # ranges of valid versions as that is amibiguous"},{"line_number":1015,"context_line":"            if Controller.check_for_versions_intersection(func_list):"},{"line_number":1016,"context_line":"                raise Exception(\"Overlapping in API versions of method {0}\"."},{"line_number":1017,"context_line":"                                format(func_name))"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a061dce_bc97fb38","line":1014,"range":{"start_line":1014,"start_character":12,"end_line":1014,"end_character":60},"updated":"2016-04-06 14:06:49.000000000","message":"this should be removed too:)","commit_id":"54e3ea2ba547263158eb56a2f3dc3e726e6356b0"},{"author":{"_account_id":12712,"name":"Gleb Stepanov","email":"gstepanov@mirantis.com","username":"stgleb"},"change_message_id":"156469377dc4a7a32c99212ed0583beae95f8a0c","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"            # so later when we work through the list in order we find"},{"line_number":1012,"context_line":"            # the method which has the latest version which supports"},{"line_number":1013,"context_line":"            # the version requested."},{"line_number":1014,"context_line":"            # ranges of valid versions as that is amibiguous"},{"line_number":1015,"context_line":"            if Controller.check_for_versions_intersection(func_list):"},{"line_number":1016,"context_line":"                raise Exception(\"Overlapping in API versions of method {0}\"."},{"line_number":1017,"context_line":"                                format(func_name))"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a061dce_8d7f6365","line":1014,"range":{"start_line":1014,"start_character":12,"end_line":1014,"end_character":60},"in_reply_to":"9a061dce_bc97fb38","updated":"2016-04-06 15:01:48.000000000","message":"Yep, i\u0027ve missed it","commit_id":"54e3ea2ba547263158eb56a2f3dc3e726e6356b0"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"b406c55c96ae495724e7f94369c56c1135e39d90","unresolved":false,"context_lines":[{"line_number":1041,"context_line":"        \"\"\"Determines whether function list contains version intervals"},{"line_number":1042,"context_line":"        intersections or not. General algorithm:"},{"line_number":1043,"context_line":""},{"line_number":1044,"context_line":"        https://en.wikipedia.org/wiki/Intersection_algorithm"},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":"        :param func_list: list of VersionedMethod objects"},{"line_number":1047,"context_line":"        :return: boolean"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a061dce_fc56935a","line":1044,"range":{"start_line":1044,"start_character":7,"end_line":1044,"end_character":60},"updated":"2016-04-06 14:06:49.000000000","message":"I wonder could we reuse some generic method instead of reimplementing this?","commit_id":"54e3ea2ba547263158eb56a2f3dc3e726e6356b0"},{"author":{"_account_id":12712,"name":"Gleb Stepanov","email":"gstepanov@mirantis.com","username":"stgleb"},"change_message_id":"156469377dc4a7a32c99212ed0583beae95f8a0c","unresolved":false,"context_lines":[{"line_number":1041,"context_line":"        \"\"\"Determines whether function list contains version intervals"},{"line_number":1042,"context_line":"        intersections or not. General algorithm:"},{"line_number":1043,"context_line":""},{"line_number":1044,"context_line":"        https://en.wikipedia.org/wiki/Intersection_algorithm"},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":"        :param func_list: list of VersionedMethod objects"},{"line_number":1047,"context_line":"        :return: boolean"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a061dce_cd679be7","line":1044,"range":{"start_line":1044,"start_character":7,"end_line":1044,"end_character":60},"in_reply_to":"9a061dce_fc56935a","updated":"2016-04-06 15:01:48.000000000","message":"I didn\u0027t found any intersections algo implementations in nova.","commit_id":"54e3ea2ba547263158eb56a2f3dc3e726e6356b0"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"cdf5541748b58e837b53a3eece7ef8dfeb9023b6","unresolved":false,"context_lines":[{"line_number":1012,"context_line":"            # the method which has the latest version which supports"},{"line_number":1013,"context_line":"            # the version requested."},{"line_number":1014,"context_line":"            if Controller.check_for_versions_intersection(func_list):"},{"line_number":1015,"context_line":"                raise Exception(\"Overlapping in API versions of method {0}\"."},{"line_number":1016,"context_line":"                                format(func_name))"},{"line_number":1017,"context_line":""},{"line_number":1018,"context_line":"            func_list.sort(key\u003dlambda f: f.start_version, reverse\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_0851e562","line":1015,"range":{"start_line":1015,"start_character":22,"end_line":1015,"end_character":31},"updated":"2016-04-08 23:49:05.000000000","message":"Better to define a new exception for this case, to handle this on caller side in the future.","commit_id":"4c1e68f48a897c410d34a66fb134d0bd02496f4f"},{"author":{"_account_id":18777,"name":"Jinxing Fang","email":"fang.jinxing@99cloud.net","username":"jinxingfang"},"change_message_id":"b4c5c7818639ed098bd1e5cc6f47ddef23e07832","unresolved":false,"context_lines":[{"line_number":1012,"context_line":"            # the method which has the latest version which supports"},{"line_number":1013,"context_line":"            # the version requested."},{"line_number":1014,"context_line":"            if Controller.check_for_versions_intersection(func_list):"},{"line_number":1015,"context_line":"                raise Exception(\"Overlapping in API versions of method {0}\"."},{"line_number":1016,"context_line":"                                format(func_name))"},{"line_number":1017,"context_line":""},{"line_number":1018,"context_line":"            func_list.sort(key\u003dlambda f: f.start_version, reverse\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_e40f752c","line":1015,"range":{"start_line":1015,"start_character":22,"end_line":1015,"end_character":31},"in_reply_to":"9a061dce_0851e562","updated":"2016-04-09 16:17:27.000000000","message":"agree with Ken\u0027ichi Ohmichi","commit_id":"4c1e68f48a897c410d34a66fb134d0bd02496f4f"},{"author":{"_account_id":12712,"name":"Gleb Stepanov","email":"gstepanov@mirantis.com","username":"stgleb"},"change_message_id":"a86e23ef96b9d31c80b3a3fb94611239c0dbbdea","unresolved":false,"context_lines":[{"line_number":1012,"context_line":"            # the method which has the latest version which supports"},{"line_number":1013,"context_line":"            # the version requested."},{"line_number":1014,"context_line":"            if Controller.check_for_versions_intersection(func_list):"},{"line_number":1015,"context_line":"                raise Exception(\"Overlapping in API versions of method {0}\"."},{"line_number":1016,"context_line":"                                format(func_name))"},{"line_number":1017,"context_line":""},{"line_number":1018,"context_line":"            func_list.sort(key\u003dlambda f: f.start_version, reverse\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a1b2928_ae444b74","line":1015,"range":{"start_line":1015,"start_character":22,"end_line":1015,"end_character":31},"in_reply_to":"9a061dce_e40f752c","updated":"2016-04-11 14:43:45.000000000","message":"Yep, i will do that","commit_id":"4c1e68f48a897c410d34a66fb134d0bd02496f4f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"cdf5541748b58e837b53a3eece7ef8dfeb9023b6","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"            pairs.append((f.end_version, -1, f))"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"        def compare(x):"},{"line_number":1056,"context_line":"            return x[0].ver_major * 10 + x[0].ver_minor"},{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"        pairs.sort(key\u003dcompare)"},{"line_number":1059,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_2802e93e","line":1056,"range":{"start_line":1056,"start_character":19,"end_line":1056,"end_character":55},"updated":"2016-04-08 23:49:05.000000000","message":"This logic doesn\u0027t seem enough in long-term.\n\nversion 2.12 and version 3.2 would be considered as the overlapped.","commit_id":"4c1e68f48a897c410d34a66fb134d0bd02496f4f"},{"author":{"_account_id":12712,"name":"Gleb Stepanov","email":"gstepanov@mirantis.com","username":"stgleb"},"change_message_id":"a86e23ef96b9d31c80b3a3fb94611239c0dbbdea","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"            pairs.append((f.end_version, -1, f))"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"        def compare(x):"},{"line_number":1056,"context_line":"            return x[0].ver_major * 10 + x[0].ver_minor"},{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"        pairs.sort(key\u003dcompare)"},{"line_number":1059,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a1b2928_3a9ec056","line":1056,"range":{"start_line":1056,"start_character":19,"end_line":1056,"end_character":55},"in_reply_to":"9a061dce_2802e93e","updated":"2016-04-11 14:43:45.000000000","message":"Yep, i\u0027ve forgotten that ApiRequestVersion is comparable.","commit_id":"4c1e68f48a897c410d34a66fb134d0bd02496f4f"}],"nova/exception.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"95a473c370f16f31b9da1ca08056524e01751b8b","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"class ApiVersionsIntersect(Invalid):"},{"line_number":380,"context_line":"    msg_fmt \u003d _(\"Version of %(name) %(min_ver) %(max_ver) intersects\""},{"line_number":381,"context_line":"                \"with another versions.\")"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a1b2928_04943be0","line":380,"range":{"start_line":380,"start_character":58,"end_line":380,"end_character":68},"updated":"2016-04-11 15:53:59.000000000","message":"need a space after \"intersects\" to avoid \"intersectswith\"","commit_id":"3d8d17d4760c4cf4ac2bd5e1ab9d664c5317e915"},{"author":{"_account_id":12712,"name":"Gleb Stepanov","email":"gstepanov@mirantis.com","username":"stgleb"},"change_message_id":"ef4c460a2d6c6a18aa3d0d780202c4b95118f217","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"class ApiVersionsIntersect(Invalid):"},{"line_number":380,"context_line":"    msg_fmt \u003d _(\"Version of %(name) %(min_ver) %(max_ver) intersects\""},{"line_number":381,"context_line":"                \"with another versions.\")"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a1b2928_57170751","line":380,"range":{"start_line":380,"start_character":58,"end_line":380,"end_character":68},"in_reply_to":"7a1b2928_04943be0","updated":"2016-04-11 16:07:04.000000000","message":"Thanks","commit_id":"3d8d17d4760c4cf4ac2bd5e1ab9d664c5317e915"}]}
