)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"bb7575de9467bb95c82d5aaf13a6b0cfa8d9f9f5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Bogdan Tabor \u003cbogdan.tabor@ericpol.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-10-09 12:03:04 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Remove redundant neutron.agent.linux.utils:replace_file()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"neutron.agent.linux.utils:replace_file() and"},{"line_number":10,"context_line":"neutron.common.utils:replace_file() have same functionality."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3a29b11f_7ebc856c","line":7,"updated":"2015-10-19 10:48:44.000000000","message":"the commit message is misleading as this commit doesn\u0027t remove the function.","commit_id":"ac3e82b629fdb23e225753496776f7db3eff3e0d"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"27a8709d758e9f18140937de1f94af85db96241a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Bogdan Tabor \u003cbogdan.tabor@ericpol.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-10-09 12:03:04 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Remove redundant neutron.agent.linux.utils:replace_file()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"neutron.agent.linux.utils:replace_file() and"},{"line_number":10,"context_line":"neutron.common.utils:replace_file() have same functionality."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3a29b11f_0a4628bf","line":7,"in_reply_to":"3a29b11f_7ebc856c","updated":"2015-10-20 14:11:27.000000000","message":"Done","commit_id":"ac3e82b629fdb23e225753496776f7db3eff3e0d"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"b707f8978748a43be8f48c9e62b4517f2e1809b5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Bogdan Tabor \u003cbogdan.tabor@ericpol.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-10-09 12:03:04 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Remove redundant neutron.agent.linux.utils:replace_file()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"neutron.agent.linux.utils:replace_file() and"},{"line_number":10,"context_line":"neutron.common.utils:replace_file() have same functionality."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3a29b11f_4a97153a","line":7,"in_reply_to":"3a29b11f_7ebc856c","updated":"2015-10-21 09:51:16.000000000","message":"Done","commit_id":"ac3e82b629fdb23e225753496776f7db3eff3e0d"},{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"6d97b16d4efadfbb139959394cd877f46ac25ca8","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Switch to using neutron.common.utils:replace_file()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"neutron.agent.linux.utils:replace_file() and"},{"line_number":10,"context_line":"neutron.common.utils:replace_file() have same functionality."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-bug: #1504477"},{"line_number":13,"context_line":"Change-Id: Id1a7f1236786e8606c91bb9925cd9ac8e95892b3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3a29b11f_e078abf4","line":10,"updated":"2015-10-20 14:46:48.000000000","message":"Since this change got split into 4 patches, it would be helpful to reviewers to specify in the commit messages what changes are in each patch.  That would help the confusion about which patches should depend on which.  This one could include something like \"This patch is the first in a series, and it modifies teh common.utils:replace_file() so it can be used by all components as a replacement for agent.linux.utils:replace_file()\"","commit_id":"187d3fadc9cbc3da01e18943c38eb2056d0b76cd"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"00a8a8279eab0a1758c5655867e9c0c249e4e598","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Switch to using neutron.common.utils:replace_file()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"neutron.agent.linux.utils:replace_file() and"},{"line_number":10,"context_line":"neutron.common.utils:replace_file() have same functionality."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-bug: #1504477"},{"line_number":13,"context_line":"Change-Id: Id1a7f1236786e8606c91bb9925cd9ac8e95892b3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3a29b11f_caf00594","line":10,"in_reply_to":"3a29b11f_e078abf4","updated":"2015-10-21 09:51:02.000000000","message":"Done","commit_id":"187d3fadc9cbc3da01e18943c38eb2056d0b76cd"},{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"6d97b16d4efadfbb139959394cd877f46ac25ca8","unresolved":false,"context_lines":[{"line_number":9,"context_line":"neutron.agent.linux.utils:replace_file() and"},{"line_number":10,"context_line":"neutron.common.utils:replace_file() have same functionality."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-bug: #1504477"},{"line_number":13,"context_line":"Change-Id: Id1a7f1236786e8606c91bb9925cd9ac8e95892b3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3a29b11f_e0abcb1b","line":12,"updated":"2015-10-20 14:46:48.000000000","message":"I think this should be \"Partial-Bug: #1504477\" now that this is the first of the patches to fix the bug","commit_id":"187d3fadc9cbc3da01e18943c38eb2056d0b76cd"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"00a8a8279eab0a1758c5655867e9c0c249e4e598","unresolved":false,"context_lines":[{"line_number":9,"context_line":"neutron.agent.linux.utils:replace_file() and"},{"line_number":10,"context_line":"neutron.common.utils:replace_file() have same functionality."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-bug: #1504477"},{"line_number":13,"context_line":"Change-Id: Id1a7f1236786e8606c91bb9925cd9ac8e95892b3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3a29b11f_8a2d2d00","line":12,"in_reply_to":"3a29b11f_e0abcb1b","updated":"2015-10-21 09:51:02.000000000","message":"Done","commit_id":"187d3fadc9cbc3da01e18943c38eb2056d0b76cd"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"e907fccac980032ced5f217f37678b8cb3799ecb","unresolved":false,"context_lines":[{"line_number":12,"context_line":"This is the 1st patch in the series of 4 patches."},{"line_number":13,"context_line":"It modifies neutron.common.utils:replace_file(),"},{"line_number":14,"context_line":"so it can be used by all components as a replacement"},{"line_number":15,"context_line":"for neutron.agent.linux.utils:replace_file()"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Partial-bug: #1504477"},{"line_number":18,"context_line":"Change-Id: Id1a7f1236786e8606c91bb9925cd9ac8e95892b3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"da85f559_13f55082","line":15,"updated":"2015-11-13 11:53:13.000000000","message":"Agree with Gary. Probably want to mention that new version provides file mode.","commit_id":"765d5f4979e79253c1a8b681cf4b9f9f5e60a74e"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"3368d68bb348d961dc1524874387b4b6651e2f3b","unresolved":false,"context_lines":[{"line_number":12,"context_line":"This is the 1st patch in the series of 4 patches."},{"line_number":13,"context_line":"It modifies neutron.common.utils:replace_file(),"},{"line_number":14,"context_line":"so it can be used by all components as a replacement"},{"line_number":15,"context_line":"for neutron.agent.linux.utils:replace_file()"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Partial-bug: #1504477"},{"line_number":18,"context_line":"Change-Id: Id1a7f1236786e8606c91bb9925cd9ac8e95892b3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"da85f559_c1f12e97","line":15,"in_reply_to":"da85f559_13f55082","updated":"2015-11-13 12:47:14.000000000","message":"Done","commit_id":"765d5f4979e79253c1a8b681cf4b9f9f5e60a74e"}],"neutron/agent/linux/dhcp.py":[{"author":{"_account_id":17211,"name":"Brandon Palm","email":"bapalm@us.ibm.com","username":"bapalm"},"change_message_id":"baea65e6517a85f91cd7a5b8dc6efbb71b0ea9fa","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from oslo_utils import uuidutils"},{"line_number":27,"context_line":"import six"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from neutron.agent.common import utils as common_utils"},{"line_number":30,"context_line":"from neutron.agent.linux import external_process"},{"line_number":31,"context_line":"from neutron.agent.linux import ip_lib"},{"line_number":32,"context_line":"from neutron.agent.linux import iptables_manager"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a29b11f_1d43d043","line":29,"updated":"2015-10-20 14:20:12.000000000","message":"Not that this is part of your patch or anything, but having common_utils and commonutils (L36) is pretty confusing.  Maybe in a next patch set, we could change up the names for these?  Like agent_utils and common_utils?","commit_id":"187d3fadc9cbc3da01e18943c38eb2056d0b76cd"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"00a8a8279eab0a1758c5655867e9c0c249e4e598","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from oslo_utils import uuidutils"},{"line_number":27,"context_line":"import six"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from neutron.agent.common import utils as common_utils"},{"line_number":30,"context_line":"from neutron.agent.linux import external_process"},{"line_number":31,"context_line":"from neutron.agent.linux import ip_lib"},{"line_number":32,"context_line":"from neutron.agent.linux import iptables_manager"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a29b11f_4afcf571","line":29,"in_reply_to":"3a29b11f_1d43d043","updated":"2015-10-21 09:51:02.000000000","message":"Done","commit_id":"187d3fadc9cbc3da01e18943c38eb2056d0b76cd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a42bddd429629c2d9ddb72c862352d54892e4040","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from neutron.common import constants"},{"line_number":34,"context_line":"from neutron.common import exceptions"},{"line_number":35,"context_line":"from neutron.common import ipv6_utils"},{"line_number":36,"context_line":"from neutron.common import utils as common_utils"},{"line_number":37,"context_line":"from neutron.extensions import extra_dhcp_opt as edo_ext"},{"line_number":38,"context_line":"from neutron.i18n import _LI, _LW, _LE"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_f0c3e288","line":36,"updated":"2015-11-13 11:26:47.000000000","message":"i think that this change is not relavnt to the patch set. it can be done in another one. but maybe that is over nit picking","commit_id":"765d5f4979e79253c1a8b681cf4b9f9f5e60a74e"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"3368d68bb348d961dc1524874387b4b6651e2f3b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from neutron.common import constants"},{"line_number":34,"context_line":"from neutron.common import exceptions"},{"line_number":35,"context_line":"from neutron.common import ipv6_utils"},{"line_number":36,"context_line":"from neutron.common import utils as common_utils"},{"line_number":37,"context_line":"from neutron.extensions import extra_dhcp_opt as edo_ext"},{"line_number":38,"context_line":"from neutron.i18n import _LI, _LW, _LE"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_81032676","line":36,"in_reply_to":"da85f559_f0c3e288","updated":"2015-11-13 12:47:14.000000000","message":"Yes, it is unrelevant, but reviews for previous patchset indicated to change this in order to keep uniformity. So i did.","commit_id":"765d5f4979e79253c1a8b681cf4b9f9f5e60a74e"}],"neutron/agent/linux/dibbler.py":[{"author":{"_account_id":9459,"name":".Haifeng Yan","email":"yanheven@qq.com","username":"yan"},"change_message_id":"b7b468b2c4098bcd7bca7797603c0fddd3dbbf60","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from neutron.agent.linux import pd_driver"},{"line_number":25,"context_line":"from neutron.agent.linux import utils"},{"line_number":26,"context_line":"from neutron.common import constants"},{"line_number":27,"context_line":"from neutron.common import utils as commonutils"},{"line_number":28,"context_line":"from oslo_log import log as logging"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a26ad4f_48a0aa90","line":27,"updated":"2015-10-30 05:52:33.000000000","message":"why is not \"common_utils\" as other modules name it.","commit_id":"b63810677339d929def053c8edf3ba319bfbd56e"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"e331e29e6b80317bd69e30845b449f3410e1e383","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from neutron.agent.linux import pd_driver"},{"line_number":25,"context_line":"from neutron.agent.linux import utils"},{"line_number":26,"context_line":"from neutron.common import constants"},{"line_number":27,"context_line":"from neutron.common import utils as commonutils"},{"line_number":28,"context_line":"from oslo_log import log as logging"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a26ad4f_848a021a","line":27,"in_reply_to":"1a26ad4f_48a0aa90","updated":"2015-11-02 09:03:22.000000000","message":"+1","commit_id":"b63810677339d929def053c8edf3ba319bfbd56e"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"e2f1a0a3ded046d17a1e6d7eade0d403f1e6e6ee","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from neutron.agent.linux import pd_driver"},{"line_number":25,"context_line":"from neutron.agent.linux import utils"},{"line_number":26,"context_line":"from neutron.common import constants"},{"line_number":27,"context_line":"from neutron.common import utils as commonutils"},{"line_number":28,"context_line":"from oslo_log import log as logging"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_ab5e5210","line":27,"in_reply_to":"1a26ad4f_48a0aa90","updated":"2015-11-13 09:26:46.000000000","message":"Done","commit_id":"b63810677339d929def053c8edf3ba319bfbd56e"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"fbac54ea21a26029b8ad67259c36fb9d87447d96","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from neutron.agent.linux import pd_driver"},{"line_number":25,"context_line":"from neutron.agent.linux import utils"},{"line_number":26,"context_line":"from neutron.common import constants"},{"line_number":27,"context_line":"from neutron.common import utils as commonutils"},{"line_number":28,"context_line":"from oslo_log import log as logging"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_31ec63f2","line":27,"in_reply_to":"1a26ad4f_848a021a","updated":"2015-11-12 02:53:09.000000000","message":"+1","commit_id":"b63810677339d929def053c8edf3ba319bfbd56e"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"e2f1a0a3ded046d17a1e6d7eade0d403f1e6e6ee","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from neutron.agent.linux import pd_driver"},{"line_number":25,"context_line":"from neutron.agent.linux import utils"},{"line_number":26,"context_line":"from neutron.common import constants"},{"line_number":27,"context_line":"from neutron.common import utils as commonutils"},{"line_number":28,"context_line":"from oslo_log import log as logging"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_4b9a46c7","line":27,"in_reply_to":"1a26ad4f_848a021a","updated":"2015-11-13 09:26:46.000000000","message":"Done","commit_id":"b63810677339d929def053c8edf3ba319bfbd56e"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"e2f1a0a3ded046d17a1e6d7eade0d403f1e6e6ee","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from neutron.agent.linux import pd_driver"},{"line_number":25,"context_line":"from neutron.agent.linux import utils"},{"line_number":26,"context_line":"from neutron.common import constants"},{"line_number":27,"context_line":"from neutron.common import utils as commonutils"},{"line_number":28,"context_line":"from oslo_log import log as logging"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_6b9f0ab5","line":27,"in_reply_to":"da85f559_31ec63f2","updated":"2015-11-13 09:26:46.000000000","message":"Done","commit_id":"b63810677339d929def053c8edf3ba319bfbd56e"}],"neutron/agent/linux/ra.py":[{"author":{"_account_id":9459,"name":".Haifeng Yan","email":"yanheven@qq.com","username":"yan"},"change_message_id":"b7b468b2c4098bcd7bca7797603c0fddd3dbbf60","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from neutron.agent.linux import external_process"},{"line_number":23,"context_line":"from neutron.agent.linux import utils"},{"line_number":24,"context_line":"from neutron.common import constants"},{"line_number":25,"context_line":"from neutron.common import utils as commonutils"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"RADVD_SERVICE_NAME \u003d \u0027radvd\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a26ad4f_68e806b5","line":25,"updated":"2015-10-30 05:52:33.000000000","message":"why is not \"common_utils\" as other modules name it.","commit_id":"b63810677339d929def053c8edf3ba319bfbd56e"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"fbac54ea21a26029b8ad67259c36fb9d87447d96","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from neutron.agent.linux import external_process"},{"line_number":23,"context_line":"from neutron.agent.linux import utils"},{"line_number":24,"context_line":"from neutron.common import constants"},{"line_number":25,"context_line":"from neutron.common import utils as commonutils"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"RADVD_SERVICE_NAME \u003d \u0027radvd\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_71cd0b84","line":25,"in_reply_to":"1a26ad4f_2f966793","updated":"2015-11-12 02:53:09.000000000","message":"+1","commit_id":"b63810677339d929def053c8edf3ba319bfbd56e"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"e2f1a0a3ded046d17a1e6d7eade0d403f1e6e6ee","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from neutron.agent.linux import external_process"},{"line_number":23,"context_line":"from neutron.agent.linux import utils"},{"line_number":24,"context_line":"from neutron.common import constants"},{"line_number":25,"context_line":"from neutron.common import utils as commonutils"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"RADVD_SERVICE_NAME \u003d \u0027radvd\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_4b4c8676","line":25,"in_reply_to":"1a26ad4f_2f966793","updated":"2015-11-13 09:26:46.000000000","message":"Done","commit_id":"b63810677339d929def053c8edf3ba319bfbd56e"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"e2f1a0a3ded046d17a1e6d7eade0d403f1e6e6ee","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from neutron.agent.linux import external_process"},{"line_number":23,"context_line":"from neutron.agent.linux import utils"},{"line_number":24,"context_line":"from neutron.common import constants"},{"line_number":25,"context_line":"from neutron.common import utils as commonutils"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"RADVD_SERVICE_NAME \u003d \u0027radvd\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_ab3092e9","line":25,"in_reply_to":"1a26ad4f_68e806b5","updated":"2015-11-13 09:26:46.000000000","message":"Done","commit_id":"b63810677339d929def053c8edf3ba319bfbd56e"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"f7263dfae0db492c1e643b1595f8601728df72be","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from neutron.agent.linux import external_process"},{"line_number":23,"context_line":"from neutron.agent.linux import utils"},{"line_number":24,"context_line":"from neutron.common import constants"},{"line_number":25,"context_line":"from neutron.common import utils as commonutils"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"RADVD_SERVICE_NAME \u003d \u0027radvd\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a26ad4f_2f966793","line":25,"in_reply_to":"1a26ad4f_68e806b5","updated":"2015-11-02 09:26:49.000000000","message":"it is better to keep Uniformity.","commit_id":"b63810677339d929def053c8edf3ba319bfbd56e"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"e2f1a0a3ded046d17a1e6d7eade0d403f1e6e6ee","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from neutron.agent.linux import external_process"},{"line_number":23,"context_line":"from neutron.agent.linux import utils"},{"line_number":24,"context_line":"from neutron.common import constants"},{"line_number":25,"context_line":"from neutron.common import utils as commonutils"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"RADVD_SERVICE_NAME \u003d \u0027radvd\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_6b514a0e","line":25,"in_reply_to":"da85f559_71cd0b84","updated":"2015-11-13 09:26:46.000000000","message":"Done","commit_id":"b63810677339d929def053c8edf3ba319bfbd56e"}],"neutron/agent/linux/utils.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"45ad6a3b40a139dbc3410a861105728c0f99f4c5","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    tmp_file.write(data)"},{"line_number":192,"context_line":"    tmp_file.close()"},{"line_number":193,"context_line":"    os.chmod(tmp_file.name, file_mode)"},{"line_number":194,"context_line":"    os.rename(tmp_file.name, file_name)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"def find_child_pids(pid):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_ea185620","side":"PARENT","line":194,"updated":"2015-10-08 13:39:40.000000000","message":"this shouldn\u0027t be removed until the users are updated.","commit_id":"e7675a8af5574d42f63f7cc6a43005f0beec8b27"}],"neutron/common/utils.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a42bddd429629c2d9ddb72c862352d54892e4040","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                                             rounding\u003ddecimal.ROUND_HALF_UP))"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"def replace_file(file_name, data, file_mode\u003d0o644):"},{"line_number":475,"context_line":"    \"\"\"Replaces the contents of file_name with data in a safe manner."},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    First write to a temp file and then rename. Since POSIX renames are"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_f04a0227","line":474,"updated":"2015-11-13 11:26:47.000000000","message":"it may be worth noting in the commit message that a new param is added - the file mode","commit_id":"765d5f4979e79253c1a8b681cf4b9f9f5e60a74e"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"3368d68bb348d961dc1524874387b4b6651e2f3b","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                                             rounding\u003ddecimal.ROUND_HALF_UP))"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"def replace_file(file_name, data, file_mode\u003d0o644):"},{"line_number":475,"context_line":"    \"\"\"Replaces the contents of file_name with data in a safe manner."},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    First write to a temp file and then rename. Since POSIX renames are"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_a18c2a36","line":474,"in_reply_to":"da85f559_f04a0227","updated":"2015-11-13 12:47:14.000000000","message":"Done","commit_id":"765d5f4979e79253c1a8b681cf4b9f9f5e60a74e"}],"neutron/tests/functional/common/test_utils.py":[{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"5184d923ad50b5565fea974cf91400b0e299473a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.assertEqual(content, self.data)"},{"line_number":35,"context_line":"        mode \u003d os.stat(self.file_name).st_mode"},{"line_number":36,"context_line":"        self.assertTrue(stat.S_IMODE(mode) \u003d\u003d file_mode)"},{"line_number":37,"context_line":"        self.assertTrue(os.path.exists(self.file_name))"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_replace_file_custom_mode(self):"},{"line_number":40,"context_line":"        file_mode \u003d 0o722"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_f5c9325a","line":37,"updated":"2015-10-08 03:07:53.000000000","message":"Move the os.path.exists check before trying to open the file, so if the file doesn\u0027t get created the error message will make that clear.","commit_id":"37edbfbf4c49f8ae361a8c43e27ea9a84901d94f"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"c83419fa9dc12bb601e140e9efed466ac9915d92","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.assertEqual(content, self.data)"},{"line_number":35,"context_line":"        mode \u003d os.stat(self.file_name).st_mode"},{"line_number":36,"context_line":"        self.assertTrue(stat.S_IMODE(mode) \u003d\u003d file_mode)"},{"line_number":37,"context_line":"        self.assertTrue(os.path.exists(self.file_name))"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_replace_file_custom_mode(self):"},{"line_number":40,"context_line":"        file_mode \u003d 0o722"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_097a87bd","line":37,"in_reply_to":"7a2fa921_f5c9325a","updated":"2015-10-08 12:15:20.000000000","message":"Done","commit_id":"37edbfbf4c49f8ae361a8c43e27ea9a84901d94f"},{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"5184d923ad50b5565fea974cf91400b0e299473a","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.assertEqual(content, self.data)"},{"line_number":45,"context_line":"        mode \u003d os.stat(self.file_name).st_mode"},{"line_number":46,"context_line":"        self.assertTrue(stat.S_IMODE(mode) \u003d\u003d file_mode)"},{"line_number":47,"context_line":"        self.assertTrue(os.path.exists(self.file_name))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_95d9de24","line":47,"updated":"2015-10-08 03:07:53.000000000","message":"Same comment as above.  Also, it might be useful to test running replace_file again after the file has been created (with different data and different mode) to make sure the code will successfully replace the file and change the permissions.","commit_id":"37edbfbf4c49f8ae361a8c43e27ea9a84901d94f"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"c83419fa9dc12bb601e140e9efed466ac9915d92","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.assertEqual(content, self.data)"},{"line_number":45,"context_line":"        mode \u003d os.stat(self.file_name).st_mode"},{"line_number":46,"context_line":"        self.assertTrue(stat.S_IMODE(mode) \u003d\u003d file_mode)"},{"line_number":47,"context_line":"        self.assertTrue(os.path.exists(self.file_name))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a2fa921_bb8aba19","line":47,"in_reply_to":"7a2fa921_95d9de24","updated":"2015-10-08 12:15:20.000000000","message":"Done","commit_id":"37edbfbf4c49f8ae361a8c43e27ea9a84901d94f"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"072e6e3f1ba80d76c5b36e97e354bdcc914fab4c","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class TestReplaceFile(base.BaseTestCase):"},{"line_number":23,"context_line":"    def setUp(self):"},{"line_number":24,"context_line":"        base.BaseTestCase.setUp(self)"},{"line_number":25,"context_line":"        temp_dir \u003d self.get_default_temp_dir().path"},{"line_number":26,"context_line":"        self.file_name \u003d os.path.join(temp_dir, \"new_file\")"},{"line_number":27,"context_line":"        self.data \u003d \"data to copy\""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_48a4ba06","line":24,"updated":"2015-10-22 14:53:07.000000000","message":"super(TestReplaceFile, self).setUp()","commit_id":"30a0c965a6b606c96bfd734a48949f17b2005912"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"d1c7cc7242e43eac43543754e26cb786a5022e0a","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class TestReplaceFile(base.BaseTestCase):"},{"line_number":23,"context_line":"    def setUp(self):"},{"line_number":24,"context_line":"        base.BaseTestCase.setUp(self)"},{"line_number":25,"context_line":"        temp_dir \u003d self.get_default_temp_dir().path"},{"line_number":26,"context_line":"        self.file_name \u003d os.path.join(temp_dir, \"new_file\")"},{"line_number":27,"context_line":"        self.data \u003d \"data to copy\""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_fb230e54","line":24,"in_reply_to":"3a29b11f_48a4ba06","updated":"2015-10-22 15:31:24.000000000","message":"Done","commit_id":"30a0c965a6b606c96bfd734a48949f17b2005912"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"072e6e3f1ba80d76c5b36e97e354bdcc914fab4c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.assertTrue(os.path.exists(self.file_name))"},{"line_number":33,"context_line":"        with open(self.file_name) as f:"},{"line_number":34,"context_line":"            content \u003d f.read()"},{"line_number":35,"context_line":"        self.assertEqual(content, self.data)"},{"line_number":36,"context_line":"        mode \u003d os.stat(self.file_name).st_mode"},{"line_number":37,"context_line":"        self.assertTrue(stat.S_IMODE(mode) \u003d\u003d file_mode)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_a83d4e90","line":35,"updated":"2015-10-22 14:53:07.000000000","message":"self.assertEqual(self.data, content)","commit_id":"30a0c965a6b606c96bfd734a48949f17b2005912"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"d1c7cc7242e43eac43543754e26cb786a5022e0a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.assertTrue(os.path.exists(self.file_name))"},{"line_number":33,"context_line":"        with open(self.file_name) as f:"},{"line_number":34,"context_line":"            content \u003d f.read()"},{"line_number":35,"context_line":"        self.assertEqual(content, self.data)"},{"line_number":36,"context_line":"        mode \u003d os.stat(self.file_name).st_mode"},{"line_number":37,"context_line":"        self.assertTrue(stat.S_IMODE(mode) \u003d\u003d file_mode)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_1b1fea08","line":35,"in_reply_to":"3a29b11f_a83d4e90","updated":"2015-10-22 15:31:24.000000000","message":"Done","commit_id":"30a0c965a6b606c96bfd734a48949f17b2005912"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"072e6e3f1ba80d76c5b36e97e354bdcc914fab4c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            content \u003d f.read()"},{"line_number":35,"context_line":"        self.assertEqual(content, self.data)"},{"line_number":36,"context_line":"        mode \u003d os.stat(self.file_name).st_mode"},{"line_number":37,"context_line":"        self.assertTrue(stat.S_IMODE(mode) \u003d\u003d file_mode)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_replace_file_custom_mode(self):"},{"line_number":40,"context_line":"        file_mode \u003d 0o722"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_e817c642","line":37,"range":{"start_line":37,"start_character":13,"end_line":37,"end_character":23},"updated":"2015-10-22 14:53:07.000000000","message":"self.assertEqual(file_mode, stat.S_IMODE(mode))","commit_id":"30a0c965a6b606c96bfd734a48949f17b2005912"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"d1c7cc7242e43eac43543754e26cb786a5022e0a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            content \u003d f.read()"},{"line_number":35,"context_line":"        self.assertEqual(content, self.data)"},{"line_number":36,"context_line":"        mode \u003d os.stat(self.file_name).st_mode"},{"line_number":37,"context_line":"        self.assertTrue(stat.S_IMODE(mode) \u003d\u003d file_mode)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_replace_file_custom_mode(self):"},{"line_number":40,"context_line":"        file_mode \u003d 0o722"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_bb191624","line":37,"in_reply_to":"3a29b11f_e817c642","updated":"2015-10-22 15:31:24.000000000","message":"Done","commit_id":"30a0c965a6b606c96bfd734a48949f17b2005912"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"9e3ce65208dd411a2d4cea8e9f23bed431d24cca","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            content \u003d f.read()"},{"line_number":45,"context_line":"        self.assertEqual(content, self.data)"},{"line_number":46,"context_line":"        mode \u003d os.stat(self.file_name).st_mode"},{"line_number":47,"context_line":"        self.assertTrue(stat.S_IMODE(mode) \u003d\u003d file_mode)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_replace_file_custom_mode_twice(self):"},{"line_number":50,"context_line":"        file_mode \u003d 0o722"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_6e75dac8","line":47,"updated":"2015-10-23 13:21:19.000000000","message":"Those two tests above are almost identical. Please create a common helper method and call to it with expected mode.","commit_id":"30a0c965a6b606c96bfd734a48949f17b2005912"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"09c7f28c271895cf502c840b10c1b2e6bc01f788","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            content \u003d f.read()"},{"line_number":45,"context_line":"        self.assertEqual(content, self.data)"},{"line_number":46,"context_line":"        mode \u003d os.stat(self.file_name).st_mode"},{"line_number":47,"context_line":"        self.assertTrue(stat.S_IMODE(mode) \u003d\u003d file_mode)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_replace_file_custom_mode_twice(self):"},{"line_number":50,"context_line":"        file_mode \u003d 0o722"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a26ad4f_47ee6cb5","line":47,"in_reply_to":"3a29b11f_6e75dac8","updated":"2015-10-29 15:48:18.000000000","message":"Done","commit_id":"30a0c965a6b606c96bfd734a48949f17b2005912"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"56ebeae162288c18496ce15d81dae1e30a6f81ed","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            content \u003d f.read()"},{"line_number":45,"context_line":"        self.assertEqual(self.data, content)"},{"line_number":46,"context_line":"        mode \u003d os.stat(self.file_name).st_mode"},{"line_number":47,"context_line":"        self.assertEqual(file_mode, stat.S_IMODE(mode))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_replace_file_custom_mode_twice(self):"},{"line_number":50,"context_line":"        file_mode \u003d 0o722"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a26ad4f_0263d4b2","line":47,"updated":"2015-10-27 10:01:44.000000000","message":"I second Ihar\u0027s suggestion to PS 8. I think all three tests can be refactored to use a common helper method.","commit_id":"4ff779c40e90c6e031922be6752d25f50fa515d4"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"4fce58618e0ffd8ce0fa37d40b8985614c385802","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            content \u003d f.read()"},{"line_number":45,"context_line":"        self.assertEqual(self.data, content)"},{"line_number":46,"context_line":"        mode \u003d os.stat(self.file_name).st_mode"},{"line_number":47,"context_line":"        self.assertEqual(file_mode, stat.S_IMODE(mode))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_replace_file_custom_mode_twice(self):"},{"line_number":50,"context_line":"        file_mode \u003d 0o722"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a26ad4f_e72bf8e9","line":47,"in_reply_to":"1a26ad4f_0263d4b2","updated":"2015-10-29 15:48:30.000000000","message":"Done","commit_id":"4ff779c40e90c6e031922be6752d25f50fa515d4"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"fbac54ea21a26029b8ad67259c36fb9d87447d96","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 OpenStack Foundation."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_91aaef83","line":1,"updated":"2015-11-12 02:53:09.000000000","message":"nit: We don\u0027t need Copyright for OpenStack Foundation.","commit_id":"b63810677339d929def053c8edf3ba319bfbd56e"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"e2f1a0a3ded046d17a1e6d7eade0d403f1e6e6ee","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 OpenStack Foundation."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_eb369ae6","line":1,"in_reply_to":"da85f559_91aaef83","updated":"2015-11-13 09:26:46.000000000","message":"Done","commit_id":"b63810677339d929def053c8edf3ba319bfbd56e"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"29804cdb15f66efcea503c4816b9802d66c62267","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        self.file_name \u003d os.path.join(temp_dir, \"new_file\")"},{"line_number":25,"context_line":"        self.data \u003d \"data to copy\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def _verifyResult(self, file_mode):"},{"line_number":28,"context_line":"        self.assertTrue(os.path.exists(self.file_name))"},{"line_number":29,"context_line":"        with open(self.file_name) as f:"},{"line_number":30,"context_line":"            content \u003d f.read()"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_ae2f1cf5","line":27,"updated":"2015-11-13 21:19:34.000000000","message":"It should be _verify_result to respect python coding style","commit_id":"915b17b273bf8e3fd70c0e785b1c1072e93cf9d1"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"fd92e3e74705473e8c13757aa3def5569cb47b19","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        self.file_name \u003d os.path.join(temp_dir, \"new_file\")"},{"line_number":25,"context_line":"        self.data \u003d \"data to copy\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def _verifyResult(self, file_mode):"},{"line_number":28,"context_line":"        self.assertTrue(os.path.exists(self.file_name))"},{"line_number":29,"context_line":"        with open(self.file_name) as f:"},{"line_number":30,"context_line":"            content \u003d f.read()"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_6eb4aff1","line":27,"in_reply_to":"da85f559_ae2f1cf5","updated":"2015-11-16 07:44:24.000000000","message":"Done","commit_id":"915b17b273bf8e3fd70c0e785b1c1072e93cf9d1"}],"neutron/tests/unit/agent/linux/test_dhcp.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"df83a8d82e57c747ef1e7f31c20510e49dab77f5","unresolved":false,"context_lines":[{"line_number":1967,"context_line":"class TestDeviceManager(TestConfBase):"},{"line_number":1968,"context_line":""},{"line_number":1969,"context_line":"    @mock.patch(\u0027neutron.agent.linux.dhcp.ip_lib\u0027)"},{"line_number":1970,"context_line":"    @mock.patch(\u0027neutron.agent.linux.dhcp.\\"},{"line_number":1971,"context_line":"agent_common_utils.load_interface_driver\u0027)"},{"line_number":1972,"context_line":"    def test_setup(self, load_interface_driver, ip_lib):"},{"line_number":1973,"context_line":"        \"\"\"Test new and existing cases of DeviceManager\u0027s DHCP port setup"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_1d3082e7","line":1970,"updated":"2015-10-21 11:01:10.000000000","message":"You can just do:\n    @mock.patch(\u0027neutron.agent.linux.dhcp.\u0027\n                \u0027agent_common_utils.load_interface_driver\u0027)\n\n\nHere and the following occurrences. Alternately, since you are doing the same mocking for each test case, you can put both mocks into setUp() and then remove the duplication with the decorators.","commit_id":"377bce1109c0afa1389833f15f2730dae5a55b82"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"8db4c1058f76a89f90f09b2924b0174b2d5bf84d","unresolved":false,"context_lines":[{"line_number":1967,"context_line":"class TestDeviceManager(TestConfBase):"},{"line_number":1968,"context_line":""},{"line_number":1969,"context_line":"    @mock.patch(\u0027neutron.agent.linux.dhcp.ip_lib\u0027)"},{"line_number":1970,"context_line":"    @mock.patch(\u0027neutron.agent.linux.dhcp.\\"},{"line_number":1971,"context_line":"agent_common_utils.load_interface_driver\u0027)"},{"line_number":1972,"context_line":"    def test_setup(self, load_interface_driver, ip_lib):"},{"line_number":1973,"context_line":"        \"\"\"Test new and existing cases of DeviceManager\u0027s DHCP port setup"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_09725611","line":1970,"in_reply_to":"3a29b11f_1d3082e7","updated":"2015-10-22 10:00:44.000000000","message":"Done","commit_id":"377bce1109c0afa1389833f15f2730dae5a55b82"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"98e367c56fa5e7281ed4532d6870d93d68e19c2a","unresolved":false,"context_lines":[{"line_number":1968,"context_line":"    def setUp(self):"},{"line_number":1969,"context_line":"        super(TestDeviceManager, self).setUp()"},{"line_number":1970,"context_line":"        ip_lib_patcher \u003d mock.patch(\u0027neutron.agent.linux.dhcp.ip_lib\u0027)"},{"line_number":1971,"context_line":"        load_interface_driver_patcher \u003d mock.patch(\u0027neutron.agent.linux.\u0027"},{"line_number":1972,"context_line":"                                                   \u0027dhcp.\u0027"},{"line_number":1973,"context_line":"                                                   \u0027agent_common_utils.\u0027"},{"line_number":1974,"context_line":"                                                   \u0027load_interface_driver\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_3e5c1f7c","line":1971,"updated":"2015-10-22 12:23:21.000000000","message":"Nit: May be more readable, if you put all/most of the string on the second line:\n    local_interface_driver_patcher \u003d mock.patch(\n        \u0027neutron.agent.linux.dhcp.agent_common_utils.load_interface_driver\u0027)","commit_id":"30a0c965a6b606c96bfd734a48949f17b2005912"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"d1c7cc7242e43eac43543754e26cb786a5022e0a","unresolved":false,"context_lines":[{"line_number":1968,"context_line":"    def setUp(self):"},{"line_number":1969,"context_line":"        super(TestDeviceManager, self).setUp()"},{"line_number":1970,"context_line":"        ip_lib_patcher \u003d mock.patch(\u0027neutron.agent.linux.dhcp.ip_lib\u0027)"},{"line_number":1971,"context_line":"        load_interface_driver_patcher \u003d mock.patch(\u0027neutron.agent.linux.\u0027"},{"line_number":1972,"context_line":"                                                   \u0027dhcp.\u0027"},{"line_number":1973,"context_line":"                                                   \u0027agent_common_utils.\u0027"},{"line_number":1974,"context_line":"                                                   \u0027load_interface_driver\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_6500bf66","line":1971,"in_reply_to":"3a29b11f_3e5c1f7c","updated":"2015-10-22 15:31:24.000000000","message":"Done. But I broke it into 2 lines as hanging indent requires at least one tab indentation, what caused line too long(\u003e79). Hope it is ok for you this time.","commit_id":"30a0c965a6b606c96bfd734a48949f17b2005912"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"98e367c56fa5e7281ed4532d6870d93d68e19c2a","unresolved":false,"context_lines":[{"line_number":1974,"context_line":"                                                   \u0027load_interface_driver\u0027)"},{"line_number":1975,"context_line":"        self.mock_ip_lib \u003d ip_lib_patcher.start()"},{"line_number":1976,"context_line":"        self.mock_load_interface_driver \u003d load_interface_driver_patcher.start()"},{"line_number":1977,"context_line":"        self.addCleanup(ip_lib_patcher.stop)"},{"line_number":1978,"context_line":"        self.addCleanup(load_interface_driver_patcher.stop)"},{"line_number":1979,"context_line":""},{"line_number":1980,"context_line":"    def test_setup(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_fef6a78d","line":1977,"updated":"2015-10-22 12:23:21.000000000","message":"You don\u0027t need to setup an addCleanup() to stop the mocks. The infrastructure will do this automatically.","commit_id":"30a0c965a6b606c96bfd734a48949f17b2005912"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"d1c7cc7242e43eac43543754e26cb786a5022e0a","unresolved":false,"context_lines":[{"line_number":1974,"context_line":"                                                   \u0027load_interface_driver\u0027)"},{"line_number":1975,"context_line":"        self.mock_ip_lib \u003d ip_lib_patcher.start()"},{"line_number":1976,"context_line":"        self.mock_load_interface_driver \u003d load_interface_driver_patcher.start()"},{"line_number":1977,"context_line":"        self.addCleanup(ip_lib_patcher.stop)"},{"line_number":1978,"context_line":"        self.addCleanup(load_interface_driver_patcher.stop)"},{"line_number":1979,"context_line":""},{"line_number":1980,"context_line":"    def test_setup(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_05fc6b6e","line":1977,"in_reply_to":"3a29b11f_fef6a78d","updated":"2015-10-22 15:31:24.000000000","message":"Done","commit_id":"30a0c965a6b606c96bfd734a48949f17b2005912"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"fbac54ea21a26029b8ad67259c36fb9d87447d96","unresolved":false,"context_lines":[{"line_number":1987,"context_line":"        \"\"\""},{"line_number":1988,"context_line":"        self._test_setup(self.mock_load_interface_driver,"},{"line_number":1989,"context_line":"                         self.mock_ip_lib, True)"},{"line_number":1990,"context_line":""},{"line_number":1991,"context_line":"    def _test_setup(self, load_interface_driver, ip_lib, use_gateway_ips):"},{"line_number":1992,"context_line":"        # Create DeviceManager."},{"line_number":1993,"context_line":"        self.conf.register_opt(cfg.BoolOpt(\u0027enable_isolated_metadata\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_51dfa7d8","line":1990,"updated":"2015-11-12 02:53:09.000000000","message":"Good refactoring. In addtion, it\u0027s better to move two functions to a line after _test_setup() and improve the comment because of the same comment.","commit_id":"b63810677339d929def053c8edf3ba319bfbd56e"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"e2f1a0a3ded046d17a1e6d7eade0d403f1e6e6ee","unresolved":false,"context_lines":[{"line_number":1987,"context_line":"        \"\"\""},{"line_number":1988,"context_line":"        self._test_setup(self.mock_load_interface_driver,"},{"line_number":1989,"context_line":"                         self.mock_ip_lib, True)"},{"line_number":1990,"context_line":""},{"line_number":1991,"context_line":"    def _test_setup(self, load_interface_driver, ip_lib, use_gateway_ips):"},{"line_number":1992,"context_line":"        # Create DeviceManager."},{"line_number":1993,"context_line":"        self.conf.register_opt(cfg.BoolOpt(\u0027enable_isolated_metadata\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_cb12b658","line":1990,"in_reply_to":"da85f559_51dfa7d8","updated":"2015-11-13 09:26:46.000000000","message":"Done","commit_id":"b63810677339d929def053c8edf3ba319bfbd56e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"e907fccac980032ced5f217f37678b8cb3799ecb","unresolved":false,"context_lines":[{"line_number":2041,"context_line":"        Create DHCP port without gateway IPs."},{"line_number":2042,"context_line":"        \"\"\""},{"line_number":2043,"context_line":"        self._test_setup(self.mock_load_interface_driver,"},{"line_number":2044,"context_line":"                         self.mock_ip_lib, False)"},{"line_number":2045,"context_line":""},{"line_number":2046,"context_line":"    def test_setup_gateway_ips(self):"},{"line_number":2047,"context_line":"        \"\"\"Test DeviceManager\u0027s DHCP port setup logic."}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_732b7c34","line":2044,"updated":"2015-11-13 11:53:13.000000000","message":"For readability, could use:\n    ...use_gateway_ips\u003dFalse\n\nSimilar for L2051","commit_id":"765d5f4979e79253c1a8b681cf4b9f9f5e60a74e"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"3368d68bb348d961dc1524874387b4b6651e2f3b","unresolved":false,"context_lines":[{"line_number":2041,"context_line":"        Create DHCP port without gateway IPs."},{"line_number":2042,"context_line":"        \"\"\""},{"line_number":2043,"context_line":"        self._test_setup(self.mock_load_interface_driver,"},{"line_number":2044,"context_line":"                         self.mock_ip_lib, False)"},{"line_number":2045,"context_line":""},{"line_number":2046,"context_line":"    def test_setup_gateway_ips(self):"},{"line_number":2047,"context_line":"        \"\"\"Test DeviceManager\u0027s DHCP port setup logic."}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_41dc5e46","line":2044,"in_reply_to":"da85f559_732b7c34","updated":"2015-11-13 12:47:14.000000000","message":"Done","commit_id":"765d5f4979e79253c1a8b681cf4b9f9f5e60a74e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"e907fccac980032ced5f217f37678b8cb3799ecb","unresolved":false,"context_lines":[{"line_number":2044,"context_line":"                         self.mock_ip_lib, False)"},{"line_number":2045,"context_line":""},{"line_number":2046,"context_line":"    def test_setup_gateway_ips(self):"},{"line_number":2047,"context_line":"        \"\"\"Test DeviceManager\u0027s DHCP port setup logic."},{"line_number":2048,"context_line":"        Create DHCP port with gateway IPs."},{"line_number":2049,"context_line":"        \"\"\""},{"line_number":2050,"context_line":"        self._test_setup(self.mock_load_interface_driver,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_93edc027","line":2047,"updated":"2015-11-13 11:53:13.000000000","message":"nit: \"...logic with gateway IPs.\" so that when look at summary docstrings for methods they are different.\n\nnit: blank line between summary line and rest of docstring. Here and L2040-2041.\n\nAs a recommended (IMHO)alternative, you can remove the docstrings from both methods and just name them with a descriptive name. For example\n\n    def test_setup_device_manager_dhcp_port_with_gateway_ips","commit_id":"765d5f4979e79253c1a8b681cf4b9f9f5e60a74e"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"3368d68bb348d961dc1524874387b4b6651e2f3b","unresolved":false,"context_lines":[{"line_number":2044,"context_line":"                         self.mock_ip_lib, False)"},{"line_number":2045,"context_line":""},{"line_number":2046,"context_line":"    def test_setup_gateway_ips(self):"},{"line_number":2047,"context_line":"        \"\"\"Test DeviceManager\u0027s DHCP port setup logic."},{"line_number":2048,"context_line":"        Create DHCP port with gateway IPs."},{"line_number":2049,"context_line":"        \"\"\""},{"line_number":2050,"context_line":"        self._test_setup(self.mock_load_interface_driver,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_c19e0e63","line":2047,"in_reply_to":"da85f559_93edc027","updated":"2015-11-13 12:47:14.000000000","message":"Done","commit_id":"765d5f4979e79253c1a8b681cf4b9f9f5e60a74e"}],"neutron/tests/unit/agent/linux/test_utils.py":[{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"6d97b16d4efadfbb139959394cd877f46ac25ca8","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            actual_val \u003d utils.get_interface_mac(\u0027eth0\u0027)"},{"line_number":186,"context_line":"        self.assertEqual(actual_val, expect_val)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"class TestFindChildPids(base.BaseTestCase):"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def test_returns_empty_list_for_exit_code_1(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a29b11f_20a543a1","line":188,"updated":"2015-10-20 14:46:48.000000000","message":"Looks like you have the \"depends-on\" links between these four patches right, but you should remove this agent unit-test in the same patch that you remove the agent replace_file function (Change-Id: I26b0a4d6105420a2c242b81a4cd58e0adef4cbec).","commit_id":"187d3fadc9cbc3da01e18943c38eb2056d0b76cd"},{"author":{"_account_id":17881,"name":"Bogdan Tabor","email":"bogdan.tabor@ericpol.com","username":"bota"},"change_message_id":"00a8a8279eab0a1758c5655867e9c0c249e4e598","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            actual_val \u003d utils.get_interface_mac(\u0027eth0\u0027)"},{"line_number":186,"context_line":"        self.assertEqual(actual_val, expect_val)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"class TestFindChildPids(base.BaseTestCase):"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def test_returns_empty_list_for_exit_code_1(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a29b11f_4ae5d5d9","line":188,"in_reply_to":"3a29b11f_20a543a1","updated":"2015-10-21 09:51:02.000000000","message":"Done","commit_id":"187d3fadc9cbc3da01e18943c38eb2056d0b76cd"}]}
