)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"044c11b7ce2d4d1bc602495fb4b5a0c0bb3bb42c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"underlying zvmsdk to generate the image"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I0409aba55487e92efa6370eed41936bf8a4ef25d"},{"line_number":13,"context_line":"blueprint: add-zvm-driver-rocky"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"9f6a8fd7_2540b456","line":13,"updated":"2018-04-17 12:17:00.000000000","message":"nit:\n\n  Implements: blueprint add-zvm-driver-rocky","commit_id":"c558e6b32fc665d88778c14469e2a9407aac6e59"}],"nova/tests/unit/virt/zvm/test_driver.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6b9bee62960b84ce589af93c1c22292de97e4cd4","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    @mock.patch.object(builtins, \u0027open\u0027)"},{"line_number":447,"context_line":"    @mock.patch(\u0027nova.virt.zvm.driver.ZVMDriver._get_host\u0027)"},{"line_number":448,"context_line":"    @mock.patch(\u0027nova.image.glance.get_remote_image_service\u0027, )"},{"line_number":449,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.zVMConnectorRequestHandler.call\u0027)"},{"line_number":450,"context_line":"    def test_snapshot(self, call, get_image_service, get_host, mock_open):"},{"line_number":451,"context_line":"        image_service \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_b55fd73f","line":448,"range":{"start_line":448,"start_character":60,"end_line":448,"end_character":62},"updated":"2018-03-21 20:50:43.000000000","message":"strike","commit_id":"9252c71e55f33c9a7adf93492df677d5153b1f62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"edae8c7f76a550c1e35e2e7d821c986ed0e1cad0","unresolved":false,"context_lines":[{"line_number":478,"context_line":"                             self.mock_update_task_state)"},{"line_number":479,"context_line":"        get_image_service.assert_called_with(self._context, image_id)"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"        call.assert_any_call(\u0027guest_capture\u0027,"},{"line_number":482,"context_line":"                             self._instance[\u0027name\u0027], image_id)"},{"line_number":483,"context_line":"        mock_open.assert_called_once_with(image_path, \u0027r\u0027)"},{"line_number":484,"context_line":"        image_service.update.assert_called_once_with(self._context,"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_105a5129","line":481,"range":{"start_line":481,"start_character":13,"end_line":481,"end_character":28},"updated":"2018-03-21 20:54:55.000000000","message":"I\u0027m mildly offended by these assert_any_call()s.  We should be able to assert all the calls, in the proper order, with assert_has_calls.","commit_id":"9252c71e55f33c9a7adf93492df677d5153b1f62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6b9bee62960b84ce589af93c1c22292de97e4cd4","unresolved":false,"context_lines":[{"line_number":481,"context_line":"        call.assert_any_call(\u0027guest_capture\u0027,"},{"line_number":482,"context_line":"                             self._instance[\u0027name\u0027], image_id)"},{"line_number":483,"context_line":"        mock_open.assert_called_once_with(image_path, \u0027r\u0027)"},{"line_number":484,"context_line":"        image_service.update.assert_called_once_with(self._context,"},{"line_number":485,"context_line":"                                                     image_id,"},{"line_number":486,"context_line":"                                                     new_image_meta,"},{"line_number":487,"context_line":"        mock_open.return_value.__enter__.return_value,"},{"line_number":488,"context_line":"                                                     purge_props\u003dFalse)"},{"line_number":489,"context_line":"        call.assert_any_call(\u0027image_export\u0027, image_id, dest_path,"},{"line_number":490,"context_line":"                             remote_host\u003dhost_info)"},{"line_number":491,"context_line":"        call.assert_any_call(\u0027image_delete\u0027, image_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_351ae77c","line":488,"range":{"start_line":484,"start_character":8,"end_line":488,"end_character":71},"updated":"2018-03-21 20:50:43.000000000","message":"fix formatting here","commit_id":"9252c71e55f33c9a7adf93492df677d5153b1f62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6b9bee62960b84ce589af93c1c22292de97e4cd4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"df7087c5_554f5b91","line":492,"updated":"2018-03-21 20:50:43.000000000","message":"We\u0027re missing tests on the exception paths.\n\nAlso, this test (and the ones you add) should assert that the temp file is gone.","commit_id":"9252c71e55f33c9a7adf93492df677d5153b1f62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4b24902a50b17f17b1fe3eafefcb007373bd4a84","unresolved":false,"context_lines":[{"line_number":334,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorClient.call\u0027)"},{"line_number":335,"context_line":"    def test_snapshot(self, call, get_image_service, mock_open):"},{"line_number":336,"context_line":"        image_service \u003d mock.Mock()"},{"line_number":337,"context_line":"        image_id \u003d \u0027e9ee1562-3ea1-4cb1-9f4c-f2033000eab1\u0027"},{"line_number":338,"context_line":"        get_image_service.return_value \u003d (image_service, image_id)"},{"line_number":339,"context_line":"        call_resp \u003d [\u0027\u0027, {\"os_version\": \"rhel7.2\","},{"line_number":340,"context_line":"                          \"dest_url\": \"file:///path/to/target\"}, \u0027\u0027]"}],"source_content_type":"text/x-python","patch_set":53,"id":"5f7c97a3_81a579b7","line":337,"range":{"start_line":337,"start_character":19,"end_line":337,"end_character":57},"updated":"2018-06-11 18:22:11.000000000","message":"can you use a uuidsentinel here?\n\n(throughout)","commit_id":"1653b7c637d56927206f1c044d80e30d1cfebbed"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4b24902a50b17f17b1fe3eafefcb007373bd4a84","unresolved":false,"context_lines":[{"line_number":335,"context_line":"    def test_snapshot(self, call, get_image_service, mock_open):"},{"line_number":336,"context_line":"        image_service \u003d mock.Mock()"},{"line_number":337,"context_line":"        image_id \u003d \u0027e9ee1562-3ea1-4cb1-9f4c-f2033000eab1\u0027"},{"line_number":338,"context_line":"        get_image_service.return_value \u003d (image_service, image_id)"},{"line_number":339,"context_line":"        call_resp \u003d [\u0027\u0027, {\"os_version\": \"rhel7.2\","},{"line_number":340,"context_line":"                          \"dest_url\": \"file:///path/to/target\"}, \u0027\u0027]"},{"line_number":341,"context_line":"        call.side_effect \u003d call_resp"}],"source_content_type":"text/x-python","patch_set":53,"id":"5f7c97a3_61893d24","line":338,"range":{"start_line":338,"start_character":41,"end_line":338,"end_character":66},"updated":"2018-06-11 18:22:11.000000000","message":"nit: parens redundant\n\n(throughout)","commit_id":"1653b7c637d56927206f1c044d80e30d1cfebbed"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4b24902a50b17f17b1fe3eafefcb007373bd4a84","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        get_image_service.assert_called_with(self._context, image_id)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        mock_open.assert_called_once_with(image_path, \u0027r\u0027)"},{"line_number":365,"context_line":"        ret_file \u003d mock_open.return_value.__enter__.return_value"},{"line_number":366,"context_line":"        image_service.update.assert_called_once_with(self._context,"},{"line_number":367,"context_line":"                                                     image_id,"},{"line_number":368,"context_line":"                                                     new_image_meta,"}],"source_content_type":"text/x-python","patch_set":53,"id":"5f7c97a3_612a9de7","line":365,"range":{"start_line":365,"start_character":19,"end_line":365,"end_character":64},"updated":"2018-06-11 18:22:11.000000000","message":"There\u0027s some kind of mock.mock_open that\u0027s supposed to make this easier.  I\u0027m not completely clear on how to use it, though, and this makes enough sense to me.\n\nhttps://docs.python.org/3.3/library/unittest.mock.html#mock-open","commit_id":"1653b7c637d56927206f1c044d80e30d1cfebbed"}],"nova/tests/unit/virt/zvm/test_guest.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"044c11b7ce2d4d1bc602495fb4b5a0c0bb3bb42c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import copy"},{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from nova.compute import power_state as compute_power_state"},{"line_number":21,"context_line":"from nova import conf"}],"source_content_type":"text/x-python","patch_set":29,"id":"9f6a8fd7_8592e0f5","line":18,"range":{"start_line":15,"start_character":0,"end_line":18,"end_character":10},"updated":"2018-04-17 12:17:00.000000000","message":"It should be as follows:\n\n  import copy\n  import os\n\n  import mock\n  import six\n\nSee https://docs.openstack.org/hacking/latest/user/hacking.html#imports .","commit_id":"c558e6b32fc665d88778c14469e2a9407aac6e59"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"044c11b7ce2d4d1bc602495fb4b5a0c0bb3bb42c","unresolved":false,"context_lines":[{"line_number":309,"context_line":"    @mock.patch(\u0027nova.virt.zvm.utils.ConnectorClient.call\u0027)"},{"line_number":310,"context_line":"    def test_snapshot(self, call, get_image_service, mock_open):"},{"line_number":311,"context_line":"        image_service \u003d mock.Mock()"},{"line_number":312,"context_line":"        image_id \u003d \u0027e9ee1562-3ea1-4cb1-9f4c-f2033000eab1\u0027"},{"line_number":313,"context_line":"        get_image_service.return_value \u003d (image_service, image_id)"},{"line_number":314,"context_line":"        call_resp \u003d [\u0027\u0027, {\"os_version\": \"rhel7.2\","},{"line_number":315,"context_line":"                          \"dest_url\": \"file:///path/to/target\"}, \u0027\u0027]"}],"source_content_type":"text/x-python","patch_set":29,"id":"9f6a8fd7_e80ff12b","line":312,"range":{"start_line":312,"start_character":8,"end_line":312,"end_character":57},"updated":"2018-04-17 12:17:00.000000000","message":"nit: Why not use uuidsentinel?\nThe uuidsentinel is used in nova/tests/unit/virt/zvm/test_driver.py.","commit_id":"c558e6b32fc665d88778c14469e2a9407aac6e59"}],"nova/tests/unit/virt/zvm/test_guestop.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec7d26be608236cbe482035d72d894bbe33e6158","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        dest_path \u003d \"file://\" + image_path"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        self._guest.snapshot(self._context, image_id,"},{"line_number":369,"context_line":"                             self.mock_update_task_state)"},{"line_number":370,"context_line":"        get_image_service.assert_called_with(self._context, image_id)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        call.assert_any_call(\u0027guest_capture\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_1e5a704f","line":369,"range":{"start_line":369,"start_character":29,"end_line":369,"end_character":56},"updated":"2018-04-09 20:46:41.000000000","message":"assert calls on this guy.","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"452344b07087abac6d65ad1d1363da7a6a43659b","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        dest_path \u003d \"file://\" + image_path"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        self._guest.snapshot(self._context, image_id,"},{"line_number":369,"context_line":"                             self.mock_update_task_state)"},{"line_number":370,"context_line":"        get_image_service.assert_called_with(self._context, image_id)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        call.assert_any_call(\u0027guest_capture\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_1d600fcf","line":369,"range":{"start_line":369,"start_character":29,"end_line":369,"end_character":56},"in_reply_to":"bf659307_1e5a704f","updated":"2018-04-11 06:50:42.000000000","message":"Done","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec7d26be608236cbe482035d72d894bbe33e6158","unresolved":false,"context_lines":[{"line_number":369,"context_line":"                             self.mock_update_task_state)"},{"line_number":370,"context_line":"        get_image_service.assert_called_with(self._context, image_id)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        call.assert_any_call(\u0027guest_capture\u0027,"},{"line_number":373,"context_line":"                             self._instance[\u0027name\u0027], image_id)"},{"line_number":374,"context_line":"        mock_open.assert_called_once_with(image_path, \u0027r\u0027)"},{"line_number":375,"context_line":"        file \u003d mock_open.return_value.__enter__.return_value"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_3c765da6","line":372,"range":{"start_line":372,"start_character":13,"end_line":372,"end_character":28},"updated":"2018-04-09 20:46:41.000000000","message":"similar comments to previous patch: assert all of .call\u0027s calls in order.","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"452344b07087abac6d65ad1d1363da7a6a43659b","unresolved":false,"context_lines":[{"line_number":369,"context_line":"                             self.mock_update_task_state)"},{"line_number":370,"context_line":"        get_image_service.assert_called_with(self._context, image_id)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        call.assert_any_call(\u0027guest_capture\u0027,"},{"line_number":373,"context_line":"                             self._instance[\u0027name\u0027], image_id)"},{"line_number":374,"context_line":"        mock_open.assert_called_once_with(image_path, \u0027r\u0027)"},{"line_number":375,"context_line":"        file \u003d mock_open.return_value.__enter__.return_value"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_fda0bbf6","line":372,"range":{"start_line":372,"start_character":13,"end_line":372,"end_character":28},"in_reply_to":"bf659307_3c765da6","updated":"2018-04-11 06:50:42.000000000","message":"Done","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec7d26be608236cbe482035d72d894bbe33e6158","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        call.assert_any_call(\u0027guest_capture\u0027,"},{"line_number":373,"context_line":"                             self._instance[\u0027name\u0027], image_id)"},{"line_number":374,"context_line":"        mock_open.assert_called_once_with(image_path, \u0027r\u0027)"},{"line_number":375,"context_line":"        file \u003d mock_open.return_value.__enter__.return_value"},{"line_number":376,"context_line":"        image_service.update.assert_called_once_with(self._context,"},{"line_number":377,"context_line":"                                                     image_id,"},{"line_number":378,"context_line":"                                                     new_image_meta,"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_dc0de135","line":375,"range":{"start_line":375,"start_character":8,"end_line":375,"end_character":12},"updated":"2018-04-09 20:46:41.000000000","message":"`file` is a builtin; suggest using a different var name","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"452344b07087abac6d65ad1d1363da7a6a43659b","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        call.assert_any_call(\u0027guest_capture\u0027,"},{"line_number":373,"context_line":"                             self._instance[\u0027name\u0027], image_id)"},{"line_number":374,"context_line":"        mock_open.assert_called_once_with(image_path, \u0027r\u0027)"},{"line_number":375,"context_line":"        file \u003d mock_open.return_value.__enter__.return_value"},{"line_number":376,"context_line":"        image_service.update.assert_called_once_with(self._context,"},{"line_number":377,"context_line":"                                                     image_id,"},{"line_number":378,"context_line":"                                                     new_image_meta,"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_9da17ffa","line":375,"range":{"start_line":375,"start_character":8,"end_line":375,"end_character":12},"in_reply_to":"bf659307_dc0de135","updated":"2018-04-11 06:50:42.000000000","message":"Done","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec7d26be608236cbe482035d72d894bbe33e6158","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"bf659307_fe0c5c43","line":384,"updated":"2018-04-09 20:46:41.000000000","message":"add tests for exception paths:\n\n- guest_capture\n- image_export\n- image_service.update","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"452344b07087abac6d65ad1d1363da7a6a43659b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"bf659307_5daf67e2","line":384,"in_reply_to":"bf659307_fe0c5c43","updated":"2018-04-11 06:50:42.000000000","message":"ok, will add those kind of test, thanks","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"}],"nova/virt/zvm/driver.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6b9bee62960b84ce589af93c1c22292de97e4cd4","unresolved":false,"context_lines":[{"line_number":354,"context_line":"    def snapshot(self, context, instance, image_id, update_task_state):"},{"line_number":355,"context_line":"        \"\"\"Create snapshot from a running VM instance."},{"line_number":356,"context_line":"        \"\"\""},{"line_number":357,"context_line":"        (image_service, image_id) \u003d glance.get_remote_image_service("},{"line_number":358,"context_line":"                                                    context, image_id)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        # Update the instance task_state to image_pending_upload"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_35b8a7c6","line":357,"range":{"start_line":357,"start_character":8,"end_line":357,"end_character":33},"updated":"2018-03-21 20:50:43.000000000","message":"parens redundant","commit_id":"9252c71e55f33c9a7adf93492df677d5153b1f62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6b9bee62960b84ce589af93c1c22292de97e4cd4","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        (image_service, image_id) \u003d glance.get_remote_image_service("},{"line_number":358,"context_line":"                                                    context, image_id)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        # Update the instance task_state to image_pending_upload"},{"line_number":361,"context_line":"        update_task_state(task_state\u003dtask_states.IMAGE_PENDING_UPLOAD)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_f5b1cfe2","line":360,"range":{"start_line":360,"start_character":8,"end_line":360,"end_character":64},"updated":"2018-03-21 20:50:43.000000000","message":"Not a hugely helpful comment :)","commit_id":"9252c71e55f33c9a7adf93492df677d5153b1f62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6b9bee62960b84ce589af93c1c22292de97e4cd4","unresolved":false,"context_lines":[{"line_number":364,"context_line":"            self._reqh.call(\u0027guest_capture\u0027, instance[\u0027name\u0027], image_id)"},{"line_number":365,"context_line":"        except Exception as err:"},{"line_number":366,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":367,"context_line":"                LOG.error(_(\"Failed to capture the instance %(instance)s \""},{"line_number":368,"context_line":"                            \"to generate an image with reason: %(err)s\"),"},{"line_number":369,"context_line":"                          {\u0027instance\u0027: instance[\u0027name\u0027], \u0027err\u0027: err},"},{"line_number":370,"context_line":"                           instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_d5c60b4a","line":367,"range":{"start_line":367,"start_character":26,"end_line":367,"end_character":27},"updated":"2018-03-21 20:50:43.000000000","message":"Don\u0027t translate log messages","commit_id":"9252c71e55f33c9a7adf93492df677d5153b1f62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6b9bee62960b84ce589af93c1c22292de97e4cd4","unresolved":false,"context_lines":[{"line_number":371,"context_line":"                # Clean up the image from glance"},{"line_number":372,"context_line":"                image_service.delete(context, image_id)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        # Export the image to nova-compute server temporary"},{"line_number":375,"context_line":"        image_path \u003d os.path.join(os.path.normpath("},{"line_number":376,"context_line":"                            CONF.zvm.image_tmp_path), image_id)"},{"line_number":377,"context_line":"        dest_path \u003d \"file://\" + image_path"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_b5d037f9","line":374,"range":{"start_line":374,"start_character":50,"end_line":374,"end_character":59},"updated":"2018-03-21 20:50:43.000000000","message":"temporarily?","commit_id":"9252c71e55f33c9a7adf93492df677d5153b1f62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6b9bee62960b84ce589af93c1c22292de97e4cd4","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                LOG.error(_(\"Failed to export image %s from SDK server to \""},{"line_number":385,"context_line":"                            \"nova compute server\"), image_id)"},{"line_number":386,"context_line":"                image_service.delete(context, image_id)"},{"line_number":387,"context_line":"                self._reqh.call(\u0027image_delete\u0027, image_id)"},{"line_number":388,"context_line":"        # Save image to glance"},{"line_number":389,"context_line":"        new_image_meta \u003d {"},{"line_number":390,"context_line":"            \u0027is_public\u0027: False,"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_b58837c6","line":387,"updated":"2018-03-21 20:50:43.000000000","message":"Are we guaranteed that the above will delete the file at image_path if it got created?  If so, I would feel better if there was a comment to that effect.  If not, there should be code to delete it.","commit_id":"9252c71e55f33c9a7adf93492df677d5153b1f62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6b9bee62960b84ce589af93c1c22292de97e4cd4","unresolved":false,"context_lines":[{"line_number":415,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":416,"context_line":"                image_service.delete(context, image_id)"},{"line_number":417,"context_line":"        finally:"},{"line_number":418,"context_line":"            self._pathutils.clean_up_file(image_path)"},{"line_number":419,"context_line":"            self._reqh.call(\u0027image_delete\u0027, image_id)"},{"line_number":420,"context_line":"        LOG.debug(\"Snapshot image upload complete\", instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_55c19be3","line":418,"range":{"start_line":418,"start_character":12,"end_line":418,"end_character":53},"updated":"2018-03-21 20:50:43.000000000","message":"like this","commit_id":"9252c71e55f33c9a7adf93492df677d5153b1f62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec7d26be608236cbe482035d72d894bbe33e6158","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"from oslo_serialization import jsonutils"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_3c289d84","line":15,"updated":"2018-04-09 20:46:41.000000000","message":"unrelated","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"452344b07087abac6d65ad1d1363da7a6a43659b","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"from oslo_serialization import jsonutils"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_222b7295","line":15,"in_reply_to":"bf659307_3c289d84","updated":"2018-04-11 06:50:42.000000000","message":"Done","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec7d26be608236cbe482035d72d894bbe33e6158","unresolved":false,"context_lines":[{"line_number":126,"context_line":"    def get_host_uptime(self):"},{"line_number":127,"context_line":"        return self._hypervisor.get_host_uptime()"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def snapshot(self, context, instance, image_id, update_task_state):"},{"line_number":130,"context_line":"        _guest \u003d guest.Guest(self._hypervisor, instance)"},{"line_number":131,"context_line":"        _guest.snapshot(context, image_id, update_task_state)"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_9c30c9ea","line":131,"range":{"start_line":129,"start_character":0,"end_line":131,"end_character":61},"updated":"2018-04-09 20:46:41.000000000","message":"Again, UT for this method (even though it would be trivial)","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"452344b07087abac6d65ad1d1363da7a6a43659b","unresolved":false,"context_lines":[{"line_number":126,"context_line":"    def get_host_uptime(self):"},{"line_number":127,"context_line":"        return self._hypervisor.get_host_uptime()"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def snapshot(self, context, instance, image_id, update_task_state):"},{"line_number":130,"context_line":"        _guest \u003d guest.Guest(self._hypervisor, instance)"},{"line_number":131,"context_line":"        _guest.snapshot(context, image_id, update_task_state)"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_4228e695","line":131,"range":{"start_line":129,"start_character":0,"end_line":131,"end_character":61},"in_reply_to":"bf659307_9c30c9ea","updated":"2018-04-11 06:50:42.000000000","message":"ok, will add","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"8a29091f60122ce6350c3da9cd6253f013a966a8","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def snapshot(self, context, instance, image_id, update_task_state):"},{"line_number":124,"context_line":"        _guest \u003d guest.Guest(self._hypervisor, instance)"},{"line_number":125,"context_line":"        _guest.snapshot(context, image_id, update_task_state)"}],"source_content_type":"text/x-python","patch_set":44,"id":"5f7c97a3_ca642ee8","line":125,"updated":"2018-05-23 08:22:08.000000000","message":"The design is a bit hard to understand. But it\u0027s surely not Guest responsible to update task state of the instance as it does not have to deal with glance.","commit_id":"8c25f69719e6cc40d5a4490dfe5817b4e1eab7cd"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"c528392ede8850b8d28457db0297b4560604cd98","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def snapshot(self, context, instance, image_id, update_task_state):"},{"line_number":124,"context_line":"        _guest \u003d guest.Guest(self._hypervisor, instance)"},{"line_number":125,"context_line":"        _guest.snapshot(context, image_id, update_task_state)"}],"source_content_type":"text/x-python","patch_set":44,"id":"5f7c97a3_9e1f4f6f","line":125,"in_reply_to":"5f7c97a3_ca642ee8","updated":"2018-05-24 05:41:41.000000000","message":"The consideration is is to create a Guest class\nand let Guest class itself be an object and handle the action request from outside\n\nI don\u0027t know it\u0027s really bad design but I agree with you, as driver should be responsible for communicate with outside,\n\nI will change it ,thanks for the comments","commit_id":"8c25f69719e6cc40d5a4490dfe5817b4e1eab7cd"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"8340d6e04935afa740d22bd21d58cb881858100a","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        update_task_state(task_state\u003dtask_states.IMAGE_PENDING_UPLOAD)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        try:"},{"line_number":137,"context_line":"            self._hypervisor.guest_capture(instance.name, image_id)"},{"line_number":138,"context_line":"        except Exception as err:"},{"line_number":139,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":140,"context_line":"                LOG.error(\"Failed to capture the instance \""}],"source_content_type":"text/x-python","patch_set":47,"id":"5f7c97a3_3baba81d","line":137,"range":{"start_line":137,"start_character":42,"end_line":137,"end_character":56},"updated":"2018-05-24 11:45:27.000000000","message":"You could have passed a guest object here. But that can be done in future. That looks better now I think.","commit_id":"ad96d83f00afc8065fbc21ffa7e9ef4ef8d16f4c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4b24902a50b17f17b1fe3eafefcb007373bd4a84","unresolved":false,"context_lines":[{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    def snapshot(self, context, instance, image_id, update_task_state):"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        (image_service, image_id) \u003d glance.get_remote_image_service("},{"line_number":309,"context_line":"                                                    context, image_id)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        update_task_state(task_state\u003dtask_states.IMAGE_PENDING_UPLOAD)"}],"source_content_type":"text/x-python","patch_set":53,"id":"5f7c97a3_a14f5533","line":308,"range":{"start_line":308,"start_character":8,"end_line":308,"end_character":33},"updated":"2018-06-11 18:22:11.000000000","message":"nit: parens redundant","commit_id":"1653b7c637d56927206f1c044d80e30d1cfebbed"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"975e438c0c4927c7fac1349a25eba0d34ea455c0","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            \u0027properties\u0027: {"},{"line_number":340,"context_line":"                 \u0027image_location\u0027: \u0027snapshot\u0027,"},{"line_number":341,"context_line":"                 \u0027image_state\u0027: \u0027available\u0027,"},{"line_number":342,"context_line":"                 \u0027owner_id\u0027: instance[\u0027project_id\u0027],"},{"line_number":343,"context_line":"                 \u0027os_distro\u0027: resp[\u0027os_version\u0027],"},{"line_number":344,"context_line":"                 \u0027architecture\u0027: obj_fields.Architecture.S390X,"},{"line_number":345,"context_line":"                 \u0027hypervisor_type\u0027: obj_fields.HVType.ZVM,"}],"source_content_type":"text/x-python","patch_set":59,"id":"5f7c97a3_72e70c11","line":342,"range":{"start_line":342,"start_character":29,"end_line":342,"end_character":51},"updated":"2018-07-16 13:10:41.000000000","message":"nit. instance.project_id","commit_id":"c50a39f8c868570f0002faf297de136b831abffb"}],"nova/virt/zvm/guest.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec7d26be608236cbe482035d72d894bbe33e6158","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            self._hypervisor.guest_capture(instance.name, image_id)"},{"line_number":277,"context_line":"        except Exception as err:"},{"line_number":278,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":279,"context_line":"                LOG.error(_(\"Failed to capture the instance %(instance)s \""},{"line_number":280,"context_line":"                            \"to generate an image with reason: %(err)s\"),"},{"line_number":281,"context_line":"                          {\u0027instance\u0027: instance[\u0027name\u0027], \u0027err\u0027: err},"},{"line_number":282,"context_line":"                           instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_3e3ad4e6","line":279,"range":{"start_line":279,"start_character":26,"end_line":279,"end_character":27},"updated":"2018-04-09 20:46:41.000000000","message":"nix translation","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"452344b07087abac6d65ad1d1363da7a6a43659b","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            self._hypervisor.guest_capture(instance.name, image_id)"},{"line_number":277,"context_line":"        except Exception as err:"},{"line_number":278,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":279,"context_line":"                LOG.error(_(\"Failed to capture the instance %(instance)s \""},{"line_number":280,"context_line":"                            \"to generate an image with reason: %(err)s\"),"},{"line_number":281,"context_line":"                          {\u0027instance\u0027: instance[\u0027name\u0027], \u0027err\u0027: err},"},{"line_number":282,"context_line":"                           instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_fd2d1b95","line":279,"range":{"start_line":279,"start_character":26,"end_line":279,"end_character":27},"in_reply_to":"bf659307_3e3ad4e6","updated":"2018-04-11 06:50:42.000000000","message":"Done","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"5d8fe3b4146bed50390f37bb967b8181b4c579ba","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                LOG.error(_(\"Failed to capture the instance %(instance)s \""},{"line_number":280,"context_line":"                            \"to generate an image with reason: %(err)s\"),"},{"line_number":281,"context_line":"                          {\u0027instance\u0027: instance[\u0027name\u0027], \u0027err\u0027: err},"},{"line_number":282,"context_line":"                           instance\u003dinstance)"},{"line_number":283,"context_line":"                # Clean up the image from glance"},{"line_number":284,"context_line":"                image_service.delete(context, image_id)"},{"line_number":285,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_c8be5f64","line":282,"range":{"start_line":282,"start_character":36,"end_line":282,"end_character":44},"updated":"2018-04-10 22:30:21.000000000","message":"I think its weird that you\u0027re naming the instance twice in a log message. Discuss.","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"51e1e0055a8c64c547fe04419396ebcbee782321","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                LOG.error(_(\"Failed to capture the instance %(instance)s \""},{"line_number":280,"context_line":"                            \"to generate an image with reason: %(err)s\"),"},{"line_number":281,"context_line":"                          {\u0027instance\u0027: instance[\u0027name\u0027], \u0027err\u0027: err},"},{"line_number":282,"context_line":"                           instance\u003dinstance)"},{"line_number":283,"context_line":"                # Clean up the image from glance"},{"line_number":284,"context_line":"                image_service.delete(context, image_id)"},{"line_number":285,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_837a76b7","line":282,"range":{"start_line":282,"start_character":36,"end_line":282,"end_character":44},"in_reply_to":"bf659307_9d1e5f5d","updated":"2018-04-11 13:48:46.000000000","message":"One will be the name (more readable) and the other will be the UUID (more searchable/filterable).  But yeah, when I\u0027ve played around with this, I\u0027ve found the former to be not especially useful when the latter is present.","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"452344b07087abac6d65ad1d1363da7a6a43659b","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                LOG.error(_(\"Failed to capture the instance %(instance)s \""},{"line_number":280,"context_line":"                            \"to generate an image with reason: %(err)s\"),"},{"line_number":281,"context_line":"                          {\u0027instance\u0027: instance[\u0027name\u0027], \u0027err\u0027: err},"},{"line_number":282,"context_line":"                           instance\u003dinstance)"},{"line_number":283,"context_line":"                # Clean up the image from glance"},{"line_number":284,"context_line":"                image_service.delete(context, image_id)"},{"line_number":285,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_9d1e5f5d","line":282,"range":{"start_line":282,"start_character":36,"end_line":282,"end_character":44},"in_reply_to":"bf659307_c8be5f64","updated":"2018-04-11 06:50:42.000000000","message":"remove the first one maybe better","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec7d26be608236cbe482035d72d894bbe33e6158","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            resp \u003d self._hypervisor.image_export(image_id, dest_path)"},{"line_number":292,"context_line":"        except Exception:"},{"line_number":293,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":294,"context_line":"                LOG.error(_(\"Failed to export image %s from SDK server to \""},{"line_number":295,"context_line":"                            \"nova compute server\"), image_id)"},{"line_number":296,"context_line":"                image_service.delete(context, image_id)"},{"line_number":297,"context_line":"                self._hypervisor.image_delete(image_id)"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_fc21c5a0","line":294,"range":{"start_line":294,"start_character":26,"end_line":294,"end_character":27},"updated":"2018-04-09 20:46:41.000000000","message":"ditto","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"452344b07087abac6d65ad1d1363da7a6a43659b","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            resp \u003d self._hypervisor.image_export(image_id, dest_path)"},{"line_number":292,"context_line":"        except Exception:"},{"line_number":293,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":294,"context_line":"                LOG.error(_(\"Failed to export image %s from SDK server to \""},{"line_number":295,"context_line":"                            \"nova compute server\"), image_id)"},{"line_number":296,"context_line":"                image_service.delete(context, image_id)"},{"line_number":297,"context_line":"                self._hypervisor.image_delete(image_id)"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_7d390bd5","line":294,"range":{"start_line":294,"start_character":26,"end_line":294,"end_character":27},"in_reply_to":"bf659307_fc21c5a0","updated":"2018-04-11 06:50:42.000000000","message":"Done","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"8a29091f60122ce6350c3da9cd6253f013a966a8","unresolved":false,"context_lines":[{"line_number":236,"context_line":"            LOG.warning(\"Instance does not exist\", instance\u003dself._instance)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def snapshot(self, context, image_id, update_task_state):"},{"line_number":239,"context_line":"        (image_service, image_id) \u003d glance.get_remote_image_service("},{"line_number":240,"context_line":"                                                    context, image_id)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        update_task_state(task_state\u003dtask_states.IMAGE_PENDING_UPLOAD)"}],"source_content_type":"text/x-python","patch_set":44,"id":"5f7c97a3_6a4aba55","line":239,"updated":"2018-05-23 08:22:08.000000000","message":"You should not have any glance related thing in Guest. All of that should be in driver. I really have issue to understand the design.\n\nLike that update_task_state function passed as parameter.","commit_id":"8c25f69719e6cc40d5a4490dfe5817b4e1eab7cd"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"c528392ede8850b8d28457db0297b4560604cd98","unresolved":false,"context_lines":[{"line_number":236,"context_line":"            LOG.warning(\"Instance does not exist\", instance\u003dself._instance)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def snapshot(self, context, image_id, update_task_state):"},{"line_number":239,"context_line":"        (image_service, image_id) \u003d glance.get_remote_image_service("},{"line_number":240,"context_line":"                                                    context, image_id)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        update_task_state(task_state\u003dtask_states.IMAGE_PENDING_UPLOAD)"}],"source_content_type":"text/x-python","patch_set":44,"id":"5f7c97a3_3e2e3ba5","line":239,"in_reply_to":"5f7c97a3_6a4aba55","updated":"2018-05-24 05:41:41.000000000","message":"Done","commit_id":"8c25f69719e6cc40d5a4490dfe5817b4e1eab7cd"}],"nova/virt/zvm/hypervisor.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec7d26be608236cbe482035d72d894bbe33e6158","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    def guest_config_minidisks(self, name, disk_list):"},{"line_number":112,"context_line":"        self._reqh.call(\u0027guest_config_minidisks\u0027, name, disk_list)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def guest_capture(self, name, image_id):"},{"line_number":115,"context_line":"        self._reqh.call(\u0027guest_capture\u0027, name, image_id)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def image_query(self, imagename):"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_7e4b6c86","line":114,"updated":"2018-04-09 20:46:41.000000000","message":"Note to reviewers: new methods in this file tested through test_guestop.py","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"8a29091f60122ce6350c3da9cd6253f013a966a8","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        self._reqh.call(\u0027image_import\u0027, image_href, image_url,"},{"line_number":125,"context_line":"                        image_meta, remote_host\u003dself._rhost)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def image_export(self, image_id, dest_path):"},{"line_number":128,"context_line":"        resp \u003d self._reqh.call(\u0027image_export\u0027, image_id,"},{"line_number":129,"context_line":"                               dest_path, remote_host\u003dself._rhost)"},{"line_number":130,"context_line":"        return resp"}],"source_content_type":"text/x-python","patch_set":44,"id":"5f7c97a3_2affe201","line":127,"updated":"2018-05-23 08:22:08.000000000","message":"Please add a docstring with example of what is returned","commit_id":"8c25f69719e6cc40d5a4490dfe5817b4e1eab7cd"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"c528392ede8850b8d28457db0297b4560604cd98","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        self._reqh.call(\u0027image_import\u0027, image_href, image_url,"},{"line_number":125,"context_line":"                        image_meta, remote_host\u003dself._rhost)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def image_export(self, image_id, dest_path):"},{"line_number":128,"context_line":"        resp \u003d self._reqh.call(\u0027image_export\u0027, image_id,"},{"line_number":129,"context_line":"                               dest_path, remote_host\u003dself._rhost)"},{"line_number":130,"context_line":"        return resp"}],"source_content_type":"text/x-python","patch_set":44,"id":"5f7c97a3_9e08af2d","line":127,"in_reply_to":"5f7c97a3_2affe201","updated":"2018-05-24 05:41:41.000000000","message":"Done","commit_id":"8c25f69719e6cc40d5a4490dfe5817b4e1eab7cd"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"b50149af661793d7937b9670affb703007ef6757","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    def guest_config_minidisks(self, name, disk_list):"},{"line_number":128,"context_line":"        self._reqh.call(\u0027guest_config_minidisks\u0027, name, disk_list)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def guest_capture(self, name, image_id):"},{"line_number":131,"context_line":"        self._reqh.call(\u0027guest_capture\u0027, name, image_id)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def image_query(self, imagename):"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_af3b97e7","line":130,"updated":"2018-05-31 10:48:23.000000000","message":"You missed to add test. Basically that will some simple assertions that we correctly pass the args.","commit_id":"c73c888b1bf96ef38eabccaa870454137e2f0545"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"a383143b79732d33c0aaf508a95988ea2e0a9e33","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    def guest_config_minidisks(self, name, disk_list):"},{"line_number":128,"context_line":"        self._reqh.call(\u0027guest_config_minidisks\u0027, name, disk_list)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def guest_capture(self, name, image_id):"},{"line_number":131,"context_line":"        self._reqh.call(\u0027guest_capture\u0027, name, image_id)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def image_query(self, imagename):"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_0005ac13","line":130,"in_reply_to":"5f7c97a3_af3b97e7","updated":"2018-06-01 05:48:16.000000000","message":"Done","commit_id":"c73c888b1bf96ef38eabccaa870454137e2f0545"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"b50149af661793d7937b9670affb703007ef6757","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        self._reqh.call(\u0027image_import\u0027, image_href, image_url,"},{"line_number":150,"context_line":"                        image_meta, remote_host\u003dself._rhost)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def image_export(self, image_id, dest_path):"},{"line_number":153,"context_line":"        \"\"\"export image to a given place"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :returns: a dict which represent the exported image information."}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_4f2683d0","line":152,"updated":"2018-05-31 10:48:23.000000000","message":"Same here","commit_id":"c73c888b1bf96ef38eabccaa870454137e2f0545"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"a383143b79732d33c0aaf508a95988ea2e0a9e33","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        self._reqh.call(\u0027image_import\u0027, image_href, image_url,"},{"line_number":150,"context_line":"                        image_meta, remote_host\u003dself._rhost)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def image_export(self, image_id, dest_path):"},{"line_number":153,"context_line":"        \"\"\"export image to a given place"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :returns: a dict which represent the exported image information."}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_eb03b10b","line":152,"in_reply_to":"5f7c97a3_4f2683d0","updated":"2018-06-01 05:48:16.000000000","message":"Done","commit_id":"c73c888b1bf96ef38eabccaa870454137e2f0545"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"b50149af661793d7937b9670affb703007ef6757","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                               dest_path, remote_host\u003dself._rhost)"},{"line_number":159,"context_line":"        return resp"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def image_delete(self, image_id):"},{"line_number":162,"context_line":"        self._reqh.call(\u0027image_delete\u0027, image_id)"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_6f21ffb3","line":161,"updated":"2018-05-31 10:48:23.000000000","message":"And here.","commit_id":"c73c888b1bf96ef38eabccaa870454137e2f0545"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"a383143b79732d33c0aaf508a95988ea2e0a9e33","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                               dest_path, remote_host\u003dself._rhost)"},{"line_number":159,"context_line":"        return resp"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def image_delete(self, image_id):"},{"line_number":162,"context_line":"        self._reqh.call(\u0027image_delete\u0027, image_id)"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_ab09392b","line":161,"in_reply_to":"5f7c97a3_6f21ffb3","updated":"2018-06-01 05:48:16.000000000","message":"Done","commit_id":"c73c888b1bf96ef38eabccaa870454137e2f0545"}],"nova/virt/zvm/utils.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6b9bee62960b84ce589af93c1c22292de97e4cd4","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            os.makedirs(instance_folder)"},{"line_number":67,"context_line":"        return instance_folder"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def clean_up_folder(self, folder_path):"},{"line_number":70,"context_line":"        if os.path.isdir(folder_path):"},{"line_number":71,"context_line":"            shutil.rmtree(folder_path)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def clean_up_file(self, filepath):"},{"line_number":74,"context_line":"        if os.path.exists(filepath):"},{"line_number":75,"context_line":"            os.remove(filepath)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class VMUtils(object):"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_358ae71a","line":75,"range":{"start_line":69,"start_character":0,"end_line":75,"end_character":31},"updated":"2018-03-21 20:50:43.000000000","message":"More methods that should be defined at the module level.","commit_id":"9252c71e55f33c9a7adf93492df677d5153b1f62"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"6e27f000a62f389c154fa6a34bded8d22140f192","unresolved":false,"context_lines":[{"line_number":121,"context_line":"def clean_up_folder(folder_path):"},{"line_number":122,"context_line":"    if os.path.isdir(folder_path):"},{"line_number":123,"context_line":"        shutil.rmtree(folder_path)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"def clean_up_file(filepath):"},{"line_number":126,"context_line":"    if os.path.exists(filepath):"},{"line_number":127,"context_line":"        os.remove(filepath)"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf659307_1bcbbfa5","line":124,"updated":"2018-03-23 16:35:14.000000000","message":"oh, this is your pep8 error.","commit_id":"ca5413163aa14718f96dccd2eb4d859d7368b21b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec7d26be608236cbe482035d72d894bbe33e6158","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    return transportfiles"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"def clean_up_folder(folder_path):"},{"line_number":136,"context_line":"    if os.path.isdir(folder_path):"},{"line_number":137,"context_line":"        shutil.rmtree(folder_path)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def clean_up_file(filepath):"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_9e9760ec","line":137,"range":{"start_line":135,"start_character":0,"end_line":137,"end_character":34},"updated":"2018-04-09 20:46:41.000000000","message":"You can just use rmtree(..., ignore_errors\u003dTrue) (and get rid of this method)\n\n[Later] This method doesn\u0027t seem to be used, so you can get rid of it anyway.","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"452344b07087abac6d65ad1d1363da7a6a43659b","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    return transportfiles"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"def clean_up_folder(folder_path):"},{"line_number":136,"context_line":"    if os.path.isdir(folder_path):"},{"line_number":137,"context_line":"        shutil.rmtree(folder_path)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def clean_up_file(filepath):"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_bd580331","line":137,"range":{"start_line":135,"start_character":0,"end_line":137,"end_character":34},"in_reply_to":"bf659307_68af132a","updated":"2018-04-11 06:50:42.000000000","message":"thanks, we can remove this directly as no usage \nguess we removed the usage somewhere and failed to remove this function","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"5d8fe3b4146bed50390f37bb967b8181b4c579ba","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    return transportfiles"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"def clean_up_folder(folder_path):"},{"line_number":136,"context_line":"    if os.path.isdir(folder_path):"},{"line_number":137,"context_line":"        shutil.rmtree(folder_path)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def clean_up_file(filepath):"}],"source_content_type":"text/x-python","patch_set":27,"id":"bf659307_68af132a","line":137,"range":{"start_line":135,"start_character":0,"end_line":137,"end_character":34},"in_reply_to":"bf659307_9e9760ec","updated":"2018-04-10 22:30:21.000000000","message":"Note that if this directory is mapped to an NFS server, you might need a cleanup retry.","commit_id":"99f1c276db09ac833c651102f78d2a49ccf8e955"}]}
