summaryrefslogtreecommitdiff
path: root/lib/gitlab/checks/snippet_check.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/checks/snippet_check.rb')
-rw-r--r--lib/gitlab/checks/snippet_check.rb14
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/gitlab/checks/snippet_check.rb b/lib/gitlab/checks/snippet_check.rb
index 8c61b782baa..d5efbfcc5bc 100644
--- a/lib/gitlab/checks/snippet_check.rb
+++ b/lib/gitlab/checks/snippet_check.rb
@@ -10,12 +10,13 @@ module Gitlab
ATTRIBUTES = %i[oldrev newrev ref branch_name tag_name logger].freeze
attr_reader(*ATTRIBUTES)
- def initialize(change, default_branch:, logger:)
+ def initialize(change, default_branch:, root_ref:, logger:)
@oldrev, @newrev, @ref = change.values_at(:oldrev, :newrev, :ref)
@branch_name = Gitlab::Git.branch_name(@ref)
@tag_name = Gitlab::Git.tag_name(@ref)
@default_branch = default_branch
+ @root_ref = root_ref
@logger = logger
@logger.append_message("Running checks for ref: #{@branch_name || @tag_name}")
end
@@ -26,12 +27,21 @@ module Gitlab
end
true
+ rescue GitAccess::ForbiddenError => e
+ Gitlab::ErrorTracking.log_exception(e, default_branch: @default_branch, branch_name: @branch_name, creation: creation?, deletion: deletion?)
+
+ raise e
end
private
+ # If the `root_ref` is not present means that this is the first commit to the
+ # repository and when the default branch is going to be created.
+ # We allow the first branch creation no matter the name because
+ # it can be even an imported snippet from an instance with a different
+ # default branch.
def creation?
- @branch_name != @default_branch && super
+ super && @root_ref && (@branch_name != @default_branch)
end
end
end