)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"70d0a053c0c1b0742ad6e2c5f97dcda8e05993d5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     lei zhang \u003cshleiz@cn.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-12-06 14:05:05 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix repeat set-gateway to same ip address and clear None gateway in neutron-client"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"From neutron-client,we can repeat set-gateway to sanme ip address and clear router"},{"line_number":10,"context_line":"gateway which is not set gateway."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ba63e191_a448cd5c","line":7,"updated":"2016-01-19 03:01:28.000000000","message":"Please limit Commit heading to 50 and Commit messages to 72 characters","commit_id":"9478e4adda5e95b5d0a723661ede411055bac1af"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"24d824c4f9dae8078d851fb1efe0a66fce3bf0df","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     reedip \u003creedip.banerjee@nectechnologies.in\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-01-22 11:32:22 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix repeat (set/clear) gateway in router"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently neutron-client allows user to repeatedly update the"},{"line_number":10,"context_line":"gateway to same ip address. It also allows user to clear the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a68dd71_983c66c9","line":7,"updated":"2016-01-24 18:55:47.000000000","message":"The summary line should be more descriptive. It should describe what is the new fixed behavior.","commit_id":"892f1f0566f1f97934e736128e7a45695756e2ce"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"24d824c4f9dae8078d851fb1efe0a66fce3bf0df","unresolved":false,"context_lines":[{"line_number":11,"context_line":"gateway for a router which does not have any gateway associated"},{"line_number":12,"context_line":"to it."},{"line_number":13,"context_line":"This patch adds a check in set-gateway and gateway-clear function"},{"line_number":14,"context_line":"to fix the same."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ifea1a984aeb8335c8f715799f0222c8dec13a8a1"},{"line_number":17,"context_line":"Co-Authored-By: Reedip Banerjee \u003creedip.banerjee@nectechnologies.in\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a68dd71_782f3288","line":14,"updated":"2016-01-24 18:55:47.000000000","message":"What is the new behavior after adding a check? It should be described.","commit_id":"892f1f0566f1f97934e736128e7a45695756e2ce"}],"neutronclient/neutron/v2_0/router.py":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"8b450408431613fe1a1099a28f63c572f917791d","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            router_dict[\u0027external_fixed_ips\u0027] \u003d ips"},{"line_number":261,"context_line":"        if ex_info:"},{"line_number":262,"context_line":"            if ex_info[\u0027network_id\u0027] \u003d\u003d router_dict[\u0027network_id\u0027]:"},{"line_number":263,"context_line":"                if router_dict.get(\u0027external_fixed_ips\u0027) is None:"},{"line_number":264,"context_line":"                    raise exceptions.CommandError(_("},{"line_number":265,"context_line":"                        \u0027External network already \u0027"},{"line_number":266,"context_line":"                        \u0027set to router %s\u0027) % parsed_args.router)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_04575903","line":263,"range":{"start_line":263,"start_character":34,"end_line":263,"end_character":36},"updated":"2016-01-19 03:00:52.000000000","message":"Cant both the if and elif be combined to a single statement?\n\n if not router_dict.get(\u0027external_fixed_ips\u0027) or router_dict.get(\u0027external_fixed_ips\u0027) \u003d\u003d ex_info(external_fixed_ips):\n .\n .\n .","commit_id":"9478e4adda5e95b5d0a723661ede411055bac1af"},{"author":{"_account_id":18785,"name":"Bo Chi","email":"bochi@tethrnet.com","username":"bochi"},"change_message_id":"c054020a2ff22032ea3bcb454df9f51f4e2c0f83","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                    ip_dict[\u0027subnet_id\u0027] \u003d subnet_id"},{"line_number":259,"context_line":"                ips.append(ip_dict)"},{"line_number":260,"context_line":"            router_dict[\u0027external_fixed_ips\u0027] \u003d ips"},{"line_number":261,"context_line":"        if ex_info and ex_info \u003d\u003d router_dict[\u0027network_id\u0027]:"},{"line_number":262,"context_line":"            if((router_dict.get(\u0027external_fixed_ips\u0027) is None) or"},{"line_number":263,"context_line":"               (router_dict.get(\u0027external_fixed_ips\u0027) \u003d\u003d"},{"line_number":264,"context_line":"               ex_info[\u0027external_fixed_ips\u0027])):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_b3e7a63f","line":261,"range":{"start_line":261,"start_character":23,"end_line":261,"end_character":30},"updated":"2016-01-19 09:05:13.000000000","message":"ex_info is a dict, while router_dict[\u0027network_id\u0027] is a string:\n\"external_gateway_info\": {\"network_id\": \"b92781fe-2d31-49a6-b648-98d937faf0b8\", \"enable_snat\": true, \"external_fixed_ips\": [{\"subnet_id\": \"7ebd8fc9-def1-47f1-97e0-e28c51dc591c\", \"ip_address\": \"172.24.4.8\"}]}\n\nuse ex_info[\u0027network_id\u0027]\nalso is there a need to check ex_info[\u0027enable_snat\u0027]?","commit_id":"19514faeaa21dd4c5d6890230020c634f28ca259"},{"author":{"_account_id":19226,"name":"Jacky_lei_zhang","email":"shleiz@cn.ibm.com","username":"lzhang"},"change_message_id":"af1b8b03a34ebcde0f9e63688319201995e9dcb5","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                    ex_info[\u0027external_fixed_ips\u0027])):"},{"line_number":265,"context_line":"                if (not router_dict.get(\u0027enable_snat\u0027) and ex_info.get("},{"line_number":266,"context_line":"                    \u0027enable_snat\u0027)) or ("},{"line_number":267,"context_line":"                        router_dict.get(\u0027enable_snat\u0027) and not ex_info.get("},{"line_number":268,"context_line":"                            \u0027enable_snat\u0027)):"},{"line_number":269,"context_line":"                    raise exceptions.CommandError(_("},{"line_number":270,"context_line":"                        \u0027External network already \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_c0035b0e","line":267,"updated":"2016-01-21 02:08:52.000000000","message":"hi\nif (not router_dict.get(\u0027enable_snat\u0027) and ex_info.get(\n                    \u0027enable_snat\u0027))\n\nhow about existed ex_info[enable_snat]\u003d\u003d False,and from CLI not config --disable-snats?","commit_id":"dc4b7807bfde1cac9eeb51c992a1caafeced6db5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"24d824c4f9dae8078d851fb1efe0a66fce3bf0df","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                    ip_dict[\u0027subnet_id\u0027] \u003d subnet_id"},{"line_number":259,"context_line":"                ips.append(ip_dict)"},{"line_number":260,"context_line":"            router_dict[\u0027external_fixed_ips\u0027] \u003d ips"},{"line_number":261,"context_line":"        if ex_info and ex_info[\u0027network_id\u0027] \u003d\u003d router_dict[\u0027network_id\u0027]:"},{"line_number":262,"context_line":"            if not router_dict.get(\u0027external_fixed_ips\u0027) or ("},{"line_number":263,"context_line":"                router_dict.get(\u0027external_fixed_ips\u0027) \u003d\u003d ("},{"line_number":264,"context_line":"                    ex_info[\u0027external_fixed_ips\u0027])):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_0271e9a7","line":261,"range":{"start_line":261,"start_character":48,"end_line":261,"end_character":73},"updated":"2016-01-24 18:55:47.000000000","message":"router_dict[\u0027network_id\u0027] -\u003e _ext_net_id","commit_id":"892f1f0566f1f97934e736128e7a45695756e2ce"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"24d824c4f9dae8078d851fb1efe0a66fce3bf0df","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                if (router_dict.get(\u0027enable_snat\u0027) is None and ex_info.get("},{"line_number":266,"context_line":"                    \u0027enable_snat\u0027)) or ("},{"line_number":267,"context_line":"                        router_dict.get(\u0027enable_snat\u0027) is not None and ("},{"line_number":268,"context_line":"                            not ex_info.get(\u0027enable_snat\u0027))):"},{"line_number":269,"context_line":"                    raise exceptions.CommandError(_("},{"line_number":270,"context_line":"                        \u0027External network already \u0027"},{"line_number":271,"context_line":"                        \u0027set to router %s\u0027) % parsed_args.router)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_f89b2264","line":268,"updated":"2016-01-24 18:55:47.000000000","message":"I am not sure what conditions are expected.\nCould you elaborate more detail first?\n\nAt now, the following all conditions are satisfied, the exception is raised.\n\n- (a) an external network ID specified in a command-line is same as the current one, and\n- (b1) a fixed IP address is not specified, or (b2) a fixed IP address is unchanged, and\n- (c1) enable_snat is not specified, or (c2) the current enable_snat is False\n\nThis means that the following conditions are accepted. Is it expected?\n\n- external network ID can be changed even if a network gateway is already set.\n- when an external network ID is same, if an fixed IP is changed, the request will be accepted.\n- If enable_snat is specified and it is different from the current one, the request will be accepted\n\n\nIn addition, three nested if-clause is not easy to understand.","commit_id":"892f1f0566f1f97934e736128e7a45695756e2ce"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"24d824c4f9dae8078d851fb1efe0a66fce3bf0df","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        router \u003d neutronV20.find_resource_by_name_or_id("},{"line_number":294,"context_line":"            neutron_client, self.resource, parsed_args.router)"},{"line_number":295,"context_line":"        _router_id \u003d router[\u0027id\u0027]"},{"line_number":296,"context_line":"        if router.get(\u0027external_gateway_info\u0027) is None:"},{"line_number":297,"context_line":"            raise exceptions.CommandError(_("},{"line_number":298,"context_line":"                \u0027External network already \u0027"},{"line_number":299,"context_line":"                \u0027Removed from router %s\u0027) % parsed_args.router)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_f85a42f1","line":296,"updated":"2016-01-24 18:55:47.000000000","message":"if not router.get(\u0027external_gateway_info\u0027):","commit_id":"892f1f0566f1f97934e736128e7a45695756e2ce"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"1fb227a109a8ec97be24fed11ebcb9216f681388","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        if parsed_args.disable_snat:"},{"line_number":249,"context_line":"            router_dict[\u0027enable_snat\u0027] \u003d False"},{"line_number":250,"context_line":"        else:"},{"line_number":251,"context_line":"            router_dict[\u0027enable_snat\u0027] \u003d True"},{"line_number":252,"context_line":"        if parsed_args.fixed_ip:"},{"line_number":253,"context_line":"            ips \u003d []"},{"line_number":254,"context_line":"            for ip_spec in parsed_args.fixed_ip:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a68dd71_b72f7df5","line":251,"updated":"2016-01-27 04:51:37.000000000","message":"No need to explicitly set it.\n\nReason:\nIf you have enable-snat\u003dFalse already in the router, and in the router-gateway-set, you do not pass enable-snat, then it ¨Should not update the enable-snat¨, but with the following code, ¨it will actually change enable-snat to true¨ , which is not the expected behaviour","commit_id":"558b82492fa48e32792e638b5a3c295abf1dc1fc"},{"author":{"_account_id":19226,"name":"Jacky_lei_zhang","email":"shleiz@cn.ibm.com","username":"lzhang"},"change_message_id":"c3d0192e029bb76ced118fe890485e04080a2d48","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        if parsed_args.disable_snat:"},{"line_number":249,"context_line":"            router_dict[\u0027enable_snat\u0027] \u003d False"},{"line_number":250,"context_line":"        else:"},{"line_number":251,"context_line":"            router_dict[\u0027enable_snat\u0027] \u003d True"},{"line_number":252,"context_line":"        if parsed_args.fixed_ip:"},{"line_number":253,"context_line":"            ips \u003d []"},{"line_number":254,"context_line":"            for ip_spec in parsed_args.fixed_ip:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a68dd71_d7579124","line":251,"in_reply_to":"9a68dd71_b72f7df5","updated":"2016-01-27 05:02:55.000000000","message":"Hi Reedip,\n\nif we do not pass --disable-snat in router-gateway-set,router[\u0027enable_snat\u0027]\u003dTrue by default actually,so if enable_snat\u003dFalse already in router,this should update,that expected behaviour\n\nThanks","commit_id":"558b82492fa48e32792e638b5a3c295abf1dc1fc"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"497c28a1856444460625a9b014269919e65cf73e","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        if parsed_args.disable_snat:"},{"line_number":249,"context_line":"            router_dict[\u0027enable_snat\u0027] \u003d False"},{"line_number":250,"context_line":"        else:"},{"line_number":251,"context_line":"            router_dict[\u0027enable_snat\u0027] \u003d True"},{"line_number":252,"context_line":"        if parsed_args.fixed_ip:"},{"line_number":253,"context_line":"            ips \u003d []"},{"line_number":254,"context_line":"            for ip_spec in parsed_args.fixed_ip:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a68dd71_927367b4","line":251,"in_reply_to":"9a68dd71_d7579124","updated":"2016-01-27 05:22:02.000000000","message":"I think its different.\nIf --disable-snat is not provided in the CLI, we do not need to set enable-snat to true.\n\nSee the output in http://paste.openstack.org/show/485100/","commit_id":"558b82492fa48e32792e638b5a3c295abf1dc1fc"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fcede78ec17f231b71200b7e5f640f98c694a9b8","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                        neutron_client, \u0027subnet\u0027, subnet_name_id)"},{"line_number":260,"context_line":"                    ip_dict[\u0027subnet_id\u0027] \u003d subnet_id"},{"line_number":261,"context_line":"                ips.append(ip_dict)"},{"line_number":262,"context_line":"            router_dict[\u0027external_fixed_ips\u0027] \u003d ips"},{"line_number":263,"context_line":"        if ex_info and ex_info[\u0027network_id\u0027] \u003d\u003d _ext_net_id:"},{"line_number":264,"context_line":"            if not router_dict.get(\u0027external_fixed_ips\u0027) or ("},{"line_number":265,"context_line":"                router_dict.get(\u0027external_fixed_ips\u0027) \u003d\u003d ("}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_e10f9d86","line":262,"updated":"2016-02-02 12:40:49.000000000","message":"I would like not to see this kind of complicated conditions.\nIf we prevent repeated set operations, I don\u0027t think we need to support to update something. If a gateway is already set, let\u0027s simply block a operation.This makes it difficult to maintain the code. Otherwise, I don\u0027t think we need this kind of check itself.","commit_id":"23c0d784c7f8af46f8f5f3ef96ac3ec836f673a7"},{"author":{"_account_id":19226,"name":"Jacky_lei_zhang","email":"shleiz@cn.ibm.com","username":"lzhang"},"change_message_id":"f8b7d5f60ed8dd7da63630d70fa6d807c1c4715f","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                        neutron_client, \u0027subnet\u0027, subnet_name_id)"},{"line_number":260,"context_line":"                    ip_dict[\u0027subnet_id\u0027] \u003d subnet_id"},{"line_number":261,"context_line":"                ips.append(ip_dict)"},{"line_number":262,"context_line":"            router_dict[\u0027external_fixed_ips\u0027] \u003d ips"},{"line_number":263,"context_line":"        if ex_info and ex_info[\u0027network_id\u0027] \u003d\u003d _ext_net_id:"},{"line_number":264,"context_line":"            if not router_dict.get(\u0027external_fixed_ips\u0027) or ("},{"line_number":265,"context_line":"                router_dict.get(\u0027external_fixed_ips\u0027) \u003d\u003d ("}],"source_content_type":"text/x-python","patch_set":10,"id":"5a5ae5dd_d186f712","line":262,"in_reply_to":"7a5de9d1_e10f9d86","updated":"2016-02-03 04:36:48.000000000","message":"Hi Akihiro,\n\nyou means if a gateway is already set and we raise a commandError simply and do not check if new input params is difference with the exitsed one?\n\nThanks\nJacky","commit_id":"23c0d784c7f8af46f8f5f3ef96ac3ec836f673a7"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"22aa7e55e05ee482462e6e49f9fdbad7fdb50174","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                    ex_info[\u0027external_fixed_ips\u0027])):"},{"line_number":267,"context_line":"                if router_dict.get(\u0027enable_snat\u0027) \u003d\u003d ex_info.get("},{"line_number":268,"context_line":"                        \u0027enable_snat\u0027):"},{"line_number":269,"context_line":"                    raise exceptions.CommandError(_("},{"line_number":270,"context_line":"                        \u0027External network already \u0027"},{"line_number":271,"context_line":"                        \u0027set to router %s\u0027) % parsed_args.router)"},{"line_number":272,"context_line":"        neutron_client.add_gateway_router(_router_id, router_dict)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_98738215","line":269,"updated":"2016-01-28 14:13:20.000000000","message":"If the REST API doesn\u0027t complain, why should the CLI?  This sets a precedence that the CLI should check for changes before proceeding with resource updates.  Which isn\u0027t a bad idea by itself, but that isn\u0027t how things generally work today and could be taken as an incompatible change.","commit_id":"23c0d784c7f8af46f8f5f3ef96ac3ec836f673a7"}]}
