)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"4fd30b90b483067c98a6af66664188fa0434d1f1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Report /dev/disk/by-path on inspection followup"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is the followup patch for"},{"line_number":10,"context_line":"https://review.openstack.org/#/c/498489 fixing issues"},{"line_number":11,"context_line":"with the unit tests not addressed initially."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Most importantly, this change makes tests that depends"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1f485f77_a847c11d","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":39},"updated":"2017-11-13 07:04:56.000000000","message":"Better to mention commit Id instead.\n\u0027d0a53149f82a3587515a4371f0f4cad8570dc715\u0027","commit_id":"37ce0e2950526d0d924e1188a3c97659d9c99e16"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"91c4966eac970d71c55b7a42d4f984b27cd51358","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Report /dev/disk/by-path on inspection followup"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is the followup patch for"},{"line_number":10,"context_line":"https://review.openstack.org/#/c/498489 fixing issues"},{"line_number":11,"context_line":"with the unit tests not addressed initially."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Most importantly, this change makes tests that depends"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"df87a7cf_7c094793","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":39},"in_reply_to":"1f485f77_a847c11d","updated":"2017-12-05 18:10:28.000000000","message":"Done","commit_id":"37ce0e2950526d0d924e1188a3c97659d9c99e16"}],"ironic_python_agent/hardware.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"7a9cbfc09726d2017ca938b7e0f4272c6b1a43e0","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    except OSError as e:"},{"line_number":133,"context_line":"        LOG.warning(\"Path %(path)s is inaccessible, stable block device \""},{"line_number":134,"context_line":"                    \"names unavailable! \""},{"line_number":135,"context_line":"                    \"Cause: %(error)s\", {\u0027path\u0027: disk_by_path_dir, \u0027error\u0027: e})"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    columns \u003d [\u0027KNAME\u0027, \u0027MODEL\u0027, \u0027SIZE\u0027, \u0027ROTA\u0027, \u0027TYPE\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"df87a7cf_27b02743","line":134,"range":{"start_line":134,"start_character":38,"end_line":134,"end_character":39},"updated":"2017-12-08 22:29:07.000000000","message":"I\u0027m not a fan of exclamation marks in warning messages.\n\nWhat does \"stable block device names unavailable\u0027 mean? Why is it a \"stable block device\"?","commit_id":"8066e86ffbef92868300a5e021f7600934d26ebc"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"4c9dc9bbb9736dd376e17cd3173649bf86e649c2","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    except OSError as e:"},{"line_number":133,"context_line":"        LOG.warning(\"Path %(path)s is inaccessible, stable block device \""},{"line_number":134,"context_line":"                    \"names unavailable! \""},{"line_number":135,"context_line":"                    \"Cause: %(error)s\", {\u0027path\u0027: disk_by_path_dir, \u0027error\u0027: e})"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    columns \u003d [\u0027KNAME\u0027, \u0027MODEL\u0027, \u0027SIZE\u0027, \u0027ROTA\u0027, \u0027TYPE\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"df87a7cf_0c1b6473","line":134,"range":{"start_line":134,"start_character":38,"end_line":134,"end_character":39},"in_reply_to":"df87a7cf_27b02743","updated":"2017-12-13 16:12:26.000000000","message":"Done","commit_id":"8066e86ffbef92868300a5e021f7600934d26ebc"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"0fc220f7d6f7bc57bc99471167f3a591abe13b1c","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            by_path_mapping[devname] \u003d path"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    except OSError as e:"},{"line_number":133,"context_line":"        LOG.warning(\"Path %(path)s is inaccessible, /dev/disk/by-path/* version \""},{"line_number":134,"context_line":"                    \"of block device name is unavailable \""},{"line_number":135,"context_line":"                    \"Cause: %(error)s\", {\u0027path\u0027: disk_by_path_dir, \u0027error\u0027: e})"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_bde5c3de","line":133,"updated":"2017-12-13 18:59:33.000000000","message":"This line is too long. That is why pep8 fails.","commit_id":"922f1a3c799ad9bc444f121a9cd260e30efb970a"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0c33b1f663940f2bc72f5f172e1d32acecd2ae85","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            by_path_mapping[devname] \u003d path"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    except OSError as e:"},{"line_number":133,"context_line":"        LOG.warning(\"Path %(path)s is inaccessible, /dev/disk/by-path/* version \""},{"line_number":134,"context_line":"                    \"of block device name is unavailable \""},{"line_number":135,"context_line":"                    \"Cause: %(error)s\", {\u0027path\u0027: disk_by_path_dir, \u0027error\u0027: e})"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_d73980f2","line":133,"in_reply_to":"df87a7cf_bde5c3de","updated":"2017-12-14 00:13:08.000000000","message":"Done","commit_id":"922f1a3c799ad9bc444f121a9cd260e30efb970a"}],"ironic_python_agent/tests/unit/test_hardware.py":[{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"5b0787d71353d9b058595b08ffec782f010fc0fc","unresolved":false,"context_lines":[{"line_number":946,"context_line":"                                   mocked_dev_vendor, mock_listdir,"},{"line_number":947,"context_line":"                                   mock_readlink):"},{"line_number":948,"context_line":"        by_path_map \u003d {"},{"line_number":949,"context_line":"            \u0027/dev/disk/by-path/1:0:0:0\u0027: \u0027/dev/sda\u0027,"},{"line_number":950,"context_line":"            \u0027/dev/disk/by-path/1:0:0:1\u0027: \u0027/dev/sdb\u0027,"},{"line_number":951,"context_line":"            \u0027/dev/disk/by-path/1:0:0:2\u0027: \u0027/dev/sdc\u0027,"},{"line_number":952,"context_line":"            # pretend that the by-path link to /dev/sdd is missing"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f4b6375_ede3bd05","line":949,"range":{"start_line":949,"start_character":42,"end_line":949,"end_character":50},"updated":"2017-11-08 12:33:54.000000000","message":"@655 this reads ../../sda","commit_id":"a8ff115288006eecc65469e19dd5610f7032c947"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"d2465539022d513c10b139739d39c32c09a65688","unresolved":false,"context_lines":[{"line_number":946,"context_line":"                                   mocked_dev_vendor, mock_listdir,"},{"line_number":947,"context_line":"                                   mock_readlink):"},{"line_number":948,"context_line":"        by_path_map \u003d {"},{"line_number":949,"context_line":"            \u0027/dev/disk/by-path/1:0:0:0\u0027: \u0027/dev/sda\u0027,"},{"line_number":950,"context_line":"            \u0027/dev/disk/by-path/1:0:0:1\u0027: \u0027/dev/sdb\u0027,"},{"line_number":951,"context_line":"            \u0027/dev/disk/by-path/1:0:0:2\u0027: \u0027/dev/sdc\u0027,"},{"line_number":952,"context_line":"            # pretend that the by-path link to /dev/sdd is missing"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f485f77_57400536","line":949,"range":{"start_line":949,"start_character":42,"end_line":949,"end_character":50},"in_reply_to":"3f4b6375_ede3bd05","updated":"2017-11-10 14:29:00.000000000","message":"Done","commit_id":"a8ff115288006eecc65469e19dd5610f7032c947"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"4fd30b90b483067c98a6af66664188fa0434d1f1","unresolved":false,"context_lines":[{"line_number":652,"context_line":"    @mock.patch.object(utils, \u0027execute\u0027, autospec\u003dTrue)"},{"line_number":653,"context_line":"    def test_get_os_install_device(self, mocked_execute, mock_cached_node,"},{"line_number":654,"context_line":"                                   mocked_listdir, mocked_readlink):"},{"line_number":655,"context_line":"        mocked_readlink.return_value \u003d \u0027../../sda\u0027"},{"line_number":656,"context_line":"        mocked_listdir.return_value \u003d [\u00271:0:0:0\u0027]"},{"line_number":657,"context_line":"        mock_cached_node.return_value \u003d None"},{"line_number":658,"context_line":"        mocked_execute.return_value \u003d (BLK_DEVICE_TEMPLATE, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f485f77_e813790c","line":655,"range":{"start_line":655,"start_character":39,"end_line":655,"end_character":49},"updated":"2017-11-13 07:04:56.000000000","message":"Any reason for these device paths getting changed to relative path?","commit_id":"37ce0e2950526d0d924e1188a3c97659d9c99e16"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"91c4966eac970d71c55b7a42d4f984b27cd51358","unresolved":false,"context_lines":[{"line_number":652,"context_line":"    @mock.patch.object(utils, \u0027execute\u0027, autospec\u003dTrue)"},{"line_number":653,"context_line":"    def test_get_os_install_device(self, mocked_execute, mock_cached_node,"},{"line_number":654,"context_line":"                                   mocked_listdir, mocked_readlink):"},{"line_number":655,"context_line":"        mocked_readlink.return_value \u003d \u0027../../sda\u0027"},{"line_number":656,"context_line":"        mocked_listdir.return_value \u003d [\u00271:0:0:0\u0027]"},{"line_number":657,"context_line":"        mock_cached_node.return_value \u003d None"},{"line_number":658,"context_line":"        mocked_execute.return_value \u003d (BLK_DEVICE_TEMPLATE, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_5c79e3f9","line":655,"range":{"start_line":655,"start_character":39,"end_line":655,"end_character":49},"in_reply_to":"1f485f77_e813790c","updated":"2017-12-05 18:10:28.000000000","message":"Well, because this is how the symlinks look like on my Linux system:\n\n$ ls -l /dev/disk/by-path/\nlrwxrwxrwx. 1 root root  9 Dec  4 21:39 pci-0000:00:1f.2-ata-1 -\u003e ../../sda\nlrwxrwxrwx. 1 root root 10 Dec  4 21:39 pci-0000:00:1f.2-ata-1-part1 -\u003e ../../sda1\nlrwxrwxrwx. 1 root root 10 Dec  4 21:39 pci-0000:00:1f.2-ata-1-part2 -\u003e ../../sda2","commit_id":"37ce0e2950526d0d924e1188a3c97659d9c99e16"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"42286771ecd2248528ac0ebd39883edcf0143cce","unresolved":false,"context_lines":[{"line_number":757,"context_line":""},{"line_number":758,"context_line":"    @unittest.skipIf(ironlib_version \u003c\u003d pbr.version.SemanticVersion(2, 10, 0),"},{"line_number":759,"context_line":"                     \u0027This feature is unsupported in this version of \u0027"},{"line_number":760,"context_line":"                     \u0027ironic-lib so the test will be skipped\u0027)"},{"line_number":761,"context_line":"    def test_get_os_install_device_root_device_hints_by_path(self):"},{"line_number":762,"context_line":"        self._get_os_install_device_root_device_hints("},{"line_number":763,"context_line":"            {\u0027by_path\u0027: \u0027/dev/disk/by-path/1:0:0:0\u0027}, \u0027/dev/sdb\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_d29389a2","line":760,"updated":"2017-12-06 11:31:18.000000000","message":"upper-constraints already have ironic-lib 2.11 https://github.com/openstack/requirements/blob/master/upper-constraints.txt#L539 so this can be removed","commit_id":"142d5897158bed86b754156654cdb21cb330cc84"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"ab15f1b54cb4116cd0f2e0be21fe8ad93e1fc2a8","unresolved":false,"context_lines":[{"line_number":757,"context_line":""},{"line_number":758,"context_line":"    @unittest.skipIf(ironlib_version \u003c\u003d pbr.version.SemanticVersion(2, 10, 0),"},{"line_number":759,"context_line":"                     \u0027This feature is unsupported in this version of \u0027"},{"line_number":760,"context_line":"                     \u0027ironic-lib so the test will be skipped\u0027)"},{"line_number":761,"context_line":"    def test_get_os_install_device_root_device_hints_by_path(self):"},{"line_number":762,"context_line":"        self._get_os_install_device_root_device_hints("},{"line_number":763,"context_line":"            {\u0027by_path\u0027: \u0027/dev/disk/by-path/1:0:0:0\u0027}, \u0027/dev/sdb\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_4d2cb898","line":760,"in_reply_to":"df87a7cf_d29389a2","updated":"2017-12-06 12:13:41.000000000","message":"Done","commit_id":"142d5897158bed86b754156654cdb21cb330cc84"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c855ac406a02d6af469d094c98834ac30e76637a","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from ironic_lib import disk_utils"},{"line_number":20,"context_line":"import mock"},{"line_number":21,"context_line":"import netifaces"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from oslo_concurrency import processutils"},{"line_number":24,"context_line":"from oslo_config import cfg"},{"line_number":25,"context_line":"from oslo_utils import units"}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_60c6559d","line":22,"updated":"2017-12-06 21:13:55.000000000","message":"New line unrelated?","commit_id":"af3b4adf3ec0508f47228c72e01613782da87792"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"9792de28d42dae8965fbe54b24877c852f5a0fc9","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from ironic_lib import disk_utils"},{"line_number":20,"context_line":"import mock"},{"line_number":21,"context_line":"import netifaces"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from oslo_concurrency import processutils"},{"line_number":24,"context_line":"from oslo_config import cfg"},{"line_number":25,"context_line":"from oslo_utils import units"}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_d1ddb514","line":22,"in_reply_to":"df87a7cf_60c6559d","updated":"2017-12-06 23:44:35.000000000","message":"Done","commit_id":"af3b4adf3ec0508f47228c72e01613782da87792"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c855ac406a02d6af469d094c98834ac30e76637a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from oslo_concurrency import processutils"},{"line_number":24,"context_line":"from oslo_config import cfg"},{"line_number":25,"context_line":"from oslo_utils import units"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"import pyudev"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from stevedore import extension"}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_80c11983","line":26,"updated":"2017-12-06 21:13:55.000000000","message":"Ditto","commit_id":"af3b4adf3ec0508f47228c72e01613782da87792"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"9792de28d42dae8965fbe54b24877c852f5a0fc9","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from oslo_concurrency import processutils"},{"line_number":24,"context_line":"from oslo_config import cfg"},{"line_number":25,"context_line":"from oslo_utils import units"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"import pyudev"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from stevedore import extension"}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_71f5c982","line":26,"in_reply_to":"df87a7cf_80c11983","updated":"2017-12-06 23:44:35.000000000","message":"Done","commit_id":"af3b4adf3ec0508f47228c72e01613782da87792"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c855ac406a02d6af469d094c98834ac30e76637a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from oslo_utils import units"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"import pyudev"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from stevedore import extension"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from ironic_python_agent import errors"}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_20c04d7b","line":28,"updated":"2017-12-06 21:13:55.000000000","message":"ditto","commit_id":"af3b4adf3ec0508f47228c72e01613782da87792"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"9792de28d42dae8965fbe54b24877c852f5a0fc9","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from oslo_utils import units"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"import pyudev"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from stevedore import extension"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from ironic_python_agent import errors"}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_31ef41b1","line":28,"in_reply_to":"df87a7cf_20c04d7b","updated":"2017-12-06 23:44:35.000000000","message":"Done","commit_id":"af3b4adf3ec0508f47228c72e01613782da87792"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c855ac406a02d6af469d094c98834ac30e76637a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from ironic_python_agent import hardware"},{"line_number":33,"context_line":"from ironic_python_agent.tests.unit import base"},{"line_number":34,"context_line":"from ironic_python_agent import utils"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"CONF \u003d cfg.CONF"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_6022d554","line":35,"updated":"2017-12-06 21:13:55.000000000","message":"It looks like the standards did not change, so I\u0027m slightly confused.\n\nhttps://docs.openstack.org/hacking/latest/user/hacking.html#imports","commit_id":"af3b4adf3ec0508f47228c72e01613782da87792"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"9792de28d42dae8965fbe54b24877c852f5a0fc9","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from ironic_python_agent import hardware"},{"line_number":33,"context_line":"from ironic_python_agent.tests.unit import base"},{"line_number":34,"context_line":"from ironic_python_agent import utils"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"CONF \u003d cfg.CONF"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_d17935fc","line":35,"in_reply_to":"df87a7cf_6022d554","updated":"2017-12-06 23:44:35.000000000","message":"I can\u0027t help but suspect that my IDE accidentally re-formated the imports. %-/","commit_id":"af3b4adf3ec0508f47228c72e01613782da87792"}]}
