mirror of
https://gitlab.redox-os.org/redox-os/redox.git
synced 2026-06-23 21:34:18 +08:00
web: Show symlink and don't list empty dir in file tree
This commit is contained in:
parent
0886d88cd6
commit
fd2d14d42b
@ -797,11 +797,15 @@ fn handle_cook(
|
||||
for stage_dir in &build_result.stage_dirs {
|
||||
if stage_dir.is_dir() {
|
||||
if config.cook.write_filetree {
|
||||
let mut stage_files_buf = String::new();
|
||||
let mut stage_files_buf = Vec::new();
|
||||
tree::walk_file_tree(&stage_dir, "", &mut stage_files_buf)
|
||||
.map_err(|e| Error::from_io_error(e, "Walking files tree"))?;
|
||||
fs::write(stage_dir.with_added_extension("files"), stage_files_buf)
|
||||
.map_err(|e| Error::from_io_error(e, "Writing files tree"))?;
|
||||
stage_files_buf.push("".into()); // trailing eol
|
||||
fs::write(
|
||||
stage_dir.with_added_extension("files"),
|
||||
stage_files_buf.join("\n"),
|
||||
)
|
||||
.map_err(|e| Error::from_io_error(e, "Writing files tree"))?;
|
||||
}
|
||||
if config.cook.clean_target {
|
||||
remove_all(&stage_dir)?;
|
||||
|
||||
@ -418,4 +418,6 @@ done;
|
||||
if [ -n "$ALL_DESCENDANTS" ]; then
|
||||
kill $ALL_DESCENDANTS;
|
||||
fi
|
||||
|
||||
killall sccache
|
||||
"#;
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
use pkg::{Package, PackageName};
|
||||
use std::{
|
||||
collections::{HashMap, HashSet},
|
||||
fmt::Write as _,
|
||||
path::PathBuf,
|
||||
};
|
||||
|
||||
@ -147,11 +146,14 @@ pub fn display_pkg_fn(
|
||||
Ok(false)
|
||||
}
|
||||
|
||||
pub fn walk_file_tree(dir: &PathBuf, prefix: &str, buffer: &mut String) -> std::io::Result<u64> {
|
||||
pub fn walk_file_tree(
|
||||
dir: &PathBuf,
|
||||
prefix: &str,
|
||||
buffer: &mut Vec<String>,
|
||||
) -> std::io::Result<u64> {
|
||||
if !dir.is_dir() {
|
||||
return Ok(0);
|
||||
}
|
||||
let fmt_err = std::io::Error::other;
|
||||
let mut entries: Vec<_> = std::fs::read_dir(dir)?.filter_map(|e| e.ok()).collect();
|
||||
entries.sort_by(|a, b| a.file_name().cmp(&b.file_name()));
|
||||
let mut total_size = 0;
|
||||
@ -166,22 +168,35 @@ pub fn walk_file_tree(dir: &PathBuf, prefix: &str, buffer: &mut String) -> std::
|
||||
.and_then(|n| n.to_str())
|
||||
.unwrap_or("Unknown");
|
||||
|
||||
if path.is_dir() {
|
||||
writeln!(buffer, "{}{}{}/", prefix, line_prefix, file_name).map_err(fmt_err)?;
|
||||
if metadata.is_dir() {
|
||||
buffer.push(format!("{}{}{}/", prefix, line_prefix, file_name));
|
||||
let last_len = buffer.len();
|
||||
let new_prefix = format!("{}{}", prefix, if is_last { " " } else { "│ " });
|
||||
walk_file_tree(&path, &new_prefix, buffer)?;
|
||||
total_size += walk_file_tree(&path, &new_prefix, buffer)?;
|
||||
if buffer.len() == last_len {
|
||||
// pkgar doesn't capture empty directory
|
||||
buffer.pop();
|
||||
}
|
||||
} else if metadata.is_symlink() {
|
||||
let size = metadata.len();
|
||||
total_size += size;
|
||||
buffer.push(format!(
|
||||
"{}{}{} -> {:?}",
|
||||
prefix,
|
||||
line_prefix,
|
||||
file_name,
|
||||
std::fs::read_link(&path)?.display()
|
||||
));
|
||||
} else {
|
||||
let size = metadata.len();
|
||||
total_size += size;
|
||||
writeln!(
|
||||
buffer,
|
||||
buffer.push(format!(
|
||||
"{}{}{} ({})",
|
||||
prefix,
|
||||
line_prefix,
|
||||
file_name,
|
||||
format_size(size)
|
||||
)
|
||||
.map_err(fmt_err)?;
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -95,6 +95,9 @@ impl FileIndexBuilder {
|
||||
let name = if let Some(paren_idx) = remainder.rfind('(') {
|
||||
// Strip size
|
||||
remainder[..paren_idx].trim()
|
||||
} else if let Some(paren_idx) = remainder.rfind("->") {
|
||||
// Strip symlink
|
||||
remainder[..paren_idx].trim()
|
||||
} else {
|
||||
remainder
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user