From f0c8e7292d3de3e4af5f923855c422a0bdb7f394 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Thu, 4 Apr 2024 21:50:08 +0200 Subject: driver: recipe: let subrecipes inherit meta from parent --- crates/driver/src/recipe.rs | 48 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 9 deletions(-) (limited to 'crates') diff --git a/crates/driver/src/recipe.rs b/crates/driver/src/recipe.rs index 1d3162d..f6207f7 100644 --- a/crates/driver/src/recipe.rs +++ b/crates/driver/src/recipe.rs @@ -80,22 +80,37 @@ fn handle_recipe_tasks( 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}") +) -> Result { + let recipe_def = CURRENT_RECIPE.set(basename, || read_recipe(path))?; + + let meta = TaskMeta { + basename: basename.to_string(), + recipename: "".to_string(), + recipe: basename.to_string(), + version: recipe_def.meta.version.clone(), }; + handle_recipe_tasks(tasks, recipe_def.tasks, &meta); + + Ok(recipe_def.meta) +} + +fn read_subrecipe_tasks( + path: &Path, + basename: &str, + recipename: &str, + recipe_meta: &RecipeMeta, + tasks: &mut HashMap>, +) -> Result<()> { + let recipe = 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(), + version: recipe_meta.version.clone(), }; handle_recipe_tasks(tasks, recipe_def.tasks, &meta); @@ -105,9 +120,14 @@ fn read_recipe_tasks( pub fn read_recipes>(path: P) -> Result>> { let mut tasks = HashMap::>::new(); + let mut recipe_metas = HashMap::::new(); for entry in WalkDir::new(path) - .sort_by_file_name() + .sort_by(|a, b| { + let stem_cmp = a.path().file_stem().cmp(&b.path().file_stem()); + let ext_cmp = a.path().extension().cmp(&b.path().extension()); + stem_cmp.then(ext_cmp) + }) .into_iter() .filter_map(|e| e.ok()) { @@ -127,7 +147,17 @@ pub fn read_recipes>(path: P) -> Result