)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13997,"name":"SHIGEMATSU Mitsuhiro","email":"shigematsu.mitsuhiro@lab.ntt.co.jp","username":"pshige"},"change_message_id":"303d1056b5fbcd6f38330d8e4dc5c5558ede2b13","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Refactor list_all_block_devices()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Put the columns to retrieve from lsblk into a list so that future"},{"line_number":10,"context_line":"modificatons to columns will require fewer code changes."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Update unit tests"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da20952f_f49123f2","line":10,"updated":"2015-08-29 17:46:51.000000000","message":"s/modificatons/modifications/","commit_id":"f980a09b3f969604ec03f39687c868a0364139b2"}],"ironic_python_agent/hardware.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d45676527acbb1ae844833595dd62cf3cec22fcd","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    :return: A list of BlockDevices"},{"line_number":53,"context_line":"    \"\"\""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    columns \u003d [\u0027KNAME\u0027, \u0027MODEL\u0027, \u0027SIZE\u0027, \u0027ROTA\u0027, \u0027TYPE\u0027]"},{"line_number":56,"context_line":"    report \u003d utils.execute(\u0027lsblk\u0027, \u0027-Pbdi\u0027, \u0027-o{}\u0027.format(\u0027,\u0027.join(columns)),"},{"line_number":57,"context_line":"                           check_exit_code\u003d[0])[0]"},{"line_number":58,"context_line":"    lines \u003d report.split(\u0027\\n\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_e10b152a","line":55,"updated":"2015-09-02 06:44:31.000000000","message":"nit: this could be a top-level constant, so that we don\u0027t build this list every time. you can even make joined string a constant.","commit_id":"046becfd37b25f29136b042d1a3bdb672b72c499"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"0564c782ac5bfa12051bc4644550c64cf73b4418","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    :return: A list of BlockDevices"},{"line_number":53,"context_line":"    \"\"\""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    columns \u003d [\u0027KNAME\u0027, \u0027MODEL\u0027, \u0027SIZE\u0027, \u0027ROTA\u0027, \u0027TYPE\u0027]"},{"line_number":56,"context_line":"    report \u003d utils.execute(\u0027lsblk\u0027, \u0027-Pbdi\u0027, \u0027-o{}\u0027.format(\u0027,\u0027.join(columns)),"},{"line_number":57,"context_line":"                           check_exit_code\u003d[0])[0]"},{"line_number":58,"context_line":"    lines \u003d report.split(\u0027\\n\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_927e40ad","line":55,"in_reply_to":"da20952f_e10b152a","updated":"2015-09-24 21:01:45.000000000","message":"I\u0027d rather leave it here, as I think it makes the code more readable","commit_id":"046becfd37b25f29136b042d1a3bdb672b72c499"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d45676527acbb1ae844833595dd62cf3cec22fcd","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        for key, val in (v.split(\u0027\u003d\u0027, 1) for v in vals):"},{"line_number":66,"context_line":"            device[key] \u003d val.strip()"},{"line_number":67,"context_line":"        # Ignore non disk"},{"line_number":68,"context_line":"        if device.get(\u0027TYPE\u0027) !\u003d \u0027disk\u0027:"},{"line_number":69,"context_line":"            continue"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        # Ensure all required columns are at least present, even if blank"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_01096931","line":68,"updated":"2015-09-02 06:44:31.000000000","message":"I would if we should eventually make this configurable, like list_block_devices(type\u003d\u0027foobar\u0027)","commit_id":"046becfd37b25f29136b042d1a3bdb672b72c499"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"0564c782ac5bfa12051bc4644550c64cf73b4418","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        for key, val in (v.split(\u0027\u003d\u0027, 1) for v in vals):"},{"line_number":66,"context_line":"            device[key] \u003d val.strip()"},{"line_number":67,"context_line":"        # Ignore non disk"},{"line_number":68,"context_line":"        if device.get(\u0027TYPE\u0027) !\u003d \u0027disk\u0027:"},{"line_number":69,"context_line":"            continue"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        # Ensure all required columns are at least present, even if blank"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_f243fc6a","line":68,"in_reply_to":"da20952f_01096931","updated":"2015-09-24 21:01:45.000000000","message":"Done","commit_id":"046becfd37b25f29136b042d1a3bdb672b72c499"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"272481f42ed01fd284331238c603323bb3d171cc","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            continue"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        # Ensure all required columns are at least present, even if blank"},{"line_number":72,"context_line":"        missing \u003d set(columns) - set(device.keys())"},{"line_number":73,"context_line":"        if missing:"},{"line_number":74,"context_line":"            raise errors.BlockDeviceError("},{"line_number":75,"context_line":"                \u0027%s must be returned by lsblk.\u0027 % \u0027, \u0027.join(missing))"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_6fdb47ee","line":72,"updated":"2015-09-02 21:35:19.000000000","message":"\u0027TYPE\u0027 is now being checked too. Which is a change in behavior. Shouldn\u0027t it be mentioned in the commit? I won\u0027t ask for a bug :-)","commit_id":"046becfd37b25f29136b042d1a3bdb672b72c499"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d45676527acbb1ae844833595dd62cf3cec22fcd","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            continue"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        # Ensure all required columns are at least present, even if blank"},{"line_number":72,"context_line":"        missing \u003d set(columns) - set(device.keys())"},{"line_number":73,"context_line":"        if missing:"},{"line_number":74,"context_line":"            raise errors.BlockDeviceError("},{"line_number":75,"context_line":"                \u0027%s must be returned by lsblk.\u0027 % \u0027, \u0027.join(missing))"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_a1051d15","line":72,"updated":"2015-09-02 06:44:31.000000000","message":"nit: .keys() is redundant","commit_id":"046becfd37b25f29136b042d1a3bdb672b72c499"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"0564c782ac5bfa12051bc4644550c64cf73b4418","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            continue"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        # Ensure all required columns are at least present, even if blank"},{"line_number":72,"context_line":"        missing \u003d set(columns) - set(device.keys())"},{"line_number":73,"context_line":"        if missing:"},{"line_number":74,"context_line":"            raise errors.BlockDeviceError("},{"line_number":75,"context_line":"                \u0027%s must be returned by lsblk.\u0027 % \u0027, \u0027.join(missing))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_b25ee443","line":72,"in_reply_to":"da20952f_6fdb47ee","updated":"2015-09-24 21:01:45.000000000","message":"True, but if TYPE didn\u0027t exist the code would not get here because of L68-69","commit_id":"046becfd37b25f29136b042d1a3bdb672b72c499"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"0564c782ac5bfa12051bc4644550c64cf73b4418","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            continue"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        # Ensure all required columns are at least present, even if blank"},{"line_number":72,"context_line":"        missing \u003d set(columns) - set(device.keys())"},{"line_number":73,"context_line":"        if missing:"},{"line_number":74,"context_line":"            raise errors.BlockDeviceError("},{"line_number":75,"context_line":"                \u0027%s must be returned by lsblk.\u0027 % \u0027, \u0027.join(missing))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a1a9d01_9255e01e","line":72,"in_reply_to":"da20952f_a1051d15","updated":"2015-09-24 21:01:45.000000000","message":"Done","commit_id":"046becfd37b25f29136b042d1a3bdb672b72c499"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cf17c8f29923229e298c68fd610fea8fa89b4ae2","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        for key, val in (v.split(\u0027\u003d\u0027, 1) for v in vals):"},{"line_number":78,"context_line":"            device[key] \u003d val.strip()"},{"line_number":79,"context_line":"        # Ignore block types not specified"},{"line_number":80,"context_line":"        if device.get(\u0027TYPE\u0027) !\u003d block_type:"},{"line_number":81,"context_line":"            continue"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # Ensure all required columns are at least present, even if blank"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a1a9d01_53a40107","line":80,"updated":"2015-10-02 15:58:32.000000000","message":"nit: maybe LOG.debug here?","commit_id":"3af9ab36bfae3a369fdb3d2b6d02ac803c39ee17"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"a0b5463bb5fd8384fe4806dfe3804cf76e03a100","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        for key, val in (v.split(\u0027\u003d\u0027, 1) for v in vals):"},{"line_number":78,"context_line":"            device[key] \u003d val.strip()"},{"line_number":79,"context_line":"        # Ignore block types not specified"},{"line_number":80,"context_line":"        if device.get(\u0027TYPE\u0027) !\u003d block_type:"},{"line_number":81,"context_line":"            continue"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # Ensure all required columns are at least present, even if blank"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a1a9d01_df34934b","line":80,"in_reply_to":"9a1a9d01_53a40107","updated":"2015-10-02 16:26:35.000000000","message":"If I need to re-spin, I will add it.\n\nOtherwise I\u0027ll do it in a follow-up patch.","commit_id":"3af9ab36bfae3a369fdb3d2b6d02ac803c39ee17"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cf17c8f29923229e298c68fd610fea8fa89b4ae2","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        missing \u003d set(columns) - set(device)"},{"line_number":85,"context_line":"        if missing:"},{"line_number":86,"context_line":"            raise errors.BlockDeviceError("},{"line_number":87,"context_line":"                \u0027%s must be returned by lsblk.\u0027 % \u0027, \u0027.join(sorted(missing)))"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        name \u003d \u0027/dev/\u0027 + device[\u0027KNAME\u0027]"},{"line_number":90,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a1a9d01_73a905df","line":87,"updated":"2015-10-02 15:58:32.000000000","message":"nit: sorted is nice, but I guess we don\u0027t really need it","commit_id":"3af9ab36bfae3a369fdb3d2b6d02ac803c39ee17"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"dd87261789b08dcd7473f3c2674ccb97d2933a06","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        missing \u003d set(columns) - set(device)"},{"line_number":85,"context_line":"        if missing:"},{"line_number":86,"context_line":"            raise errors.BlockDeviceError("},{"line_number":87,"context_line":"                \u0027%s must be returned by lsblk.\u0027 % \u0027, \u0027.join(sorted(missing)))"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        name \u003d \u0027/dev/\u0027 + device[\u0027KNAME\u0027]"},{"line_number":90,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a1a9d01_13a3e99f","line":87,"in_reply_to":"9a1a9d01_73a905df","updated":"2015-10-02 16:04:17.000000000","message":"It was to make the unit tests work correctly.","commit_id":"3af9ab36bfae3a369fdb3d2b6d02ac803c39ee17"}],"ironic_python_agent/tests/unit/test_hardware.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"278f5551e3ee2f89c0bee4c8361e63bef4b657b6","unresolved":false,"context_lines":[{"line_number":835,"context_line":"        self.assertRaisesRegexp("},{"line_number":836,"context_line":"            errors.BlockDeviceError,"},{"line_number":837,"context_line":"            r\u0027^Block device caused unknown error: KNAME, ROTA, SIZE must be \u0027"},{"line_number":838,"context_line":"            r\u0027returned by lsblk.$\u0027,"},{"line_number":839,"context_line":"            hardware.list_all_block_devices)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a1a9d01_dbb0e845","line":838,"updated":"2015-09-28 20:27:36.000000000","message":"I\u0027m not familiar with how ipa is set up. Are the unit tests all in English and is it \u0027normal\u0027 to test for strings like this? (vs eg seeing if KNAME, ROTA, SIZE are in the string.)","commit_id":"3af9ab36bfae3a369fdb3d2b6d02ac803c39ee17"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"73a3139f7b6556e47356abec9407ad825eedf70f","unresolved":false,"context_lines":[{"line_number":835,"context_line":"        self.assertRaisesRegexp("},{"line_number":836,"context_line":"            errors.BlockDeviceError,"},{"line_number":837,"context_line":"            r\u0027^Block device caused unknown error: KNAME, ROTA, SIZE must be \u0027"},{"line_number":838,"context_line":"            r\u0027returned by lsblk.$\u0027,"},{"line_number":839,"context_line":"            hardware.list_all_block_devices)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a1a9d01_6da241ff","line":838,"in_reply_to":"9a1a9d01_dbb0e845","updated":"2015-09-28 21:46:24.000000000","message":"From what I know IPA only runs under English. It doesn\u0027t have any I18N support.\n\nI\u0027m not sure if it is \u0027normal\u0027 for IPA. I wanted to do it to make sure that the string formatting is setup correctly. I have seen bugs [1] where messages are not formatted correctly but nobody noticed because it happens so rarely. So I think it improves the code to check and make sure the message is produced as expected.\n\nChange-Id: Ib1649511b2613bc1a8ba52398543be0fdfefb8db","commit_id":"3af9ab36bfae3a369fdb3d2b6d02ac803c39ee17"}]}
