2019-02-15 15:39:39 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Gitlab
|
|
|
|
module Checks
|
|
|
|
class BaseChecker
|
2019-12-04 20:38:33 +05:30
|
|
|
prepend_if_ee('EE::Gitlab::Checks::BaseChecker') # rubocop: disable Cop/InjectEnterpriseEditionModule
|
2019-02-15 15:39:39 +05:30
|
|
|
include Gitlab::Utils::StrongMemoize
|
|
|
|
|
|
|
|
attr_reader :change_access
|
|
|
|
delegate(*ChangeAccess::ATTRIBUTES, to: :change_access)
|
|
|
|
|
|
|
|
def initialize(change_access)
|
|
|
|
@change_access = change_access
|
|
|
|
end
|
|
|
|
|
|
|
|
def validate!
|
|
|
|
raise NotImplementedError
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def creation?
|
|
|
|
Gitlab::Git.blank_ref?(oldrev)
|
|
|
|
end
|
|
|
|
|
|
|
|
def deletion?
|
|
|
|
Gitlab::Git.blank_ref?(newrev)
|
|
|
|
end
|
|
|
|
|
|
|
|
def update?
|
|
|
|
!creation? && !deletion?
|
|
|
|
end
|
|
|
|
|
|
|
|
def updated_from_web?
|
|
|
|
protocol == 'web'
|
|
|
|
end
|
|
|
|
|
|
|
|
def tag_exists?
|
|
|
|
project.repository.tag_exists?(tag_name)
|
|
|
|
end
|
|
|
|
|
|
|
|
def validate_once(resource)
|
|
|
|
Gitlab::SafeRequestStore.fetch(cache_key_for_resource(resource)) do
|
|
|
|
yield(resource)
|
|
|
|
|
|
|
|
true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def cache_key_for_resource(resource)
|
|
|
|
"git_access:#{checker_cache_key}:#{resource.cache_key}"
|
|
|
|
end
|
|
|
|
|
|
|
|
def checker_cache_key
|
|
|
|
self.class.name.demodulize.underscore
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|