)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"5690e57cab90067e6bf57bd2a67392f551874857","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     lihaijing \u003clihaijing@fiberhome.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-07-18 18:19:10 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix vmvare migrate available volume bug"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The \u0027pass\u0027 statement in initiator/connectors/vmware.py:"},{"line_number":10,"context_line":"def check_valid_device() causes the method to return a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1f1a1f67_f4e871b3","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":10},"updated":"2017-07-18 18:01:19.000000000","message":"Typo: \"vmware\"","commit_id":"4efd04d54b5ba5f325f647618937524b1d0c2748"}],"os_brick/initiator/connectors/vmware.py":[{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"9e53e21290cbad6e91e54c128c5dc5b6c23c48df","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    def get_connector_properties(root_helper, *args, **kwargs):"},{"line_number":70,"context_line":"        return {}"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def check_valid_device(self, path, run_as_root\u003dTrue):"},{"line_number":73,"context_line":"        cmd \u003d (\u0027dd\u0027, \u0027if\u003d%(path)s\u0027 % {\"path\": path},"},{"line_number":74,"context_line":"               \u0027of\u003d/dev/null\u0027, \u0027count\u003d1\u0027)"},{"line_number":75,"context_line":"        out, info \u003d None, None"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_f340110a","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":26},"updated":"2017-08-01 00:51:28.000000000","message":"It\u0027s better to add a UT in test_vmware.py to ensure this works right.","commit_id":"8cafc33164e89d115f5a63a5b0934a6b4a4ed2bd"},{"author":{"_account_id":22299,"name":"lihaijing","email":"lihaijing@fiberhome.com","username":"lihaijing"},"change_message_id":"820d400663b3a5c480774c1d120fae5541da098b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    def get_connector_properties(root_helper, *args, **kwargs):"},{"line_number":70,"context_line":"        return {}"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def check_valid_device(self, path, run_as_root\u003dTrue):"},{"line_number":73,"context_line":"        cmd \u003d (\u0027dd\u0027, \u0027if\u003d%(path)s\u0027 % {\"path\": path},"},{"line_number":74,"context_line":"               \u0027of\u003d/dev/null\u0027, \u0027count\u003d1\u0027)"},{"line_number":75,"context_line":"        out, info \u003d None, None"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f2577a7_29d9a282","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":26},"in_reply_to":"df3967d1_f340110a","updated":"2017-09-11 07:12:33.000000000","message":"All other connectors use parent UT cases. So I think there is no need to add UT in test_vmware.py file.","commit_id":"8cafc33164e89d115f5a63a5b0934a6b4a4ed2bd"},{"author":{"_account_id":20382,"name":"YuYang","email":"yuyangwang1985@gmail.com","username":"YuYangWang"},"change_message_id":"7f5ed2cbd56edd9e7af13e41d789c0a0d8ce6879","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        return {}"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def check_valid_device(self, path, run_as_root\u003dTrue):"},{"line_number":73,"context_line":"        cmd \u003d (\u0027dd\u0027, \u0027if\u003d%(path)s\u0027 % {\"path\": path},"},{"line_number":74,"context_line":"               \u0027of\u003d/dev/null\u0027, \u0027count\u003d1\u0027)"},{"line_number":75,"context_line":"        out, info \u003d None, None"},{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            out, info \u003d self._execute(*cmd, run_as_root\u003drun_as_root,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_b1b43ef3","line":74,"range":{"start_line":73,"start_character":7,"end_line":74,"end_character":41},"updated":"2017-07-19 01:26:11.000000000","message":"this why use dd?","commit_id":"8cafc33164e89d115f5a63a5b0934a6b4a4ed2bd"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"a00420682113764aada0f99887de31cac45e87e4","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        return {}"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def check_valid_device(self, path, run_as_root\u003dTrue):"},{"line_number":73,"context_line":"        cmd \u003d (\u0027dd\u0027, \u0027if\u003d%(path)s\u0027 % {\"path\": path},"},{"line_number":74,"context_line":"               \u0027of\u003d/dev/null\u0027, \u0027count\u003d1\u0027)"},{"line_number":75,"context_line":"        out, info \u003d None, None"},{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            out, info \u003d self._execute(*cmd, run_as_root\u003drun_as_root,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf3e73b7_4fc50d3c","line":74,"range":{"start_line":73,"start_character":7,"end_line":74,"end_character":41},"in_reply_to":"1f1a1f67_3c2fde88","updated":"2017-08-07 13:03:13.000000000","message":"Can we use \u0027open\u0027 here instead of \u0027dd\u0027 call?","commit_id":"8cafc33164e89d115f5a63a5b0934a6b4a4ed2bd"},{"author":{"_account_id":22299,"name":"lihaijing","email":"lihaijing@fiberhome.com","username":"lihaijing"},"change_message_id":"c0cec7a4bbfedee339876ab1421ad65c9bbd64a9","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        return {}"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def check_valid_device(self, path, run_as_root\u003dTrue):"},{"line_number":73,"context_line":"        cmd \u003d (\u0027dd\u0027, \u0027if\u003d%(path)s\u0027 % {\"path\": path},"},{"line_number":74,"context_line":"               \u0027of\u003d/dev/null\u0027, \u0027count\u003d1\u0027)"},{"line_number":75,"context_line":"        out, info \u003d None, None"},{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            out, info \u003d self._execute(*cmd, run_as_root\u003drun_as_root,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_3c2fde88","line":74,"range":{"start_line":73,"start_character":7,"end_line":74,"end_character":41},"in_reply_to":"1f1a1f67_b1b43ef3","updated":"2017-07-19 05:45:25.000000000","message":"To make sure the device can be read.","commit_id":"8cafc33164e89d115f5a63a5b0934a6b4a4ed2bd"},{"author":{"_account_id":22299,"name":"lihaijing","email":"lihaijing@fiberhome.com","username":"lihaijing"},"change_message_id":"820d400663b3a5c480774c1d120fae5541da098b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        return {}"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def check_valid_device(self, path, run_as_root\u003dTrue):"},{"line_number":73,"context_line":"        cmd \u003d (\u0027dd\u0027, \u0027if\u003d%(path)s\u0027 % {\"path\": path},"},{"line_number":74,"context_line":"               \u0027of\u003d/dev/null\u0027, \u0027count\u003d1\u0027)"},{"line_number":75,"context_line":"        out, info \u003d None, None"},{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            out, info \u003d self._execute(*cmd, run_as_root\u003drun_as_root,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f2577a7_e9e27a2f","line":74,"range":{"start_line":73,"start_character":7,"end_line":74,"end_character":41},"in_reply_to":"5f2577a7_33137069","updated":"2017-09-11 07:12:33.000000000","message":"I use \u0027open\u0027 instead of \u0027dd\u0027.","commit_id":"8cafc33164e89d115f5a63a5b0934a6b4a4ed2bd"},{"author":{"_account_id":22299,"name":"lihaijing","email":"lihaijing@fiberhome.com","username":"lihaijing"},"change_message_id":"820d400663b3a5c480774c1d120fae5541da098b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        return {}"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def check_valid_device(self, path, run_as_root\u003dTrue):"},{"line_number":73,"context_line":"        cmd \u003d (\u0027dd\u0027, \u0027if\u003d%(path)s\u0027 % {\"path\": path},"},{"line_number":74,"context_line":"               \u0027of\u003d/dev/null\u0027, \u0027count\u003d1\u0027)"},{"line_number":75,"context_line":"        out, info \u003d None, None"},{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            out, info \u003d self._execute(*cmd, run_as_root\u003drun_as_root,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f2577a7_09e6e645","line":74,"range":{"start_line":73,"start_character":7,"end_line":74,"end_character":41},"in_reply_to":"bf3e73b7_4fc50d3c","updated":"2017-09-11 07:12:33.000000000","message":"Done","commit_id":"8cafc33164e89d115f5a63a5b0934a6b4a4ed2bd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"48376e178e60adb0728c8dae2b73b733b20e46b5","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        return {}"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def check_valid_device(self, path, run_as_root\u003dTrue):"},{"line_number":73,"context_line":"        cmd \u003d (\u0027dd\u0027, \u0027if\u003d%(path)s\u0027 % {\"path\": path},"},{"line_number":74,"context_line":"               \u0027of\u003d/dev/null\u0027, \u0027count\u003d1\u0027)"},{"line_number":75,"context_line":"        out, info \u003d None, None"},{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            out, info \u003d self._execute(*cmd, run_as_root\u003drun_as_root,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f2577a7_33137069","line":74,"range":{"start_line":73,"start_character":7,"end_line":74,"end_character":41},"in_reply_to":"bf3e73b7_4fc50d3c","updated":"2017-09-08 16:01:20.000000000","message":"Unlikely, using dd here lets us perform this operation as root (line 77).","commit_id":"8cafc33164e89d115f5a63a5b0934a6b4a4ed2bd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"56fae5fa3df3aa53f0e5e3bfe9ff791087f0683e","unresolved":false,"context_lines":[{"line_number":74,"context_line":"               \u0027of\u003d/dev/null\u0027, \u0027count\u003d1\u0027)"},{"line_number":75,"context_line":"        out, info \u003d None, None"},{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            out, info \u003d self._execute(*cmd, run_as_root\u003drun_as_root,"},{"line_number":78,"context_line":"                                      root_helper\u003dself._root_helper)"},{"line_number":79,"context_line":"        except putils.ProcessExecutionError as e:"},{"line_number":80,"context_line":"            LOG.error(\"Failed to access the device on the path \""}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_d5e61a17","line":77,"range":{"start_line":77,"start_character":17,"end_line":77,"end_character":21},"updated":"2017-07-31 19:32:14.000000000","message":"This isn\u0027t really info, it\u0027s stderr.  This is why most calls to self._execute() in Cinder assign to (out, err).\n\nPlease rename \"info\" to \"err\" so this is easily understood.","commit_id":"8cafc33164e89d115f5a63a5b0934a6b4a4ed2bd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"56fae5fa3df3aa53f0e5e3bfe9ff791087f0683e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                      \"%(path)s: %(error)s.\","},{"line_number":82,"context_line":"                      {\"path\": path, \"error\": e.stderr})"},{"line_number":83,"context_line":"            return False"},{"line_number":84,"context_line":"        # If the info is none, the path does not exist."},{"line_number":85,"context_line":"        if info is None:"},{"line_number":86,"context_line":"            return False"},{"line_number":87,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":3,"id":"df3967d1_95f092cb","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":55},"updated":"2017-07-31 19:32:14.000000000","message":"The check should be against the error code of the child process, not the contents of stderr.\n\nThis block should not be needed.","commit_id":"8cafc33164e89d115f5a63a5b0934a6b4a4ed2bd"}]}
