)]}'
{"neutron/common/utils.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"c9d2ed47dfb6684498ddd683ad0d85395296c531","unresolved":false,"context_lines":[{"line_number":58,"context_line":"synchronized \u003d lockutils.synchronized_with_prefix(SYNCHRONIZED_PREFIX)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def ensure_dir(dir_path):"},{"line_number":62,"context_line":"    \"\"\"Ensure a directory with 755 permissions mode.\"\"\""},{"line_number":63,"context_line":"    fileutils.ensure_tree(dir_path, mode\u003d0o755)"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_d146077a","line":61,"updated":"2016-10-09 14:53:23.000000000","message":"Please put a debtcollector on this.","commit_id":"cb5c9296c18642d94d89045b06649233a99c5bd7"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"6de1e5c35e9f45fa1792399cd99df5fd8590e774","unresolved":false,"context_lines":[{"line_number":58,"context_line":"synchronized \u003d lockutils.synchronized_with_prefix(SYNCHRONIZED_PREFIX)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def ensure_dir(dir_path):"},{"line_number":62,"context_line":"    \"\"\"Ensure a directory with 755 permissions mode.\"\"\""},{"line_number":63,"context_line":"    fileutils.ensure_tree(dir_path, mode\u003d0o755)"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_95162a4a","line":61,"in_reply_to":"1a95cdbc_d146077a","updated":"2016-10-09 15:01:45.000000000","message":"Done","commit_id":"cb5c9296c18642d94d89045b06649233a99c5bd7"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"90f606c6121147c6263a285dc85f1f9a85e9337e","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"@removals.remove("},{"line_number":63,"context_line":"    message\u003d\"use ensure_tree(path, 0o755) from oslo_utils.fileutils\","},{"line_number":64,"context_line":"    version\u003d\"Ocata\","},{"line_number":65,"context_line":"    removal_version\u003d\"Queens\")"},{"line_number":66,"context_line":"def ensure_dir(dir_path):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a95cdbc_3532b6a7","line":63,"range":{"start_line":63,"start_character":13,"end_line":63,"end_character":14},"updated":"2016-10-09 15:35:09.000000000","message":"Nit: \u0027Use\u0027","commit_id":"c2b7d344b368b0ea8fd2c0363ba18e80f24e286f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"43fa0a1ccec4237012a944615ca4664c255e8797","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"@removals.remove("},{"line_number":63,"context_line":"    message\u003d\"use ensure_tree(path, 0o755) from oslo_utils.fileutils\","},{"line_number":64,"context_line":"    version\u003d\"Ocata\","},{"line_number":65,"context_line":"    removal_version\u003d\"Queens\")"},{"line_number":66,"context_line":"def ensure_dir(dir_path):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a95cdbc_558102fa","line":63,"range":{"start_line":63,"start_character":13,"end_line":63,"end_character":14},"in_reply_to":"1a95cdbc_3532b6a7","updated":"2016-10-09 15:54:41.000000000","message":"Done","commit_id":"c2b7d344b368b0ea8fd2c0363ba18e80f24e286f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"90f606c6121147c6263a285dc85f1f9a85e9337e","unresolved":false,"context_lines":[{"line_number":62,"context_line":"@removals.remove("},{"line_number":63,"context_line":"    message\u003d\"use ensure_tree(path, 0o755) from oslo_utils.fileutils\","},{"line_number":64,"context_line":"    version\u003d\"Ocata\","},{"line_number":65,"context_line":"    removal_version\u003d\"Queens\")"},{"line_number":66,"context_line":"def ensure_dir(dir_path):"},{"line_number":67,"context_line":"    \"\"\"Ensure a directory with 755 permissions mode.\"\"\""},{"line_number":68,"context_line":"    fileutils.ensure_tree(dir_path, mode\u003d0o755)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a95cdbc_152f7a3f","line":65,"range":{"start_line":65,"start_character":21,"end_line":65,"end_character":27},"updated":"2016-10-09 15:35:09.000000000","message":"Why not Pike?","commit_id":"c2b7d344b368b0ea8fd2c0363ba18e80f24e286f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"43fa0a1ccec4237012a944615ca4664c255e8797","unresolved":false,"context_lines":[{"line_number":62,"context_line":"@removals.remove("},{"line_number":63,"context_line":"    message\u003d\"use ensure_tree(path, 0o755) from oslo_utils.fileutils\","},{"line_number":64,"context_line":"    version\u003d\"Ocata\","},{"line_number":65,"context_line":"    removal_version\u003d\"Queens\")"},{"line_number":66,"context_line":"def ensure_dir(dir_path):"},{"line_number":67,"context_line":"    \"\"\"Ensure a directory with 755 permissions mode.\"\"\""},{"line_number":68,"context_line":"    fileutils.ensure_tree(dir_path, mode\u003d0o755)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a95cdbc_75843e0a","line":65,"range":{"start_line":65,"start_character":21,"end_line":65,"end_character":27},"in_reply_to":"1a95cdbc_152f7a3f","updated":"2016-10-09 15:54:41.000000000","message":"Done","commit_id":"c2b7d344b368b0ea8fd2c0363ba18e80f24e286f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"1c4a1621b41717139b6d0fc2513b1c3457905d48","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"@removals.remove("},{"line_number":63,"context_line":"    message\u003d\"Use ensure_tree(path, 0o755) from oslo_utils.fileutils\","},{"line_number":64,"context_line":"    version\u003d\"Ocata\","},{"line_number":65,"context_line":"    removal_version\u003d\"Pike\")"},{"line_number":66,"context_line":"def ensure_dir(dir_path):"},{"line_number":67,"context_line":"    \"\"\"Ensure a directory with 755 permissions mode.\"\"\""},{"line_number":68,"context_line":"    fileutils.ensure_tree(dir_path, mode\u003d0o755)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba5da102_84f5dccc","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":27},"updated":"2016-11-04 15:49:45.000000000","message":"Although this patch may not have a direct correlation to neutron-lib, we are doing this to allow/force subprojects to stop importing from neutron core. This falls under the goal of what neutron-lib is trying to accomplish this cycle, so I think these versions should be omitted.","commit_id":"6b2fd95743ba88e009f0ca8344d327d526d30171"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"452b677ce699a9b400aeb6a1ca6e8d8a93cde704","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"@removals.remove("},{"line_number":63,"context_line":"    message\u003d\"Use ensure_tree(path, 0o755) from oslo_utils.fileutils\","},{"line_number":64,"context_line":"    version\u003d\"Ocata\","},{"line_number":65,"context_line":"    removal_version\u003d\"Pike\")"},{"line_number":66,"context_line":"def ensure_dir(dir_path):"},{"line_number":67,"context_line":"    \"\"\"Ensure a directory with 755 permissions mode.\"\"\""},{"line_number":68,"context_line":"    fileutils.ensure_tree(dir_path, mode\u003d0o755)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba5da102_e3504061","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":27},"in_reply_to":"ba5da102_84f5dccc","updated":"2016-11-05 07:00:50.000000000","message":"Done","commit_id":"6b2fd95743ba88e009f0ca8344d327d526d30171"}],"neutron/tests/unit/agent/l3/test_agent.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"dddd24d1deb07dd341f47e393027d8bff0d74fb8","unresolved":false,"context_lines":[{"line_number":192,"context_line":"    def test_init_ha_conf(self):"},{"line_number":193,"context_line":"        with mock.patch(\u0027os.path.dirname\u0027, return_value\u003d\u0027/etc/ha/\u0027):"},{"line_number":194,"context_line":"            l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":195,"context_line":"            self.ensure_dir.assert_called_once_with(\u0027/etc/ha/\u0027, mode\u003d493)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def test_enqueue_state_change_router_not_found(self):"},{"line_number":198,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5da102_febab96d","line":195,"range":{"start_line":195,"start_character":69,"end_line":195,"end_character":72},"updated":"2016-10-26 08:09:19.000000000","message":"Why decimal here?","commit_id":"cf8d9c26960563046856e56f680864af376a982e"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"d2bbfe82ce34e384fce277b59d656fb2cec43243","unresolved":false,"context_lines":[{"line_number":192,"context_line":"    def test_init_ha_conf(self):"},{"line_number":193,"context_line":"        with mock.patch(\u0027os.path.dirname\u0027, return_value\u003d\u0027/etc/ha/\u0027):"},{"line_number":194,"context_line":"            l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":195,"context_line":"            self.ensure_dir.assert_called_once_with(\u0027/etc/ha/\u0027, mode\u003d493)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def test_enqueue_state_change_router_not_found(self):"},{"line_number":198,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5da102_4ba8a220","line":195,"range":{"start_line":195,"start_character":69,"end_line":195,"end_character":72},"updated":"2016-11-02 11:08:36.000000000","message":"Why decimal here? It looks odd. (Same for all the test modules.)","commit_id":"d553396a4808e445fe448dd044526596588a9057"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a3d589e58b7d231ab05e7dcd1349b09a920c3836","unresolved":false,"context_lines":[{"line_number":192,"context_line":"    def test_init_ha_conf(self):"},{"line_number":193,"context_line":"        with mock.patch(\u0027os.path.dirname\u0027, return_value\u003d\u0027/etc/ha/\u0027):"},{"line_number":194,"context_line":"            l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":195,"context_line":"            self.ensure_dir.assert_called_once_with(\u0027/etc/ha/\u0027, mode\u003d493)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def test_enqueue_state_change_router_not_found(self):"},{"line_number":198,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5da102_ee5c247f","line":195,"range":{"start_line":195,"start_character":69,"end_line":195,"end_character":72},"in_reply_to":"ba5da102_4ba8a220","updated":"2016-11-02 11:31:08.000000000","message":"This is due to https://github.com/openstack/oslo.utils/blob/master/oslo_utils/fileutils.py#L33","commit_id":"d553396a4808e445fe448dd044526596588a9057"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d5a5754daeee76edbc8f214151b634a8dfcbd042","unresolved":false,"context_lines":[{"line_number":192,"context_line":"    def test_init_ha_conf(self):"},{"line_number":193,"context_line":"        with mock.patch(\u0027os.path.dirname\u0027, return_value\u003d\u0027/etc/ha/\u0027):"},{"line_number":194,"context_line":"            l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":195,"context_line":"            self.ensure_dir.assert_called_once_with(\u0027/etc/ha/\u0027, mode\u003d493)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def test_enqueue_state_change_router_not_found(self):"},{"line_number":198,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5da102_360d8ae8","line":195,"range":{"start_line":195,"start_character":69,"end_line":195,"end_character":72},"in_reply_to":"ba5da102_c10c91ee","updated":"2016-11-02 13:54:59.000000000","message":"Done","commit_id":"d553396a4808e445fe448dd044526596588a9057"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"894114b862bebba8b7fc706e0426fff8500a1a34","unresolved":false,"context_lines":[{"line_number":192,"context_line":"    def test_init_ha_conf(self):"},{"line_number":193,"context_line":"        with mock.patch(\u0027os.path.dirname\u0027, return_value\u003d\u0027/etc/ha/\u0027):"},{"line_number":194,"context_line":"            l3_agent.L3NATAgent(HOSTNAME, self.conf)"},{"line_number":195,"context_line":"            self.ensure_dir.assert_called_once_with(\u0027/etc/ha/\u0027, mode\u003d493)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def test_enqueue_state_change_router_not_found(self):"},{"line_number":198,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5da102_c10c91ee","line":195,"range":{"start_line":195,"start_character":69,"end_line":195,"end_character":72},"in_reply_to":"ba5da102_ee5c247f","updated":"2016-11-02 11:47:41.000000000","message":"Sorry, my request is to use mode\u003d0o755 like in the non-test code, for consistency.","commit_id":"d553396a4808e445fe448dd044526596588a9057"}],"neutron/tests/unit/agent/l3/test_dvr_local_router.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0cb86ae3ce2d92a6e6fc5d6967110de10f3542b5","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.device_exists \u003d self.device_exists_p.start()"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.ensure_dir \u003d mock.patch("},{"line_number":69,"context_line":"            \u0027olso_utils.fileutils.ensure_tree\u0027).start()"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        mock.patch(\u0027neutron.agent.linux.keepalived.KeepalivedManager\u0027"},{"line_number":72,"context_line":"                   \u0027.get_full_config_file_path\u0027).start()"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa6399be_a5b53ad1","line":69,"updated":"2016-10-19 09:29:45.000000000","message":"typo","commit_id":"e9cdb5041af9217588053d901904fc2cf5c3221b"}],"neutron/tests/unit/common/test_utils.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"105277856e25c4b7d75928feb435c686529098f2","unresolved":false,"context_lines":[{"line_number":626,"context_line":"class TestEnsureDir(base.BaseTestCase):"},{"line_number":627,"context_line":"    @mock.patch(\u0027os.path.isdir\u0027)"},{"line_number":628,"context_line":"    @mock.patch(\u0027os.makedirs\u0027)"},{"line_number":629,"context_line":"    def test_ensure_dir_no_fail_if_exists(self, makedirs, isdir):"},{"line_number":630,"context_line":"        error \u003d OSError()"},{"line_number":631,"context_line":"        error.errno \u003d errno.EEXIST"},{"line_number":632,"context_line":"        makedirs.side_effect \u003d error"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a95cdbc_3b3d458f","line":629,"updated":"2016-10-12 15:12:04.000000000","message":"I don\u0027t see the point of unit testing oslo_utils from neutron. Can we just remove this test?","commit_id":"792635ce96d3e3f2f2d088880bb22b3d2f92d368"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"7a3bef4578d3f6736f5e89f00ec8470a25040941","unresolved":false,"context_lines":[{"line_number":626,"context_line":"class TestEnsureDir(base.BaseTestCase):"},{"line_number":627,"context_line":"    @mock.patch(\u0027os.path.isdir\u0027)"},{"line_number":628,"context_line":"    @mock.patch(\u0027os.makedirs\u0027)"},{"line_number":629,"context_line":"    def test_ensure_dir_no_fail_if_exists(self, makedirs, isdir):"},{"line_number":630,"context_line":"        error \u003d OSError()"},{"line_number":631,"context_line":"        error.errno \u003d errno.EEXIST"},{"line_number":632,"context_line":"        makedirs.side_effect \u003d error"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_c65eb1e8","line":629,"in_reply_to":"1a95cdbc_3b3d458f","updated":"2016-10-12 15:13:28.000000000","message":"Isn\u0027t it here, to ensure that `ensure_dir` function is still in neutron tree?","commit_id":"792635ce96d3e3f2f2d088880bb22b3d2f92d368"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"e7e0eed76f2a047437733e2862bd307a2b8f6339","unresolved":false,"context_lines":[{"line_number":626,"context_line":"class TestEnsureDir(base.BaseTestCase):"},{"line_number":627,"context_line":"    @mock.patch(\u0027os.path.isdir\u0027)"},{"line_number":628,"context_line":"    @mock.patch(\u0027os.makedirs\u0027)"},{"line_number":629,"context_line":"    def test_ensure_dir_no_fail_if_exists(self, makedirs, isdir):"},{"line_number":630,"context_line":"        error \u003d OSError()"},{"line_number":631,"context_line":"        error.errno \u003d errno.EEXIST"},{"line_number":632,"context_line":"        makedirs.side_effect \u003d error"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_47d7d14a","line":629,"in_reply_to":"fa6399be_3606a3ce","updated":"2016-10-13 12:08:01.000000000","message":"If the code is actually in the neutron tree then I think keeping the test can be justified. However, in this case the neutron function just calls the oslo_utils function.","commit_id":"792635ce96d3e3f2f2d088880bb22b3d2f92d368"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"76522c4837dc5343732a563953ff800cd9d06c69","unresolved":false,"context_lines":[{"line_number":626,"context_line":"class TestEnsureDir(base.BaseTestCase):"},{"line_number":627,"context_line":"    @mock.patch(\u0027os.path.isdir\u0027)"},{"line_number":628,"context_line":"    @mock.patch(\u0027os.makedirs\u0027)"},{"line_number":629,"context_line":"    def test_ensure_dir_no_fail_if_exists(self, makedirs, isdir):"},{"line_number":630,"context_line":"        error \u003d OSError()"},{"line_number":631,"context_line":"        error.errno \u003d errno.EEXIST"},{"line_number":632,"context_line":"        makedirs.side_effect \u003d error"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_3606a3ce","line":629,"in_reply_to":"fa6399be_c19bfbc7","updated":"2016-10-13 06:14:19.000000000","message":"a test for deprecated is a overkill in my opinion, in the past when I have posted patches like this I was asked by Ihar to leave the tests of the method as it is a public facing API.","commit_id":"792635ce96d3e3f2f2d088880bb22b3d2f92d368"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"a5e9f97c4ee6e80b618645cb68d4d5d52ff6651c","unresolved":false,"context_lines":[{"line_number":626,"context_line":"class TestEnsureDir(base.BaseTestCase):"},{"line_number":627,"context_line":"    @mock.patch(\u0027os.path.isdir\u0027)"},{"line_number":628,"context_line":"    @mock.patch(\u0027os.makedirs\u0027)"},{"line_number":629,"context_line":"    def test_ensure_dir_no_fail_if_exists(self, makedirs, isdir):"},{"line_number":630,"context_line":"        error \u003d OSError()"},{"line_number":631,"context_line":"        error.errno \u003d errno.EEXIST"},{"line_number":632,"context_line":"        makedirs.side_effect \u003d error"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_c19bfbc7","line":629,"in_reply_to":"fa6399be_c65eb1e8","updated":"2016-10-12 15:30:09.000000000","message":"Surely we don\u0027t need a \u0027test\u0027 for that? It\u0027s marked as deprecated, and we have rules for how long the deprecation must stay in the neutron tree. I say we remove this entire test class (lines 626-633).","commit_id":"792635ce96d3e3f2f2d088880bb22b3d2f92d368"}]}
