feat: ✨ add dedicated dependency generator artefact
This commit is contained in:
parent
2e05c5fc17
commit
f1033f460e
1 changed files with 57 additions and 6 deletions
|
@ -121,11 +121,54 @@ module Comfpile
|
|||
end
|
||||
end
|
||||
|
||||
included_artefacts.each { |a| include_artefact :parsed, a, wait_if_exists: false }
|
||||
required_artefacts.each { |a| require_artefact :parsed, a, wait_if_exists: false }
|
||||
referenced_artefacts.each { |a| reference_artefact :parsed, a, wait_if_exists: false, required: true }
|
||||
class DependencyAnalysisArtefact < Artefact
|
||||
attr_reader :dependencies
|
||||
|
||||
log "Generated dependencies. Included #{included_artefacts.size}, required #{required_artefacts.size} and referenced #{referenced_artefacts.size}."
|
||||
def initialize(*args, traverse: nil, **opts)
|
||||
super(*args, **opts)
|
||||
|
||||
parent_artefact :parsed, @target
|
||||
|
||||
@dependencies = []
|
||||
|
||||
@dependency_processed_artefacts = {}
|
||||
@dependency_waiting_on = [ @parent_artefact ]
|
||||
|
||||
@traverse = traverse || ['include', 'require', 'reference']
|
||||
|
||||
add_step do
|
||||
recursive_dependency_wait_step
|
||||
end
|
||||
end
|
||||
|
||||
def recursive_dependency_wait_step
|
||||
dependency_unfurl = @dependency_waiting_on
|
||||
@dependency_waiting_on = []
|
||||
|
||||
loop do
|
||||
break if dependency_unfurl.empty?
|
||||
|
||||
artefact = dependency_unfurl.pop
|
||||
|
||||
next if @dependency_processed_artefacts[artefact.target]
|
||||
|
||||
@dependencies << artefact
|
||||
@dependency_processed_artefacts[artefact.target] = true
|
||||
|
||||
artefact.parsed_dependencies.each do |key, dep_list|
|
||||
next unless @traverse.nil? or @traverse.include? key
|
||||
|
||||
dep_list.each do |dep_artefact|
|
||||
if wait_on dep_artefact
|
||||
@dependency_waiting_on << dep_artefact
|
||||
else
|
||||
dependency_unfurl << dep_artefact
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
retry_step! unless @dependency_waiting_on.empty?
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -159,12 +202,20 @@ module Comfpile
|
|||
search_regexes: @search_regexes)
|
||||
end
|
||||
|
||||
def generate_dependency_analysis_artefact(stage, target, **opts)
|
||||
match = @input_file_regex.match target
|
||||
return nil if match.nil?
|
||||
|
||||
DependencyAnalysisArtefact.new(@core, self, stage, target, **opts)
|
||||
end
|
||||
|
||||
def craft(stage, target)
|
||||
case stage
|
||||
when :parsed
|
||||
generate_parser_artefact(stage, target)
|
||||
when :dependency_list
|
||||
nil
|
||||
when /^dependency_analysis(?:_(.+))?$/
|
||||
traverse = $1&.split('_')
|
||||
generate_dependency_analysis_artefact(stage, target, traverse: traverse)
|
||||
else
|
||||
nil
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue