)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"b946de205ac11f6482b20dcc94b4d32203c6e916","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Hong Hui Xiao \u003cxiaohhui@cn.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-01-25 07:13:33 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix typo in _check_driver_to_bind"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"From [1], the segments_to_bind should be a list of dict, so the"},{"line_number":10,"context_line":"\"level.segment_id in segments_to_bind\" will never work."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"bae84128_3faed52d","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":8},"updated":"2016-02-24 15:06:34.000000000","message":"This is misleading.  It isn\u0027t a mere typo that you\u0027re fixing.","commit_id":"90d2967b8273a0ed0cca3182600e311e826b7b42"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"2a5ad55a522139f01df78075e3e506f93bdaf5e5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Hong Hui Xiao \u003cxiaohhui@cn.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-01-25 07:13:33 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix typo in _check_driver_to_bind"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"From [1], the segments_to_bind should be a list of dict, so the"},{"line_number":10,"context_line":"\"level.segment_id in segments_to_bind\" will never work."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5aef4532_17f3ec0b","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":8},"in_reply_to":"bae84128_3faed52d","updated":"2016-03-07 09:28:20.000000000","message":"Thanks, the commit message has been updated.","commit_id":"90d2967b8273a0ed0cca3182600e311e826b7b42"},{"author":{"_account_id":17377,"name":"Federico Ressi","email":"federico.ressi@intel.com","username":"fressi"},"change_message_id":"d3daed1adb536fa07270b0d11a374b764894bb39","unresolved":false,"context_lines":[{"line_number":9,"context_line":"From [1], the segments_to_bind should be a list of dict, so the"},{"line_number":10,"context_line":"\"level.segment_id in segments_to_bind\" will never work."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This patch extracts a list of segment ids and uses the new list in"},{"line_number":13,"context_line":"the if condition."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"[1] https://goo.gl/yKYSTA"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5aef4532_ca5dd248","line":12,"range":{"start_line":12,"start_character":22,"end_line":12,"end_character":26},"updated":"2016-03-09 12:35:12.000000000","message":"list -\u003e set","commit_id":"aa88308afa08956534a318348dd7e85cfe85d9f7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"22ba4523239de47e6e40a15110c14905f6651a41","unresolved":false,"context_lines":[{"line_number":9,"context_line":"From [1], the segments_to_bind should be a list of dict, so the"},{"line_number":10,"context_line":"\"level.segment_id in segments_to_bind\" will never work."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This patch extracts a list of segment ids and uses the new list in"},{"line_number":13,"context_line":"the if condition."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"[1] https://goo.gl/yKYSTA"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5aef4532_fa2945e7","line":12,"range":{"start_line":12,"start_character":22,"end_line":12,"end_character":26},"in_reply_to":"5aef4532_ca5dd248","updated":"2016-03-10 08:06:08.000000000","message":"Done","commit_id":"aa88308afa08956534a318348dd7e85cfe85d9f7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5453669c866c1855338d677849db3d4ae69536fe","unresolved":false,"context_lines":[{"line_number":12,"context_line":"This patch extracts a list of segment ids and uses the new list in"},{"line_number":13,"context_line":"the if condition."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"[1] https://goo.gl/yKYSTA"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I58f1d128e6cd79546d84f7d5bfcb026affc4fc5e"},{"line_number":18,"context_line":"Closes-bug: #1524356"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5aef4532_5a024270","line":15,"range":{"start_line":15,"start_character":4,"end_line":15,"end_character":25},"updated":"2016-03-09 08:58:22.000000000","message":"Any future commit to this module may change this line so generally it\u0027s better to avoid pointing to github","commit_id":"aa88308afa08956534a318348dd7e85cfe85d9f7"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"553d009e1672de894052a279882cbd41f4a0c0fc","unresolved":false,"context_lines":[{"line_number":12,"context_line":"This patch extracts a list of segment ids and uses the new list in"},{"line_number":13,"context_line":"the if condition."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"[1] https://goo.gl/yKYSTA"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I58f1d128e6cd79546d84f7d5bfcb026affc4fc5e"},{"line_number":18,"context_line":"Closes-bug: #1524356"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5aef4532_93ae74e4","line":15,"range":{"start_line":15,"start_character":4,"end_line":15,"end_character":25},"in_reply_to":"5aef4532_5a024270","updated":"2016-03-09 09:52:20.000000000","message":"I think I have add version in the github link, so the position can be kept even if there is future change. Am I wrong about it?","commit_id":"aa88308afa08956534a318348dd7e85cfe85d9f7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"56c0bcd918e9bfb2379e7c9022a36ef9999ca59e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"This patch extracts a list of segment ids and uses the new list in"},{"line_number":13,"context_line":"the if condition."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"[1] https://goo.gl/yKYSTA"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I58f1d128e6cd79546d84f7d5bfcb026affc4fc5e"},{"line_number":18,"context_line":"Closes-bug: #1524356"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5aef4532_13bd44b7","line":15,"range":{"start_line":15,"start_character":4,"end_line":15,"end_character":25},"in_reply_to":"5aef4532_93ae74e4","updated":"2016-03-09 10:00:18.000000000","message":"ah, I see, should be good then","commit_id":"aa88308afa08956534a318348dd7e85cfe85d9f7"}],"neutron/plugins/ml2/managers.py":[{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"8c41b7a7f981d61aedb9fce0dc4bff2478d743f7","unresolved":false,"context_lines":[{"line_number":764,"context_line":"        # level to one of the segments we are currently trying to"},{"line_number":765,"context_line":"        # bind. Note that it is OK for the same driver to bind at"},{"line_number":766,"context_line":"        # multiple levels using different segments."},{"line_number":767,"context_line":"        segment_ids_to_bind \u003d {s[api.SEGMENTATION_ID]"},{"line_number":768,"context_line":"                               for s in segments_to_bind}"},{"line_number":769,"context_line":"        for level in binding_levels:"},{"line_number":770,"context_line":"            if (level.driver \u003d\u003d driver and"},{"line_number":771,"context_line":"                level.segment_id in segment_ids_to_bind):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_6841980b","line":768,"range":{"start_line":767,"start_character":30,"end_line":768,"end_character":57},"updated":"2016-03-07 16:02:35.000000000","message":"question: why is dict? This makes set([\u0027xxx_id\u0027, \u0027yyy_id\u0027]). Why don\u0027t you use just generator, tuple or list?","commit_id":"966d69ff47f472ef62b4d45a2d499495cc057d2e"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"fde3f365eeb47fe8550ebcec4e2bdee2cdcff697","unresolved":false,"context_lines":[{"line_number":764,"context_line":"        # level to one of the segments we are currently trying to"},{"line_number":765,"context_line":"        # bind. Note that it is OK for the same driver to bind at"},{"line_number":766,"context_line":"        # multiple levels using different segments."},{"line_number":767,"context_line":"        segment_ids_to_bind \u003d {s[api.SEGMENTATION_ID]"},{"line_number":768,"context_line":"                               for s in segments_to_bind}"},{"line_number":769,"context_line":"        for level in binding_levels:"},{"line_number":770,"context_line":"            if (level.driver \u003d\u003d driver and"},{"line_number":771,"context_line":"                level.segment_id in segment_ids_to_bind):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_cee8987f","line":768,"range":{"start_line":767,"start_character":30,"end_line":768,"end_character":57},"in_reply_to":"5aef4532_6841980b","updated":"2016-03-08 03:49:53.000000000","message":"I use set here because set can eliminate duplicated options. Others(generator, tuple or list) can also work here.","commit_id":"966d69ff47f472ef62b4d45a2d499495cc057d2e"}],"neutron/tests/unit/plugins/ml2/test_managers.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"b946de205ac11f6482b20dcc94b4d32203c6e916","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_9f572125","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":30},"updated":"2016-02-24 15:06:34.000000000","message":"We shouldn\u0027t add copyrights to the foundation.","commit_id":"90d2967b8273a0ed0cca3182600e311e826b7b42"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"2a5ad55a522139f01df78075e3e506f93bdaf5e5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":2,"id":"5aef4532_57dd746f","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":30},"in_reply_to":"bae84128_9f572125","updated":"2016-03-07 09:28:20.000000000","message":"Done","commit_id":"90d2967b8273a0ed0cca3182600e311e826b7b42"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"4c7ca4e1b26bd79aaf1dd1c6452f393219917852","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        bindinglevel.segment_id \u003d \u0027fake_seg_id\u0027"},{"line_number":32,"context_line":"        context._binding_levels \u003d [bindinglevel]"},{"line_number":33,"context_line":"        manager.ordered_mech_drivers \u003d [\u0027fake_driver\u0027]"},{"line_number":34,"context_line":"        segments_to_bind \u003d {api.SEGMENTATION_ID: \u0027fake_seg_id\u0027}"},{"line_number":35,"context_line":"        manager._bind_port_level(context, mock.ANY, segments_to_bind)"},{"line_number":36,"context_line":"        # Code should not hit the _prepare_to_bind"},{"line_number":37,"context_line":"        self.assertFalse(context._prepare_to_bind.called)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_b425c3c3","line":34,"range":{"start_line":34,"start_character":27,"end_line":34,"end_character":63},"updated":"2016-03-07 15:09:44.000000000","message":"[{api.SEGMENTATION_ID: \u0027fake_seg_id\u0027}]","commit_id":"966d69ff47f472ef62b4d45a2d499495cc057d2e"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"fde3f365eeb47fe8550ebcec4e2bdee2cdcff697","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        bindinglevel.segment_id \u003d \u0027fake_seg_id\u0027"},{"line_number":32,"context_line":"        context._binding_levels \u003d [bindinglevel]"},{"line_number":33,"context_line":"        manager.ordered_mech_drivers \u003d [\u0027fake_driver\u0027]"},{"line_number":34,"context_line":"        segments_to_bind \u003d {api.SEGMENTATION_ID: \u0027fake_seg_id\u0027}"},{"line_number":35,"context_line":"        manager._bind_port_level(context, mock.ANY, segments_to_bind)"},{"line_number":36,"context_line":"        # Code should not hit the _prepare_to_bind"},{"line_number":37,"context_line":"        self.assertFalse(context._prepare_to_bind.called)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_4e7808f3","line":34,"range":{"start_line":34,"start_character":27,"end_line":34,"end_character":63},"in_reply_to":"5aef4532_b425c3c3","updated":"2016-03-08 03:49:53.000000000","message":"Done","commit_id":"966d69ff47f472ef62b4d45a2d499495cc057d2e"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"4c7ca4e1b26bd79aaf1dd1c6452f393219917852","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        context._binding_levels \u003d [bindinglevel]"},{"line_number":33,"context_line":"        manager.ordered_mech_drivers \u003d [\u0027fake_driver\u0027]"},{"line_number":34,"context_line":"        segments_to_bind \u003d {api.SEGMENTATION_ID: \u0027fake_seg_id\u0027}"},{"line_number":35,"context_line":"        manager._bind_port_level(context, mock.ANY, segments_to_bind)"},{"line_number":36,"context_line":"        # Code should not hit the _prepare_to_bind"},{"line_number":37,"context_line":"        self.assertFalse(context._prepare_to_bind.called)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_743b3bec","line":35,"range":{"start_line":35,"start_character":42,"end_line":35,"end_character":50},"updated":"2016-03-07 15:09:44.000000000","message":"Use valid value as level. Otherwise, it\u0027s caught in the check[1].\n\n[1]: https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/managers.py#L708-L713","commit_id":"966d69ff47f472ef62b4d45a2d499495cc057d2e"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"fde3f365eeb47fe8550ebcec4e2bdee2cdcff697","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        context._binding_levels \u003d [bindinglevel]"},{"line_number":33,"context_line":"        manager.ordered_mech_drivers \u003d [\u0027fake_driver\u0027]"},{"line_number":34,"context_line":"        segments_to_bind \u003d {api.SEGMENTATION_ID: \u0027fake_seg_id\u0027}"},{"line_number":35,"context_line":"        manager._bind_port_level(context, mock.ANY, segments_to_bind)"},{"line_number":36,"context_line":"        # Code should not hit the _prepare_to_bind"},{"line_number":37,"context_line":"        self.assertFalse(context._prepare_to_bind.called)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_2e75bcf8","line":35,"range":{"start_line":35,"start_character":42,"end_line":35,"end_character":50},"in_reply_to":"5aef4532_743b3bec","updated":"2016-03-08 03:49:53.000000000","message":"Thanks, you are right about it.","commit_id":"966d69ff47f472ef62b4d45a2d499495cc057d2e"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"4e32c50ac80030f5472c1457e87b37fe3b24b323","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestManagers(test_plugin.Ml2PluginV2TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test__bind_port_level_existing(self):"},{"line_number":27,"context_line":"        manager \u003d managers.MechanismManager()"},{"line_number":28,"context_line":"        context \u003d mock.MagicMock()"},{"line_number":29,"context_line":"        bindinglevel \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_05c6b199","line":26,"updated":"2016-03-08 21:41:03.000000000","message":"The convention is to use a single underscore instead of 2.\ne.g.\ntest_bind_port_level_existing","commit_id":"9241977c17d357da46fc4c20177d5a5a906a6ff8"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"63f1a6304dcdce2b5c85883a16fcf06cec042242","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestManagers(test_plugin.Ml2PluginV2TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test__bind_port_level_existing(self):"},{"line_number":27,"context_line":"        manager \u003d managers.MechanismManager()"},{"line_number":28,"context_line":"        context \u003d mock.MagicMock()"},{"line_number":29,"context_line":"        bindinglevel \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_c7cde85e","line":26,"in_reply_to":"5aef4532_05c6b199","updated":"2016-03-09 01:01:56.000000000","message":"Done","commit_id":"9241977c17d357da46fc4c20177d5a5a906a6ff8"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"37e482930c5db451fcdf24aca3e6b4591a8ad9b6","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.tests.unit.plugins.ml2 import test_plugin"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestManagers(test_plugin.Ml2PluginV2TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_bind_port_level_existing(self):"},{"line_number":27,"context_line":"        manager \u003d managers.MechanismManager()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_4ca140a9","line":24,"updated":"2016-03-12 14:03:37.000000000","message":"I strongly suggest to test the method you\u0027re changing, instead of a higher level method. It will simplify the test. You can have two tests, one for input you would expect it to return True, and another for input you would expect it to return False. You can easily build these tests without using the mock library.","commit_id":"bda9b19d231b0283771aefa150bc75fbd3bd731a"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cc6026ff2e513c4c1b7d918368c09c8d370d5aba","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.tests.unit.plugins.ml2 import test_plugin"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestManagers(test_plugin.Ml2PluginV2TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_bind_port_level_existing(self):"},{"line_number":27,"context_line":"        manager \u003d managers.MechanismManager()"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa0719c6_eb812e4f","line":24,"in_reply_to":"3afc51ec_4ca140a9","updated":"2016-03-21 07:40:57.000000000","message":"Thanks for the suggestion, it has been updated in PS11","commit_id":"bda9b19d231b0283771aefa150bc75fbd3bd731a"}]}
