)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"f90357007cbcfc05d232de240636765ea3a9ca89","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Co-Authored-By: Henrique Truta \u003chenrique@lsd.ufcg.edu.br\u003e"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"bp reseller"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I7093edee7dbf751d4a4e4d1187984c5963a0af50"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"da20952f_14cba054","line":17,"updated":"2015-09-03 14:32:03.000000000","message":"When referencing a blueprint put \u0027Implements:\u0027 before \u0027bp\u0027","commit_id":"945e252139aa568fbe09dd9d1b12ea2d67a3f2b0"}],"keystone/resource/backends/sql.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"da0f20ad7159f5eb68b4835ad0c345f5294b3ac5","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            project_refs \u003d query.filter_by(domain_id\u003ddomain_id)"},{"line_number":85,"context_line":"            return [project_ref.to_dict() for project_ref in project_refs]"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _get_children(self, session, project_ids, domain_id\u003dNone):"},{"line_number":88,"context_line":"        query \u003d session.query(Project)"},{"line_number":89,"context_line":"        query \u003d query.filter(Project.parent_id.in_(project_ids))"},{"line_number":90,"context_line":"        if domain_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_82b1c591","line":87,"updated":"2015-08-04 22:31:59.000000000","message":"Question: is the goal to include in this list any sub projects that are acting as a domain, but not their subtrees....or to exclude them entirely?  If it is the former, then this works...if it\u0027s the later then the filer is not correct.","commit_id":"c3735264e3ac68ad2e604eb166e1872a8d9c0d3d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"cea98ee591c46835c9a52bc28d9240daa4c97047","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            project_refs \u003d query.filter_by(domain_id\u003ddomain_id)"},{"line_number":85,"context_line":"            return [project_ref.to_dict() for project_ref in project_refs]"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _get_children(self, session, project_ids, domain_id\u003dNone):"},{"line_number":88,"context_line":"        query \u003d session.query(Project)"},{"line_number":89,"context_line":"        query \u003d query.filter(Project.parent_id.in_(project_ids))"},{"line_number":90,"context_line":"        if domain_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_f895d6e3","line":87,"in_reply_to":"1a4dcd0f_82b1c591","updated":"2015-08-04 23:29:25.000000000","message":"the intention is to include the project acting as domain but not its subtree","commit_id":"c3735264e3ac68ad2e604eb166e1872a8d9c0d3d"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"c9118375316e694b7b5c867d3cfc2847cc8f143b","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                    session, project[\u0027parent_id\u0027]).to_dict()"},{"line_number":136,"context_line":"                parents.append(parent_project)"},{"line_number":137,"context_line":"                project \u003d parent_project"},{"line_number":138,"context_line":"                if project[\u0027is_domain\u0027]:"},{"line_number":139,"context_line":"                    project \u003d None"},{"line_number":140,"context_line":"            return parents"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa1b9901_9d04dcc0","line":138,"updated":"2015-08-18 16:59:43.000000000","message":"I know, this code is mine... but a comment here would be useful :P","commit_id":"f667d67cc9db55bf37d391e3e707812d47499bca"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"198723353598990e23f829619eb3e65472f6fa6f","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                    session, project[\u0027parent_id\u0027]).to_dict()"},{"line_number":136,"context_line":"                parents.append(parent_project)"},{"line_number":137,"context_line":"                project \u003d parent_project"},{"line_number":138,"context_line":"                if project[\u0027is_domain\u0027]:"},{"line_number":139,"context_line":"                    project \u003d None"},{"line_number":140,"context_line":"            return parents"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa1b9901_bdf88e4a","line":138,"in_reply_to":"fa1b9901_9d04dcc0","updated":"2015-08-19 17:23:28.000000000","message":"Done","commit_id":"f667d67cc9db55bf37d391e3e707812d47499bca"}],"keystone/resource/core.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"c9118375316e694b7b5c867d3cfc2847cc8f143b","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        def traverse_parents_hierarchy(project):"},{"line_number":400,"context_line":"            parent_id \u003d project.get(\u0027parent_id\u0027)"},{"line_number":401,"context_line":"            is_domain \u003d project.get(\u0027is_domain\u0027)"},{"line_number":402,"context_line":"            if not parent_id or is_domain:"},{"line_number":403,"context_line":"                return None"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"            parent \u003d parents_by_id[parent_id]"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa1b9901_1d276c65","line":402,"updated":"2015-08-18 16:59:43.000000000","message":"here too","commit_id":"f667d67cc9db55bf37d391e3e707812d47499bca"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"198723353598990e23f829619eb3e65472f6fa6f","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        def traverse_parents_hierarchy(project):"},{"line_number":400,"context_line":"            parent_id \u003d project.get(\u0027parent_id\u0027)"},{"line_number":401,"context_line":"            is_domain \u003d project.get(\u0027is_domain\u0027)"},{"line_number":402,"context_line":"            if not parent_id or is_domain:"},{"line_number":403,"context_line":"                return None"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"            parent \u003d parents_by_id[parent_id]"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa1b9901_5dbdb266","line":402,"in_reply_to":"fa1b9901_1d276c65","updated":"2015-08-19 17:23:28.000000000","message":"Done","commit_id":"f667d67cc9db55bf37d391e3e707812d47499bca"}],"keystone/tests/unit/test_backend.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"c9118375316e694b7b5c867d3cfc2847cc8f143b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"fa1b9901_3d391042","updated":"2015-08-18 16:59:43.000000000","message":"I\u0027d suggest make the same _as_ids calls right below the _as_list calls - they should have the \"same\" result","commit_id":"f667d67cc9db55bf37d391e3e707812d47499bca"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"c9118375316e694b7b5c867d3cfc2847cc8f143b","unresolved":false,"context_lines":[{"line_number":2500,"context_line":"        self.assertEqual(0, len(subtree))"},{"line_number":2501,"context_line":""},{"line_number":2502,"context_line":"    @tests.skip_if_no_multiple_domains_support"},{"line_number":2503,"context_line":"    def test_projects_subtree_do_not_bypass_domains(self):"},{"line_number":2504,"context_line":"        projects_hierarchy \u003d self._create_projects_hierarchy(is_domain\u003dTrue,"},{"line_number":2505,"context_line":"                                                             hierarchy_size\u003d2)"},{"line_number":2506,"context_line":"        project1 \u003d projects_hierarchy[0]"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa1b9901_5dbba4e5","line":2503,"updated":"2015-08-18 16:59:43.000000000","message":"add a docstring explaining the hierarchy used in the test","commit_id":"f667d67cc9db55bf37d391e3e707812d47499bca"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"198723353598990e23f829619eb3e65472f6fa6f","unresolved":false,"context_lines":[{"line_number":2500,"context_line":"        self.assertEqual(0, len(subtree))"},{"line_number":2501,"context_line":""},{"line_number":2502,"context_line":"    @tests.skip_if_no_multiple_domains_support"},{"line_number":2503,"context_line":"    def test_projects_subtree_do_not_bypass_domains(self):"},{"line_number":2504,"context_line":"        projects_hierarchy \u003d self._create_projects_hierarchy(is_domain\u003dTrue,"},{"line_number":2505,"context_line":"                                                             hierarchy_size\u003d2)"},{"line_number":2506,"context_line":"        project1 \u003d projects_hierarchy[0]"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa1b9901_5d193287","line":2503,"in_reply_to":"fa1b9901_5dbba4e5","updated":"2015-08-19 17:23:28.000000000","message":"Done","commit_id":"f667d67cc9db55bf37d391e3e707812d47499bca"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"c9118375316e694b7b5c867d3cfc2847cc8f143b","unresolved":false,"context_lines":[{"line_number":2524,"context_line":"        self.resource_api.create_project(sub_project_2[\u0027id\u0027], sub_project_2)"},{"line_number":2525,"context_line":""},{"line_number":2526,"context_line":"        subtree_1 \u003d self.resource_api.list_projects_in_subtree(project1[\u0027id\u0027])"},{"line_number":2527,"context_line":"        # project1\u0027s subtree won\u0027t contain any project"},{"line_number":2528,"context_line":"        self.assertEqual(0, len(subtree_1))"},{"line_number":2529,"context_line":""},{"line_number":2530,"context_line":"        # project2\u0027s subtree won\u0027t contain any project"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa1b9901_1d9a0c64","line":2527,"updated":"2015-08-18 16:59:43.000000000","message":"why not? I\u0027d expect subproject1 here","commit_id":"f667d67cc9db55bf37d391e3e707812d47499bca"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"c9118375316e694b7b5c867d3cfc2847cc8f143b","unresolved":false,"context_lines":[{"line_number":2529,"context_line":""},{"line_number":2530,"context_line":"        # project2\u0027s subtree won\u0027t contain any project"},{"line_number":2531,"context_line":"        subtree_2 \u003d self.resource_api.list_projects_in_subtree(project2[\u0027id\u0027])"},{"line_number":2532,"context_line":"        self.assertEqual(0, len(subtree_2))"},{"line_number":2533,"context_line":""},{"line_number":2534,"context_line":"        subtree_1_ids \u003d self.resource_api.get_projects_in_subtree_as_ids("},{"line_number":2535,"context_line":"            project1[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa1b9901_fd9f184e","line":2532,"updated":"2015-08-18 16:59:43.000000000","message":"why not? I\u0027d expect subproject2 here","commit_id":"f667d67cc9db55bf37d391e3e707812d47499bca"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"c9118375316e694b7b5c867d3cfc2847cc8f143b","unresolved":false,"context_lines":[{"line_number":2609,"context_line":"        self.assertEqual(0, len(parents))"},{"line_number":2610,"context_line":""},{"line_number":2611,"context_line":"    @tests.skip_if_no_multiple_domains_support"},{"line_number":2612,"context_line":"    def test_project_parents_do_not_bypass_domains(self):"},{"line_number":2613,"context_line":"        projects_hierarchy \u003d self._create_projects_hierarchy(is_domain\u003dTrue,"},{"line_number":2614,"context_line":"                                                             hierarchy_size\u003d2)"},{"line_number":2615,"context_line":"        project1 \u003d projects_hierarchy[0]"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa1b9901_7dba28c2","line":2612,"updated":"2015-08-18 16:59:43.000000000","message":"add docstring to explain the hierarchy","commit_id":"f667d67cc9db55bf37d391e3e707812d47499bca"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"c9118375316e694b7b5c867d3cfc2847cc8f143b","unresolved":false,"context_lines":[{"line_number":2642,"context_line":"        self.assertEqual(1, len(parents_sub_project_1))"},{"line_number":2643,"context_line":"        self.assertIn(project1, parents_sub_project_1)"},{"line_number":2644,"context_line":""},{"line_number":2645,"context_line":"        # sub_project_2\u0027s parents must contain project2"},{"line_number":2646,"context_line":"        parents_sub_project_2 \u003d self.resource_api.list_project_parents("},{"line_number":2647,"context_line":"            sub_project_2[\u0027id\u0027])"},{"line_number":2648,"context_line":"        self.assertEqual(1, len(parents_sub_project_2))"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa1b9901_ddd25400","line":2645,"updated":"2015-08-18 16:59:43.000000000","message":"must contain only project2","commit_id":"f667d67cc9db55bf37d391e3e707812d47499bca"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"c9118375316e694b7b5c867d3cfc2847cc8f143b","unresolved":false,"context_lines":[{"line_number":2648,"context_line":"        self.assertEqual(1, len(parents_sub_project_2))"},{"line_number":2649,"context_line":"        self.assertIn(project2, parents_sub_project_2)"},{"line_number":2650,"context_line":""},{"line_number":2651,"context_line":"        # sub_project_1\u0027s parents must contain project1"},{"line_number":2652,"context_line":"        parents_sub_project_1_ids \u003d ("},{"line_number":2653,"context_line":"            self.resource_api.get_project_parents_as_ids(sub_project_1))"},{"line_number":2654,"context_line":"        self.assertIn(project1[\u0027id\u0027], parents_sub_project_1_ids)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa1b9901_9ddcdc13","line":2651,"updated":"2015-08-18 16:59:43.000000000","message":"only project1","commit_id":"f667d67cc9db55bf37d391e3e707812d47499bca"}]}
