Merge branch 'stage-write-files' into 'master'

Write stage tree files to a file instead of to build log

See merge request redox-os/redox!1823
This commit is contained in:
Jeremy Soller 2026-01-18 08:52:18 -07:00
commit 503eaac3cc
3 changed files with 25 additions and 24 deletions

View File

@ -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")?;
}
}
}

View File

@ -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<OptionalPackageRecipe>, target_dir: &Path) -> Vec<PathBuf> {

View File

@ -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<u64> {
pub fn walk_file_tree(dir: &PathBuf, prefix: &str, buffer: &mut String) -> std::io::Result<u64> {
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)?;
}
}