-
- Downloads
There was an error fetching the commit references. Please try again later.
Fix branch protection API.
1. Previously, we were not removing existing access levels before creating new ones. This is not a problem for EE, but _is_ for CE, since we restrict the number of access levels in CE to 1. 2. The correct approach is: CE -> delete all access levels before updating a protected branch EE -> delete developer access levels if "developers_can_{merge,push}" is switched off 3. The dispatch is performed by checking if a "length: 1" validation is present on the access levels or not. 4. Another source of problems was that we didn't put multiple queries in a transaction. If the `destroy_all` passes, but the `update` fails, we should have a rollback. 5. Modifying the API to provide users direct access to CRUD access levels will make things a lot simpler. 6. Create `create/update` services separately for this API, which perform the necessary data translation, before calling the regular `create/update` services. The translation code was getting too large for the API endpoint itself, so this move makes sense.
Showing
- app/models/concerns/protected_branch_access.rb 5 additions, 0 deletionsapp/models/concerns/protected_branch_access.rb
- app/services/protected_branches/api_create_service.rb 30 additions, 0 deletionsapp/services/protected_branches/api_create_service.rb
- app/services/protected_branches/api_update_service.rb 79 additions, 0 deletionsapp/services/protected_branches/api_update_service.rb
- lib/api/branches.rb 16 additions, 31 deletionslib/api/branches.rb
- spec/requests/api/branches_spec.rb 123 additions, 67 deletionsspec/requests/api/branches_spec.rb
Please register or sign in to comment