summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorJames Edwards-Jones <jedwardsjones@gitlab.com>2017-04-03 18:59:58 +0100
committerJames Edwards-Jones <jedwardsjones@gitlab.com>2017-04-03 19:19:54 +0100
commitbf3cc824e4ce6cf49a82210eaaf1cca06f7fd281 (patch)
tree04d422fe8b68079ef604348ffe96b1f2b72285ff /app
parentb8c7bef5c092152ea85d1840e587cfc04293e1d7 (diff)
downloadgitlab-ce-bf3cc824e4ce6cf49a82210eaaf1cca06f7fd281.tar.gz
Moved Project#protected_branch? to ProtectedBranch, similar for tags
Diffstat (limited to 'app')
-rw-r--r--app/helpers/branches_helper.rb2
-rw-r--r--app/helpers/tags_helper.rb2
-rw-r--r--app/models/merge_request.rb2
-rw-r--r--app/models/project.rb22
-rw-r--r--app/models/protected_branch.rb8
-rw-r--r--app/models/protected_tag.rb5
-rw-r--r--app/services/delete_branch_service.rb2
-rw-r--r--app/services/git_push_service.rb2
-rw-r--r--app/views/projects/branches/_branch.html.haml2
9 files changed, 30 insertions, 17 deletions
diff --git a/app/helpers/branches_helper.rb b/app/helpers/branches_helper.rb
index 3fc85dc6b2b..a852b90c57e 100644
--- a/app/helpers/branches_helper.rb
+++ b/app/helpers/branches_helper.rb
@@ -1,6 +1,6 @@
module BranchesHelper
def can_remove_branch?(project, branch_name)
- if project.protected_branch? branch_name
+ if ProtectedBranch.protected?(project, branch_name)
false
elsif branch_name == project.repository.root_ref
false
diff --git a/app/helpers/tags_helper.rb b/app/helpers/tags_helper.rb
index 6672e3da348..31aaf9e5607 100644
--- a/app/helpers/tags_helper.rb
+++ b/app/helpers/tags_helper.rb
@@ -23,6 +23,6 @@ module TagsHelper
end
def protected_tag?(project, tag)
- project.protected_tag?(tag.name)
+ ProtectedTag.protected?(project, tag.name)
end
end
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index cef8ad76b07..38eefad96b6 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -442,7 +442,7 @@ class MergeRequest < ActiveRecord::Base
end
def can_remove_source_branch?(current_user)
- !source_project.protected_branch?(source_branch) &&
+ !ProtectedBranch.protected?(source_project, source_branch) &&
!source_project.root_ref?(source_branch) &&
Ability.allowed?(current_user, :push_code, source_project) &&
diff_head_commit == source_branch_head
diff --git a/app/models/project.rb b/app/models/project.rb
index 4175bfab0a9..5cc224b4440 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -883,20 +883,19 @@ class Project < ActiveRecord::Base
"#{url}.git"
end
- # Check if current branch name is marked as protected in the system
- #TODO: Move elsewhere
- def protected_branch?(branch_name)
- return true if empty_repo? && default_branch_protected?
- @protected_branches ||= self.protected_branches.to_a
- ProtectedBranch.matching(branch_name, protected_refs: @protected_branches).present?
+ def empty_and_default_branch_protected?
+ empty_repo? && default_branch_protected?
end
- #TODO: Move elsewhere
- def protected_tag?(tag_name)
- #TODO: Check if memoization necessary, find way to have it work elsewhere
- @protected_tags ||= self.protected_tags.to_a
- ProtectedTag.matching(tag_name, protected_refs: @protected_tags).present?
+ #TODO: Check with if this is still needed, maybe because of `.select {` in ProtectedRefsMatcher
+ #Either with tests or by asking Tim
+ def protected_tags_array
+ @protected_tags_array ||= self.protected_tags.to_a
+ end
+
+ def protected_branches_array
+ @protected_branches_array ||= self.protected_branches.to_a
end
def user_can_push_to_empty_repo?(user)
@@ -1367,6 +1366,7 @@ class Project < ActiveRecord::Base
"projects/#{id}/pushes_since_gc"
end
+ #TODO: Move this and methods which depend upon it
def default_branch_protected?
current_application_settings.default_branch_protection == Gitlab::Access::PROTECTION_FULL ||
current_application_settings.default_branch_protection == Gitlab::Access::PROTECTION_DEV_CAN_MERGE
diff --git a/app/models/protected_branch.rb b/app/models/protected_branch.rb
index a0dbcf80c3d..eca8d5e0f7d 100644
--- a/app/models/protected_branch.rb
+++ b/app/models/protected_branch.rb
@@ -10,4 +10,12 @@ class ProtectedBranch < ActiveRecord::Base
accepts_nested_attributes_for :push_access_levels
accepts_nested_attributes_for :merge_access_levels
+
+ # Check if branch name is marked as protected in the system
+ def self.protected?(project, ref_name)
+ return true if project.empty_and_default_branch_protected?
+
+ protected_refs = project.protected_branches_array
+ self.matching(ref_name, protected_refs: protected_refs).present?
+ end
end
diff --git a/app/models/protected_tag.rb b/app/models/protected_tag.rb
index 301fe2092e9..bca5522759d 100644
--- a/app/models/protected_tag.rb
+++ b/app/models/protected_tag.rb
@@ -7,4 +7,9 @@ class ProtectedTag < ActiveRecord::Base
validates :push_access_levels, length: { is: 1, message: "are restricted to a single instance per protected tag." }
accepts_nested_attributes_for :push_access_levels
+
+ def self.protected?(project, ref_name)
+ protected_refs = project.protected_tags_array
+ self.matching(ref_name, protected_refs: protected_refs).present?
+ end
end
diff --git a/app/services/delete_branch_service.rb b/app/services/delete_branch_service.rb
index 11a045f4c31..38a113caec7 100644
--- a/app/services/delete_branch_service.rb
+++ b/app/services/delete_branch_service.rb
@@ -11,7 +11,7 @@ class DeleteBranchService < BaseService
return error('Cannot remove HEAD branch', 405)
end
- if project.protected_branch?(branch_name)
+ if ProtectedBranch.protected?(project, branch_name)
return error('Protected branch cant be removed', 405)
end
diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb
index bc7431c89a8..45411c779cc 100644
--- a/app/services/git_push_service.rb
+++ b/app/services/git_push_service.rb
@@ -127,7 +127,7 @@ class GitPushService < BaseService
project.change_head(branch_name)
# Set protection on the default branch if configured
- if current_application_settings.default_branch_protection != PROTECTION_NONE && !@project.protected_branch?(@project.default_branch)
+ if current_application_settings.default_branch_protection != PROTECTION_NONE && !ProtectedBranch.protected?(@project, @project.default_branch)
params = {
name: @project.default_branch,
diff --git a/app/views/projects/branches/_branch.html.haml b/app/views/projects/branches/_branch.html.haml
index 9eb610ba9c0..d84fa9e55c0 100644
--- a/app/views/projects/branches/_branch.html.haml
+++ b/app/views/projects/branches/_branch.html.haml
@@ -15,7 +15,7 @@
%span.label.label-info.has-tooltip{ title: "Merged into #{@repository.root_ref}" }
merged
- - if @project.protected_branch? branch.name
+ - if ProtectedBranch.protected?(@project, branch.name)
%span.label.label-success
protected
.controls.hidden-xs<