From dd1dae3d269b9bcae9c0a8b818eca780bc3f86f9 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Fri, 5 Apr 2024 20:34:16 +0200 Subject: driver: refactor CompletionState::task_deps() --- crates/driver/src/driver.rs | 73 +++++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 35 deletions(-) (limited to 'crates') diff --git a/crates/driver/src/driver.rs b/crates/driver/src/driver.rs index 8acf50a..58d356b 100644 --- a/crates/driver/src/driver.rs +++ b/crates/driver/src/driver.rs @@ -10,7 +10,7 @@ use common::{error::*, string_hash::*, types::*}; use runner::Runner; use crate::{ - context::{Context, TaskRef}, + context::{Context, OutputRef, TaskRef}, paths, resolve, task::*, template, @@ -58,41 +58,44 @@ impl<'ctx> CompletionState<'ctx> { .collect() } - fn task_deps(&self, task: &TaskRef<'ctx>) -> Result> { - Ok(self - .fetch_deps(task)? + fn dep_closure(&self, deps: I, path: &'ctx str) -> impl Iterator + '_ + where + I: IntoIterator>, + { + resolve::runtime_depends(self.ctx, deps) + .expect("invalid runtime depends") .into_iter() - .chain( - resolve::runtime_depends( - self.ctx, - self.ctx - .get_build_depends(task) - .with_context(|| format!("invalid build depends for {}", task))?, - ) - .expect("invalid runtime depends of build_depends") - .into_iter() - .filter_map(|dep| self.tasks_done[&dep.task].outputs.get(dep.output)) - .map(|&output| Dependency::Task { - output, - path: "".to_string(), - }), - ) - .chain( - resolve::runtime_depends( - self.ctx, - self.ctx - .get_host_depends(task) - .with_context(|| format!("invalid depends for {}", task))?, - ) - .expect("invalid runtime depends of host_depends") - .into_iter() - .filter_map(|dep| self.tasks_done[&dep.task].outputs.get(dep.output)) - .map(|&output| Dependency::Task { - output, - path: paths::TASK_SYSROOT.to_string(), - }), - ) - .collect()) + .filter_map(|dep| self.tasks_done[&dep.task].outputs.get(dep.output)) + .map(|&output| Dependency::Task { + output, + path: path.to_string(), + }) + } + + fn build_deps(&self, task: &TaskRef<'ctx>) -> Result + '_> { + Ok(self.dep_closure( + self.ctx + .get_build_depends(task) + .with_context(|| format!("invalid build depends for {}", task))?, + "", + )) + } + + fn host_deps(&self, task: &TaskRef<'ctx>) -> Result + '_> { + Ok(self.dep_closure( + self.ctx + .get_host_depends(task) + .with_context(|| format!("invalid depends for {}", task))?, + paths::TASK_SYSROOT, + )) + } + + fn task_deps(&self, task: &TaskRef<'ctx>) -> Result> { + let fetch_deps = self.fetch_deps(task)?.into_iter(); + let build_deps = self.build_deps(task)?; + let host_deps = self.host_deps(task)?; + + Ok(fetch_deps.chain(build_deps).chain(host_deps).collect()) } fn task_inherit_chain(&self, task_ref: &TaskRef<'ctx>) -> Vec { -- cgit v1.2.3