diff --git a/src/bin/repo.rs b/src/bin/repo.rs index f1eebf228..3b81c828c 100644 --- a/src/bin/repo.rs +++ b/src/bin/repo.rs @@ -591,19 +591,14 @@ fn handle_cook( if config.cook.clean_target { let stage_dirs = get_stage_dirs(&recipe.recipe.optional_packages, &target_dir); - if config.cook.verbose && stage_dirs.iter().any(|d| d.is_dir()) { - log_to_pty!(logger, "DEBUG: Listing stage files before removing them"); - } for stage_dir in stage_dirs { if stage_dir.is_dir() { - if config.cook.verbose { - if let Some(stage_name) = stage_dir.file_name() { - log_to_pty!(logger, "--- {}.pkgar:", stage_name.to_string_lossy()); - } - tree::walk_file_tree(&stage_dir, " ", logger)?; - } - fs::remove_dir_all(&stage_dir) - .map_err(|err| anyhow!("failed to remove stage dir: {:?}", err))?; + let mut stage_files_buf = String::new(); + tree::walk_file_tree(&stage_dir, "", &mut stage_files_buf) + .context("failed to walk stage files tree")?; + fs::write(stage_dir.with_added_extension("files"), stage_files_buf) + .context("unable to write stage files")?; + fs::remove_dir_all(&stage_dir).context("failed to remove stage dir")?; } } } diff --git a/src/cook/cook_build.rs b/src/cook/cook_build.rs index 2ec252e02..183390d77 100644 --- a/src/cook/cook_build.rs +++ b/src/cook/cook_build.rs @@ -470,9 +470,14 @@ pub fn remove_stage_dir(stage_dir: &PathBuf) -> Result<(), String> { remove_all(&stage_file)?; } let stage_meta = stage_dir.with_added_extension("toml"); - Ok(if stage_meta.is_file() { + if stage_meta.is_file() { remove_all(&stage_meta)?; - }) + } + let stage_files = stage_dir.with_added_extension("files"); + if stage_files.is_file() { + remove_all(&stage_files)?; + } + Ok(()) } pub fn get_stage_dirs(features: &Vec, target_dir: &Path) -> Vec { diff --git a/src/cook/tree.rs b/src/cook/tree.rs index 0174a5cf3..9bb51281e 100644 --- a/src/cook/tree.rs +++ b/src/cook/tree.rs @@ -1,13 +1,13 @@ +use anyhow::Context; +use pkg::{Package, PackageName}; +use std::fmt::Write as _; use std::{ collections::{HashMap, HashSet}, fs::read_to_string, path::PathBuf, }; -use anyhow::Context; -use pkg::{Package, PackageName}; - -use crate::{cook::pty::PtyOut, log_to_pty, recipe::CookRecipe}; +use crate::recipe::CookRecipe; pub enum WalkTreeEntry<'a> { Built(&'a PathBuf, u64), @@ -123,11 +123,11 @@ pub fn display_pkg_fn( Ok(()) } -pub fn walk_file_tree(dir: &PathBuf, prefix: &str, logger: &PtyOut) -> std::io::Result { +pub fn walk_file_tree(dir: &PathBuf, prefix: &str, buffer: &mut String) -> std::io::Result { if !dir.is_dir() { return Ok(0); } - + let fmt_err = std::io::Error::other; let entries: Vec<_> = std::fs::read_dir(dir)?.filter_map(|e| e.ok()).collect(); let mut total_size = 0; for (index, entry) in entries.iter().enumerate() { @@ -142,20 +142,21 @@ pub fn walk_file_tree(dir: &PathBuf, prefix: &str, logger: &PtyOut) -> std::io:: .unwrap_or("Unknown"); if path.is_dir() { - log_to_pty!(logger, "{}{}{}/", prefix, line_prefix, file_name); + writeln!(buffer, "{}{}{}/", prefix, line_prefix, file_name).map_err(fmt_err)?; let new_prefix = format!("{}{}", prefix, if is_last { " " } else { "│ " }); - walk_file_tree(&path, &new_prefix, logger)?; + walk_file_tree(&path, &new_prefix, buffer)?; } else { let size = metadata.len(); total_size += size; - log_to_pty!( - logger, + writeln!( + buffer, "{}{}{} ({})", prefix, line_prefix, file_name, format_size(size) - ); + ) + .map_err(fmt_err)?; } }