diff options
Diffstat (limited to 'crates/driver/src/driver.rs')
-rw-r--r-- | crates/driver/src/driver.rs | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/crates/driver/src/driver.rs b/crates/driver/src/driver.rs index 375c567..bafba1b 100644 --- a/crates/driver/src/driver.rs +++ b/crates/driver/src/driver.rs @@ -266,8 +266,12 @@ impl<'ctx> Driver<'ctx> { } } - fn spawn_task(&self, task_ref: &TaskRef<'ctx>, runner: &Runner) -> Result<UnixStream> { + fn spawn_task(&self, task_ref: &TaskRef<'ctx>, runner: &Runner) -> Result<Option<UnixStream>> { let task_def = &self.state.ctx[task_ref.id]; + if task_def.action.is_empty() { + return Ok(None); + } + let task_deps = self.state.task_deps(task_ref)?; let task_output = task_def .output @@ -302,15 +306,19 @@ impl<'ctx> Driver<'ctx> { outputs: task_output, }; - Ok(runner.spawn(&task)) + Ok(Some(runner.spawn(&task))) } fn run_task(&mut self, task_ref: TaskRef<'ctx>, runner: &Runner) -> Result<()> { - let socket = self.spawn_task(&task_ref, runner)?; - assert!(self - .tasks_running - .insert(socket.as_raw_fd(), (socket, task_ref)) - .is_none()); + 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()); + } Ok(()) } |