)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"5ab2447ce1461f78e9cd632aa67e57352e836ced","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Accept icmpv6 as protocol of SG rule for backward compatibility"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The patch https://review.openstack.org/#/c/252155/ adds various protocol"},{"line_number":10,"context_line":"names, but it dropped \u0027icmpv6\u0027 from supported protocol names."},{"line_number":11,"context_line":"This leads to backward compatiblity of the security group API."},{"line_number":12,"context_line":"This commit re-adds \u0027icmpv6\u0027 to the supported protocol names."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1af94dfe_db561d29","line":10,"updated":"2016-03-18 08:59:43.000000000","message":"Actually it renamed it to ipv6-icmp. It doesnt seem that any other constant was renamed","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8bc54c4a8476cfc1b3b47074616418887ad8fdd2","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Accept icmpv6 as protocol of SG rule for backward compatibility"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The patch https://review.openstack.org/#/c/252155/ adds various protocol"},{"line_number":10,"context_line":"names, but it dropped \u0027icmpv6\u0027 from supported protocol names."},{"line_number":11,"context_line":"This leads to backward compatiblity of the security group API."},{"line_number":12,"context_line":"This commit re-adds \u0027icmpv6\u0027 to the supported protocol names."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1af94dfe_0d916a47","line":10,"in_reply_to":"1af94dfe_db561d29","updated":"2016-03-18 10:08:55.000000000","message":"yup, it dropped it in favor of ipv6-icmp","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8bc54c4a8476cfc1b3b47074616418887ad8fdd2","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The patch https://review.openstack.org/#/c/252155/ adds various protocol"},{"line_number":10,"context_line":"names, but it dropped \u0027icmpv6\u0027 from supported protocol names."},{"line_number":11,"context_line":"This leads to backward compatiblity of the security group API."},{"line_number":12,"context_line":"This commit re-adds \u0027icmpv6\u0027 to the supported protocol names."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I0d7e1cd9fc075902449c5eb5ef27069083ab95d4"},{"line_number":15,"context_line":"Closes-Bug: #1558774"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1af94dfe_205a6d2a","line":12,"updated":"2016-03-18 10:08:55.000000000","message":"We should follow up to transfer the variable back to neutron-lib as soon as global requirements unfreeze. Can you follow up, pretty please?","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"}],"neutron/common/constants.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8bc54c4a8476cfc1b3b47074616418887ad8fdd2","unresolved":false,"context_lines":[{"line_number":54,"context_line":"ETHERTYPE_IPV6 \u003d 0x86DD"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"# Protocol names and numbers for Security Groups/Firewalls"},{"line_number":57,"context_line":"PROTO_NAME_AH \u003d \u0027ah\u0027"},{"line_number":58,"context_line":"PROTO_NAME_DCCP \u003d \u0027dccp\u0027"},{"line_number":59,"context_line":"PROTO_NAME_EGP \u003d \u0027egp\u0027"},{"line_number":60,"context_line":"PROTO_NAME_ESP \u003d \u0027esp\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_cd1e62ba","line":57,"updated":"2016-03-18 10:08:55.000000000","message":"What\u0027s the plan to drop these? This duplication is insane [1]! It looks like we didn\u0027t follow up with the cleanup, because of line [2], it seems this should be safe, but may not in the context of this patch ;)\n\n[1] https://github.com/openstack/neutron-lib/blob/master/neutron_lib/constants.py\n[2] https://github.com/openstack/neutron/blob/master/neutron/common/constants.py#L208","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0acfb2e2377e37da423f84963ecd4e19c45fbe99","unresolved":false,"context_lines":[{"line_number":54,"context_line":"ETHERTYPE_IPV6 \u003d 0x86DD"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"# Protocol names and numbers for Security Groups/Firewalls"},{"line_number":57,"context_line":"PROTO_NAME_AH \u003d \u0027ah\u0027"},{"line_number":58,"context_line":"PROTO_NAME_DCCP \u003d \u0027dccp\u0027"},{"line_number":59,"context_line":"PROTO_NAME_EGP \u003d \u0027egp\u0027"},{"line_number":60,"context_line":"PROTO_NAME_ESP \u003d \u0027esp\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_9e50fed5","line":57,"in_reply_to":"1af94dfe_cd1e62ba","updated":"2016-03-18 11:39:14.000000000","message":"I think it should be done at the beginning of Newton. Now we should do it. Once this patch is backport-ed I will take care of it\nif the original author does not propose a patch.","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8bc54c4a8476cfc1b3b47074616418887ad8fdd2","unresolved":false,"context_lines":[{"line_number":79,"context_line":"# For backward-compatibility of security group rule API,"},{"line_number":80,"context_line":"# we keep the old value for IPv6 ICMP."},{"line_number":81,"context_line":"# It should be clean up in the future."},{"line_number":82,"context_line":"PROTO_NAME_IPV6_ICMP_LEGACY \u003d \u0027icmpv6\u0027"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"PROTO_NUM_AH \u003d 51"},{"line_number":85,"context_line":"PROTO_NUM_DCCP \u003d 33"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_8d6f3a2a","line":82,"updated":"2016-03-18 10:08:55.000000000","message":"can you add a todo: to allow this to move to neutron-lib?","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0acfb2e2377e37da423f84963ecd4e19c45fbe99","unresolved":false,"context_lines":[{"line_number":79,"context_line":"# For backward-compatibility of security group rule API,"},{"line_number":80,"context_line":"# we keep the old value for IPv6 ICMP."},{"line_number":81,"context_line":"# It should be clean up in the future."},{"line_number":82,"context_line":"PROTO_NAME_IPV6_ICMP_LEGACY \u003d \u0027icmpv6\u0027"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"PROTO_NUM_AH \u003d 51"},{"line_number":85,"context_line":"PROTO_NUM_DCCP \u003d 33"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_7ee9b2e5","line":82,"in_reply_to":"1af94dfe_8d6f3a2a","updated":"2016-03-18 11:39:14.000000000","message":"Done","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"}],"neutron/db/securitygroups_db.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ff810053f04477ba639b4be9d96efbfedfdec60b","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        # problems with comparing int and string in PostgreSQL. Here this"},{"line_number":421,"context_line":"        # string is converted to int to give an opportunity to use it as"},{"line_number":422,"context_line":"        # before."},{"line_number":423,"context_line":"        return int(constants.IP_PROTOCOL_MAP.get(protocol, protocol))"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def _validate_port_range(self, rule):"},{"line_number":426,"context_line":"        \"\"\"Check that port_range is valid.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_0d768aa3","line":423,"updated":"2016-03-18 09:50:05.000000000","message":"PROTO_NAME_IPV6_ICMP_LEGACY should be considered.","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"e5b0053913199ad90f83010f6204be52e5765b6c","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        # problems with comparing int and string in PostgreSQL. Here this"},{"line_number":421,"context_line":"        # string is converted to int to give an opportunity to use it as"},{"line_number":422,"context_line":"        # before."},{"line_number":423,"context_line":"        return int(constants.IP_PROTOCOL_MAP.get(protocol, protocol))"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def _validate_port_range(self, rule):"},{"line_number":426,"context_line":"        \"\"\"Check that port_range is valid.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_0dd20a5c","line":423,"in_reply_to":"1af94dfe_0d768aa3","updated":"2016-03-18 09:53:49.000000000","message":"If we put it in \u0027IP_PROTOCOL_MAP\u0027 then we probably need not change every places..","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8bc54c4a8476cfc1b3b47074616418887ad8fdd2","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        # problems with comparing int and string in PostgreSQL. Here this"},{"line_number":421,"context_line":"        # string is converted to int to give an opportunity to use it as"},{"line_number":422,"context_line":"        # before."},{"line_number":423,"context_line":"        return int(constants.IP_PROTOCOL_MAP.get(protocol, protocol))"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def _validate_port_range(self, rule):"},{"line_number":426,"context_line":"        \"\"\"Check that port_range is valid.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_cda82223","line":423,"in_reply_to":"1af94dfe_0da32ab3","updated":"2016-03-18 10:08:55.000000000","message":"that\u0027s because of [1], I think. \n\n[1] https://github.com/openstack/neutron/blob/master/neutron/common/constants.py#L208","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1eced38f64c4919ce0cd20cd62ce628d32642286","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        # problems with comparing int and string in PostgreSQL. Here this"},{"line_number":421,"context_line":"        # string is converted to int to give an opportunity to use it as"},{"line_number":422,"context_line":"        # before."},{"line_number":423,"context_line":"        return int(constants.IP_PROTOCOL_MAP.get(protocol, protocol))"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def _validate_port_range(self, rule):"},{"line_number":426,"context_line":"        \"\"\"Check that port_range is valid.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_0da32ab3","line":423,"in_reply_to":"1af94dfe_0dd20a5c","updated":"2016-03-18 09:57:16.000000000","message":"Unfortunately, it does not work. IP_PROTOCOL_MAP from neutron-lib is actually used and changing neutron.common.constants.IP_PROTOCOL_MAP has no effect.","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ae146f1de1ab61c3895bad5e2806dbc46f7c76c2","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        # problems with comparing int and string in PostgreSQL. Here this"},{"line_number":421,"context_line":"        # string is converted to int to give an opportunity to use it as"},{"line_number":422,"context_line":"        # before."},{"line_number":423,"context_line":"        return int(constants.IP_PROTOCOL_MAP.get(protocol, protocol))"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def _validate_port_range(self, rule):"},{"line_number":426,"context_line":"        \"\"\"Check that port_range is valid.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_ef7a2ef0","line":423,"in_reply_to":"1af94dfe_b4f07b92","updated":"2016-03-18 11:56:43.000000000","message":"did you get to the bottom of it?","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0acfb2e2377e37da423f84963ecd4e19c45fbe99","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        # problems with comparing int and string in PostgreSQL. Here this"},{"line_number":421,"context_line":"        # string is converted to int to give an opportunity to use it as"},{"line_number":422,"context_line":"        # before."},{"line_number":423,"context_line":"        return int(constants.IP_PROTOCOL_MAP.get(protocol, protocol))"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def _validate_port_range(self, rule):"},{"line_number":426,"context_line":"        \"\"\"Check that port_range is valid.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_b4f07b92","line":423,"in_reply_to":"1af94dfe_cda82223","updated":"2016-03-18 11:39:14.000000000","message":"Even when we don\u0027t have \u0027icmpv6\u0027 in IP_PROTOCOL_MAP, neutron security-group-rule-create --ethertype IPv6 --protocol icmpv6 default succeeded. The API does work. I think something is wrong, but perhaps it might be another issue.... anyway I will investigate it.","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8a70582c5606abca3aadc19ef113b5e57e1438f7","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        # string is converted to int to give an opportunity to use it as"},{"line_number":422,"context_line":"        # before."},{"line_number":423,"context_line":"        if protocol in constants.IP_PROTOCOL_NAME_ALIASES:"},{"line_number":424,"context_line":"            protocol \u003d constants.IP_PROTOCOL_NAME_ALIASES[protocol]"},{"line_number":425,"context_line":"        return int(constants.IP_PROTOCOL_MAP.get(protocol, protocol))"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def _validate_port_range(self, rule):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_4ff7e28a","line":424,"updated":"2016-03-18 11:56:29.000000000","message":"this could have been:\n\n  protocol \u003d constants.IP_PROTOCOL_NAME_ALIASES.get(protocol, protocol)","commit_id":"eaec84a4b4b137293e1a44fe9ed7f3d97700b46a"}],"neutron/extensions/securitygroup.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8bc54c4a8476cfc1b3b47074616418887ad8fdd2","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"attr.validators[\u0027type:name_not_default\u0027] \u003d _validate_name_not_default"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"# NOTE(amotoki): const.IP_PROTOCOL_MAP now comes from neutron-lib,"},{"line_number":215,"context_line":"# so we cannot add PROTO_NAME_IPV6_ICMP_LEGACY to const.IP_PROTOCOL_MAP"},{"line_number":216,"context_line":"# in neutron.common.constants."},{"line_number":217,"context_line":"sg_supported_protocols \u003d ([None, const.PROTO_NAME_IPV6_ICMP_LEGACY] +"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_ad2af68d","line":214,"updated":"2016-03-18 10:08:55.000000000","message":"can you turn this in a TODO? Right now global requirements are frozen, but as soon as they open up we can clean this up and add the constant to neutron-lib and bump the requirement.","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0acfb2e2377e37da423f84963ecd4e19c45fbe99","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"attr.validators[\u0027type:name_not_default\u0027] \u003d _validate_name_not_default"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"# NOTE(amotoki): const.IP_PROTOCOL_MAP now comes from neutron-lib,"},{"line_number":215,"context_line":"# so we cannot add PROTO_NAME_IPV6_ICMP_LEGACY to const.IP_PROTOCOL_MAP"},{"line_number":216,"context_line":"# in neutron.common.constants."},{"line_number":217,"context_line":"sg_supported_protocols \u003d ([None, const.PROTO_NAME_IPV6_ICMP_LEGACY] +"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_be497a62","line":214,"in_reply_to":"1af94dfe_ad2af68d","updated":"2016-03-18 11:39:14.000000000","message":"Done","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"e5b0053913199ad90f83010f6204be52e5765b6c","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"# NOTE(amotoki): const.IP_PROTOCOL_MAP now comes from neutron-lib,"},{"line_number":215,"context_line":"# so we cannot add PROTO_NAME_IPV6_ICMP_LEGACY to const.IP_PROTOCOL_MAP"},{"line_number":216,"context_line":"# in neutron.common.constants."},{"line_number":217,"context_line":"sg_supported_protocols \u003d ([None, const.PROTO_NAME_IPV6_ICMP_LEGACY] +"},{"line_number":218,"context_line":"                          list(const.IP_PROTOCOL_MAP.keys()))"},{"line_number":219,"context_line":"sg_supported_ethertypes \u003d [\u0027IPv4\u0027, \u0027IPv6\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_ad5036d5","line":216,"updated":"2016-03-18 09:53:49.000000000","message":"Currently, it\u0027s from neutron.common.constants and not from neutron_lib..","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8bc54c4a8476cfc1b3b47074616418887ad8fdd2","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"# NOTE(amotoki): const.IP_PROTOCOL_MAP now comes from neutron-lib,"},{"line_number":215,"context_line":"# so we cannot add PROTO_NAME_IPV6_ICMP_LEGACY to const.IP_PROTOCOL_MAP"},{"line_number":216,"context_line":"# in neutron.common.constants."},{"line_number":217,"context_line":"sg_supported_protocols \u003d ([None, const.PROTO_NAME_IPV6_ICMP_LEGACY] +"},{"line_number":218,"context_line":"                          list(const.IP_PROTOCOL_MAP.keys()))"},{"line_number":219,"context_line":"sg_supported_ethertypes \u003d [\u0027IPv4\u0027, \u0027IPv6\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_8d79faca","line":216,"in_reply_to":"1af94dfe_2daee697","updated":"2016-03-18 10:08:55.000000000","message":"https://github.com/openstack/neutron/blob/master/neutron/common/constants.py#L208","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"7da9b1f69622b2764e2b40528b29caf72384f891","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"# NOTE(amotoki): const.IP_PROTOCOL_MAP now comes from neutron-lib,"},{"line_number":215,"context_line":"# so we cannot add PROTO_NAME_IPV6_ICMP_LEGACY to const.IP_PROTOCOL_MAP"},{"line_number":216,"context_line":"# in neutron.common.constants."},{"line_number":217,"context_line":"sg_supported_protocols \u003d ([None, const.PROTO_NAME_IPV6_ICMP_LEGACY] +"},{"line_number":218,"context_line":"                          list(const.IP_PROTOCOL_MAP.keys()))"},{"line_number":219,"context_line":"sg_supported_ethertypes \u003d [\u0027IPv4\u0027, \u0027IPv6\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_5e403634","line":216,"in_reply_to":"1af94dfe_8d79faca","updated":"2016-03-18 10:49:55.000000000","message":"Thanks armax for the clarification...","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1eced38f64c4919ce0cd20cd62ce628d32642286","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"# NOTE(amotoki): const.IP_PROTOCOL_MAP now comes from neutron-lib,"},{"line_number":215,"context_line":"# so we cannot add PROTO_NAME_IPV6_ICMP_LEGACY to const.IP_PROTOCOL_MAP"},{"line_number":216,"context_line":"# in neutron.common.constants."},{"line_number":217,"context_line":"sg_supported_protocols \u003d ([None, const.PROTO_NAME_IPV6_ICMP_LEGACY] +"},{"line_number":218,"context_line":"                          list(const.IP_PROTOCOL_MAP.keys()))"},{"line_number":219,"context_line":"sg_supported_ethertypes \u003d [\u0027IPv4\u0027, \u0027IPv6\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_2daee697","line":216,"in_reply_to":"1af94dfe_ad5036d5","updated":"2016-03-18 09:57:16.000000000","message":"Have you tried the actually code?\nI tried the same thing first but I failed.","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"}],"neutron/tests/unit/db/test_securitygroups_db.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8bc54c4a8476cfc1b3b47074616418887ad8fdd2","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                            \u0027ethertype\u0027: constants.IPv4},"},{"line_number":117,"context_line":"                           {\u0027protocol\u0027: constants.PROTO_NAME_IPV6_OPTS,"},{"line_number":118,"context_line":"                            \u0027ethertype\u0027: constants.IPv4},"},{"line_number":119,"context_line":"                           {\u0027protocol\u0027: constants.PROTO_NAME_IPV6_ICMP_LEGACY,"},{"line_number":120,"context_line":"                            \u0027ethertype\u0027: constants.IPv4}]"},{"line_number":121,"context_line":"        # test wrong protocols"},{"line_number":122,"context_line":"        for rule in fake_ipv4_rules:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_cd04a219","line":119,"range":{"start_line":119,"start_character":66,"end_line":119,"end_character":67},"updated":"2016-03-18 10:08:55.000000000","message":"can you get it closer to line 107?","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0acfb2e2377e37da423f84963ecd4e19c45fbe99","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                            \u0027ethertype\u0027: constants.IPv4},"},{"line_number":117,"context_line":"                           {\u0027protocol\u0027: constants.PROTO_NAME_IPV6_OPTS,"},{"line_number":118,"context_line":"                            \u0027ethertype\u0027: constants.IPv4},"},{"line_number":119,"context_line":"                           {\u0027protocol\u0027: constants.PROTO_NAME_IPV6_ICMP_LEGACY,"},{"line_number":120,"context_line":"                            \u0027ethertype\u0027: constants.IPv4}]"},{"line_number":121,"context_line":"        # test wrong protocols"},{"line_number":122,"context_line":"        for rule in fake_ipv4_rules:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_9ef75e58","line":119,"range":{"start_line":119,"start_character":66,"end_line":119,"end_character":67},"in_reply_to":"1af94dfe_cd04a219","updated":"2016-03-18 11:39:14.000000000","message":"Done","commit_id":"44e961dcb26fb61e622c252fa26c37dc03703d28"}],"neutron/tests/unit/extensions/test_securitygroup.py":[{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"8231f7a796c36c3b25dc156986067a964d9f7eef","unresolved":false,"context_lines":[{"line_number":854,"context_line":"                                          None, None,"},{"line_number":855,"context_line":"                                          ethertype) as rule:"},{"line_number":856,"context_line":"                for k, v, in keys:"},{"line_number":857,"context_line":"                    self.assertEqual(rule[\u0027security_group_rule\u0027][k], v)"},{"line_number":858,"context_line":""},{"line_number":859,"context_line":"    def test_create_security_group_source_group_ip_and_ip_prefix(self):"},{"line_number":860,"context_line":"        security_group_id \u003d \"4cd70774-cc67-4a87-9b39-7d1db38eb087\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1af94dfe_bd569703","line":857,"range":{"start_line":857,"start_character":25,"end_line":857,"end_character":71},"updated":"2016-03-18 13:43:06.000000000","message":"It\u0027s better to use the pattern \"self.assertEqual(expected, observed)\" so that\u0027s self.assertEqual(v, rule[\u0027security_group_rule\u0027][k]).","commit_id":"85d638af455ae881ca45d2d390606ef1df5904b1"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"c163334ee394fa552270ec637f4c0a5469caf0e8","unresolved":false,"context_lines":[{"line_number":854,"context_line":"                                          None, None,"},{"line_number":855,"context_line":"                                          ethertype) as rule:"},{"line_number":856,"context_line":"                for k, v, in keys:"},{"line_number":857,"context_line":"                    self.assertEqual(rule[\u0027security_group_rule\u0027][k], v)"},{"line_number":858,"context_line":""},{"line_number":859,"context_line":"    def test_create_security_group_source_group_ip_and_ip_prefix(self):"},{"line_number":860,"context_line":"        security_group_id \u003d \"4cd70774-cc67-4a87-9b39-7d1db38eb087\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1af94dfe_44005266","line":857,"range":{"start_line":857,"start_character":25,"end_line":857,"end_character":71},"in_reply_to":"1af94dfe_bd569703","updated":"2016-03-18 17:44:34.000000000","message":"true, but this is consistent throughout the file, which means we copied a bad pattern all over the place ;)","commit_id":"85d638af455ae881ca45d2d390606ef1df5904b1"}]}
