)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15359,"name":"Erickson Filipe Guedes dos Santos","email":"erickson@lsd.ufcg.edu.br","username":"ericksonfilipe"},"change_message_id":"7bb6a7bbde33b3f34c5fa170cc892a1b7de4557d","unresolved":false,"context_lines":[{"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":"Change-Id: I3a1e9d4a45429ca2cbb02c60d52e2e8f98d9fe28"},{"line_number":18,"context_line":"Partially-Implements: bp project-tree-deletion"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7a740942_8542d83c","line":18,"updated":"2015-12-11 20:36:49.000000000","message":"Is it the last patch in the chain? If so, shouldn\u0027t it be just Implements: bp project-tree-deletion ?","commit_id":"35b3cdd9daf4e0e2cb2e2f741f01e79f85370b9f"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"359d186079a5e8d2ebcef4d8b75dd92afed84a1a","unresolved":false,"context_lines":[{"line_number":10,"context_line":"tests) to call the manager support for deleting a tree of projects."},{"line_number":11,"context_line":"The following API call is created:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"DELETE /projects/{project_id}?cascade"},{"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":"Co-Authored-By: Raildo Mascena \u003craildo@lsd.ufcg.edu.br\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"bae84128_d06a081a","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":37},"updated":"2016-02-19 19:28:24.000000000","message":"ok... so seems the opinion of the API group is that it is better that way. Besides not having the {id} as the last part of the URL is there another reasoning behind the usage of query parameter?","commit_id":"62b95a8149093ded51bb3cdd2d241931f02d62d1"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"1e3b80e731652828fa808d2a6d4c71fcec0fc13e","unresolved":false,"context_lines":[{"line_number":10,"context_line":"tests) to call the manager support for deleting a tree of projects."},{"line_number":11,"context_line":"The following API call is created:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"DELETE /projects/{project_id}?cascade"},{"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":"Co-Authored-By: Raildo Mascena \u003craildo@lsd.ufcg.edu.br\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"bae84128_3656ccd2","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":37},"in_reply_to":"bae84128_d06a081a","updated":"2016-02-19 19:45:17.000000000","message":"It is most the concept of REST, as \"cascade\" is not an entity of project. A query filter is more appropriated for this small deviation of the main flow","commit_id":"62b95a8149093ded51bb3cdd2d241931f02d62d1"}],"doc/source/policy_mapping.rst":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"eb392aec0b66539f33d828ff3482447ed749bba0","unresolved":false,"context_lines":[{"line_number":37,"context_line":"identity:create_project                                    POST /v3/projects"},{"line_number":38,"context_line":"identity:update_project                                    PATCH /v3/projects/{project_id}"},{"line_number":39,"context_line":"identity:delete_project                                    DELETE /v3/projects/{project_id}"},{"line_number":40,"context_line":"identity:delete_project_cascade                            DELETE /v3/projects/{project_id}/cascade"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"identity:get_user                                          GET /v3/users/{user_id}"},{"line_number":43,"context_line":"identity:list_users                                        GET /v3/users"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a68dd71_56ddf112","line":40,"range":{"start_line":40,"start_character":92,"end_line":40,"end_character":99},"updated":"2016-01-21 03:01:53.000000000","message":"does it make sense to have this be a query string? \n\n    DELETE /v3/projects/{project_id}?cascade","commit_id":"353b6318d8ef63dad6a299c32cf710a168a2b271"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"7aefa1054b6fd85f376af4445e840c684918f81f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"identity:create_project                                    POST /v3/projects"},{"line_number":38,"context_line":"identity:update_project                                    PATCH /v3/projects/{project_id}"},{"line_number":39,"context_line":"identity:delete_project                                    DELETE /v3/projects/{project_id}"},{"line_number":40,"context_line":"identity:delete_project_cascade                            DELETE /v3/projects/{project_id}/cascade"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"identity:get_user                                          GET /v3/users/{user_id}"},{"line_number":43,"context_line":"identity:list_users                                        GET /v3/users"}],"source_content_type":"text/x-rst","patch_set":11,"id":"dae33548_15cc8d87","line":40,"range":{"start_line":40,"start_character":92,"end_line":40,"end_character":99},"in_reply_to":"5a5ae5dd_bcf46787","updated":"2016-02-18 21:05:55.000000000","message":"Done","commit_id":"353b6318d8ef63dad6a299c32cf710a168a2b271"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"524df04492d75a8b52c8aeae6ca978a9e60bd309","unresolved":false,"context_lines":[{"line_number":37,"context_line":"identity:create_project                                    POST /v3/projects"},{"line_number":38,"context_line":"identity:update_project                                    PATCH /v3/projects/{project_id}"},{"line_number":39,"context_line":"identity:delete_project                                    DELETE /v3/projects/{project_id}"},{"line_number":40,"context_line":"identity:delete_project_cascade                            DELETE /v3/projects/{project_id}/cascade"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"identity:get_user                                          GET /v3/users/{user_id}"},{"line_number":43,"context_line":"identity:list_users                                        GET /v3/users"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5a5ae5dd_bcf46787","line":40,"range":{"start_line":40,"start_character":92,"end_line":40,"end_character":99},"in_reply_to":"9a68dd71_3b8706d9","updated":"2016-02-09 05:18:15.000000000","message":"++","commit_id":"353b6318d8ef63dad6a299c32cf710a168a2b271"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"858eb53b58efb263efef54c8cac928701b25fd34","unresolved":false,"context_lines":[{"line_number":37,"context_line":"identity:create_project                                    POST /v3/projects"},{"line_number":38,"context_line":"identity:update_project                                    PATCH /v3/projects/{project_id}"},{"line_number":39,"context_line":"identity:delete_project                                    DELETE /v3/projects/{project_id}"},{"line_number":40,"context_line":"identity:delete_project_cascade                            DELETE /v3/projects/{project_id}/cascade"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"identity:get_user                                          GET /v3/users/{user_id}"},{"line_number":43,"context_line":"identity:list_users                                        GET /v3/users"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a68dd71_80fa15bc","line":40,"range":{"start_line":40,"start_character":92,"end_line":40,"end_character":99},"in_reply_to":"9a68dd71_56ddf112","updated":"2016-01-21 18:34:26.000000000","message":"That was defined in the spec. We did that to specifically enforce a new policy rule","commit_id":"353b6318d8ef63dad6a299c32cf710a168a2b271"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"7683854be4704f4f508e1537de57690f70fb709a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"identity:create_project                                    POST /v3/projects"},{"line_number":38,"context_line":"identity:update_project                                    PATCH /v3/projects/{project_id}"},{"line_number":39,"context_line":"identity:delete_project                                    DELETE /v3/projects/{project_id}"},{"line_number":40,"context_line":"identity:delete_project_cascade                            DELETE /v3/projects/{project_id}/cascade"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"identity:get_user                                          GET /v3/users/{user_id}"},{"line_number":43,"context_line":"identity:list_users                                        GET /v3/users"}],"source_content_type":"text/x-rst","patch_set":11,"id":"9a68dd71_3b8706d9","line":40,"range":{"start_line":40,"start_character":92,"end_line":40,"end_character":99},"in_reply_to":"9a68dd71_80fa15bc","updated":"2016-01-26 20:47:10.000000000","message":"don;t make this a separate policy check.  Use the exisintg check, and do it ina  cascading fashion","commit_id":"353b6318d8ef63dad6a299c32cf710a168a2b271"}],"keystone/resource/controllers.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"eb392aec0b66539f33d828ff3482447ed749bba0","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        return self.resource_api.delete_project(project_id,"},{"line_number":312,"context_line":"                                                initiator\u003dinitiator)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    @controller.protected()"},{"line_number":315,"context_line":"    def delete_project_cascade(self, context, project_id):"},{"line_number":316,"context_line":"        initiator \u003d notifications._get_request_audit_info(context)"},{"line_number":317,"context_line":"        return self.resource_api.delete_project(project_id,"},{"line_number":318,"context_line":"                                                initiator\u003dinitiator,"},{"line_number":319,"context_line":"                                                cascade\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a68dd71_f6ce6559","line":319,"range":{"start_line":314,"start_character":4,"end_line":319,"end_character":61},"updated":"2016-01-21 03:01:53.000000000","message":"This is a straight copy/paste from the method above - can we consolidate?","commit_id":"353b6318d8ef63dad6a299c32cf710a168a2b271"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"7aefa1054b6fd85f376af4445e840c684918f81f","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        return self.resource_api.delete_project(project_id,"},{"line_number":312,"context_line":"                                                initiator\u003dinitiator)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    @controller.protected()"},{"line_number":315,"context_line":"    def delete_project_cascade(self, context, project_id):"},{"line_number":316,"context_line":"        initiator \u003d notifications._get_request_audit_info(context)"},{"line_number":317,"context_line":"        return self.resource_api.delete_project(project_id,"},{"line_number":318,"context_line":"                                                initiator\u003dinitiator,"},{"line_number":319,"context_line":"                                                cascade\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"dae33548_55c29553","line":319,"range":{"start_line":314,"start_character":4,"end_line":319,"end_character":61},"in_reply_to":"5a5ae5dd_9c25eb0b","updated":"2016-02-18 21:05:55.000000000","message":"Done","commit_id":"353b6318d8ef63dad6a299c32cf710a168a2b271"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"524df04492d75a8b52c8aeae6ca978a9e60bd309","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        return self.resource_api.delete_project(project_id,"},{"line_number":312,"context_line":"                                                initiator\u003dinitiator)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    @controller.protected()"},{"line_number":315,"context_line":"    def delete_project_cascade(self, context, project_id):"},{"line_number":316,"context_line":"        initiator \u003d notifications._get_request_audit_info(context)"},{"line_number":317,"context_line":"        return self.resource_api.delete_project(project_id,"},{"line_number":318,"context_line":"                                                initiator\u003dinitiator,"},{"line_number":319,"context_line":"                                                cascade\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a5ae5dd_9c25eb0b","line":319,"range":{"start_line":314,"start_character":4,"end_line":319,"end_character":61},"in_reply_to":"9a68dd71_e05bd1f4","updated":"2016-02-09 05:18:15.000000000","message":"lance, it\u0027s not a straight copy/paste, it has different arguments","commit_id":"353b6318d8ef63dad6a299c32cf710a168a2b271"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"858eb53b58efb263efef54c8cac928701b25fd34","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        return self.resource_api.delete_project(project_id,"},{"line_number":312,"context_line":"                                                initiator\u003dinitiator)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    @controller.protected()"},{"line_number":315,"context_line":"    def delete_project_cascade(self, context, project_id):"},{"line_number":316,"context_line":"        initiator \u003d notifications._get_request_audit_info(context)"},{"line_number":317,"context_line":"        return self.resource_api.delete_project(project_id,"},{"line_number":318,"context_line":"                                                initiator\u003dinitiator,"},{"line_number":319,"context_line":"                                                cascade\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a68dd71_e05bd1f4","line":319,"range":{"start_line":314,"start_character":4,"end_line":319,"end_character":61},"in_reply_to":"9a68dd71_f6ce6559","updated":"2016-01-21 18:34:26.000000000","message":"Is it possible to add such a route to call that method with this different parameter: https://review.openstack.org/#/c/244248/11/keystone/resource/routers.py ?","commit_id":"353b6318d8ef63dad6a299c32cf710a168a2b271"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"88a64b52ac5272f5ea4d839c9dab76c4f97b7c44","unresolved":false,"context_lines":[{"line_number":356,"context_line":"    @controller.protected()"},{"line_number":357,"context_line":"    def delete_project(self, context, filters, project_id):"},{"line_number":358,"context_line":"        initiator \u003d notifications._get_request_audit_info(context)"},{"line_number":359,"context_line":"        filters \u003d ProjectV3.build_driver_hints(context, filters).filters"},{"line_number":360,"context_line":"        # If cascade was passed as a filter in the API request, keystone will"},{"line_number":361,"context_line":"        # recursively delete a project tree"},{"line_number":362,"context_line":"        cascade \u003d any(fil[\u0027name\u0027] \u003d\u003d \u0027cascade\u0027 for fil in filters)"},{"line_number":363,"context_line":"        return self.resource_api.delete_project(project_id,"},{"line_number":364,"context_line":"                                                cascade\u003dcascade,"},{"line_number":365,"context_line":"                                                initiator\u003dinitiator)"}],"source_content_type":"text/x-python","patch_set":15,"id":"bae84128_bbf2e098","line":362,"range":{"start_line":359,"start_character":0,"end_line":362,"end_character":66},"updated":"2016-02-19 12:25:18.000000000","message":"better to do as L345-347","commit_id":"3c93e490524dfb268d393e8caf2e7f046b95cc61"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"359d186079a5e8d2ebcef4d8b75dd92afed84a1a","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        initiator \u003d notifications._get_request_audit_info(context)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        # If cascade was passed as a filter in the API request, keystone will"},{"line_number":361,"context_line":"        # recursively enable/disable a project tree"},{"line_number":362,"context_line":"        params \u003d context[\u0027query_string\u0027]"},{"line_number":363,"context_line":"        cascade \u003d (\u0027cascade\u0027 in params and"},{"line_number":364,"context_line":"                   self.query_filter_is_true(params[\u0027cascade\u0027]))"}],"source_content_type":"text/x-python","patch_set":18,"id":"bae84128_109110f1","line":361,"range":{"start_line":361,"start_character":22,"end_line":361,"end_character":36},"updated":"2016-02-19 19:28:24.000000000","message":"delete, right?","commit_id":"62b95a8149093ded51bb3cdd2d241931f02d62d1"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"a8f4eb4244fb8d76cfcbc22597088417bfe8f1f2","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        initiator \u003d notifications._get_request_audit_info(context)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        # If cascade was passed as a filter in the API request, keystone will"},{"line_number":361,"context_line":"        # recursively enable/disable a project tree"},{"line_number":362,"context_line":"        params \u003d context[\u0027query_string\u0027]"},{"line_number":363,"context_line":"        cascade \u003d (\u0027cascade\u0027 in params and"},{"line_number":364,"context_line":"                   self.query_filter_is_true(params[\u0027cascade\u0027]))"}],"source_content_type":"text/x-python","patch_set":18,"id":"bae84128_0b2d65a7","line":361,"range":{"start_line":361,"start_character":22,"end_line":361,"end_character":36},"in_reply_to":"bae84128_109110f1","updated":"2016-02-19 19:39:33.000000000","message":"Done","commit_id":"62b95a8149093ded51bb3cdd2d241931f02d62d1"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"ad9fe1e12145f176510064410e9d516b76a9357c","unresolved":false,"context_lines":[{"line_number":357,"context_line":"    def delete_project(self, context, filters, project_id):"},{"line_number":358,"context_line":"        initiator \u003d notifications._get_request_audit_info(context)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        # If cascade was passed as a filter in the API request, keystone will"},{"line_number":361,"context_line":"        # recursively delete a project tree"},{"line_number":362,"context_line":"        params \u003d context[\u0027query_string\u0027]"},{"line_number":363,"context_line":"        cascade \u003d (\u0027cascade\u0027 in params and"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_833b19eb","line":360,"range":{"start_line":360,"start_character":13,"end_line":360,"end_character":20},"updated":"2016-02-19 20:48:50.000000000","message":"highlight this somehow, using \" or \u0027","commit_id":"e96b5022fce5e4f934a2ede9c19c6378236dd4f5"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"071b532acdc2c2b9889be59e6925fb5074fe1358","unresolved":false,"context_lines":[{"line_number":357,"context_line":"    def delete_project(self, context, filters, project_id):"},{"line_number":358,"context_line":"        initiator \u003d notifications._get_request_audit_info(context)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        # If cascade was passed as a filter in the API request, keystone will"},{"line_number":361,"context_line":"        # recursively delete a project tree"},{"line_number":362,"context_line":"        params \u003d context[\u0027query_string\u0027]"},{"line_number":363,"context_line":"        cascade \u003d (\u0027cascade\u0027 in params and"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_e674b3fe","line":360,"range":{"start_line":360,"start_character":13,"end_line":360,"end_character":20},"in_reply_to":"bae84128_833b19eb","updated":"2016-02-19 21:30:38.000000000","message":"Done","commit_id":"e96b5022fce5e4f934a2ede9c19c6378236dd4f5"}],"keystone/resource/routers.py":[{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"167715eb708a0df85313434ac3cbf58d512f4dec","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            router.Router(controllers.ProjectV3(),"},{"line_number":94,"context_line":"                          \u0027projects\u0027, \u0027project\u0027,"},{"line_number":95,"context_line":"                          resource_descriptions\u003dself.v3_resources))"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        self._add_resource("},{"line_number":98,"context_line":"            mapper, project_controller,"},{"line_number":99,"context_line":"            path\u003d\u0027/projects/{project_id}/cascade\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_1f09ec95","line":96,"updated":"2015-12-03 18:23:23.000000000","message":"same question that I made here: https://review.openstack.org/#/c/243585/2/keystone/resource/routers.py","commit_id":"e997fd33e27114c2b497cf62bac13d245e6942ce"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"bc94bd0dfb01d70bea82a9814e7c621d422c2c42","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            router.Router(controllers.ProjectV3(),"},{"line_number":94,"context_line":"                          \u0027projects\u0027, \u0027project\u0027,"},{"line_number":95,"context_line":"                          resource_descriptions\u003dself.v3_resources))"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        self._add_resource("},{"line_number":98,"context_line":"            mapper, project_controller,"},{"line_number":99,"context_line":"            path\u003d\u0027/projects/{project_id}/cascade\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_9adaca77","line":96,"in_reply_to":"7a740942_1f09ec95","updated":"2015-12-03 18:37:36.000000000","message":"answer in the other patch","commit_id":"e997fd33e27114c2b497cf62bac13d245e6942ce"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"73fe8357fcdafc5c1bedafffc80a5ed2141966f5","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                          resource_descriptions\u003dself.v3_resources))"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        config_controller \u003d controllers.DomainConfigV3()"},{"line_number":47,"context_line":"        project_controller \u003d controllers.ProjectV3()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        self._add_resource("},{"line_number":50,"context_line":"            mapper, config_controller,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a5de9d1_11f200d3","line":47,"updated":"2016-01-28 17:12:44.000000000","message":"Just use the ProjectV3 controller being created at L93, do not create another instance to only route this operation","commit_id":"353b6318d8ef63dad6a299c32cf710a168a2b271"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"7aefa1054b6fd85f376af4445e840c684918f81f","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                          resource_descriptions\u003dself.v3_resources))"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        config_controller \u003d controllers.DomainConfigV3()"},{"line_number":47,"context_line":"        project_controller \u003d controllers.ProjectV3()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        self._add_resource("},{"line_number":50,"context_line":"            mapper, config_controller,"}],"source_content_type":"text/x-python","patch_set":11,"id":"dae33548_95a6ddbe","line":47,"in_reply_to":"5a5ae5dd_1c781bf8","updated":"2016-02-18 21:05:55.000000000","message":"Done","commit_id":"353b6318d8ef63dad6a299c32cf710a168a2b271"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"524df04492d75a8b52c8aeae6ca978a9e60bd309","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                          resource_descriptions\u003dself.v3_resources))"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        config_controller \u003d controllers.DomainConfigV3()"},{"line_number":47,"context_line":"        project_controller \u003d controllers.ProjectV3()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        self._add_resource("},{"line_number":50,"context_line":"            mapper, config_controller,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a5ae5dd_1c781bf8","line":47,"in_reply_to":"7a5de9d1_11f200d3","updated":"2016-02-09 05:18:15.000000000","message":"++","commit_id":"353b6318d8ef63dad6a299c32cf710a168a2b271"}],"keystone/tests/unit/test_v3_resource.py":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"73fe8357fcdafc5c1bedafffc80a5ed2141966f5","unresolved":false,"context_lines":[{"line_number":1191,"context_line":"    def test_delete_project_cascade(self):"},{"line_number":1192,"context_line":"        \"\"\"Call ``DELETE /projects/{project_id}/cascade``.\"\"\""},{"line_number":1193,"context_line":"        projects \u003d self._create_projects_hierarchy()"},{"line_number":1194,"context_line":"        project1 \u003d projects[0][\u0027project\u0027]"},{"line_number":1195,"context_line":"        project2 \u003d projects[1][\u0027project\u0027]"},{"line_number":1196,"context_line":""},{"line_number":1197,"context_line":"        for project in (project2, project1):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a5de9d1_71ca5470","line":1194,"updated":"2016-01-28 17:12:44.000000000","message":"Parhps calling them parent and child would make it easier to understand.","commit_id":"353b6318d8ef63dad6a299c32cf710a168a2b271"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"7aefa1054b6fd85f376af4445e840c684918f81f","unresolved":false,"context_lines":[{"line_number":1191,"context_line":"    def test_delete_project_cascade(self):"},{"line_number":1192,"context_line":"        \"\"\"Call ``DELETE /projects/{project_id}/cascade``.\"\"\""},{"line_number":1193,"context_line":"        projects \u003d self._create_projects_hierarchy()"},{"line_number":1194,"context_line":"        project1 \u003d projects[0][\u0027project\u0027]"},{"line_number":1195,"context_line":"        project2 \u003d projects[1][\u0027project\u0027]"},{"line_number":1196,"context_line":""},{"line_number":1197,"context_line":"        for project in (project2, project1):"}],"source_content_type":"text/x-python","patch_set":11,"id":"dae33548_1593ed5b","line":1194,"in_reply_to":"7a5de9d1_71ca5470","updated":"2016-02-18 21:05:55.000000000","message":"Done","commit_id":"353b6318d8ef63dad6a299c32cf710a168a2b271"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"66b0bb09dde67e6584d6431b36d217aaac8605f8","unresolved":false,"context_lines":[{"line_number":1146,"context_line":"        \"\"\"Call ``DELETE /projects/{project_id}/cascade``.\"\"\""},{"line_number":1147,"context_line":"        projects \u003d self._create_projects_hierarchy()"},{"line_number":1148,"context_line":"        project1 \u003d projects[0][\u0027project\u0027]"},{"line_number":1149,"context_line":"        project2 \u003d projects[1][\u0027project\u0027]"},{"line_number":1150,"context_line":""},{"line_number":1151,"context_line":"        for project in (project2, project1):"},{"line_number":1152,"context_line":"            project[\u0027enabled\u0027] \u003d False"}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_65c8e255","line":1149,"updated":"2016-02-18 13:10:42.000000000","message":"makes sense to add a third layer, so we test that it not only deletes the immediate child but everything on that branch","commit_id":"30d6b8c82f172c40423c1dc90a13f8eaff9c86fd"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"d598dd36e94ed74180ecd9337b67ef4f0a45fa80","unresolved":false,"context_lines":[{"line_number":1146,"context_line":"        \"\"\"Call ``DELETE /projects/{project_id}/cascade``.\"\"\""},{"line_number":1147,"context_line":"        projects \u003d self._create_projects_hierarchy()"},{"line_number":1148,"context_line":"        project1 \u003d projects[0][\u0027project\u0027]"},{"line_number":1149,"context_line":"        project2 \u003d projects[1][\u0027project\u0027]"},{"line_number":1150,"context_line":""},{"line_number":1151,"context_line":"        for project in (project2, project1):"},{"line_number":1152,"context_line":"            project[\u0027enabled\u0027] \u003d False"}],"source_content_type":"text/x-python","patch_set":12,"id":"dae33548_55ebb5db","line":1149,"in_reply_to":"dae33548_65c8e255","updated":"2016-02-18 21:05:03.000000000","message":"Done","commit_id":"30d6b8c82f172c40423c1dc90a13f8eaff9c86fd"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"88a64b52ac5272f5ea4d839c9dab76c4f97b7c44","unresolved":false,"context_lines":[{"line_number":1267,"context_line":"        self.assertRaises(exception.ProjectNotFound,"},{"line_number":1268,"context_line":"                          self.resource_api.get_project,"},{"line_number":1269,"context_line":"                          p3_id)"},{"line_number":1270,"context_line":""},{"line_number":1271,"context_line":""},{"line_number":1272,"context_line":"class ResourceV3toV2MethodsTestCase(unit.TestCase):"},{"line_number":1273,"context_line":"    \"\"\"Test domain V3 to V2 conversion methods.\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"bae84128_db2fe4f4","line":1270,"updated":"2016-02-19 12:25:18.000000000","message":"Add a test for ?cascade\u003dFalse","commit_id":"3c93e490524dfb268d393e8caf2e7f046b95cc61"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"359d186079a5e8d2ebcef4d8b75dd92afed84a1a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"bae84128_2bf309a0","updated":"2016-02-19 19:28:24.000000000","message":"need a test that tries to delete a branch with some projects still enabled.","commit_id":"62b95a8149093ded51bb3cdd2d241931f02d62d1"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"a8f4eb4244fb8d76cfcbc22597088417bfe8f1f2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"bae84128_0b044515","in_reply_to":"bae84128_2bf309a0","updated":"2016-02-19 19:39:33.000000000","message":"Ok, I\u0027ll add this test case.","commit_id":"62b95a8149093ded51bb3cdd2d241931f02d62d1"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"ad9fe1e12145f176510064410e9d516b76a9357c","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"                \u0027project_id\u0027: projects[0][\u0027project\u0027][\u0027id\u0027]},"},{"line_number":1221,"context_line":"            expected_status\u003dhttp_client.FORBIDDEN)"},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":"    def test_delete_large_project_cascade(self):"},{"line_number":1224,"context_line":"        \"\"\"Call ``DELETE /projects/{project_id}?cascade``."},{"line_number":1225,"context_line":""},{"line_number":1226,"context_line":"        Try update a large project with cascade true"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_6317f551","line":1223,"range":{"start_line":1223,"start_character":8,"end_line":1223,"end_character":41},"updated":"2016-02-19 20:48:50.000000000","message":"test_delete_project_branch_cascade\n\ndidn\u0027t get the \"large_project\"","commit_id":"e96b5022fce5e4f934a2ede9c19c6378236dd4f5"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"071b532acdc2c2b9889be59e6925fb5074fe1358","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"                \u0027project_id\u0027: projects[0][\u0027project\u0027][\u0027id\u0027]},"},{"line_number":1221,"context_line":"            expected_status\u003dhttp_client.FORBIDDEN)"},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":"    def test_delete_large_project_cascade(self):"},{"line_number":1224,"context_line":"        \"\"\"Call ``DELETE /projects/{project_id}?cascade``."},{"line_number":1225,"context_line":""},{"line_number":1226,"context_line":"        Try update a large project with cascade true"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_2665fb44","line":1223,"range":{"start_line":1223,"start_character":8,"end_line":1223,"end_character":41},"in_reply_to":"bae84128_6317f551","updated":"2016-02-19 21:30:38.000000000","message":"Done","commit_id":"e96b5022fce5e4f934a2ede9c19c6378236dd4f5"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"ad9fe1e12145f176510064410e9d516b76a9357c","unresolved":false,"context_lines":[{"line_number":1223,"context_line":"    def test_delete_large_project_cascade(self):"},{"line_number":1224,"context_line":"        \"\"\"Call ``DELETE /projects/{project_id}?cascade``."},{"line_number":1225,"context_line":""},{"line_number":1226,"context_line":"        Try update a large project with cascade true"},{"line_number":1227,"context_line":"        Tree we will create::"},{"line_number":1228,"context_line":"               +-p1-+"},{"line_number":1229,"context_line":"               |    |"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_e303050e","line":1226,"range":{"start_line":1226,"start_character":8,"end_line":1226,"end_character":18},"updated":"2016-02-19 20:48:50.000000000","message":"Try to delete","commit_id":"e96b5022fce5e4f934a2ede9c19c6378236dd4f5"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"071b532acdc2c2b9889be59e6925fb5074fe1358","unresolved":false,"context_lines":[{"line_number":1223,"context_line":"    def test_delete_large_project_cascade(self):"},{"line_number":1224,"context_line":"        \"\"\"Call ``DELETE /projects/{project_id}?cascade``."},{"line_number":1225,"context_line":""},{"line_number":1226,"context_line":"        Try update a large project with cascade true"},{"line_number":1227,"context_line":"        Tree we will create::"},{"line_number":1228,"context_line":"               +-p1-+"},{"line_number":1229,"context_line":"               |    |"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_865a0782","line":1226,"range":{"start_line":1226,"start_character":8,"end_line":1226,"end_character":18},"in_reply_to":"bae84128_e303050e","updated":"2016-02-19 21:30:38.000000000","message":"Done","commit_id":"e96b5022fce5e4f934a2ede9c19c6378236dd4f5"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"ad9fe1e12145f176510064410e9d516b76a9357c","unresolved":false,"context_lines":[{"line_number":1279,"context_line":"                          self.resource_api.get_project,"},{"line_number":1280,"context_line":"                          project[\u0027id\u0027])"},{"line_number":1281,"context_line":""},{"line_number":1282,"context_line":"    def test_forbit_cascade_with_enabled_project(self):"},{"line_number":1283,"context_line":"        \"\"\"Do not permit delete a branch with some project enabled."},{"line_number":1284,"context_line":""},{"line_number":1285,"context_line":"        Tree we will create::"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_8344b974","line":1282,"range":{"start_line":1282,"start_character":13,"end_line":1282,"end_character":19},"updated":"2016-02-19 20:48:50.000000000","message":"s/forbit/forbidden or just \"test_cascade_delete_with_enabled_projects\" (this behavior may change in the future, who knows)","commit_id":"e96b5022fce5e4f934a2ede9c19c6378236dd4f5"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"071b532acdc2c2b9889be59e6925fb5074fe1358","unresolved":false,"context_lines":[{"line_number":1279,"context_line":"                          self.resource_api.get_project,"},{"line_number":1280,"context_line":"                          project[\u0027id\u0027])"},{"line_number":1281,"context_line":""},{"line_number":1282,"context_line":"    def test_forbit_cascade_with_enabled_project(self):"},{"line_number":1283,"context_line":"        \"\"\"Do not permit delete a branch with some project enabled."},{"line_number":1284,"context_line":""},{"line_number":1285,"context_line":"        Tree we will create::"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_665f0373","line":1282,"range":{"start_line":1282,"start_character":13,"end_line":1282,"end_character":19},"in_reply_to":"bae84128_8344b974","updated":"2016-02-19 21:30:38.000000000","message":"Done","commit_id":"e96b5022fce5e4f934a2ede9c19c6378236dd4f5"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"ad9fe1e12145f176510064410e9d516b76a9357c","unresolved":false,"context_lines":[{"line_number":1280,"context_line":"                          project[\u0027id\u0027])"},{"line_number":1281,"context_line":""},{"line_number":1282,"context_line":"    def test_forbit_cascade_with_enabled_project(self):"},{"line_number":1283,"context_line":"        \"\"\"Do not permit delete a branch with some project enabled."},{"line_number":1284,"context_line":""},{"line_number":1285,"context_line":"        Tree we will create::"},{"line_number":1286,"context_line":"                p1"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_a610eb4f","line":1283,"range":{"start_line":1283,"start_character":11,"end_line":1283,"end_character":67},"updated":"2016-02-19 20:48:50.000000000","message":"maybe: Test the deletion of a project branch containing an enabled project.","commit_id":"e96b5022fce5e4f934a2ede9c19c6378236dd4f5"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"071b532acdc2c2b9889be59e6925fb5074fe1358","unresolved":false,"context_lines":[{"line_number":1280,"context_line":"                          project[\u0027id\u0027])"},{"line_number":1281,"context_line":""},{"line_number":1282,"context_line":"    def test_forbit_cascade_with_enabled_project(self):"},{"line_number":1283,"context_line":"        \"\"\"Do not permit delete a branch with some project enabled."},{"line_number":1284,"context_line":""},{"line_number":1285,"context_line":"        Tree we will create::"},{"line_number":1286,"context_line":"                p1"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_c6540f56","line":1283,"range":{"start_line":1283,"start_character":11,"end_line":1283,"end_character":67},"in_reply_to":"bae84128_a610eb4f","updated":"2016-02-19 21:30:38.000000000","message":"Done","commit_id":"e96b5022fce5e4f934a2ede9c19c6378236dd4f5"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"4fe5084af1c0e9f87a4944da60208968bdbcb604","unresolved":false,"context_lines":[{"line_number":1279,"context_line":"                          self.resource_api.get_project,"},{"line_number":1280,"context_line":"                          project[\u0027id\u0027])"},{"line_number":1281,"context_line":""},{"line_number":1282,"context_line":"    def test_cascade_with_enabled_project(self):"},{"line_number":1283,"context_line":"        \"\"\"Test the deletion of a project branch containing an enabled project."},{"line_number":1284,"context_line":""},{"line_number":1285,"context_line":"        Tree we will create::"}],"source_content_type":"text/x-python","patch_set":20,"id":"bae84128_9986e8b7","line":1282,"range":{"start_line":1282,"start_character":8,"end_line":1282,"end_character":41},"updated":"2016-02-19 21:39:03.000000000","message":"cascade_delete? what about \"test_delete_project_branch_cascade_with_enabled_projects\"","commit_id":"ad928e8ef877ad83c4737ca40cd9cd28c5248b45"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ec14e2c8d694d6b0cb62c8cac12d688eb6bb7926","unresolved":false,"context_lines":[{"line_number":1223,"context_line":"    def test_delete_project_branch_cascade(self):"},{"line_number":1224,"context_line":"        \"\"\"Call ``DELETE /projects/{project_id}?cascade``."},{"line_number":1225,"context_line":""},{"line_number":1226,"context_line":"        Try to delete a large project with cascade true"},{"line_number":1227,"context_line":"        Tree we will create::"},{"line_number":1228,"context_line":"               +-p1-+"},{"line_number":1229,"context_line":"               |    |"},{"line_number":1230,"context_line":"              p5    p2"},{"line_number":1231,"context_line":"               |    |"},{"line_number":1232,"context_line":"              p6  +-p3-+"},{"line_number":1233,"context_line":"                  |    |"},{"line_number":1234,"context_line":"                  p7   p4"},{"line_number":1235,"context_line":"        \"\"\""},{"line_number":1236,"context_line":"        # create a hierarchy with 4 levels"},{"line_number":1237,"context_line":"        projects_hierarchy \u003d self._create_projects_hierarchy(hierarchy_size\u003d4)"}],"source_content_type":"text/x-python","patch_set":22,"id":"bae84128_e8a59504","line":1234,"range":{"start_line":1226,"start_character":8,"end_line":1234,"end_character":25},"updated":"2016-02-20 06:32:08.000000000","message":"i feel this was the same setup at the update test? consider creating a common function to set up this tree","commit_id":"1065c72d6fdee3c6fe912670fc42ff886f560768"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"3790ef9cfe837dd62077007c741f384932efa733","unresolved":false,"context_lines":[{"line_number":1223,"context_line":"    def test_delete_project_branch_cascade(self):"},{"line_number":1224,"context_line":"        \"\"\"Call ``DELETE /projects/{project_id}?cascade``."},{"line_number":1225,"context_line":""},{"line_number":1226,"context_line":"        Try to delete a large project with cascade true"},{"line_number":1227,"context_line":"        Tree we will create::"},{"line_number":1228,"context_line":"               +-p1-+"},{"line_number":1229,"context_line":"               |    |"},{"line_number":1230,"context_line":"              p5    p2"},{"line_number":1231,"context_line":"               |    |"},{"line_number":1232,"context_line":"              p6  +-p3-+"},{"line_number":1233,"context_line":"                  |    |"},{"line_number":1234,"context_line":"                  p7   p4"},{"line_number":1235,"context_line":"        \"\"\""},{"line_number":1236,"context_line":"        # create a hierarchy with 4 levels"},{"line_number":1237,"context_line":"        projects_hierarchy \u003d self._create_projects_hierarchy(hierarchy_size\u003d4)"}],"source_content_type":"text/x-python","patch_set":22,"id":"bae84128_3f568ad2","line":1234,"range":{"start_line":1226,"start_character":8,"end_line":1234,"end_character":25},"in_reply_to":"bae84128_e8a59504","updated":"2016-02-20 14:38:11.000000000","message":"agreed. I\u0027ll send a follow patch fixing this.","commit_id":"1065c72d6fdee3c6fe912670fc42ff886f560768"}],"releasenotes/notes/bp-project-tree-deletion-ff02fdaddab96136.yaml":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"eefeb708f6521adc82b38857c8a0c9befbb64004","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - \u003e"},{"line_number":4,"context_line":"   [\u0027blueprint project-tree-deletion \u003chttps://blueprints.launchpad.net/keystone/+spec/project-tree-deletion\u003e\u0027_]"},{"line_number":5,"context_line":"   Support the possibility to delete/disable a whole subtree,"},{"line_number":6,"context_line":"   where the children of the requested node will be also"},{"line_number":7,"context_line":"   deleted/disabled."}],"source_content_type":"text/x-yaml","patch_set":21,"id":"bae84128_5cd60ec6","line":5,"range":{"start_line":5,"start_character":15,"end_line":5,"end_character":26},"updated":"2016-02-19 22:06:52.000000000","message":"ability ?","commit_id":"0519c7e82f43de5cd02364304cec3e25dd38486a"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"eefeb708f6521adc82b38857c8a0c9befbb64004","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - \u003e"},{"line_number":4,"context_line":"   [\u0027blueprint project-tree-deletion \u003chttps://blueprints.launchpad.net/keystone/+spec/project-tree-deletion\u003e\u0027_]"},{"line_number":5,"context_line":"   Support the possibility to delete/disable a whole subtree,"},{"line_number":6,"context_line":"   where the children of the requested node will be also"},{"line_number":7,"context_line":"   deleted/disabled."}],"source_content_type":"text/x-yaml","patch_set":21,"id":"bae84128_dce21e9f","line":5,"range":{"start_line":5,"start_character":30,"end_line":5,"end_character":44},"updated":"2016-02-19 22:06:52.000000000","message":"also supports enabling","commit_id":"0519c7e82f43de5cd02364304cec3e25dd38486a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ec14e2c8d694d6b0cb62c8cac12d688eb6bb7926","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - \u003e"},{"line_number":4,"context_line":"   [\u0027blueprint project-tree-deletion \u003chttps://blueprints.launchpad.net/keystone/+spec/project-tree-deletion\u003e\u0027_]"},{"line_number":5,"context_line":"   Support the ability to delete/disable a whole subtree"},{"line_number":6,"context_line":"   also supports enabling it, where the children of the"},{"line_number":7,"context_line":"   requested node will be also deleted, disabled or enabled."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"bae84128_68e86511","line":5,"range":{"start_line":5,"start_character":26,"end_line":5,"end_character":56},"updated":"2016-02-20 06:32:08.000000000","message":"\"Support the ability to perform a cascading delete or update of a project and its subprojects. When performing a cascading updating, only the ``enabled`` attribute is supported. When performing a cascading delete, all projects must first be disabled.\"","commit_id":"1065c72d6fdee3c6fe912670fc42ff886f560768"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"830b838e34391eb3fad64a8c90640b43f11fa4fb","unresolved":false,"context_lines":[{"line_number":4,"context_line":"   [\u0027blueprint project-tree-deletion \u003chttps://blueprints.launchpad.net/keystone/+spec/project-tree-deletion\u003e\u0027_]"},{"line_number":5,"context_line":"   Support the ability to perform a cascading delete or update of a project and its subprojects."},{"line_number":6,"context_line":"   When performing a cascading updating, only the ``enabled`` attribute is supported. When"},{"line_number":7,"context_line":"   performing a cascading delete, all projects must first be disabled."}],"source_content_type":"text/x-yaml","patch_set":24,"id":"bae84128_3e50225d","line":7,"range":{"start_line":7,"start_character":34,"end_line":7,"end_character":69},"updated":"2016-02-22 11:47:43.000000000","message":"maybe: all projects must be disabled first.","commit_id":"76e679f24625e5770a83728670ca769c0c4a9b09"}]}
