)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"516e8514e5f9fd2036e2ef22aa3f9db091efa420","unresolved":false,"context_lines":[{"line_number":7,"context_line":"xenapi: implement xenserver image to volume"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Amend image_utils, so that it could handle xenserver type images (vhd"},{"line_number":10,"context_line":"chains inside a tgz archive). This requires the vhd-util binary."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I99b58868439c4d5187c2fe3666110bfda0924181"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAPn%2F%2FrMU%3D","line":10,"updated":"2013-06-25 14:41:19.000000000","message":"How do users get this binary?  Can they install via RPM or do they have to pull from a XS host?\nNeeds a docimpact and possibly a related change in devstack to automatically install it?","commit_id":"43fe5ae659e0e909690a7a3e496b2f12a7d75ad4"},{"author":{"_account_id":5044,"name":"Mate Lakat","email":"mlakat@suse.com","username":"mate-lakat"},"change_message_id":"20054affc91436b3ef6c623c1076ded2e957f25f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"xenapi: implement xenserver image to volume"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Amend image_utils, so that it could handle xenserver type images (vhd"},{"line_number":10,"context_line":"chains inside a tgz archive). This requires the vhd-util binary."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I99b58868439c4d5187c2fe3666110bfda0924181"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAPn%2F%2Fkws%3D","line":10,"in_reply_to":"AAAAPn%2F%2FrMU%3D","updated":"2013-06-27 14:48:14.000000000","message":"Done","commit_id":"43fe5ae659e0e909690a7a3e496b2f12a7d75ad4"}],"cinder/image/image_utils.py":[{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"516e8514e5f9fd2036e2ef22aa3f9db091efa420","unresolved":false,"context_lines":[{"line_number":343,"context_line":"    return tmp"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"def remove_file(fname):"},{"line_number":347,"context_line":"    os.unlink(fname)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FrKY%3D","line":346,"updated":"2013-06-25 14:41:19.000000000","message":"Not a fan of trivial function wrappers - are these simply to make it easier to mock the os.unlink out?","commit_id":"43fe5ae659e0e909690a7a3e496b2f12a7d75ad4"},{"author":{"_account_id":5044,"name":"Mate Lakat","email":"mlakat@suse.com","username":"mate-lakat"},"change_message_id":"20054affc91436b3ef6c623c1076ded2e957f25f","unresolved":false,"context_lines":[{"line_number":343,"context_line":"    return tmp"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"def remove_file(fname):"},{"line_number":347,"context_line":"    os.unlink(fname)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fkzo%3D","line":346,"in_reply_to":"AAAAPn%2F%2FrKY%3D","updated":"2013-06-27 14:48:14.000000000","message":"Done","commit_id":"43fe5ae659e0e909690a7a3e496b2f12a7d75ad4"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"516e8514e5f9fd2036e2ef22aa3f9db091efa420","unresolved":false,"context_lines":[{"line_number":368,"context_line":"    for child, parent in zip(vhd_chain[:-1], vhd_chain[1:]):"},{"line_number":369,"context_line":"        with temporary_file() as tmp:"},{"line_number":370,"context_line":"            size \u003d get_vhd_size(child)"},{"line_number":371,"context_line":"            resize_vhd(parent, size, tmp)"},{"line_number":372,"context_line":"            coalesce_vhd(child)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    return vhd_chain[-1]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FrKk%3D","line":371,"updated":"2013-06-25 14:41:19.000000000","message":"Why do we resize_vhd here?  coalesce_vhd should automatically resize the parent as more is written to it?","commit_id":"43fe5ae659e0e909690a7a3e496b2f12a7d75ad4"},{"author":{"_account_id":5044,"name":"Mate Lakat","email":"mlakat@suse.com","username":"mate-lakat"},"change_message_id":"20054affc91436b3ef6c623c1076ded2e957f25f","unresolved":false,"context_lines":[{"line_number":368,"context_line":"    for child, parent in zip(vhd_chain[:-1], vhd_chain[1:]):"},{"line_number":369,"context_line":"        with temporary_file() as tmp:"},{"line_number":370,"context_line":"            size \u003d get_vhd_size(child)"},{"line_number":371,"context_line":"            resize_vhd(parent, size, tmp)"},{"line_number":372,"context_line":"            coalesce_vhd(child)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    return vhd_chain[-1]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fky4%3D","line":371,"in_reply_to":"AAAAPn%2F%2FrKk%3D","updated":"2013-06-27 14:48:14.000000000","message":"The base image did not get resized as per my experience. Maybe, because no bytes written to the expanded area. Anyhow, if my latest difference is 1Gig, I expect the end result to be the same size, that\u0027s why I do the resizing.","commit_id":"43fe5ae659e0e909690a7a3e496b2f12a7d75ad4"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"516e8514e5f9fd2036e2ef22aa3f9db091efa420","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    return vhd_chain[-1]"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"def discover_vhd_chain(directory):"},{"line_number":378,"context_line":"    counter \u003d 0"},{"line_number":379,"context_line":"    chain \u003d []"},{"line_number":380,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FrLQ%3D","line":377,"updated":"2013-06-25 14:41:19.000000000","message":"Think we should doc the type of chain we\u0027re expecting and how it is created.","commit_id":"43fe5ae659e0e909690a7a3e496b2f12a7d75ad4"},{"author":{"_account_id":5044,"name":"Mate Lakat","email":"mlakat@suse.com","username":"mate-lakat"},"change_message_id":"20054affc91436b3ef6c623c1076ded2e957f25f","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    return vhd_chain[-1]"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"def discover_vhd_chain(directory):"},{"line_number":378,"context_line":"    counter \u003d 0"},{"line_number":379,"context_line":"    chain \u003d []"},{"line_number":380,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fkys%3D","line":377,"in_reply_to":"AAAAPn%2F%2FrLQ%3D","updated":"2013-06-27 14:48:14.000000000","message":"I can include a reference to the xenapi plugins, or maybe we could make the code a bit more readable, but I am against of having documentation.","commit_id":"43fe5ae659e0e909690a7a3e496b2f12a7d75ad4"}]}
