diff options
Diffstat (limited to 'lib/api')
-rw-r--r-- | lib/api/branches.rb | 17 | ||||
-rw-r--r-- | lib/api/entities.rb | 16 | ||||
-rw-r--r-- | lib/api/helpers.rb | 7 |
3 files changed, 36 insertions, 4 deletions
diff --git a/lib/api/branches.rb b/lib/api/branches.rb index d467eb9d474..35efe4f2e4a 100644 --- a/lib/api/branches.rb +++ b/lib/api/branches.rb @@ -36,6 +36,8 @@ module API # Parameters: # id (required) - The ID of a project # branch (required) - The name of the branch + # developers_can_push (optional) - Flag if developers can push to that branch + # developers_can_merge (optional) - Flag if developers can merge to that branch # Example Request: # PUT /projects/:id/repository/branches/:branch/protect put ':id/repository/branches/:branch/protect', @@ -43,9 +45,20 @@ module API authorize_admin_project @branch = user_project.repository.find_branch(params[:branch]) - not_found!("Branch") unless @branch + not_found!('Branch') unless @branch protected_branch = user_project.protected_branches.find_by(name: @branch.name) - user_project.protected_branches.create(name: @branch.name) unless protected_branch + developers_can_push = to_boolean(params[:developers_can_push]) + developers_can_merge = to_boolean(params[:developers_can_merge]) + + if protected_branch + protected_branch.developers_can_push = developers_can_push unless developers_can_push.nil? + protected_branch.developers_can_merge = developers_can_merge unless developers_can_merge.nil? + protected_branch.save + else + user_project.protected_branches.create(name: @branch.name, + developers_can_push: developers_can_push || false, + developers_can_merge: developers_can_merge || false) + end present @branch, with: Entities::RepoObject, project: user_project end diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 3c79a00eb8c..d6fed1a1eed 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -125,9 +125,21 @@ module API end end - expose :protected do |repo, options| + expose :protected do |repo_obj, options| if options[:project] - options[:project].protected_branch? repo.name + options[:project].protected_branch? repo_obj.name + end + end + + expose :developers_can_push do |repo_obj, options| + if options[:project] + options[:project].developers_can_push_to_protected_branch? repo_obj.name + end + end + + expose :developers_can_merge do |repo_obj, options| + if options[:project] + options[:project].developers_can_merge_to_protected_branch? repo_obj.name end end end diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index 73557cf7db6..d6e4eb2afd7 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -9,6 +9,13 @@ module API [ true, 1, '1', 't', 'T', 'true', 'TRUE', 'on', 'ON' ].include?(value) end + def to_boolean(value) + return true if value =~ /^(true|t|yes|y|1|on)$/i + return false if value =~ /^(false|f|no|n|0|off)$/i + + nil + end + def find_user_by_private_token token_string = (params[PRIVATE_TOKEN_PARAM] || env[PRIVATE_TOKEN_HEADER]).to_s User.find_by_authentication_token(token_string) || User.find_by_personal_access_token(token_string) |