summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crates/driver/src/driver.rs30
1 files changed, 19 insertions, 11 deletions
diff --git a/crates/driver/src/driver.rs b/crates/driver/src/driver.rs
index 84262ac..ebbdb36 100644
--- a/crates/driver/src/driver.rs
+++ b/crates/driver/src/driver.rs
@@ -140,6 +140,11 @@ impl<'ctx> CompletionState<'ctx> {
}
}
+enum SpawnResult {
+ Spawned(UnixStream),
+ Skipped(TaskOutput),
+}
+
#[derive(Debug)]
pub struct Driver<'ctx> {
rdeps: HashMap<TaskRef<'ctx>, Vec<TaskRef<'ctx>>>,
@@ -267,10 +272,11 @@ impl<'ctx> Driver<'ctx> {
}
}
- fn spawn_task(&self, task_ref: &TaskRef<'ctx>, runner: &Runner) -> Result<Option<UnixStream>> {
+ fn spawn_task(&self, task_ref: &TaskRef<'ctx>, runner: &Runner) -> Result<SpawnResult> {
let task_def = &self.state.ctx[task_ref];
if task_def.action.is_empty() {
- return Ok(None);
+ println!("Skipping empty task {:#}", task_ref);
+ return Ok(SpawnResult::Skipped(TaskOutput::default()));
}
let task_deps = self.state.task_deps(task_ref)?;
@@ -310,18 +316,20 @@ impl<'ctx> Driver<'ctx> {
pins: HashMap::from([rootfs.clone()]),
};
- Ok(Some(runner.spawn(&task)))
+ Ok(SpawnResult::Spawned(runner.spawn(&task)))
}
fn run_task(&mut self, task_ref: TaskRef<'ctx>, runner: &Runner) -> Result<()> {
- if let Some(socket) = self.spawn_task(&task_ref, runner)? {
- assert!(self
- .tasks_running
- .insert(socket.as_raw_fd(), (socket, task_ref))
- .is_none());
- } else {
- println!("Skipping empty task {:#}", task_ref);
- self.update_runnable(task_ref, TaskOutput::default());
+ match self.spawn_task(&task_ref, runner)? {
+ SpawnResult::Spawned(socket) => {
+ assert!(self
+ .tasks_running
+ .insert(socket.as_raw_fd(), (socket, task_ref))
+ .is_none());
+ }
+ SpawnResult::Skipped(result) => {
+ self.update_runnable(task_ref, result);
+ }
}
Ok(())
}