40 lines
911 B
Ruby
40 lines
911 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Config
|
|
module Entry
|
|
##
|
|
# Entry that represents an inheritable configs.
|
|
#
|
|
module Inheritable
|
|
InheritError = Class.new(Gitlab::Config::Loader::FormatError)
|
|
|
|
def compose!(deps = nil, &blk)
|
|
super(deps, &blk)
|
|
|
|
inherit!(deps)
|
|
end
|
|
|
|
private
|
|
|
|
# We inherit config entries from `default:`
|
|
# if the entry has the `inherit: true` flag set
|
|
def inherit!(deps)
|
|
return unless deps
|
|
|
|
self.class.nodes.each do |key, factory|
|
|
next unless factory.inheritable?
|
|
|
|
new_entry = overwrite_entry(deps, key, self[key])
|
|
|
|
entries[key] = new_entry if new_entry&.specified?
|
|
end
|
|
end
|
|
|
|
def overwrite_entry(deps, key, current_entry)
|
|
raise NotImplementedError
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|