diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-11-05 21:59:45 +0100 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-11-05 21:59:45 +0100 |
commit | bfaaa8b0fac53430af28956c231985c181ef302f (patch) | |
tree | 22126a14e68bce016494ab91c1a70c47db38cd25 | |
parent | d5c51769b28b801e15dcc6779f3c20ea56e49c81 (diff) | |
download | rebel-bfaaa8b0fac53430af28956c231985c181ef302f.tar rebel-bfaaa8b0fac53430af28956c231985c181ef302f.zip |
driver: introduce task priority field
Override the version-based task priority ordering.
-rw-r--r-- | crates/driver/src/context.rs | 18 | ||||
-rw-r--r-- | crates/driver/src/task.rs | 2 |
2 files changed, 14 insertions, 6 deletions
diff --git a/crates/driver/src/context.rs b/crates/driver/src/context.rs index fb0ea96..5564c86 100644 --- a/crates/driver/src/context.rs +++ b/crates/driver/src/context.rs @@ -1,5 +1,6 @@ use std::{ borrow::Cow, + cmp::Ordering, collections::{HashMap, HashSet}, fmt::Display, hash::Hash, @@ -273,16 +274,21 @@ impl Context { .all(|(key, value)| args.get(key) == Some(value)) } + fn compare_tasks(task1: &TaskDef, task2: &TaskDef) -> Ordering { + task1 + .priority + .cmp(&task2.priority) + .then(deb_version::compare_versions( + task1.meta.version.as_deref().unwrap_or_default(), + task2.meta.version.as_deref().unwrap_or_default(), + )) + } + fn select_task<'ctx>(tasks: &'ctx [TaskDef], args: &TaskArgs) -> Option<&'ctx TaskDef> { tasks .iter() .filter(|task| Self::match_task(task, args)) - .max_by(|task1, task2| { - deb_version::compare_versions( - task1.meta.version.as_deref().unwrap_or_default(), - task2.meta.version.as_deref().unwrap_or_default(), - ) - }) + .max_by(|task1, task2| Self::compare_tasks(task1, task2)) } fn get_with_args<'ctx>(&'ctx self, id: &'ctx TaskID, args: &TaskArgs) -> Result<&TaskDef> { diff --git a/crates/driver/src/task.rs b/crates/driver/src/task.rs index 51557ae..df3bc68 100644 --- a/crates/driver/src/task.rs +++ b/crates/driver/src/task.rs @@ -87,6 +87,8 @@ pub struct TaskDef { pub output: HashMap<String, Output>, #[serde(flatten)] pub action: Action, + #[serde(default)] + pub priority: i32, #[serde(skip)] pub arg_match: TaskArgs, } |