summaryrefslogtreecommitdiffstats
path: root/crates/driver/src/driver.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/driver/src/driver.rs')
-rw-r--r--crates/driver/src/driver.rs22
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(())
}