diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-09-18 22:08:02 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-09-18 23:29:29 +0200 |
commit | bdd47d7ea3274b308139bf255ed4d5856df79957 (patch) | |
tree | ab7af11e186038cfb2bf453261116b39a2728af7 /src/executor.rs | |
parent | 244ada073fa728f2d5fd49de681163cb145308b1 (diff) | |
download | rebel-bdd47d7ea3274b308139bf255ed4d5856df79957.tar rebel-bdd47d7ea3274b308139bf255ed4d5856df79957.zip |
Separate definition types and reference types
We need to distinguish TaskID/Task/TaskRef, OutputDef/OutputRef for
parametrized tasks.
Diffstat (limited to 'src/executor.rs')
-rw-r--r-- | src/executor.rs | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/executor.rs b/src/executor.rs index 145176c..a953271 100644 --- a/src/executor.rs +++ b/src/executor.rs @@ -4,6 +4,7 @@ use serde::{Deserialize, Serialize}; use crate::{ paths, resolve, runner, + task::{self, *}, types::*, util::{cjson, error::*, fs}, }; @@ -99,7 +100,7 @@ impl<'a> Executor<'a> { let task_def = tasks.get(&task.id).expect("Invalid TaskRef"); let mut has_depends = false; - for dep in task_def.get_depend_tasks() { + for dep in get_dependent_tasks(task_def) { let rdep = exc.rdeps.entry(dep.clone()).or_default(); rdep.push(task.clone()); has_depends = true; @@ -121,11 +122,10 @@ impl<'a> Executor<'a> { fn deps_satisfied(&self, task_ref: &TaskRef) -> bool { let task = self.tasks.get(&task_ref.id).expect("Invalid TaskRef"); - task.get_depend_tasks() - .all(|dep| self.tasks_done.contains_key(dep)) + get_dependent_tasks(task).all(|dep| self.tasks_done.contains_key(&dep)) } - fn task_deps(&self, task: &Task) -> HashMap<DependencyHash, Dependency> { + fn task_deps(&self, task: &TaskDef) -> HashMap<DependencyHash, Dependency> { task.fetch .iter() .map(|Fetch { name, sha256 }| Dependency::Fetch { @@ -133,14 +133,14 @@ impl<'a> Executor<'a> { sha256: *sha256, }) .chain( - resolve::runtime_depends(self.tasks, &task.build_depends) + resolve::runtime_depends(self.tasks, task.build_depends.iter().map(output_ref)) .expect("invalid runtime depends of build_depends") .iter() .filter_map(|dep| self.tasks_done[&dep.task].output.get(&dep.output)) .map(|&output| Dependency::BuildTask { output }), ) .chain( - resolve::runtime_depends(self.tasks, &task.target_depends) + resolve::runtime_depends(self.tasks, task.target_depends.iter().map(output_ref)) .expect("invalid runtime depends of target_depends") .iter() .filter_map(|dep| self.tasks_done[&dep.task].output.get(&dep.output)) @@ -165,8 +165,8 @@ impl<'a> Executor<'a> { .collect(); let env = self.env.clone(); - let (inherit_chain, inherit_hash) = if let Some(inherit_task) = &task_def.inherit { - let inherit_meta = &self.tasks_done[inherit_task]; + let (inherit_chain, inherit_hash) = if let Some(inherit_dep) = &task_def.inherit { + let inherit_meta = &self.tasks_done[&task::task_ref(&inherit_dep.task)]; let mut inherit_chain = inherit_meta.inherit.clone(); inherit_chain.push(inherit_meta.input_hash); (inherit_chain, Some(&inherit_meta.input_hash)) |