summaryrefslogtreecommitdiff
path: root/lib/gitlab/git_access.rb
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-05-22 15:38:47 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-05-22 15:38:47 +0300
commit36cac35b24d7b8318de40bd2e495b8807eef48fc (patch)
tree33206c7487c7658976cd0ed606b308eff332baf8 /lib/gitlab/git_access.rb
parenta9d60b3b146acf5540b422919fa87fa931801062 (diff)
downloadgitlab-ce-36cac35b24d7b8318de40bd2e495b8807eef48fc.tar.gz
Dont allow remove of protected branch
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'lib/gitlab/git_access.rb')
-rw-r--r--lib/gitlab/git_access.rb20
1 files changed, 12 insertions, 8 deletions
diff --git a/lib/gitlab/git_access.rb b/lib/gitlab/git_access.rb
index 4f49ca4189e..2f8b55aaca0 100644
--- a/lib/gitlab/git_access.rb
+++ b/lib/gitlab/git_access.rb
@@ -44,14 +44,18 @@ module Gitlab
def push_allowed?(user, project, ref, oldrev, newrev, forced_push)
if user && user_allowed?(user)
action = if project.protected_branch?(ref)
- if forced_push.to_s == 'true'
- :force_push_code_to_protected_branches
- else
- :push_code_to_protected_branches
- end
- else
- :push_code
- end
+ # we dont allow force push to protected branch
+ if forced_push.to_s == 'true'
+ :force_push_code_to_protected_branches
+ # and we dont allow remove of protected branch
+ elsif newrev =~ /0000000/
+ :remove_protected_branches
+ else
+ :push_code_to_protected_branches
+ end
+ else
+ :push_code
+ end
user.can?(action, project)
else
false