92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
# File 'lib/puppet_library/forge/multi.rb', line 92
def get_module_metadata_with_dependencies(author, name, version)
modules_to_search = [ OpenStruct.new(:author => author, :name => name, :version => version) ]
already_searched_modules = []
metadata_list = []
while spec = modules_to_search.shift
if already_searched_modules.include? spec
next
else
already_searched_modules << spec
end
@forges.each do |forge|
begin
metadata = forge.get_module_metadata_with_dependencies(spec.author, spec.name, spec.version)
modules_to_search += metadata.keys.map do |dep_full_name|
dep_author, dep_name = dep_full_name.split("/")
OpenStruct.new(:author => dep_author, :name => dep_name, :version => nil)
end
metadata_list << metadata
rescue ModuleNotFound
end
end
end
raise ModuleNotFound if metadata_list.empty?
metadata_list.deep_merge.tap do |metadata|
metadata.each do |module_name, releases|
metadata[module_name] = releases.unique_by { |release| release["version"] }
end
end
end
|