mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-07-25 16:03:48 +00:00
75 lines
2.2 KiB
Ruby
75 lines
2.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Utils
|
|
class BatchedBackgroundMigrationsDictionary
|
|
DICTIONARY_BASE_DIR = 'db/docs/batched_background_migrations'
|
|
|
|
attr_reader :queued_migration_version
|
|
|
|
class << self
|
|
def entries
|
|
return @entries if @entries.present? && defined?(Rails) && !Rails.env.test?
|
|
|
|
@entries = Dir.glob("*.yml", base: DICTIONARY_BASE_DIR).each_with_object({}) do |file_name, data|
|
|
dictionary = YAML.load_file(File.join(DICTIONARY_BASE_DIR, file_name))
|
|
|
|
next unless dictionary['queued_migration_version'].present?
|
|
|
|
data[dictionary['queued_migration_version'].to_s] = {
|
|
migration_job_name: dictionary['migration_job_name'],
|
|
introduced_by_url: dictionary['introduced_by_url'],
|
|
finalized_by: dictionary['finalized_by'].to_s,
|
|
milestone: dictionary['milestone']
|
|
}
|
|
|
|
data[dictionary['migration_job_name']] = data[dictionary['queued_migration_version'].to_s].merge(
|
|
queued_migration_version: dictionary['queued_migration_version']
|
|
)
|
|
end
|
|
end
|
|
|
|
def entry(migration_job_name)
|
|
return unless entries&.dig(migration_job_name)
|
|
|
|
new(entries[migration_job_name][:queued_migration_version])
|
|
end
|
|
|
|
# Used by BackgroundMigration/DictionaryFile cop to invalidate its cache
|
|
# if the contents of `db/docs/batched_background_migrations` changes.
|
|
def checksum(skip_memoization: false)
|
|
return @checksum if @checksum.present? && !skip_memoization
|
|
|
|
@checksum = Digest::SHA256.hexdigest(entries.to_s)
|
|
end
|
|
end
|
|
|
|
def initialize(queued_migration_version)
|
|
@queued_migration_version = queued_migration_version
|
|
end
|
|
|
|
def finalized_by
|
|
entry&.dig(:finalized_by)
|
|
end
|
|
|
|
def introduced_by_url
|
|
entry&.dig(:introduced_by_url)
|
|
end
|
|
|
|
def milestone
|
|
entry&.dig(:milestone)
|
|
end
|
|
|
|
def migration_job_name
|
|
entry&.dig(:migration_job_name)
|
|
end
|
|
|
|
private
|
|
|
|
def entry
|
|
@entry ||= self.class.entries[queued_migration_version.to_s]
|
|
end
|
|
end
|
|
end
|
|
end
|