diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2024-04-04 21:07:32 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2024-04-05 21:22:39 +0200 |
commit | 5dfa9c0dcfbbd68618acd9abd89458a51734387a (patch) | |
tree | 3ee2aa683971b36a4d89966f21eeaa444d8057e0 /crates | |
parent | a4d7f4cad88472dbcf5b4dd433cfef5f9624d7e8 (diff) | |
download | rebel-5dfa9c0dcfbbd68618acd9abd89458a51734387a.tar rebel-5dfa9c0dcfbbd68618acd9abd89458a51734387a.zip |
driver: do not allow overriding basename, provide additional variables to tasks
The variables {{recipename}} and {{recipe}} are now available in tasks.
An overrideabe {{name}} (defaulting to {{basename}}) will be added in
the future.
Diffstat (limited to 'crates')
-rw-r--r-- | crates/driver/src/context.rs | 4 | ||||
-rw-r--r-- | crates/driver/src/recipe.rs | 26 | ||||
-rw-r--r-- | crates/driver/src/task.rs | 14 |
3 files changed, 26 insertions, 18 deletions
diff --git a/crates/driver/src/context.rs b/crates/driver/src/context.rs index a1abdde..b4bdc44 100644 --- a/crates/driver/src/context.rs +++ b/crates/driver/src/context.rs @@ -345,7 +345,9 @@ impl Context { new_args.set("cross_compile", cross_compile); - new_args.set("basename", Some(task_def.meta.name.clone())); + new_args.set("basename", Some(task_def.meta.basename.clone())); + new_args.set("recipename", Some(task_def.meta.recipename.clone())); + new_args.set("recipe", Some(task_def.meta.recipe.clone())); new_args.set("version", task_def.meta.version.clone()); Ok(TaskRef { diff --git a/crates/driver/src/recipe.rs b/crates/driver/src/recipe.rs index f491ff6..fa6709a 100644 --- a/crates/driver/src/recipe.rs +++ b/crates/driver/src/recipe.rs @@ -1,4 +1,4 @@ -use std::{borrow::Cow, collections::HashMap, ffi::OsStr, fs::File, path::Path, result}; +use std::{collections::HashMap, ffi::OsStr, fs::File, path::Path, result}; use scoped_tls_hkt::scoped_thread_local; use serde::{Deserialize, Deserializer}; @@ -6,7 +6,7 @@ use walkdir::WalkDir; use common::{error::*, types::*}; -use crate::task::{RecipeMeta, TaskDef}; +use crate::task::{RecipeMeta, TaskDef, TaskMeta}; scoped_thread_local!(static CURRENT_RECIPE: str); @@ -85,25 +85,25 @@ pub fn read_recipes<P: AsRef<Path>>(path: P) -> Result<HashMap<TaskID, Vec<TaskD else { continue; }; - let base_recipename = if recipename.is_empty() { - Cow::Borrowed(basename) + let recipename_full = if recipename.is_empty() { + basename.to_string() } else { - Cow::Owned(format!("{basename}/{recipename}")) + format!("{basename}/{recipename}") }; - let recipe = CURRENT_RECIPE.set(&base_recipename, || read_recipe(path))?; - - let mut meta = recipe.meta; - if meta.name.is_empty() { - meta.name = basename.to_string(); - } + let recipe = CURRENT_RECIPE.set(&recipename_full, || read_recipe(path))?; for (label, mut task) in recipe.tasks { let task_id = TaskID { - recipe: base_recipename.as_ref().to_owned(), + recipe: recipename_full.clone(), task: label, }; - task.meta = meta.clone(); + task.meta = TaskMeta { + basename: basename.to_string(), + recipename: recipename.to_string(), + recipe: recipename_full.clone(), + version: recipe.meta.version.clone(), + }; tasks.entry(task_id).or_default().push(task); } } diff --git a/crates/driver/src/task.rs b/crates/driver/src/task.rs index df3bc68..3e909de 100644 --- a/crates/driver/src/task.rs +++ b/crates/driver/src/task.rs @@ -9,10 +9,8 @@ use crate::{ recipe, }; -#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Hash, Default)] +#[derive(Clone, Debug, Deserialize, Default)] pub struct RecipeMeta { - #[serde(default)] - pub name: String, pub version: Option<String>, } @@ -69,10 +67,18 @@ impl Action { } } +#[derive(Clone, Debug, Default)] +pub struct TaskMeta { + pub basename: String, + pub recipename: String, + pub recipe: String, + pub version: Option<String>, +} + #[derive(Clone, Debug, Deserialize, Default)] pub struct TaskDef { #[serde(skip)] - pub meta: RecipeMeta, + pub meta: TaskMeta, #[serde(default)] pub args: HashMap<String, ArgType>, #[serde(default)] |