)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5319,"name":"Sam Stoelinga","email":"sammiestoel@gmail.com","username":"sammiestoel"},"change_message_id":"f50a08d2d91207d7f5244218a562fadf8c64bcba","unresolved":false,"context_lines":[{"line_number":7,"context_line":"BDM class and transformation functions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds the utility functions that will help us switch"},{"line_number":10,"context_line":"between versions od block_device_mapping data."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"In order to acomplish this, and to have a more structured aproach to"},{"line_number":13,"context_line":"dealing with block device mapping data in the future, this patch"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAO3%2F%2F9VM%3D","line":10,"updated":"2013-05-16 05:31:39.000000000","message":"just noticed a typo od should be of probably. It got a -1 already anyway","commit_id":"c3ba20d7169379f97006aaaee8f4dd73ed51ef0c"}],"nova/block_device.py":[{"author":{"_account_id":1711,"name":"Yun Mao","email":"yunmao@gmail.com","username":"yunmao"},"change_message_id":"90bb66f8751f27752f2c9849ab39f2cd9f226d72","unresolved":false,"context_lines":[{"line_number":61,"context_line":"               bdm_db_inherited_fields)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def __init__(self, bdm_dict\u003dNone, do_not_default\u003dNone):"},{"line_number":64,"context_line":"        super(dict, self).__init__()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        bdm_dict \u003d bdm_dict or {}"},{"line_number":67,"context_line":"        do_not_default \u003d do_not_default or set()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAO3%2F%2F%2BuE%3D","line":64,"updated":"2013-05-15 17:25:54.000000000","message":"this should be super(BlockDeviceDict, self), right?","commit_id":"c3ba20d7169379f97006aaaee8f4dd73ed51ef0c"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"a3a1ec8c16431fd6870a619c4e59ba06121cb4a9","unresolved":false,"context_lines":[{"line_number":61,"context_line":"               bdm_db_inherited_fields)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def __init__(self, bdm_dict\u003dNone, do_not_default\u003dNone):"},{"line_number":64,"context_line":"        super(dict, self).__init__()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        bdm_dict \u003d bdm_dict or {}"},{"line_number":67,"context_line":"        do_not_default \u003d do_not_default or set()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAO3%2F%2F%2BtM%3D","line":64,"in_reply_to":"AAAAO3%2F%2F%2BuE%3D","updated":"2013-05-15 17:34:24.000000000","message":"Ugh sure, this way it calls only object\u0027s init. Not sure that it matters for builtins, but will definitely fix it.","commit_id":"c3ba20d7169379f97006aaaee8f4dd73ed51ef0c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bbeab59c0bd6a466ad31070116b39a44526a0abe","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            if self[\u0027guest_format\u0027] \u003d\u003d \u0027swap\u0027:"},{"line_number":140,"context_line":"                legacy_block_device[\u0027virtual_name\u0027] \u003d \u0027swap\u0027"},{"line_number":141,"context_line":"            else:"},{"line_number":142,"context_line":"                # NOTE (ndipanov): Allways label as 0 it is up to"},{"line_number":143,"context_line":"                # the calling routine to re-enumarete them"},{"line_number":144,"context_line":"                legacy_block_device[\u0027virtual_name\u0027] \u003d \u0027ephemeral0\u0027"},{"line_number":145,"context_line":"        elif source_type in (\u0027volume\u0027, \u0027snapshot\u0027) or no_device:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F2GA%3D","line":142,"updated":"2013-05-21 20:50:28.000000000","message":"\"Always\" is misspelled here.","commit_id":"f01b108b05c31c0f2e4e783c0c2075fd254e12f0"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bbeab59c0bd6a466ad31070116b39a44526a0abe","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                legacy_block_device[\u0027virtual_name\u0027] \u003d \u0027swap\u0027"},{"line_number":141,"context_line":"            else:"},{"line_number":142,"context_line":"                # NOTE (ndipanov): Allways label as 0 it is up to"},{"line_number":143,"context_line":"                # the calling routine to re-enumarete them"},{"line_number":144,"context_line":"                legacy_block_device[\u0027virtual_name\u0027] \u003d \u0027ephemeral0\u0027"},{"line_number":145,"context_line":"        elif source_type in (\u0027volume\u0027, \u0027snapshot\u0027) or no_device:"},{"line_number":146,"context_line":"            legacy_block_device[\u0027virtual_name\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F2F0%3D","line":143,"updated":"2013-05-21 20:50:28.000000000","message":"\"enumerate\" is misspelled here.","commit_id":"f01b108b05c31c0f2e4e783c0c2075fd254e12f0"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"cd780ab9bf56a303a32d4ba9dce0569fcf237c2d","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from nova import exception"},{"line_number":21,"context_line":"from nova.openstack.common import log as logging"},{"line_number":22,"context_line":"from nova.virt import driver"},{"line_number":23,"context_line":"from oslo.config import cfg"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"CONF \u003d cfg.CONF"},{"line_number":26,"context_line":"CONF.import_opt(\u0027default_ephemeral_format\u0027, \u0027nova.virt.driver\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FguY%3D","line":23,"updated":"2013-05-31 14:50:50.000000000","message":"oslo.* imports go up in the third-party section.","commit_id":"4234f987f8b8314d34b90b09e20396db7a388160"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"5c016cd73be39481c86ffaec954fe93ac64f3e3d","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from nova import exception"},{"line_number":21,"context_line":"from nova.openstack.common import log as logging"},{"line_number":22,"context_line":"from nova.virt import driver"},{"line_number":23,"context_line":"from oslo.config import cfg"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"CONF \u003d cfg.CONF"},{"line_number":26,"context_line":"CONF.import_opt(\u0027default_ephemeral_format\u0027, \u0027nova.virt.driver\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Fgis%3D","line":23,"in_reply_to":"AAAAPH%2F%2FguY%3D","updated":"2013-06-01 06:48:45.000000000","message":"Done","commit_id":"4234f987f8b8314d34b90b09e20396db7a388160"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"cd780ab9bf56a303a32d4ba9dce0569fcf237c2d","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        \"\"\"Basic data format validations.\"\"\""},{"line_number":78,"context_line":"        if (not set(key for key, _ in bdm_dict.iteritems()) \u003c\u003d"},{"line_number":79,"context_line":"            (self._fields | self._db_only_fields)):"},{"line_number":80,"context_line":"            raise exception.InvalidBDMFormat()"},{"line_number":81,"context_line":"        # TODO(ndipanov): Validate must-have fields!"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Fgtw%3D","line":80,"updated":"2013-05-31 14:50:50.000000000","message":"This is a bit hard to read, but it looks correct and I can\u0027t think of a better way to phrase it.","commit_id":"4234f987f8b8314d34b90b09e20396db7a388160"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"cd780ab9bf56a303a32d4ba9dce0569fcf237c2d","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    for i, dev in enumerate(dev for dev in legacy_block_device_mapping"},{"line_number":181,"context_line":"                            if dev[\u0027virtual_name\u0027] and"},{"line_number":182,"context_line":"                            is_ephemeral(dev[\u0027virtual_name\u0027])):"},{"line_number":183,"context_line":"        dev[\u0027virtual_name\u0027] \u003d dev[\u0027virtual_name\u0027][:-1] + str(i)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    return legacy_block_device_mapping"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FgtA%3D","line":183,"updated":"2013-05-31 14:50:50.000000000","message":"Are we guaranteed to always have a small enough number than just cutting off the last character works?","commit_id":"4234f987f8b8314d34b90b09e20396db7a388160"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"5c016cd73be39481c86ffaec954fe93ac64f3e3d","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    for i, dev in enumerate(dev for dev in legacy_block_device_mapping"},{"line_number":181,"context_line":"                            if dev[\u0027virtual_name\u0027] and"},{"line_number":182,"context_line":"                            is_ephemeral(dev[\u0027virtual_name\u0027])):"},{"line_number":183,"context_line":"        dev[\u0027virtual_name\u0027] \u003d dev[\u0027virtual_name\u0027][:-1] + str(i)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    return legacy_block_device_mapping"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Fgi0%3D","line":183,"in_reply_to":"AAAAPH%2F%2FgtA%3D","updated":"2013-06-01 06:48:45.000000000","message":"Doesn\u0027t matter actually how many there are, it\u0027ll do the right thing - see lines 142-144 above.","commit_id":"4234f987f8b8314d34b90b09e20396db7a388160"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"f35b853e0ce9e56d06a479d7c6fde3398861eae2","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                legacy_block_device[\u0027virtual_name\u0027] \u003d \u0027swap\u0027"},{"line_number":142,"context_line":"            else:"},{"line_number":143,"context_line":"                # NOTE (ndipanov): Always label as 0, it is up to"},{"line_number":144,"context_line":"                # the calling routine to re-enumarate them"},{"line_number":145,"context_line":"                legacy_block_device[\u0027virtual_name\u0027] \u003d \u0027ephemeral0\u0027"},{"line_number":146,"context_line":"        elif source_type in (\u0027volume\u0027, \u0027snapshot\u0027) or no_device:"},{"line_number":147,"context_line":"            legacy_block_device[\u0027virtual_name\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2Fdr4%3D","line":144,"updated":"2013-06-03 12:31:50.000000000","message":"s/enumarate/enumerate/","commit_id":"f99f8d71e1f097d8420832fd576aeb8ce8347e84"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"cdd48bdcfa69ac62c32eb253b3f2712c6d14c444","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        # NOTE (ndipanov): Never default db fields"},{"line_number":72,"context_line":"        self.update("},{"line_number":73,"context_line":"            dict((field, None)"},{"line_number":74,"context_line":"            for field in self._fields - do_not_default))"},{"line_number":75,"context_line":"        self.update(bdm_dict)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _validate(self, bdm_dict):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F%2BMQ%3D","line":74,"updated":"2013-06-04 21:07:17.000000000","message":"Please indent this line so it lines up after the open parenthesis after \u0027dict\u0027; it took me a moment to figure out you were using a generator comprehension here.","commit_id":"604282b21b64b64ffdab3bcd98d290b038857111"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"73a193e9c54031e2d1ea51b95d2ec7a5d5c19931","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        # NOTE (ndipanov): Never default db fields"},{"line_number":72,"context_line":"        self.update("},{"line_number":73,"context_line":"            dict((field, None)"},{"line_number":74,"context_line":"            for field in self._fields - do_not_default))"},{"line_number":75,"context_line":"        self.update(bdm_dict)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _validate(self, bdm_dict):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F5a0%3D","line":74,"in_reply_to":"AAAAPX%2F%2F%2BMQ%3D","updated":"2013-06-06 17:25:27.000000000","message":"Done","commit_id":"604282b21b64b64ffdab3bcd98d290b038857111"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"cdd48bdcfa69ac62c32eb253b3f2712c6d14c444","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def _validate(self, bdm_dict):"},{"line_number":78,"context_line":"        \"\"\"Basic data format validations.\"\"\""},{"line_number":79,"context_line":"        if (not set(key for key, _ in bdm_dict.iteritems()) \u003c\u003d"},{"line_number":80,"context_line":"            (self._fields | self._db_only_fields)):"},{"line_number":81,"context_line":"            raise exception.InvalidBDMFormat()"},{"line_number":82,"context_line":"        # TODO(ndipanov): Validate must-have fields!"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F%2BMI%3D","line":80,"updated":"2013-06-04 21:07:17.000000000","message":"Please consider indenting this second line by 4 more columns to help distinguish it from the code that follows…","commit_id":"604282b21b64b64ffdab3bcd98d290b038857111"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"73a193e9c54031e2d1ea51b95d2ec7a5d5c19931","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def _validate(self, bdm_dict):"},{"line_number":78,"context_line":"        \"\"\"Basic data format validations.\"\"\""},{"line_number":79,"context_line":"        if (not set(key for key, _ in bdm_dict.iteritems()) \u003c\u003d"},{"line_number":80,"context_line":"            (self._fields | self._db_only_fields)):"},{"line_number":81,"context_line":"            raise exception.InvalidBDMFormat()"},{"line_number":82,"context_line":"        # TODO(ndipanov): Validate must-have fields!"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F5a4%3D","line":80,"in_reply_to":"AAAAPX%2F%2F%2BMI%3D","updated":"2013-06-06 17:25:27.000000000","message":"Done","commit_id":"604282b21b64b64ffdab3bcd98d290b038857111"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"cdd48bdcfa69ac62c32eb253b3f2712c6d14c444","unresolved":false,"context_lines":[{"line_number":156,"context_line":"def is_safe_for_update(block_device_dict):"},{"line_number":157,"context_line":"    \"\"\"Determine if passed dict is a safe subset of both legacy"},{"line_number":158,"context_line":"    and new versions of data, that can be passed to an UPDATE query"},{"line_number":159,"context_line":"    without any transformation.\"\"\""},{"line_number":160,"context_line":"    fields \u003d set(block_device_dict.keys())"},{"line_number":161,"context_line":"    return fields \u003c\u003d (bdm_new_fields |"},{"line_number":162,"context_line":"                      bdm_db_inherited_fields |"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F%2BL0%3D","line":159,"updated":"2013-06-04 21:07:17.000000000","message":"For multi-line docstrings, I prefer to have the closing triple quote on a line by itself.","commit_id":"604282b21b64b64ffdab3bcd98d290b038857111"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"73a193e9c54031e2d1ea51b95d2ec7a5d5c19931","unresolved":false,"context_lines":[{"line_number":156,"context_line":"def is_safe_for_update(block_device_dict):"},{"line_number":157,"context_line":"    \"\"\"Determine if passed dict is a safe subset of both legacy"},{"line_number":158,"context_line":"    and new versions of data, that can be passed to an UPDATE query"},{"line_number":159,"context_line":"    without any transformation.\"\"\""},{"line_number":160,"context_line":"    fields \u003d set(block_device_dict.keys())"},{"line_number":161,"context_line":"    return fields \u003c\u003d (bdm_new_fields |"},{"line_number":162,"context_line":"                      bdm_db_inherited_fields |"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F5a8%3D","line":159,"in_reply_to":"AAAAPX%2F%2F%2BL0%3D","updated":"2013-06-06 17:25:27.000000000","message":"Done","commit_id":"604282b21b64b64ffdab3bcd98d290b038857111"}],"nova/tests/test_block_device.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"cd780ab9bf56a303a32d4ba9dce0569fcf237c2d","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                       set([\u0027db_field1\u0027, \u0027db_field2\u0027]))"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        # Make sure db fields are not picked up if they are not"},{"line_number":203,"context_line":"        # in the orriginal dict"},{"line_number":204,"context_line":"        dev_dict \u003d block_device.BlockDeviceDict({\u0027field1\u0027: \u0027foo\u0027,"},{"line_number":205,"context_line":"                                                 \u0027field2\u0027: \u0027bar\u0027,"},{"line_number":206,"context_line":"                                                 \u0027db_field1\u0027: \u0027baz\u0027})"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FgxU%3D","line":203,"updated":"2013-05-31 14:50:50.000000000","message":"s/orriginal/original/","commit_id":"4234f987f8b8314d34b90b09e20396db7a388160"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"cdd48bdcfa69ac62c32eb253b3f2712c6d14c444","unresolved":false,"context_lines":[{"line_number":167,"context_line":"             \u0027boot_index\u0027: -1}),"},{"line_number":168,"context_line":"            BDM({\u0027id\u0027: 5, \u0027instance_uuid\u0027: \u0027fake-instance\u0027,"},{"line_number":169,"context_line":"                 \u0027no_device\u0027: True,"},{"line_number":170,"context_line":"                 \u0027device_name\u0027: \u0027/dev/vdc\u0027}),"},{"line_number":171,"context_line":"        ]"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        self.legacy_mapping \u003d ["}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F%2BLg%3D","line":170,"updated":"2013-06-04 21:07:17.000000000","message":"Why is this the only BDM indented this way?  I prefer this particular indentation style, but I value consistency over a particular indention style…","commit_id":"604282b21b64b64ffdab3bcd98d290b038857111"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"73a193e9c54031e2d1ea51b95d2ec7a5d5c19931","unresolved":false,"context_lines":[{"line_number":167,"context_line":"             \u0027boot_index\u0027: -1}),"},{"line_number":168,"context_line":"            BDM({\u0027id\u0027: 5, \u0027instance_uuid\u0027: \u0027fake-instance\u0027,"},{"line_number":169,"context_line":"                 \u0027no_device\u0027: True,"},{"line_number":170,"context_line":"                 \u0027device_name\u0027: \u0027/dev/vdc\u0027}),"},{"line_number":171,"context_line":"        ]"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        self.legacy_mapping \u003d ["}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F5aw%3D","line":170,"in_reply_to":"AAAAPX%2F%2F%2BLg%3D","updated":"2013-06-06 17:25:27.000000000","message":"Done","commit_id":"604282b21b64b64ffdab3bcd98d290b038857111"}]}
