diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-10-20 11:43:02 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-10-20 11:43:02 +0300 |
commit | d9ab72d6080f594d0b3cae15f14b3ef2c6c638cb (patch) | |
tree | 2341ef426af70ad1e289c38036737e04b0aa5007 /lib/gitlab/merge_requests | |
parent | d6e514dd13db8947884cd58fe2a9c2a063400a9b (diff) |
Add latest changes from gitlab-org/gitlab@14-4-stable-eev14.4.0-rc42
Diffstat (limited to 'lib/gitlab/merge_requests')
3 files changed, 96 insertions, 0 deletions
diff --git a/lib/gitlab/merge_requests/mergeability/check_result.rb b/lib/gitlab/merge_requests/mergeability/check_result.rb new file mode 100644 index 00000000000..d0788c7d7c7 --- /dev/null +++ b/lib/gitlab/merge_requests/mergeability/check_result.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true +module Gitlab + module MergeRequests + module Mergeability + class CheckResult + SUCCESS_STATUS = :success + FAILED_STATUS = :failed + + attr_reader :status, :payload + + def self.default_payload + { last_run_at: Time.current } + end + + def self.success(payload: {}) + new(status: SUCCESS_STATUS, payload: default_payload.merge(payload)) + end + + def self.failed(payload: {}) + new(status: FAILED_STATUS, payload: default_payload.merge(payload)) + end + + def self.from_hash(data) + new( + status: data.fetch(:status), + payload: data.fetch(:payload)) + end + + def initialize(status:, payload: {}) + @status = status + @payload = payload + end + + def to_hash + { status: status, payload: payload } + end + + def failed? + status == FAILED_STATUS + end + + def success? + status == SUCCESS_STATUS + end + end + end + end +end diff --git a/lib/gitlab/merge_requests/mergeability/redis_interface.rb b/lib/gitlab/merge_requests/mergeability/redis_interface.rb new file mode 100644 index 00000000000..081ccfca360 --- /dev/null +++ b/lib/gitlab/merge_requests/mergeability/redis_interface.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true +module Gitlab + module MergeRequests + module Mergeability + class RedisInterface + EXPIRATION = 6.hours + VERSION = 1 + + def save_check(merge_check:, result_hash:) + Gitlab::Redis::SharedState.with do |redis| + redis.set(merge_check.cache_key + ":#{VERSION}", result_hash.to_json, ex: EXPIRATION) + end + end + + def retrieve_check(merge_check:) + Gitlab::Redis::SharedState.with do |redis| + Gitlab::Json.parse(redis.get(merge_check.cache_key + ":#{VERSION}")) + end + end + end + end + end +end diff --git a/lib/gitlab/merge_requests/mergeability/results_store.rb b/lib/gitlab/merge_requests/mergeability/results_store.rb new file mode 100644 index 00000000000..bb6489f8526 --- /dev/null +++ b/lib/gitlab/merge_requests/mergeability/results_store.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true +module Gitlab + module MergeRequests + module Mergeability + class ResultsStore + def initialize(interface: RedisInterface.new, merge_request:) + @interface = interface + @merge_request = merge_request + end + + def read(merge_check:) + interface.retrieve_check(merge_check: merge_check) + end + + def write(merge_check:, result_hash:) + interface.save_check(merge_check: merge_check, result_hash: result_hash) + end + + private + + attr_reader :interface + end + end + end +end |