)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"a1c61d5232558c7f526c89a97ecb19581e5319b5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Alyson Rosa \u003calyson.rodrigues.rosa@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-02-08 10:35:08 -0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Update the share access interface for Hitachi HNAS driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Implements the new share access interface on the Hitachi HNAS driver"},{"line_number":10,"context_line":"and unit tests, according to blueprint."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a5ae5dd_617f5ae0","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":57},"updated":"2016-02-08 12:59:28.000000000","message":"Please change commit title to something like: \"Implement update_access() method in Hitachi HNAS driver\"","commit_id":"c904605611e1ec69a56fafd4e587ac72b2324649"}],"manila/share/drivers/hitachi/hds_hnas.py":[{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"087a4db79a7c1e6ac534e20be6ae1678980d2d31","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        host_list \u003d []"},{"line_number":153,"context_line":"        share_id \u003d self._get_hnas_share_id(share[\u0027id\u0027])"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        for rule in access_rules:"},{"line_number":156,"context_line":"            host_list.append(rule.access_to + \u0027(\u0027 + rule.access_level + \u0027)\u0027)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        self.hnas.update_access_rule(share_id, host_list)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_6132faa8","line":155,"range":{"start_line":155,"start_character":8,"end_line":155,"end_character":33},"updated":"2016-02-08 12:55:55.000000000","message":"For each rule, you should check if the access_type is ip, since this is the only type currently supported.","commit_id":"c904605611e1ec69a56fafd4e587ac72b2324649"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"087a4db79a7c1e6ac534e20be6ae1678980d2d31","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        share_id \u003d self._get_hnas_share_id(share[\u0027id\u0027])"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        for rule in access_rules:"},{"line_number":156,"context_line":"            host_list.append(rule.access_to + \u0027(\u0027 + rule.access_level + \u0027)\u0027)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        self.hnas.update_access_rule(share_id, host_list)"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_d9008804","line":156,"range":{"start_line":156,"start_character":52,"end_line":156,"end_character":69},"updated":"2016-02-08 12:55:55.000000000","message":"s/rule.access_level/rule[\u0027access_level\u0027]. Please fix other places as well.","commit_id":"c904605611e1ec69a56fafd4e587ac72b2324649"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"087a4db79a7c1e6ac534e20be6ae1678980d2d31","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        share_id \u003d self._get_hnas_share_id(share[\u0027id\u0027])"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        for rule in access_rules:"},{"line_number":156,"context_line":"            host_list.append(rule.access_to + \u0027(\u0027 + rule.access_level + \u0027)\u0027)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        self.hnas.update_access_rule(share_id, host_list)"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_39119c5d","line":156,"range":{"start_line":156,"start_character":29,"end_line":156,"end_character":43},"updated":"2016-02-08 12:55:55.000000000","message":"s/rule.access_to/rule[\u0027access_to\u0027]","commit_id":"c904605611e1ec69a56fafd4e587ac72b2324649"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"215c937a69004bd1338e62832c7ecf60efbfa5d0","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        \"\"\"Update access rules for given share."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        :param context: The `context.RequestContext` object for the request"},{"line_number":140,"context_line":"        :param share: Share that will have the access rules updated."},{"line_number":141,"context_line":"        :param access_rules: All access rules for given share. This list"},{"line_number":142,"context_line":"        is enough to update our access rules for given share."},{"line_number":143,"context_line":"        :param add_rules: None or List of access rules which should be added."}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_7de6cde9","line":140,"range":{"start_line":140,"start_character":43,"end_line":140,"end_character":46},"updated":"2016-02-09 16:28:53.000000000","message":"s/the/its","commit_id":"d46907807528142b119baa4b4b7a5b38936d954b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"b3bb244f5d7311d013cfbc39b1c709d9af1317fe","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        \"\"\"Update access rules for given share."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        :param context: The `context.RequestContext` object for the request"},{"line_number":140,"context_line":"        :param share: Share that will have the access rules updated."},{"line_number":141,"context_line":"        :param access_rules: All access rules for given share. This list"},{"line_number":142,"context_line":"        is enough to update our access rules for given share."},{"line_number":143,"context_line":"        :param add_rules: None or List of access rules which should be added."}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_de693627","line":140,"range":{"start_line":140,"start_character":43,"end_line":140,"end_character":46},"in_reply_to":"5a5ae5dd_7de6cde9","updated":"2016-02-22 12:02:06.000000000","message":"Done","commit_id":"d46907807528142b119baa4b4b7a5b38936d954b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"215c937a69004bd1338e62832c7ecf60efbfa5d0","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        :param context: The `context.RequestContext` object for the request"},{"line_number":140,"context_line":"        :param share: Share that will have the access rules updated."},{"line_number":141,"context_line":"        :param access_rules: All access rules for given share. This list"},{"line_number":142,"context_line":"        is enough to update our access rules for given share."},{"line_number":143,"context_line":"        :param add_rules: None or List of access rules which should be added."},{"line_number":144,"context_line":"        access_rules already contains these rules. Not used by"},{"line_number":145,"context_line":"        this driver."}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_3d3ff526","line":142,"range":{"start_line":142,"start_character":28,"end_line":142,"end_character":31},"updated":"2016-02-09 16:28:53.000000000","message":"s/out/the","commit_id":"d46907807528142b119baa4b4b7a5b38936d954b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"b3bb244f5d7311d013cfbc39b1c709d9af1317fe","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        :param context: The `context.RequestContext` object for the request"},{"line_number":140,"context_line":"        :param share: Share that will have the access rules updated."},{"line_number":141,"context_line":"        :param access_rules: All access rules for given share. This list"},{"line_number":142,"context_line":"        is enough to update our access rules for given share."},{"line_number":143,"context_line":"        :param add_rules: None or List of access rules which should be added."},{"line_number":144,"context_line":"        access_rules already contains these rules. Not used by"},{"line_number":145,"context_line":"        this driver."}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_be5b9286","line":142,"range":{"start_line":142,"start_character":28,"end_line":142,"end_character":31},"in_reply_to":"5a5ae5dd_3d3ff526","updated":"2016-02-22 12:02:06.000000000","message":"Done","commit_id":"d46907807528142b119baa4b4b7a5b38936d954b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a28ed1c7643528c44795a1e531c816e7bd05094a","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                msg \u003d _(\"Only IP access type currently supported.\")"},{"line_number":158,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":159,"context_line":"            host_list.append(rule[\u0027access_to\u0027] + \u0027(\u0027 +"},{"line_number":160,"context_line":"                             rule[\u0027access_level\u0027] + \u0027)\u0027)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        self.hnas.update_access_rule(share_id, host_list)"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_83b039df","line":160,"updated":"2016-02-19 21:12:48.000000000","message":"add_rules and delete_rules are not supported by this driver.  Can you add a check?  If they are not None,  should raise an exception and say it is not supported.","commit_id":"d46907807528142b119baa4b4b7a5b38936d954b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"caebfcfbe207482c7d7acc1dea3664aaf0760fff","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                msg \u003d _(\"Only IP access type currently supported.\")"},{"line_number":158,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":159,"context_line":"            host_list.append(rule[\u0027access_to\u0027] + \u0027(\u0027 +"},{"line_number":160,"context_line":"                             rule[\u0027access_level\u0027] + \u0027)\u0027)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        self.hnas.update_access_rule(share_id, host_list)"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_574c20c7","line":160,"in_reply_to":"bae84128_08ba8023","updated":"2016-02-20 02:55:38.000000000","message":"Sure.  Thanks.","commit_id":"d46907807528142b119baa4b4b7a5b38936d954b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"c22a384df6cdc8fbd67e68d751fb9cf6b838cd78","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                msg \u003d _(\"Only IP access type currently supported.\")"},{"line_number":158,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":159,"context_line":"            host_list.append(rule[\u0027access_to\u0027] + \u0027(\u0027 +"},{"line_number":160,"context_line":"                             rule[\u0027access_level\u0027] + \u0027)\u0027)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        self.hnas.update_access_rule(share_id, host_list)"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_08ba8023","line":160,"in_reply_to":"bae84128_83b039df","updated":"2016-02-19 23:58:25.000000000","message":"Xing, I think this is OK.  access_rules always contains the complete list of rules for a share, while add_rules and delete_rules may or may not contain anything.  Some backends may choose to always replace the entire rule set (for various reasons, that\u0027s what I did) instead of looking at the individual added \u0026 removed rules.","commit_id":"d46907807528142b119baa4b4b7a5b38936d954b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"c22a384df6cdc8fbd67e68d751fb9cf6b838cd78","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        self.hnas.update_access_rule(share_id, host_list)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        if host_list:"},{"line_number":165,"context_line":"            LOG.debug(\"Share %(share)s has the rules: %(rules)s\","},{"line_number":166,"context_line":"                      {\u0027share\u0027: share_id, \u0027rules\u0027: \u0027, \u0027.join(host_list)})"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_68b98ce9","line":164,"range":{"start_line":164,"start_character":11,"end_line":164,"end_character":20},"updated":"2016-02-19 23:58:25.000000000","message":"Why log a message only if there are rules.  It seems just as valuable to know that there are no rules.","commit_id":"d46907807528142b119baa4b4b7a5b38936d954b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"b3bb244f5d7311d013cfbc39b1c709d9af1317fe","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        self.hnas.update_access_rule(share_id, host_list)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        if host_list:"},{"line_number":165,"context_line":"            LOG.debug(\"Share %(share)s has the rules: %(rules)s\","},{"line_number":166,"context_line":"                      {\u0027share\u0027: share_id, \u0027rules\u0027: \u0027, \u0027.join(host_list)})"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_fe787ac6","line":164,"range":{"start_line":164,"start_character":11,"end_line":164,"end_character":20},"in_reply_to":"bae84128_68b98ce9","updated":"2016-02-22 12:02:06.000000000","message":"Added a log when there are no rules. Thanks Clinton!","commit_id":"d46907807528142b119baa4b4b7a5b38936d954b"}],"manila/tests/share/drivers/hitachi/test_hds_hnas.py":[{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"087a4db79a7c1e6ac534e20be6ae1678980d2d31","unresolved":false,"context_lines":[{"line_number":90,"context_line":"}"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"class Access(object):"},{"line_number":94,"context_line":"    def __init__(self, access_to, access_level):"},{"line_number":95,"context_line":"        self.access_to \u003d access_to"},{"line_number":96,"context_line":"        self.access_level \u003d access_level"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"@ddt.ddt"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_612c3a99","line":96,"range":{"start_line":93,"start_character":0,"end_line":96,"end_character":40},"updated":"2016-02-08 12:55:55.000000000","message":"This class is not needed. Please remove it","commit_id":"c904605611e1ec69a56fafd4e587ac72b2324649"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"087a4db79a7c1e6ac534e20be6ae1678980d2d31","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                          self._driver.__init__)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def test_update_access(self):"},{"line_number":150,"context_line":"        access1 \u003d Access(\u0027172.24.10.10\u0027, \u0027rw\u0027)"},{"line_number":151,"context_line":"        access2 \u003d Access(\u0027188.100.20.10\u0027, \u0027ro\u0027)"},{"line_number":152,"context_line":"        access_list \u003d [access1, access2]"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_21cc02ba","line":150,"range":{"start_line":150,"start_character":8,"end_line":150,"end_character":46},"updated":"2016-02-08 12:55:55.000000000","message":"access1 \u003d {\u0027access_type\u0027: \u0027ip\u0027, \u0027access_to\u0027: \u0027172.24.10.10\u0027, \u0027access_level\u0027: \u0027rw\u0027}","commit_id":"c904605611e1ec69a56fafd4e587ac72b2324649"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"087a4db79a7c1e6ac534e20be6ae1678980d2d31","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def test_update_access(self):"},{"line_number":150,"context_line":"        access1 \u003d Access(\u0027172.24.10.10\u0027, \u0027rw\u0027)"},{"line_number":151,"context_line":"        access2 \u003d Access(\u0027188.100.20.10\u0027, \u0027ro\u0027)"},{"line_number":152,"context_line":"        access_list \u003d [access1, access2]"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        self.mock_object(ssh.HNASSSHBackend, \"update_access_rule\", mock.Mock())"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_2143a214","line":151,"range":{"start_line":151,"start_character":8,"end_line":151,"end_character":47},"updated":"2016-02-08 12:55:55.000000000","message":"access2 \u003d {\u0027access_type\u0027: \u0027ip\u0027, \u0027access_to\u0027: \u0027188.100.20.10\u0027, \u0027access_level\u0027: \u0027ro\u0027}","commit_id":"c904605611e1ec69a56fafd4e587ac72b2324649"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"c22a384df6cdc8fbd67e68d751fb9cf6b838cd78","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                          self._driver.__init__)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def test_update_access(self):"},{"line_number":144,"context_line":"        access1 \u003d {\u0027access_type\u0027: \u0027ip\u0027, \u0027access_to\u0027: \u0027172.24.10.10\u0027,"},{"line_number":145,"context_line":"                   \u0027access_level\u0027: \u0027rw\u0027}"},{"line_number":146,"context_line":"        access2 \u003d {\u0027access_type\u0027: \u0027ip\u0027, \u0027access_to\u0027: \u0027188.100.20.10\u0027,"},{"line_number":147,"context_line":"                   \u0027access_level\u0027: \u0027ro\u0027}"},{"line_number":148,"context_line":"        access_list \u003d [access1, access2]"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        self.mock_object(ssh.HNASSSHBackend, \"update_access_rule\","}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_28a664c1","line":147,"range":{"start_line":144,"start_character":8,"end_line":147,"end_character":40},"updated":"2016-02-19 23:58:25.000000000","message":"Please wrap according to the guidelines.  Same elsewhere.\n\nhttp://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"d46907807528142b119baa4b4b7a5b38936d954b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"b3bb244f5d7311d013cfbc39b1c709d9af1317fe","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                          self._driver.__init__)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def test_update_access(self):"},{"line_number":144,"context_line":"        access1 \u003d {\u0027access_type\u0027: \u0027ip\u0027, \u0027access_to\u0027: \u0027172.24.10.10\u0027,"},{"line_number":145,"context_line":"                   \u0027access_level\u0027: \u0027rw\u0027}"},{"line_number":146,"context_line":"        access2 \u003d {\u0027access_type\u0027: \u0027ip\u0027, \u0027access_to\u0027: \u0027188.100.20.10\u0027,"},{"line_number":147,"context_line":"                   \u0027access_level\u0027: \u0027ro\u0027}"},{"line_number":148,"context_line":"        access_list \u003d [access1, access2]"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        self.mock_object(ssh.HNASSSHBackend, \"update_access_rule\","}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_b1590301","line":147,"range":{"start_line":144,"start_character":8,"end_line":147,"end_character":40},"in_reply_to":"bae84128_28a664c1","updated":"2016-02-22 12:02:06.000000000","message":"Done","commit_id":"d46907807528142b119baa4b4b7a5b38936d954b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"b3a88ecf86248e883e2bd51cb376be09b7645bd4","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        access1 \u003d {"},{"line_number":145,"context_line":"            \u0027access_type\u0027: \u0027ip\u0027,"},{"line_number":146,"context_line":"            \u0027access_to\u0027: \u0027172.24.10.10\u0027,"},{"line_number":147,"context_line":"            \u0027access_level\u0027: \u0027rw\u0027"},{"line_number":148,"context_line":"        }"},{"line_number":149,"context_line":"        access2 \u003d {"},{"line_number":150,"context_line":"            \u0027access_type\u0027: \u0027ip\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bae84128_d0bf4ca8","line":147,"range":{"start_line":147,"start_character":31,"end_line":147,"end_character":32},"updated":"2016-02-22 19:30:01.000000000","message":"Not enough to merit a -1, but the guidelines say every line in a dict should end with a comma.\n\nhttp://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"d449e1cfb2059f0a9e1c448afd5c54ae032a848e"}]}
