From ee2666cf51598af595546d185a86dffe22dcfa7a Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Thu, 4 Apr 2024 21:25:35 +0200 Subject: driver: recipe: refactor recipe reading Preparation for reusing recipe meta for subrecipes. --- crates/driver/src/recipe.rs | 62 ++++++++++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/crates/driver/src/recipe.rs b/crates/driver/src/recipe.rs index fa6709a..1d3162d 100644 --- a/crates/driver/src/recipe.rs +++ b/crates/driver/src/recipe.rs @@ -62,6 +62,47 @@ fn recipe_name(path: &Path) -> Option<&str> { stem.strip_prefix(RECIPE_PREFIX) } +fn handle_recipe_tasks( + tasks: &mut HashMap>, + recipe_tasks: HashMap, + meta: &TaskMeta, +) { + for (label, mut task) in recipe_tasks { + let task_id = TaskID { + recipe: meta.recipe.clone(), + task: label, + }; + task.meta = meta.clone(); + tasks.entry(task_id).or_default().push(task); + } +} + +fn read_recipe_tasks( + path: &Path, + basename: &str, + recipename: &str, + tasks: &mut HashMap>, +) -> Result<()> { + let recipe = if recipename.is_empty() { + basename.to_string() + } else { + format!("{basename}/{recipename}") + }; + + let recipe_def = CURRENT_RECIPE.set(&recipe, || read_recipe(path))?; + + let meta = TaskMeta { + basename: basename.to_string(), + recipename: recipename.to_string(), + recipe: recipe.clone(), + version: recipe_def.meta.version.clone(), + }; + + handle_recipe_tasks(tasks, recipe_def.tasks, &meta); + + Ok(()) +} + pub fn read_recipes>(path: P) -> Result>> { let mut tasks = HashMap::>::new(); @@ -85,27 +126,8 @@ pub fn read_recipes>(path: P) -> Result