)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"aac917ccf93c8d938cea54b5df04def6ca1b20db","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"These same operations regarding groups instead of users are also"},{"line_number":22,"context_line":"available."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: I8396d80f031726bbd23f2cc2bb302a7691f98cba"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7aaa499b_47d41946","line":23,"updated":"2015-04-14 09:44:47.000000000","message":"Need a bp link or something in here....","commit_id":"8e91f9dd98443637e33c14754e4a1045c7dfbbb3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"816795691f7c17a795c54c8df9f4b4dd54f2f8d7","unresolved":false,"context_lines":[{"line_number":10,"context_line":"through python-keystoneclient."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Assign role to user on projects in a subtree"},{"line_number":13,"context_line":"PUT /OS-INHERIT/projects/{project_id}/users/{user_id}/roles/inherited_to_projects"},{"line_number":14,"context_line":"List user\u0027s inherited project roles on project"},{"line_number":15,"context_line":"GET /OS-INHERIT/projects/{project_id}/users/{user_id}/roles/inherited_to_projects"},{"line_number":16,"context_line":"Check if user has an inherited project role on project"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a41bdd9_56edcd23","line":13,"updated":"2015-07-13 18:29:11.000000000","message":"needs {role_id}, see http://specs.openstack.org/openstack/keystone-specs/api/v3/identity-api-v3-os-inherit-ext.html#assign-role-to-user-on-projects-in-a-subtree","commit_id":"e0e7309a96745fb227136586cec40eab6b0ed8e0"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"3c367642aef377bc1a01dd9eda200579b77d0099","unresolved":false,"context_lines":[{"line_number":10,"context_line":"through python-keystoneclient."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Assign role to user on projects in a subtree"},{"line_number":13,"context_line":"PUT /OS-INHERIT/projects/{project_id}/users/{user_id}/roles/inherited_to_projects"},{"line_number":14,"context_line":"List user\u0027s inherited project roles on project"},{"line_number":15,"context_line":"GET /OS-INHERIT/projects/{project_id}/users/{user_id}/roles/inherited_to_projects"},{"line_number":16,"context_line":"Check if user has an inherited project role on project"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a41bdd9_18597efe","line":13,"in_reply_to":"9a41bdd9_56edcd23","updated":"2015-07-14 13:17:50.000000000","message":"Done","commit_id":"e0e7309a96745fb227136586cec40eab6b0ed8e0"}],"keystoneclient/tests/unit/v3/test_roles.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"4384795aa613ceb16ab00ce7fdc5aff12ab354c8","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.manager.grant(role\u003dref[\u0027id\u0027], domain\u003ddomain_id, user\u003duser_id,"},{"line_number":60,"context_line":"                           os_inherit_extension_inherited\u003dTrue)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def test_project_role_grant_inherited(self):"},{"line_number":63,"context_line":"        user_id \u003d uuid.uuid4().hex"},{"line_number":64,"context_line":"        project_id \u003d uuid.uuid4().hex"},{"line_number":65,"context_line":"        ref \u003d self.new_ref()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3acd31a7_8f5c6dee","line":62,"updated":"2015-05-03 19:18:03.000000000","message":"These test_project_role* could be called test_project_user_role*, in order to be consistent with the correspondent test_project_group_role*\n\nAlso, the common code of the correspondent tests for users/groups (for ex test_project_role_grant_inherited and test_project_group_role_grant_inherited) could be extracted to a private method.","commit_id":"e0e7309a96745fb227136586cec40eab6b0ed8e0"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"3c367642aef377bc1a01dd9eda200579b77d0099","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.manager.grant(role\u003dref[\u0027id\u0027], domain\u003ddomain_id, user\u003duser_id,"},{"line_number":60,"context_line":"                           os_inherit_extension_inherited\u003dTrue)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def test_project_role_grant_inherited(self):"},{"line_number":63,"context_line":"        user_id \u003d uuid.uuid4().hex"},{"line_number":64,"context_line":"        project_id \u003d uuid.uuid4().hex"},{"line_number":65,"context_line":"        ref \u003d self.new_ref()"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_38456216","line":62,"in_reply_to":"3acd31a7_8f5c6dee","updated":"2015-07-14 13:17:50.000000000","message":"Ok. I\u0027ll do it in a follow up patch, once it\u0027ll be out of the scope of this one","commit_id":"e0e7309a96745fb227136586cec40eab6b0ed8e0"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"816795691f7c17a795c54c8df9f4b4dd54f2f8d7","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                      [\u0027OS-INHERIT\u0027, \u0027projects\u0027, project_id, \u0027users\u0027, user_id,"},{"line_number":69,"context_line":"                       self.collection_key, ref[\u0027id\u0027],"},{"line_number":70,"context_line":"                       \u0027inherited_to_projects\u0027],"},{"line_number":71,"context_line":"                      status_code\u003d201)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        self.manager.grant(role\u003dref[\u0027id\u0027], project\u003dproject_id, user\u003duser_id,"},{"line_number":74,"context_line":"                           os_inherit_extension_inherited\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_d6cd5d5e","line":71,"updated":"2015-07-13 18:29:11.000000000","message":"according to the spec the result is 204 No Content rather than 201 -- http://specs.openstack.org/openstack/keystone-specs/api/v3/identity-api-v3-os-inherit-ext.html#assign-role-to-user-on-projects-in-a-subtree","commit_id":"e0e7309a96745fb227136586cec40eab6b0ed8e0"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"3c367642aef377bc1a01dd9eda200579b77d0099","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                      [\u0027OS-INHERIT\u0027, \u0027projects\u0027, project_id, \u0027users\u0027, user_id,"},{"line_number":69,"context_line":"                       self.collection_key, ref[\u0027id\u0027],"},{"line_number":70,"context_line":"                       \u0027inherited_to_projects\u0027],"},{"line_number":71,"context_line":"                      status_code\u003d201)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        self.manager.grant(role\u003dref[\u0027id\u0027], project\u003dproject_id, user\u003duser_id,"},{"line_number":74,"context_line":"                           os_inherit_extension_inherited\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_b8bad208","line":71,"in_reply_to":"9a41bdd9_d6cd5d5e","updated":"2015-07-14 13:17:50.000000000","message":"Done","commit_id":"e0e7309a96745fb227136586cec40eab6b0ed8e0"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"816795691f7c17a795c54c8df9f4b4dd54f2f8d7","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                       \u0027inherited_to_projects\u0027],"},{"line_number":71,"context_line":"                      status_code\u003d201)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        self.manager.grant(role\u003dref[\u0027id\u0027], project\u003dproject_id, user\u003duser_id,"},{"line_number":74,"context_line":"                           os_inherit_extension_inherited\u003dTrue)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def test_domain_group_role_grant(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_d650fd60","line":73,"updated":"2015-07-13 18:29:11.000000000","message":"can\u0027t you just pass ref in to role here?","commit_id":"e0e7309a96745fb227136586cec40eab6b0ed8e0"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"3c367642aef377bc1a01dd9eda200579b77d0099","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                       \u0027inherited_to_projects\u0027],"},{"line_number":71,"context_line":"                      status_code\u003d201)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        self.manager.grant(role\u003dref[\u0027id\u0027], project\u003dproject_id, user\u003duser_id,"},{"line_number":74,"context_line":"                           os_inherit_extension_inherited\u003dTrue)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def test_domain_group_role_grant(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_18de5e3f","line":73,"in_reply_to":"9a41bdd9_d650fd60","updated":"2015-07-14 13:17:50.000000000","message":"Just tested it. Does not work","commit_id":"e0e7309a96745fb227136586cec40eab6b0ed8e0"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"816795691f7c17a795c54c8df9f4b4dd54f2f8d7","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                      [\u0027OS-INHERIT\u0027, \u0027projects\u0027, project_id, \u0027groups\u0027,"},{"line_number":109,"context_line":"                       group_id, self.collection_key, ref[\u0027id\u0027],"},{"line_number":110,"context_line":"                       \u0027inherited_to_projects\u0027],"},{"line_number":111,"context_line":"                      status_code\u003d201)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        self.manager.grant(role\u003dref[\u0027id\u0027], project\u003dproject_id, group\u003dgroup_id,"},{"line_number":114,"context_line":"                           os_inherit_extension_inherited\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_16ec258e","line":111,"updated":"2015-07-13 18:29:11.000000000","message":"should be 204 No Content.","commit_id":"e0e7309a96745fb227136586cec40eab6b0ed8e0"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"3c367642aef377bc1a01dd9eda200579b77d0099","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                      [\u0027OS-INHERIT\u0027, \u0027projects\u0027, project_id, \u0027groups\u0027,"},{"line_number":109,"context_line":"                       group_id, self.collection_key, ref[\u0027id\u0027],"},{"line_number":110,"context_line":"                       \u0027inherited_to_projects\u0027],"},{"line_number":111,"context_line":"                      status_code\u003d201)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        self.manager.grant(role\u003dref[\u0027id\u0027], project\u003dproject_id, group\u003dgroup_id,"},{"line_number":114,"context_line":"                           os_inherit_extension_inherited\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_d8c5568e","line":111,"in_reply_to":"9a41bdd9_16ec258e","updated":"2015-07-14 13:17:50.000000000","message":"Done","commit_id":"e0e7309a96745fb227136586cec40eab6b0ed8e0"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"816795691f7c17a795c54c8df9f4b4dd54f2f8d7","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        self.assertThat(ref_list, matchers.HasLength(len(returned_list)))"},{"line_number":142,"context_line":"        [self.assertIsInstance(r, self.model) for r in returned_list]"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def test_project_role_list_inherited(self):"},{"line_number":145,"context_line":"        user_id \u003d uuid.uuid4().hex"},{"line_number":146,"context_line":"        project_id \u003d uuid.uuid4().hex"},{"line_number":147,"context_line":"        ref_list \u003d [self.new_ref(), self.new_ref()]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_163f45d7","line":144,"updated":"2015-07-13 18:29:11.000000000","message":"this should be called test_project_user_role_list_inherited.","commit_id":"e0e7309a96745fb227136586cec40eab6b0ed8e0"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"3c367642aef377bc1a01dd9eda200579b77d0099","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        self.assertThat(ref_list, matchers.HasLength(len(returned_list)))"},{"line_number":142,"context_line":"        [self.assertIsInstance(r, self.model) for r in returned_list]"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def test_project_role_list_inherited(self):"},{"line_number":145,"context_line":"        user_id \u003d uuid.uuid4().hex"},{"line_number":146,"context_line":"        project_id \u003d uuid.uuid4().hex"},{"line_number":147,"context_line":"        ref_list \u003d [self.new_ref(), self.new_ref()]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_d84c7644","line":144,"in_reply_to":"9a41bdd9_163f45d7","updated":"2015-07-14 13:17:50.000000000","message":"Done","commit_id":"e0e7309a96745fb227136586cec40eab6b0ed8e0"}],"keystoneclient/v3/roles.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"676d4e275ce706dfe77d81c8a818fa5ff8404254","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            params[\u0027domain_id\u0027] \u003d base.getid(domain)"},{"line_number":51,"context_line":"            base_url \u003d \u0027/domains/%(domain_id)s\u0027"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        if os_inherit_extension_inherited:"},{"line_number":54,"context_line":"            base_url \u003d \u0027/OS-INHERIT\u0027 + base_url"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        if user:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa963961_5e0ac6d3","line":53,"updated":"2015-03-27 13:04:38.000000000","message":"Same name comment here as in the previous patch.","commit_id":"8e91f9dd98443637e33c14754e4a1045c7dfbbb3"}]}
