gitlab-org--gitlab-foss/lib/gitlab/checks/post_push_message.rb

62 lines
1.5 KiB
Ruby

# frozen_string_literal: true
module Gitlab
module Checks
class PostPushMessage
def initialize(repository, user, protocol)
@repository = repository
@user = user
@protocol = protocol
end
def self.fetch_message(user, repository)
key = message_key(user, repository)
# Also check for messages in the legacy key
# TODO: Remove in the next release
# https://gitlab.com/gitlab-org/gitlab/-/issues/292030
legacy_key = legacy_message_key(user, repository) if respond_to?(:legacy_message_key)
Gitlab::Redis::SharedState.with do |redis|
message = redis.get(key)
redis.del(key)
if legacy_key
legacy_message = redis.get(legacy_key)
redis.del(legacy_key)
end
legacy_message || message
end
end
def add_message
return unless user && repository
Gitlab::Redis::SharedState.with do |redis|
key = self.class.message_key(user, repository)
redis.setex(key, 5.minutes, message)
end
end
def message
raise NotImplementedError
end
protected
attr_reader :repository, :user, :protocol
delegate :project, to: :repository, allow_nil: true
delegate :container, to: :repository, allow_nil: false
def self.message_key(user, repository)
raise NotImplementedError
end
def url_to_repo
protocol == 'ssh' ? container.ssh_url_to_repo : container.http_url_to_repo
end
end
end
end