)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"3c6f96677deb43ca8495f7470b0cdf454635a148","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support local target for Solaris, use \u0027safe\u0027 command-line processing"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Solaris volumes were created over SSH; we could also be running the volume service locally, in which case we don\u0027t want to use SSH, but should call utils.execute instead.  Split commands appropriately."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I79dd0bdf527baf73a167ff210285a0ab65d0de4b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAC3%2F%2F7ss%3D","line":9,"updated":"2011-12-20 17:54:35.000000000","message":"Could you word-wrap this text to make it a little easier to read?  79 columns should work fine.","commit_id":"3e094b0c8d3c0a8d80ed19303098a2b75f0612b2"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"a1ca23a583f633c2684c729ed953751b17536082","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support local target for Solaris, use \u0027safe\u0027 command-line processing"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Solaris volumes were created over SSH; we could also be running the volume service locally, in which case we don\u0027t want to use SSH, but should call utils.execute instead.  Split commands appropriately."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I79dd0bdf527baf73a167ff210285a0ab65d0de4b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAC3%2F%2F62I%3D","line":9,"in_reply_to":"AAAAC3%2F%2F7ss%3D","updated":"2011-12-23 07:48:21.000000000","message":"Done","commit_id":"3e094b0c8d3c0a8d80ed19303098a2b75f0612b2"}],"nova/volume/san.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"3c6f96677deb43ca8495f7470b0cdf454635a148","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from nova import flags"},{"line_number":31,"context_line":"from nova import log as logging"},{"line_number":32,"context_line":"from nova import utils"},{"line_number":33,"context_line":"from nova.utils import ssh_execute"},{"line_number":34,"context_line":"from nova.volume.driver import ISCSIDriver"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"LOG \u003d logging.getLogger(\"nova.volume.driver\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F7sg%3D","line":33,"updated":"2011-12-20 17:54:35.000000000","message":"I would remove this line, as it\u0027s not HACKING-compliant anyway.  That of course implies fixing up any usages of ssh_execute() that you left in here...","commit_id":"3e094b0c8d3c0a8d80ed19303098a2b75f0612b2"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"a1ca23a583f633c2684c729ed953751b17536082","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from nova import flags"},{"line_number":31,"context_line":"from nova import log as logging"},{"line_number":32,"context_line":"from nova import utils"},{"line_number":33,"context_line":"from nova.utils import ssh_execute"},{"line_number":34,"context_line":"from nova.volume.driver import ISCSIDriver"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"LOG \u003d logging.getLogger(\"nova.volume.driver\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F62c%3D","line":33,"in_reply_to":"AAAAC3%2F%2F7sg%3D","updated":"2011-12-23 07:48:21.000000000","message":"I believe I have called utils.execute the same way the rest of the code does.  If you\u0027re up for fixing that, I think it is better done in its own merge request.","commit_id":"3e094b0c8d3c0a8d80ed19303098a2b75f0612b2"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"2cdbd60a1a0abd0e0b2295347bc1fde52568e235","unresolved":false,"context_lines":[{"line_number":50,"context_line":"flags.DEFINE_integer(\u0027san_ssh_port\u0027, 22,"},{"line_number":51,"context_line":"                    \u0027SSH port to use with SAN\u0027)"},{"line_number":52,"context_line":"flags.DEFINE_boolean(\u0027san_is_local\u0027, \u0027false\u0027,"},{"line_number":53,"context_line":"                     \u0027Use local commands instead of SSH, as we are running on the SAN\u0027)"},{"line_number":54,"context_line":"flags.DEFINE_string(\u0027san_zfs_volume_base\u0027,"},{"line_number":55,"context_line":"                    \u0027rpool/\u0027,"},{"line_number":56,"context_line":"                    \u0027The ZFS path under which to create zvols for volumes.\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F76s%3D","line":53,"updated":"2011-12-19 20:22:19.000000000","message":"nova/volume/san.py:53:80: E501 line too long (87 characters)","commit_id":"3e094b0c8d3c0a8d80ed19303098a2b75f0612b2"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"a1ca23a583f633c2684c729ed953751b17536082","unresolved":false,"context_lines":[{"line_number":50,"context_line":"flags.DEFINE_integer(\u0027san_ssh_port\u0027, 22,"},{"line_number":51,"context_line":"                    \u0027SSH port to use with SAN\u0027)"},{"line_number":52,"context_line":"flags.DEFINE_boolean(\u0027san_is_local\u0027, \u0027false\u0027,"},{"line_number":53,"context_line":"                     \u0027Use local commands instead of SSH, as we are running on the SAN\u0027)"},{"line_number":54,"context_line":"flags.DEFINE_string(\u0027san_zfs_volume_base\u0027,"},{"line_number":55,"context_line":"                    \u0027rpool/\u0027,"},{"line_number":56,"context_line":"                    \u0027The ZFS path under which to create zvols for volumes.\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F62Y%3D","line":53,"in_reply_to":"AAAAC3%2F%2F76s%3D","updated":"2011-12-23 07:48:21.000000000","message":"Done","commit_id":"3e094b0c8d3c0a8d80ed19303098a2b75f0612b2"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"2cdbd60a1a0abd0e0b2295347bc1fde52568e235","unresolved":false,"context_lines":[{"line_number":54,"context_line":"flags.DEFINE_string(\u0027san_zfs_volume_base\u0027,"},{"line_number":55,"context_line":"                    \u0027rpool/\u0027,"},{"line_number":56,"context_line":"                    \u0027The ZFS path under which to create zvols for volumes.\u0027)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class SanISCSIDriver(ISCSIDriver):"},{"line_number":59,"context_line":"    \"\"\" Base class for SAN-style storage volumes"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F76o%3D","line":57,"updated":"2011-12-19 20:22:19.000000000","message":"nova/volume/san.py:58:1: E302 expected 2 blank lines, found 1","commit_id":"3e094b0c8d3c0a8d80ed19303098a2b75f0612b2"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"a1ca23a583f633c2684c729ed953751b17536082","unresolved":false,"context_lines":[{"line_number":54,"context_line":"flags.DEFINE_string(\u0027san_zfs_volume_base\u0027,"},{"line_number":55,"context_line":"                    \u0027rpool/\u0027,"},{"line_number":56,"context_line":"                    \u0027The ZFS path under which to create zvols for volumes.\u0027)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class SanISCSIDriver(ISCSIDriver):"},{"line_number":59,"context_line":"    \"\"\" Base class for SAN-style storage volumes"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F62U%3D","line":57,"in_reply_to":"AAAAC3%2F%2F76o%3D","updated":"2011-12-23 07:48:21.000000000","message":"Done","commit_id":"3e094b0c8d3c0a8d80ed19303098a2b75f0612b2"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"2cdbd60a1a0abd0e0b2295347bc1fde52568e235","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        \"\"\"Returns an error if prerequisites aren\u0027t met\"\"\""},{"line_number":127,"context_line":"        if not self.run_local:"},{"line_number":128,"context_line":"            if not (FLAGS.san_password or FLAGS.san_privatekey):"},{"line_number":129,"context_line":"                raise exception.Error(_(\"Specify san_password or san_privatekey\"))"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        # The san_ip must always be set, because we use it for the target"},{"line_number":132,"context_line":"        if not (FLAGS.san_ip):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F76g%3D","line":129,"updated":"2011-12-19 20:22:19.000000000","message":"nova/volume/san.py:129:80: E501 line too long (82 characters)","commit_id":"3e094b0c8d3c0a8d80ed19303098a2b75f0612b2"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"a1ca23a583f633c2684c729ed953751b17536082","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        \"\"\"Returns an error if prerequisites aren\u0027t met\"\"\""},{"line_number":127,"context_line":"        if not self.run_local:"},{"line_number":128,"context_line":"            if not (FLAGS.san_password or FLAGS.san_privatekey):"},{"line_number":129,"context_line":"                raise exception.Error(_(\"Specify san_password or san_privatekey\"))"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        # The san_ip must always be set, because we use it for the target"},{"line_number":132,"context_line":"        if not (FLAGS.san_ip):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAC3%2F%2F62Q%3D","line":129,"in_reply_to":"AAAAC3%2F%2F76g%3D","updated":"2011-12-23 07:48:21.000000000","message":"Done","commit_id":"3e094b0c8d3c0a8d80ed19303098a2b75f0612b2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2363322025be4c217acb375ac8ce3c7921277bc1","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            assert \u0027\u0027 \u003d\u003d lines[1]"},{"line_number":288,"context_line":"            assert \u0027GUID\u0027 in lines[2]"},{"line_number":289,"context_line":"            assert \u0027------------------\u0027 in lines[3]"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"            lines \u003d lines[4:]"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        for line in lines:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAC3%2F%2F6yo%3D","line":290,"updated":"2011-12-23 17:30:15.000000000","message":"Not sure if the above asserts are i18n safe? If sbdadm is localized to a non-English language, will the above asserts work properly?\n\nPerhaps this is not a big deal. I looked at the sbdadm man page and Googled the topic and see no mention of sdbadm being localized, so maybe this is perfectly fine. :)","commit_id":"3d901b67864d6209219f7ebcbf368f56352e1264"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"19989822a4ab6b14aeb95bf070da0c6b982fc2a3","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            assert \u0027\u0027 \u003d\u003d lines[1]"},{"line_number":288,"context_line":"            assert \u0027GUID\u0027 in lines[2]"},{"line_number":289,"context_line":"            assert \u0027------------------\u0027 in lines[3]"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"            lines \u003d lines[4:]"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        for line in lines:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAC3%2F%2F6w8%3D","line":290,"in_reply_to":"AAAAC3%2F%2F6yo%3D","updated":"2011-12-23 18:24:34.000000000","message":"This came up in my other pending patch also (https://review.openstack.org/#change,2581).  Parsing text is ugly, but the asserts here mean that we\u0027re programming defensively.  I do wonder if we should be passing a locale env variable or some other hack so that we always get english codes?  I just don\u0027t know what happens with other locales...","commit_id":"3d901b67864d6209219f7ebcbf368f56352e1264"}]}
