summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2021-11-05 21:59:45 +0100
committerMatthias Schiffer <mschiffer@universe-factory.net>2021-11-05 21:59:45 +0100
commitbfaaa8b0fac53430af28956c231985c181ef302f (patch)
tree22126a14e68bce016494ab91c1a70c47db38cd25
parentd5c51769b28b801e15dcc6779f3c20ea56e49c81 (diff)
downloadrebel-bfaaa8b0fac53430af28956c231985c181ef302f.tar
rebel-bfaaa8b0fac53430af28956c231985c181ef302f.zip
driver: introduce task priority field
Override the version-based task priority ordering.
-rw-r--r--crates/driver/src/context.rs18
-rw-r--r--crates/driver/src/task.rs2
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,
}