mirror of
https://gitlab.redox-os.org/redox-os/redox.git
synced 2026-06-22 21:04:18 +08:00
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:
commit
503eaac3cc
@ -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")?;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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> {
|
||||
|
||||
@ -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)?;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user