From b5338c7764c7f19c7dfee2da27fe3543f4064a0e Mon Sep 17 00:00:00 2001 From: Filipe Rodrigues Date: Mon, 19 Sep 2022 02:13:08 +0100 Subject: [PATCH] Added some implementation documentation to `BuildStatus::await_built`. --- src/build.rs | 12 ++++++++++-- src/main.rs | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/build.rs b/src/build.rs index 09718e4..b351efd 100644 --- a/src/build.rs +++ b/src/build.rs @@ -44,7 +44,7 @@ use { /// Builder #[derive(Debug)] pub struct Builder { - /// All targets' status + /// All targets' build status targets: DashMap, BuildStatus>, /// Command execution semaphore @@ -95,7 +95,10 @@ impl Builder { match do_build { true => { let res = self.build_unchecked(target, rules).await; - build_status.finish_build(res.as_ref().map_err(|_| ()).copied()).await; + match res { + Ok(build_res) => build_status.finish_build(Ok(build_res)).await, + Err(_) => build_status.finish_build(Err(())).await, + } res }, @@ -426,11 +429,16 @@ impl BuildStatus { pin_mut!(inner_fut); let mut inner = inner_fut.poll(ctx).ready()?; + // Check if built match &mut *inner { + // If not, add a waker and return pending + // Note: Since we're holding onto the lock, we don't need to double check here BuildStatusInner::Building { wakers } => { wakers.push(ctx.waker().clone()); Poll::Pending }, + + // Else it's ready BuildStatusInner::Built { value } => Poll::Ready(*value), } }) diff --git a/src/main.rs b/src/main.rs index e76db0b..e3e972a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -126,7 +126,7 @@ async fn main() -> Result<(), anyhow::Error> { .collect::>() .try_collect::>() .await?; - tracing::info!("Built {} targets", builder.targets().await); + tracing::info!("Checked {} targets", builder.targets().await); Ok(()) }