)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"63b8cde2bd0aa5fed7704ef777eb9206a4f84f3c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Tang Chen \u003ctangchen@cn.fujitsu.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-12-29 11:33:12 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Router: Add --route and --no-routes options to \"router set\" command"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"--route option will enable users to set routes to the router."},{"line_number":10,"context_line":"--no-routes option will help users to clear the routes associated"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa69d971_792293bb","line":7,"updated":"2015-12-29 19:02:38.000000000","message":"Please update the commit message to reflect the options coded.","commit_id":"60addf0fc91aca4899c52fb9ba40dbdd85e37855"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"17e479b3f8499b6fe5d2b71f206e434e48febe4d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Tang Chen \u003ctangchen@cn.fujitsu.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-12-29 11:33:12 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Router: Add --route and --no-routes options to \"router set\" command"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"--route option will enable users to set routes to the router."},{"line_number":10,"context_line":"--no-routes option will help users to clear the routes associated"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa69d971_2ae594a7","line":7,"in_reply_to":"fa69d971_792293bb","updated":"2015-12-30 01:22:58.000000000","message":"Done...I always miss this.....:)","commit_id":"60addf0fc91aca4899c52fb9ba40dbdd85e37855"}],"doc/source/command-objects/router.rst":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"08389f9e42ee9ebe21af4d8ee0e593dc8bc6389b","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    Routes associated with the router."},{"line_number":116,"context_line":"    Repeat this option to set multiple routes."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":".. option:: --no-routes"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    Remove routes associated with the router"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a7b0d38_3b6fc32c","line":118,"range":{"start_line":118,"start_character":16,"end_line":118,"end_character":17},"updated":"2015-12-25 07:34:30.000000000","message":"how about \u0027--clear-routes\u0027","commit_id":"e9f7fc4d8060c6cdb1dc99dbd713200e9c6fdca6"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"fb234890ed54f5c0ca07d08a58e28ddfa73f7318","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    Routes associated with the router."},{"line_number":116,"context_line":"    Repeat this option to set multiple routes."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":".. option:: --no-routes"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    Remove routes associated with the router"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a7b0d38_1b7e87ae","line":118,"range":{"start_line":118,"start_character":16,"end_line":118,"end_character":17},"in_reply_to":"1a7b0d38_3b6fc32c","updated":"2015-12-25 07:48:27.000000000","message":"I\u0027m OK with this name. Thx. :)","commit_id":"e9f7fc4d8060c6cdb1dc99dbd713200e9c6fdca6"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"63b8cde2bd0aa5fed7704ef777eb9206a4f84f3c","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        [--name \u003cname\u003e]"},{"line_number":88,"context_line":"        [--enable | --disable]"},{"line_number":89,"context_line":"        [--distributed | --centralized]"},{"line_number":90,"context_line":"        [--route destination\u003dCIDR,nexthop\u003dIP_ADDR | --clear-routes]"},{"line_number":91,"context_line":"        \u003crouter\u003e"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":".. option:: --name \u003cname\u003e"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa69d971_843efab6","line":90,"updated":"2015-12-29 19:02:38.000000000","message":"The \"os server create\" command uses lowercase key/value names with dash instead of underscore.  I wonder if this should be \"--route destination\u003dcidr,nexthop\u003dip-address\" instead.","commit_id":"60addf0fc91aca4899c52fb9ba40dbdd85e37855"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"17e479b3f8499b6fe5d2b71f206e434e48febe4d","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        [--name \u003cname\u003e]"},{"line_number":88,"context_line":"        [--enable | --disable]"},{"line_number":89,"context_line":"        [--distributed | --centralized]"},{"line_number":90,"context_line":"        [--route destination\u003dCIDR,nexthop\u003dIP_ADDR | --clear-routes]"},{"line_number":91,"context_line":"        \u003crouter\u003e"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":".. option:: --name \u003cname\u003e"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa69d971_aae744ab","line":90,"in_reply_to":"fa69d971_843efab6","updated":"2015-12-30 01:22:58.000000000","message":"Done","commit_id":"60addf0fc91aca4899c52fb9ba40dbdd85e37855"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"63b8cde2bd0aa5fed7704ef777eb9206a4f84f3c","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":".. option:: --clear-routes"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    Remove routes associated with the router"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":".. _router_set-router:"},{"line_number":123,"context_line":".. describe:: \u003crouter\u003e"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa69d971_0479aa93","line":120,"updated":"2015-12-29 19:02:38.000000000","message":"Should this be \"Clear routes...\" to match the option name?","commit_id":"60addf0fc91aca4899c52fb9ba40dbdd85e37855"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"17e479b3f8499b6fe5d2b71f206e434e48febe4d","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":".. option:: --clear-routes"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    Remove routes associated with the router"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":".. _router_set-router:"},{"line_number":123,"context_line":".. describe:: \u003crouter\u003e"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa69d971_6a02ac40","line":120,"in_reply_to":"fa69d971_0479aa93","updated":"2015-12-30 01:22:58.000000000","message":"Done","commit_id":"60addf0fc91aca4899c52fb9ba40dbdd85e37855"},{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"72e8182806bdd772cf49e653591a179402a51a90","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        [--name \u003cname\u003e]"},{"line_number":88,"context_line":"        [--enable | --disable]"},{"line_number":89,"context_line":"        [--distributed | --centralized]"},{"line_number":90,"context_line":"        [--route destination\u003dcidr,nexthop\u003dip-address | --clear-routes]"},{"line_number":91,"context_line":"        \u003crouter\u003e"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":".. option:: --name \u003cname\u003e"}],"source_content_type":"text/x-rst","patch_set":7,"id":"da6ed579_a2be6bfd","line":90,"updated":"2016-01-12 15:29:18.000000000","message":"nexthop --\u003e gateway\n\nAs far as the destination, are you going to allow default route and host routes to be added?   If so, then cidr may not be the correct term.  Not sure how you want to specify default route destination:  0.0.0.0 ?","commit_id":"82375b98ea8b855be49e6db36e2889469a192041"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"af2d08dc2619274a635e83e05ec57a42649c9e99","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        [--name \u003cname\u003e]"},{"line_number":88,"context_line":"        [--enable | --disable]"},{"line_number":89,"context_line":"        [--distributed | --centralized]"},{"line_number":90,"context_line":"        [--route destination\u003dcidr,nexthop\u003dip-address | --clear-routes]"},{"line_number":91,"context_line":"        \u003crouter\u003e"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":".. option:: --name \u003cname\u003e"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7a5de9d1_37b8ad29","line":90,"in_reply_to":"da6ed579_a2be6bfd","updated":"2016-02-02 04:58:53.000000000","message":"Hi John, Thanks for the review. But would you please explain more about these ?\n\n1. Why gateway but not nexthop ?\n2. The cidr term is just something I copied from neutron client. I\u0027m not sure whether there is any other proper term for this. What kind of term do you suggest ?","commit_id":"82375b98ea8b855be49e6db36e2889469a192041"},{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"72e8182806bdd772cf49e653591a179402a51a90","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    Set router to centralized mode (disabled router only)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":".. option:: --route destination\u003dCIDR,nexthop\u003dIP_ADDR"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    Routes associated with the router."},{"line_number":116,"context_line":"    Repeat this option to set multiple routes."}],"source_content_type":"text/x-rst","patch_set":7,"id":"da6ed579_826327b1","line":113,"updated":"2016-01-12 15:29:18.000000000","message":"nexthop to gateway.","commit_id":"82375b98ea8b855be49e6db36e2889469a192041"}],"openstackclient/common/utils.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ac98a53914b8f1b957f1213af1afeaf2fcd77460","unresolved":false,"context_lines":[{"line_number":263,"context_line":"    return arg.strip().lower() in (\u0027t\u0027, \u0027true\u0027, \u0027yes\u0027, \u00271\u0027)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"def string_to_dict(strdict):"},{"line_number":267,"context_line":"    \"\"\"Convert key1\u003dvalue1,key2\u003dvalue2,... string into dictionary."},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    :param strdict: key1\u003dvalue1,key2\u003dvalue2"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a7b0d38_bbc50a8f","line":266,"range":{"start_line":266,"start_character":0,"end_line":266,"end_character":28},"updated":"2015-12-24 09:18:17.000000000","message":"custom parseractions should go here: https://github.com/openstack/python-openstackclient/blob/master/openstackclient/common/parseractions.py\n\nthis seems very similar to \"KeyValueAction\" in that file","commit_id":"e9f7fc4d8060c6cdb1dc99dbd713200e9c6fdca6"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"90876cdf31cd553528e268fa62f6d1ef7a4c4d1c","unresolved":false,"context_lines":[{"line_number":263,"context_line":"    return arg.strip().lower() in (\u0027t\u0027, \u0027true\u0027, \u0027yes\u0027, \u00271\u0027)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"def string_to_dict(strdict):"},{"line_number":267,"context_line":"    \"\"\"Convert key1\u003dvalue1,key2\u003dvalue2,... string into dictionary."},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    :param strdict: key1\u003dvalue1,key2\u003dvalue2"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a7b0d38_d6730de6","line":266,"range":{"start_line":266,"start_character":0,"end_line":266,"end_character":28},"in_reply_to":"1a7b0d38_bbc50a8f","updated":"2015-12-24 10:12:52.000000000","message":"OK, will try to use custom actions.","commit_id":"e9f7fc4d8060c6cdb1dc99dbd713200e9c6fdca6"}],"openstackclient/network/v2/router.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ac98a53914b8f1b957f1213af1afeaf2fcd77460","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    if parsed_args.distributed is not None:"},{"line_number":52,"context_line":"        attrs[\u0027distributed\u0027] \u003d parsed_args.distributed"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    if \u0027no_routes\u0027 in parsed_args and parsed_args.no_routes:"},{"line_number":55,"context_line":"        attrs[\u0027routes\u0027] \u003d []"},{"line_number":56,"context_line":"    elif \u0027routes\u0027 in parsed_args and parsed_args.routes is not None:"},{"line_number":57,"context_line":"        attrs[\u0027routes\u0027] \u003d parsed_args.routes"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a7b0d38_9b8cce80","line":54,"range":{"start_line":54,"start_character":4,"end_line":54,"end_character":60},"updated":"2015-12-24 09:18:17.000000000","message":"why not just:\n\n  if parsed_args.no_routes is not None:\n\n?","commit_id":"e9f7fc4d8060c6cdb1dc99dbd713200e9c6fdca6"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"90876cdf31cd553528e268fa62f6d1ef7a4c4d1c","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    if parsed_args.distributed is not None:"},{"line_number":52,"context_line":"        attrs[\u0027distributed\u0027] \u003d parsed_args.distributed"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    if \u0027no_routes\u0027 in parsed_args and parsed_args.no_routes:"},{"line_number":55,"context_line":"        attrs[\u0027routes\u0027] \u003d []"},{"line_number":56,"context_line":"    elif \u0027routes\u0027 in parsed_args and parsed_args.routes is not None:"},{"line_number":57,"context_line":"        attrs[\u0027routes\u0027] \u003d parsed_args.routes"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a7b0d38_d678ed2d","line":54,"range":{"start_line":54,"start_character":4,"end_line":54,"end_character":60},"in_reply_to":"1a7b0d38_9b8cce80","updated":"2015-12-24 10:12:52.000000000","message":"This is because \u0027no_routes\u0027 doesn\u0027t exist in CreateRouter. _get_attrs() is also reused by CreateRouter, we cannot assume \u0027no_routes\u0027 exists.","commit_id":"e9f7fc4d8060c6cdb1dc99dbd713200e9c6fdca6"}],"openstackclient/tests/network/v2/test_router.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"f82961906bcdbb95974b397b6160ab5fad6287f3","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        try:"},{"line_number":334,"context_line":"            # Argument parse failing should bail here"},{"line_number":335,"context_line":"            self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":336,"context_line":"        except tests_utils.ParserException:"},{"line_number":337,"context_line":"            pass"},{"line_number":338,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a7b0d38_e9462c4e","line":335,"range":{"start_line":335,"start_character":17,"end_line":335,"end_character":29},"updated":"2015-12-28 07:48:17.000000000","message":"add a self.assertFalse(True)?","commit_id":"60addf0fc91aca4899c52fb9ba40dbdd85e37855"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"1a538cafe72e9df8e05933a2986c532f8ec91e1e","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        try:"},{"line_number":334,"context_line":"            # Argument parse failing should bail here"},{"line_number":335,"context_line":"            self.check_parser(self.cmd, arglist, verifylist)"},{"line_number":336,"context_line":"        except tests_utils.ParserException:"},{"line_number":337,"context_line":"            pass"},{"line_number":338,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a7b0d38_e97cecb6","line":335,"range":{"start_line":335,"start_character":17,"end_line":335,"end_character":29},"in_reply_to":"1a7b0d38_e9462c4e","updated":"2015-12-28 08:16:16.000000000","message":"Sorry, why do we need to add this ?","commit_id":"60addf0fc91aca4899c52fb9ba40dbdd85e37855"},{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"72e8182806bdd772cf49e653591a179402a51a90","unresolved":false,"context_lines":[{"line_number":280,"context_line":"    def test_set_route(self):"},{"line_number":281,"context_line":"        arglist \u003d ["},{"line_number":282,"context_line":"            self._router.name,"},{"line_number":283,"context_line":"            \u0027--route\u0027, \u0027destination\u003d10.20.30.40/24,nexthop\u003d10.20.30.40\u0027,"},{"line_number":284,"context_line":"        ]"},{"line_number":285,"context_line":"        verifylist \u003d ["},{"line_number":286,"context_line":"            (\u0027router\u0027, self._router.name),"}],"source_content_type":"text/x-python","patch_set":7,"id":"da6ed579_a29f4b5e","line":283,"updated":"2016-01-12 15:29:18.000000000","message":"Whenever I typically see a /xx CIDR, the IP address portion is typically represented as the network address of the subnet.  In this case, it should be  10.20.30.0 / 24.    \n\nThe 10.20.30.40  destination is probably a host route with a /32.\n\nnexthop -\u003e gateway.","commit_id":"82375b98ea8b855be49e6db36e2889469a192041"},{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"af2d08dc2619274a635e83e05ec57a42649c9e99","unresolved":false,"context_lines":[{"line_number":280,"context_line":"    def test_set_route(self):"},{"line_number":281,"context_line":"        arglist \u003d ["},{"line_number":282,"context_line":"            self._router.name,"},{"line_number":283,"context_line":"            \u0027--route\u0027, \u0027destination\u003d10.20.30.40/24,nexthop\u003d10.20.30.40\u0027,"},{"line_number":284,"context_line":"        ]"},{"line_number":285,"context_line":"        verifylist \u003d ["},{"line_number":286,"context_line":"            (\u0027router\u0027, self._router.name),"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_575c4918","line":283,"in_reply_to":"da6ed579_a29f4b5e","updated":"2016-02-02 04:58:53.000000000","message":"Done","commit_id":"82375b98ea8b855be49e6db36e2889469a192041"}]}
