From f908eb1e225c93b1c63c5fbe71292bcdc64f7354 Mon Sep 17 00:00:00 2001 From: xaseiresh Date: Wed, 12 Apr 2023 10:03:47 +0200 Subject: [PATCH] feat: :sparkles: properly implement artefact dependency addition --- lib/comfpile/artefact.rb | 46 ++++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/lib/comfpile/artefact.rb b/lib/comfpile/artefact.rb index 700e38f..e33ea6b 100644 --- a/lib/comfpile/artefact.rb +++ b/lib/comfpile/artefact.rb @@ -17,7 +17,7 @@ module Comfpile # Included artefacts are also required, but will additionally # update this Artefact's age. attr_reader :included_artefacts - # @return [Array] List of all artefacts # required to build this artefact. # Required artefacts are needed to build this artefact, but # do not modify the artefact's age. @@ -59,14 +59,15 @@ module Comfpile @required_artefacts = [] @included_artefacts = [] + @referenced_artefacts = [] + @steps = [] @step_additions = nil + @steps_done_ctr = 0 @waitlist = [] - @steps_done_ctr = 0 - @parameters = {} @exit_state = nil @@ -110,29 +111,48 @@ module Comfpile @parent_artefact = require_artefact(stage, target) end - def require_artefact(stage, target) - artefact = @core.craft_artefact(stage, target) + def include_artefact(stage, target) + artefact = require_artefact(stage, target) + @included_artefacts << artefact + end - if(artefact.nil?) + def require_artefact(stage, target) + artefact = reference_artefact(stage, target, required: true) + @required_artefacts << artefact + end + + def reference_artefact(stage, target, required: false) + artefact = craft_artefact(stage, target) + + if(artefact.nil? and required) fail! "Missing artefact dependency for #{stage} #{target}!" - else + elsif(required) @waitlist << { artefact: artefact, required: true } end - @required_artefacts ||= {} - @required_artefacts[stage] ||= {} - @required_artefacts[stage][target] = artefact + @referenced_artefacts << artefact artefact end + # + # Find or create a new artefact + # + # @param [Symbol] stage The type of item to create. + # can either be a stage for file processing (e.g. :parsed, + # :sourcefile, :x86_debug_compiled), or an action (:clean) + # @param [String] target Target file. Usually expressed + # as path relative to Comfpile's resource locations. + # + # @return [nil, Artefact] Returns nil if no engine was + # found that can craft this, else returns the + # created or looked-up artefact. + # def craft_artefact(stage, target) - artefact = @core.craft_artefact(stage, target) - - artefact + @core.craft_artefact(stage, target) end def waitlist_empty?