diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-07-24 13:43:00 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2021-07-24 13:43:00 +0200 |
commit | 9ba27c046e57a3fa55643123147318db117b5dba (patch) | |
tree | a5e0c8bd17f9b15a48f1442f19aa4bffd661fdb0 /src/executor.rs | |
parent | 161425d4ad6673b126744d2554484bc74fcf88ea (diff) | |
download | rebel-9ba27c046e57a3fa55643123147318db117b5dba.tar rebel-9ba27c046e57a3fa55643123147318db117b5dba.zip |
Revert introduction of Dependency enum
We will represent all kinds of dependencies as tasks instead.
Diffstat (limited to 'src/executor.rs')
-rw-r--r-- | src/executor.rs | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/src/executor.rs b/src/executor.rs index 7c5bbee..fc12725 100644 --- a/src/executor.rs +++ b/src/executor.rs @@ -33,7 +33,7 @@ pub struct Executor<'a> { tasks: &'a TaskMap, tasks_blocked: HashSet<TaskRef>, tasks_runnable: Vec<TaskRef>, - tasks_done: HashMap<Dependency, TaskOutput>, + tasks_done: HashMap<TaskRef, TaskOutput>, rdeps: HashMap<TaskRef, Vec<TaskRef>>, env: HashMap<String, String>, } @@ -60,8 +60,7 @@ impl<'a> Executor<'a> { exc.tasks_runnable.push(task); } else { for dep in &task_def.depends { - let Dependency::Task(dep_task) = dep; - let rdep = exc.rdeps.entry(dep_task.clone()).or_default(); + let rdep = exc.rdeps.entry(dep.clone()).or_default(); rdep.push(task.clone()); } @@ -86,7 +85,7 @@ impl<'a> Executor<'a> { .all(|dep| self.tasks_done.contains_key(dep)) } - fn task_deps(&self, task: &TaskDef) -> HashMap<OutputHash, Dependency> { + fn task_deps(&self, task: &TaskDef) -> HashMap<OutputHash, TaskRef> { task.depends .iter() .map(|dep| { @@ -102,12 +101,12 @@ impl<'a> Executor<'a> { } fn run_one(&mut self, runner: &impl runner::Runner) -> runner::Result<()> { - let task_id = self.tasks_runnable.pop().expect("No runnable tasks left"); - let task_def = self.tasks.get(&task_id).expect("Invalid TaskRef"); + let task_ref = self.tasks_runnable.pop().expect("No runnable tasks left"); + let task_def = self.tasks.get(&task_ref).expect("Invalid TaskRef"); let task_deps = self.task_deps(&task_def); let task = Task { - id: task_id, + id: task_ref.clone(), def: task_def.clone(), depends: task_deps, env: self.env.clone(), @@ -127,7 +126,7 @@ impl<'a> Executor<'a> { save_output(&output)?; let rdeps = self.rdeps.get(&task.id); - self.tasks_done.insert(Dependency::Task(task.id), output); + self.tasks_done.insert(task_ref, output); for rdep in rdeps.unwrap_or(&Vec::new()) { if !self.tasks_blocked.contains(rdep) { |