)]}'
{"neutron/agent/linux/ip_lib.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"937bfca2337133296d6f1a80a2b0d61c805a8879","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    def exists(self):"},{"line_number":231,"context_line":"        \"\"\"Return True if the device exists in the namespace.\"\"\""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            self.set_log_fail_as_error(False)"},{"line_number":234,"context_line":"            address \u003d self.link.address"},{"line_number":235,"context_line":"        except RuntimeError:"},{"line_number":236,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_4d75c2f7","line":233,"updated":"2015-09-30 03:11:57.000000000","message":"This calling will change the log flag for this object and will impact following usage.","commit_id":"03a3a733ddf58f5fc3fb85bc84f4fe55aa1112ef"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"a2eb79731dc478dc6276ff43c6e62d94ea763b0c","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    def exists(self):"},{"line_number":231,"context_line":"        \"\"\"Return True if the device exists in the namespace.\"\"\""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            self.set_log_fail_as_error(False)"},{"line_number":234,"context_line":"            address \u003d self.link.address"},{"line_number":235,"context_line":"        except RuntimeError:"},{"line_number":236,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_e5a12695","line":233,"in_reply_to":"9a1a9d01_05569a05","updated":"2015-09-30 19:59:42.000000000","message":"No, the original patch didn\u0027t have this problem because it created a temporary device, while this method acts on an existing device that might be long running in memory.","commit_id":"03a3a733ddf58f5fc3fb85bc84f4fe55aa1112ef"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"5d401e1ba0159c162b841efeb9aa9ba17436895c","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    def exists(self):"},{"line_number":231,"context_line":"        \"\"\"Return True if the device exists in the namespace.\"\"\""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            self.set_log_fail_as_error(False)"},{"line_number":234,"context_line":"            address \u003d self.link.address"},{"line_number":235,"context_line":"        except RuntimeError:"},{"line_number":236,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_4de382a4","line":233,"in_reply_to":"9a1a9d01_4d75c2f7","updated":"2015-09-30 03:14:34.000000000","message":"That\u0027s a great catch Gongysh. @Brian: You should set the flag back to what it was before the call right before the return statement.","commit_id":"03a3a733ddf58f5fc3fb85bc84f4fe55aa1112ef"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"f882602e2241110468518ae3c797d4a876380ea1","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    def exists(self):"},{"line_number":231,"context_line":"        \"\"\"Return True if the device exists in the namespace.\"\"\""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            self.set_log_fail_as_error(False)"},{"line_number":234,"context_line":"            address \u003d self.link.address"},{"line_number":235,"context_line":"        except RuntimeError:"},{"line_number":236,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_ed483ab5","line":233,"in_reply_to":"9a1a9d01_4de382a4","updated":"2015-09-30 15:43:27.000000000","message":"Good to now","commit_id":"03a3a733ddf58f5fc3fb85bc84f4fe55aa1112ef"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"089072ff72794d4762a7aaefe5a95f00b4372990","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    def exists(self):"},{"line_number":231,"context_line":"        \"\"\"Return True if the device exists in the namespace.\"\"\""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            self.set_log_fail_as_error(False)"},{"line_number":234,"context_line":"            address \u003d self.link.address"},{"line_number":235,"context_line":"        except RuntimeError:"},{"line_number":236,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_1407a982","line":233,"in_reply_to":"9a1a9d01_e52366bb","updated":"2015-09-30 20:54:25.000000000","message":"Done","commit_id":"03a3a733ddf58f5fc3fb85bc84f4fe55aa1112ef"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"8f96e43be8d50c3d0d25fde07c31c0d1a7587ca0","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    def exists(self):"},{"line_number":231,"context_line":"        \"\"\"Return True if the device exists in the namespace.\"\"\""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            self.set_log_fail_as_error(False)"},{"line_number":234,"context_line":"            address \u003d self.link.address"},{"line_number":235,"context_line":"        except RuntimeError:"},{"line_number":236,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_e52366bb","line":233,"in_reply_to":"9a1a9d01_e5a12695","updated":"2015-09-30 20:09:53.000000000","message":"you are correct, I missed that - n/m","commit_id":"03a3a733ddf58f5fc3fb85bc84f4fe55aa1112ef"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"97b6e1a8a4b3ebf4ad82086e04ee2ef6b89204f6","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    def exists(self):"},{"line_number":231,"context_line":"        \"\"\"Return True if the device exists in the namespace.\"\"\""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            self.set_log_fail_as_error(False)"},{"line_number":234,"context_line":"            address \u003d self.link.address"},{"line_number":235,"context_line":"        except RuntimeError:"},{"line_number":236,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_05569a05","line":233,"in_reply_to":"9a1a9d01_ed483ab5","updated":"2015-09-30 19:51:52.000000000","message":"amuller: since the original had this incorrect pattern, and it looks like we have the same anti-pattern at L906 of the original file and also L354 of neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py, should this patch set go forward and have a different patch set address fixing this anti-pattern?","commit_id":"03a3a733ddf58f5fc3fb85bc84f4fe55aa1112ef"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e4d0a89cbc44aa8c983f66374d425341f29d6166","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def set_log_fail_as_error(self, fail_with_error):"},{"line_number":92,"context_line":"        self.log_fail_as_error \u003d fail_with_error"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def get_log_fail_as_error(self):"},{"line_number":95,"context_line":"        return self.log_fail_as_error"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_3a4882b2","line":94,"updated":"2015-10-01 10:21:02.000000000","message":"nit: you add a new public facing method but have no tests that target it.","commit_id":"32cd06e097a0de1bd7a3319a109222dd19dbf59d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fe785443293c87f9eba908b6a70d3d5f51ec0b07","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def set_log_fail_as_error(self, fail_with_error):"},{"line_number":92,"context_line":"        self.log_fail_as_error \u003d fail_with_error"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def get_log_fail_as_error(self):"},{"line_number":95,"context_line":"        return self.log_fail_as_error"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_4ccb311f","line":94,"in_reply_to":"9a1a9d01_3a4882b2","updated":"2015-10-01 17:47:35.000000000","message":"I did add a test that does a set(True), exists(dev), then a get() and verifies it\u0027s True, is that enough?","commit_id":"32cd06e097a0de1bd7a3319a109222dd19dbf59d"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c59a7a5ee8da69cca2b668a60540394f34100945","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    def exists(self):"},{"line_number":234,"context_line":"        \"\"\"Return True if the device exists in the namespace.\"\"\""},{"line_number":235,"context_line":"        # we must save and restore this before returning"},{"line_number":236,"context_line":"        orig_slfae \u003d self.get_log_fail_as_error()"},{"line_number":237,"context_line":"        self.set_log_fail_as_error(False)"},{"line_number":238,"context_line":"        try:"},{"line_number":239,"context_line":"            address \u003d self.link.address"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_90a3afff","line":236,"range":{"start_line":236,"start_character":8,"end_line":236,"end_character":18},"updated":"2015-10-01 11:08:13.000000000","message":"i guess orig_log_fail_as_error is not too long","commit_id":"32cd06e097a0de1bd7a3319a109222dd19dbf59d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fe785443293c87f9eba908b6a70d3d5f51ec0b07","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    def exists(self):"},{"line_number":234,"context_line":"        \"\"\"Return True if the device exists in the namespace.\"\"\""},{"line_number":235,"context_line":"        # we must save and restore this before returning"},{"line_number":236,"context_line":"        orig_slfae \u003d self.get_log_fail_as_error()"},{"line_number":237,"context_line":"        self.set_log_fail_as_error(False)"},{"line_number":238,"context_line":"        try:"},{"line_number":239,"context_line":"            address \u003d self.link.address"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_e90d57e9","line":236,"in_reply_to":"9a1a9d01_90a3afff","updated":"2015-10-01 17:47:35.000000000","message":"I\u0027ve made it very long now :)","commit_id":"32cd06e097a0de1bd7a3319a109222dd19dbf59d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e4d0a89cbc44aa8c983f66374d425341f29d6166","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        else:"},{"line_number":243,"context_line":"            exists \u003d bool(address)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        self.set_log_fail_as_error(orig_slfae)"},{"line_number":246,"context_line":"        return exists"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def delete_addr_and_conntrack_state(self, cidr):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_bfe804b4","line":245,"updated":"2015-10-01 10:21:02.000000000","message":"to stay on safe side, we should have it called under \u0027finally\u0027 section for try construct. Otherwise an exception raised from above that is not RuntimeError will leave the device \u0027slfae\u0027 (gosh, do we have better names?) modified.","commit_id":"32cd06e097a0de1bd7a3319a109222dd19dbf59d"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c59a7a5ee8da69cca2b668a60540394f34100945","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        else:"},{"line_number":243,"context_line":"            exists \u003d bool(address)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        self.set_log_fail_as_error(orig_slfae)"},{"line_number":246,"context_line":"        return exists"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def delete_addr_and_conntrack_state(self, cidr):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_305c2318","line":245,"in_reply_to":"9a1a9d01_bfe804b4","updated":"2015-10-01 11:08:13.000000000","message":"+1","commit_id":"32cd06e097a0de1bd7a3319a109222dd19dbf59d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fe785443293c87f9eba908b6a70d3d5f51ec0b07","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        else:"},{"line_number":243,"context_line":"            exists \u003d bool(address)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        self.set_log_fail_as_error(orig_slfae)"},{"line_number":246,"context_line":"        return exists"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def delete_addr_and_conntrack_state(self, cidr):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_696b8786","line":245,"in_reply_to":"9a1a9d01_bfe804b4","updated":"2015-10-01 17:47:35.000000000","message":"I\u0027ve fixed this up","commit_id":"32cd06e097a0de1bd7a3319a109222dd19dbf59d"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"2313d300489a66aa13d2aee2d8accf5fb323b006","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        # we must save and restore this before returning"},{"line_number":236,"context_line":"        orig_log_fail_as_error \u003d self.get_log_fail_as_error()"},{"line_number":237,"context_line":"        self.set_log_fail_as_error(False)"},{"line_number":238,"context_line":"        try:"},{"line_number":239,"context_line":"            address \u003d self.link.address"},{"line_number":240,"context_line":"        except RuntimeError:"},{"line_number":241,"context_line":"            exists \u003d False"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_68ba98c2","line":238,"updated":"2015-10-01 21:31:55.000000000","message":"nit (I just love getting rid of local variables):\n\n  try:\n      return bool(self.link.address)\n  except RuntimeError:\n      return False\n  finally:\n      self.set_log_fail_as_error(orig_log_fail_as_error)","commit_id":"164502389c15a25a1f3ece51e3760b1b815ed42c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5673cae74b205633a8f38168840d1260a432905d","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        # we must save and restore this before returning"},{"line_number":236,"context_line":"        orig_log_fail_as_error \u003d self.get_log_fail_as_error()"},{"line_number":237,"context_line":"        self.set_log_fail_as_error(False)"},{"line_number":238,"context_line":"        try:"},{"line_number":239,"context_line":"            address \u003d self.link.address"},{"line_number":240,"context_line":"        except RuntimeError:"},{"line_number":241,"context_line":"            exists \u003d False"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_f912f357","line":238,"in_reply_to":"9a1a9d01_68ba98c2","updated":"2015-10-02 01:19:36.000000000","message":"Yes, that would be a nice cleanup, two for the price of one even!","commit_id":"164502389c15a25a1f3ece51e3760b1b815ed42c"}],"neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"47c345e3e52ca8c8b453fde64a9ccecd570e4d75","unresolved":false,"context_lines":[{"line_number":499,"context_line":"                                      physical_network, segmentation_id,"},{"line_number":500,"context_line":"                                      tap_device_name)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    def delete_bridge(self, bridge_name):"},{"line_number":503,"context_line":"        if ip_lib.device_exists(bridge_name):"},{"line_number":504,"context_line":"            physical_interfaces \u003d set(self.interface_mappings.values())"},{"line_number":505,"context_line":"            interfaces_on_bridge \u003d self.get_interfaces_on_bridge(bridge_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_e132a75d","line":502,"updated":"2015-09-29 23:48:48.000000000","message":"you can update this code as BridgeDevice subclasses IPDevice","commit_id":"8708a6e1fdc2c111ae48e4dc2a75e5a9e75983b7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"034796f17186a8f633f762e93c679a41e7120588","unresolved":false,"context_lines":[{"line_number":499,"context_line":"                                      physical_network, segmentation_id,"},{"line_number":500,"context_line":"                                      tap_device_name)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    def delete_bridge(self, bridge_name):"},{"line_number":503,"context_line":"        if ip_lib.device_exists(bridge_name):"},{"line_number":504,"context_line":"            physical_interfaces \u003d set(self.interface_mappings.values())"},{"line_number":505,"context_line":"            interfaces_on_bridge \u003d self.get_interfaces_on_bridge(bridge_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_f7e905b8","line":502,"in_reply_to":"9a1a9d01_e132a75d","updated":"2015-09-30 02:38:06.000000000","message":"Done","commit_id":"8708a6e1fdc2c111ae48e4dc2a75e5a9e75983b7"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"47c345e3e52ca8c8b453fde64a9ccecd570e4d75","unresolved":false,"context_lines":[{"line_number":545,"context_line":"                self.delete_bridge(bridge_name)"},{"line_number":546,"context_line":"                del self.network_map[network_id]"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def remove_interface(self, bridge_name, interface_name):"},{"line_number":549,"context_line":"        if ip_lib.device_exists(bridge_name):"},{"line_number":550,"context_line":"            if not self.is_device_on_bridge(interface_name):"},{"line_number":551,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_81440bb7","line":548,"updated":"2015-09-29 23:48:48.000000000","message":"itto","commit_id":"8708a6e1fdc2c111ae48e4dc2a75e5a9e75983b7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"034796f17186a8f633f762e93c679a41e7120588","unresolved":false,"context_lines":[{"line_number":545,"context_line":"                self.delete_bridge(bridge_name)"},{"line_number":546,"context_line":"                del self.network_map[network_id]"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def remove_interface(self, bridge_name, interface_name):"},{"line_number":549,"context_line":"        if ip_lib.device_exists(bridge_name):"},{"line_number":550,"context_line":"            if not self.is_device_on_bridge(interface_name):"},{"line_number":551,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_97d3e903","line":548,"in_reply_to":"9a1a9d01_81440bb7","updated":"2015-09-30 02:38:06.000000000","message":"Done","commit_id":"8708a6e1fdc2c111ae48e4dc2a75e5a9e75983b7"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":17211,"name":"Brandon Palm","email":"bapalm@us.ibm.com","username":"bapalm"},"change_message_id":"b803922669a2fec61720cbc34f8186b9b939c724","unresolved":false,"context_lines":[{"line_number":1101,"context_line":"                if int_type \u003d\u003d \u0027patch\u0027:"},{"line_number":1102,"context_line":"                    self.int_br.delete_port(int_if_name)"},{"line_number":1103,"context_line":"                    br.delete_port(phys_if_name)"},{"line_number":1104,"context_line":"                dev \u003d ip_lib.IPDevice(int_if_name)"},{"line_number":1105,"context_line":"                if dev.exists():"},{"line_number":1106,"context_line":"                    dev.link.delete()"},{"line_number":1107,"context_line":"                    # Give udev a chance to process its rules here, to avoid"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_608e642f","line":1104,"updated":"2015-09-30 20:22:34.000000000","message":"Instead of \u0027dev\u0027, you use \u0027device\u0027 everywhere else.  Keep it consistent?","commit_id":"03a3a733ddf58f5fc3fb85bc84f4fe55aa1112ef"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"089072ff72794d4762a7aaefe5a95f00b4372990","unresolved":false,"context_lines":[{"line_number":1101,"context_line":"                if int_type \u003d\u003d \u0027patch\u0027:"},{"line_number":1102,"context_line":"                    self.int_br.delete_port(int_if_name)"},{"line_number":1103,"context_line":"                    br.delete_port(phys_if_name)"},{"line_number":1104,"context_line":"                dev \u003d ip_lib.IPDevice(int_if_name)"},{"line_number":1105,"context_line":"                if dev.exists():"},{"line_number":1106,"context_line":"                    dev.link.delete()"},{"line_number":1107,"context_line":"                    # Give udev a chance to process its rules here, to avoid"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_f48475d3","line":1104,"in_reply_to":"9a1a9d01_608e642f","updated":"2015-09-30 20:54:25.000000000","message":"Argh, missed this, PS5 on its way...","commit_id":"03a3a733ddf58f5fc3fb85bc84f4fe55aa1112ef"}],"neutron/tests/functional/agent/linux/test_ip_lib.py":[{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"ad6c4c3ce0ee957373dcfe4011cab0e7044e366f","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        device \u003d self.manage_device(attr)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        self.assertTrue(device.exists())"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        device.link.delete()"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_71766fd8","line":110,"updated":"2015-09-29 19:01:50.000000000","message":"If assert fails, device is not cleaned up.","commit_id":"8708a6e1fdc2c111ae48e4dc2a75e5a9e75983b7"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"431fa8098da740614659d645a64814a1de02ac98","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        device \u003d self.manage_device(attr)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        self.assertTrue(device.exists())"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        device.link.delete()"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_b8c62798","line":110,"in_reply_to":"9a1a9d01_71766fd8","updated":"2015-09-29 19:29:46.000000000","message":"Actually, take a look at self.manage_device.","commit_id":"8708a6e1fdc2c111ae48e4dc2a75e5a9e75983b7"},{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"ad6c4c3ce0ee957373dcfe4011cab0e7044e366f","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self.assertTrue(device.exists())"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        device.link.delete()"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        self.assertFalse(device.exists())"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def test_vxlan_exists(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_715d0f46","line":113,"updated":"2015-09-29 19:01:50.000000000","message":"nit: why blank line after each line?","commit_id":"8708a6e1fdc2c111ae48e4dc2a75e5a9e75983b7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"034796f17186a8f633f762e93c679a41e7120588","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self.assertTrue(device.exists())"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        device.link.delete()"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        self.assertFalse(device.exists())"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def test_vxlan_exists(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_f28593ce","line":113,"in_reply_to":"9a1a9d01_715d0f46","updated":"2015-09-30 02:38:06.000000000","message":"I just followed the precedence in test_device_exists()","commit_id":"8708a6e1fdc2c111ae48e4dc2a75e5a9e75983b7"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e4d0a89cbc44aa8c983f66374d425341f29d6166","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def test_ipdevice_exists(self):"},{"line_number":106,"context_line":"        attr \u003d self.generate_device_details()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        device \u003d self.manage_device(attr)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        self.assertTrue(device.exists())"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_7a3d9a29","line":107,"updated":"2015-10-01 10:21:02.000000000","message":"meh. those empty lines are sick. I know they are also present above, but...","commit_id":"32cd06e097a0de1bd7a3319a109222dd19dbf59d"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c59a7a5ee8da69cca2b668a60540394f34100945","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def test_ipdevice_exists(self):"},{"line_number":106,"context_line":"        attr \u003d self.generate_device_details()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        device \u003d self.manage_device(attr)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        self.assertTrue(device.exists())"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_907acf75","line":107,"in_reply_to":"9a1a9d01_7a3d9a29","updated":"2015-10-01 11:08:13.000000000","message":"+1","commit_id":"32cd06e097a0de1bd7a3319a109222dd19dbf59d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fe785443293c87f9eba908b6a70d3d5f51ec0b07","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def test_ipdevice_exists(self):"},{"line_number":106,"context_line":"        attr \u003d self.generate_device_details()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        device \u003d self.manage_device(attr)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        self.assertTrue(device.exists())"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_89fffba9","line":107,"in_reply_to":"9a1a9d01_7a3d9a29","updated":"2015-10-01 17:47:35.000000000","message":"Done","commit_id":"32cd06e097a0de1bd7a3319a109222dd19dbf59d"}],"neutron/tests/unit/agent/linux/test_ip_lib.py":[{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"505ef8a13d615564984200bcac34b875d5ebf9ad","unresolved":false,"context_lines":[{"line_number":1229,"context_line":"            _execute.side_effect \u003d RuntimeError"},{"line_number":1230,"context_line":"            self.assertFalse(ip_lib.device_exists(\u0027eth0\u0027))"},{"line_number":1231,"context_line":""},{"line_number":1232,"context_line":"    def test_ipdevice_exists(self):"},{"line_number":1233,"context_line":"        device \u003d ip_lib.IPDevice(\u0027eth0\u0027)"},{"line_number":1234,"context_line":"        with mock.patch.object(ip_lib.IPDevice, \u0027_execute\u0027) as _execute:"},{"line_number":1235,"context_line":"            _execute.return_value \u003d LINK_SAMPLE[1]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_169129f1","line":1232,"updated":"2015-09-29 18:36:21.000000000","message":"I don\u0027t see a need to have the exact same test, for the same method at the same level duplicated once as a unit and once a functional test.","commit_id":"8708a6e1fdc2c111ae48e4dc2a75e5a9e75983b7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"034796f17186a8f633f762e93c679a41e7120588","unresolved":false,"context_lines":[{"line_number":1229,"context_line":"            _execute.side_effect \u003d RuntimeError"},{"line_number":1230,"context_line":"            self.assertFalse(ip_lib.device_exists(\u0027eth0\u0027))"},{"line_number":1231,"context_line":""},{"line_number":1232,"context_line":"    def test_ipdevice_exists(self):"},{"line_number":1233,"context_line":"        device \u003d ip_lib.IPDevice(\u0027eth0\u0027)"},{"line_number":1234,"context_line":"        with mock.patch.object(ip_lib.IPDevice, \u0027_execute\u0027) as _execute:"},{"line_number":1235,"context_line":"            _execute.return_value \u003d LINK_SAMPLE[1]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_52755ff7","line":1232,"in_reply_to":"9a1a9d01_169129f1","updated":"2015-09-30 02:38:06.000000000","message":"Done","commit_id":"8708a6e1fdc2c111ae48e4dc2a75e5a9e75983b7"}],"neutron/tests/unit/cmd/test_ovs_cleanup.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e4d0a89cbc44aa8c983f66374d425341f29d6166","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        util.delete_neutron_ports(ports)"},{"line_number":75,"context_line":"        mock_ip.assert_has_calls("},{"line_number":76,"context_line":"            [mock.call(\u0027tap1234\u0027),"},{"line_number":77,"context_line":"         mock.call().exists(),"},{"line_number":78,"context_line":"         mock.call().link.delete(),"},{"line_number":79,"context_line":"         mock.call(\u0027tap5678\u0027),"},{"line_number":80,"context_line":"         mock.call().exists(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_9a9d0e0c","line":77,"updated":"2015-10-01 10:21:02.000000000","message":"please fix indentation here (all mock.call\u0027s should be indented to the same character).","commit_id":"32cd06e097a0de1bd7a3319a109222dd19dbf59d"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"0ca3e599da4277886f0969949b555368d14c26ae","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        util.delete_neutron_ports(ports)"},{"line_number":75,"context_line":"        mock_ip.assert_has_calls("},{"line_number":76,"context_line":"            [mock.call(\u0027tap1234\u0027),"},{"line_number":77,"context_line":"         mock.call().exists(),"},{"line_number":78,"context_line":"         mock.call().link.delete(),"},{"line_number":79,"context_line":"         mock.call(\u0027tap5678\u0027),"},{"line_number":80,"context_line":"         mock.call().exists(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_269e2864","line":77,"in_reply_to":"9a1a9d01_9a9d0e0c","updated":"2015-10-01 13:37:37.000000000","message":"+1.  I am surprised this passed pep8.","commit_id":"32cd06e097a0de1bd7a3319a109222dd19dbf59d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fe785443293c87f9eba908b6a70d3d5f51ec0b07","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        util.delete_neutron_ports(ports)"},{"line_number":75,"context_line":"        mock_ip.assert_has_calls("},{"line_number":76,"context_line":"            [mock.call(\u0027tap1234\u0027),"},{"line_number":77,"context_line":"         mock.call().exists(),"},{"line_number":78,"context_line":"         mock.call().link.delete(),"},{"line_number":79,"context_line":"         mock.call(\u0027tap5678\u0027),"},{"line_number":80,"context_line":"         mock.call().exists(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_29034f78","line":77,"in_reply_to":"9a1a9d01_9a9d0e0c","updated":"2015-10-01 17:47:35.000000000","message":"Done","commit_id":"32cd06e097a0de1bd7a3319a109222dd19dbf59d"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_tunnel.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c59a7a5ee8da69cca2b668a60540394f34100945","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        self.ipdevice_expected \u003d ["},{"line_number":644,"context_line":"            mock.call(\u0027int-%s\u0027 % self.MAP_TUN_BRIDGE),"},{"line_number":645,"context_line":"            mock.call().exists(),"},{"line_number":646,"context_line":"            mock.ANY,"},{"line_number":647,"context_line":"            mock.call().link.delete()"},{"line_number":648,"context_line":"        ]"},{"line_number":649,"context_line":"        self.ipwrapper_expected \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_701e1b0d","line":646,"updated":"2015-10-01 11:08:13.000000000","message":"what\u0027s this mock.ANY for?","commit_id":"32cd06e097a0de1bd7a3319a109222dd19dbf59d"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"0ca3e599da4277886f0969949b555368d14c26ae","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        self.ipdevice_expected \u003d ["},{"line_number":644,"context_line":"            mock.call(\u0027int-%s\u0027 % self.MAP_TUN_BRIDGE),"},{"line_number":645,"context_line":"            mock.call().exists(),"},{"line_number":646,"context_line":"            mock.ANY,"},{"line_number":647,"context_line":"            mock.call().link.delete()"},{"line_number":648,"context_line":"        ]"},{"line_number":649,"context_line":"        self.ipwrapper_expected \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_c6b72cf4","line":646,"in_reply_to":"9a1a9d01_701e1b0d","updated":"2015-10-01 13:37:37.000000000","message":"+1","commit_id":"32cd06e097a0de1bd7a3319a109222dd19dbf59d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fe785443293c87f9eba908b6a70d3d5f51ec0b07","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        self.ipdevice_expected \u003d ["},{"line_number":644,"context_line":"            mock.call(\u0027int-%s\u0027 % self.MAP_TUN_BRIDGE),"},{"line_number":645,"context_line":"            mock.call().exists(),"},{"line_number":646,"context_line":"            mock.ANY,"},{"line_number":647,"context_line":"            mock.call().link.delete()"},{"line_number":648,"context_line":"        ]"},{"line_number":649,"context_line":"        self.ipwrapper_expected \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_ccc0a17f","line":646,"in_reply_to":"9a1a9d01_701e1b0d","updated":"2015-10-01 17:47:35.000000000","message":"The bool() in the exists method was adding this:\n\ncall().exists().__nonzero__(),\n\nBut I now notice there is a nonzero() method in this file to deal with such things, so I\u0027ll fix it with that.","commit_id":"32cd06e097a0de1bd7a3319a109222dd19dbf59d"}]}
