Skip to main content

turtle_build/tool/
clean_dead.rs

1use crate::{context::Context, error::BuildError, ir::Config};
2use futures::future::try_join_all;
3
4/// Cleans dead outputs.
5pub async fn clean_dead(context: &Context, config: &Config) -> Result<(), BuildError> {
6    try_join_all(
7        context
8            .database()
9            .get_outputs()
10            .await?
11            .iter()
12            .map(|output| remove_output(context, config, output)),
13    )
14    .await?;
15
16    Ok(())
17}
18
19async fn remove_output(context: &Context, config: &Config, output: &str) -> Result<(), BuildError> {
20    if config.outputs().contains_key(output) {
21        return Ok(());
22    } else if let Ok(Some(metadata)) = context.file_system().metadata(output.as_ref()).await
23        && metadata.is_file()
24    {
25        context.file_system().remove_file(output.as_ref()).await?;
26    }
27
28    Ok(())
29}