Throttle clone progress messages

This commit is contained in:
Jeremy Soller
2025-09-26 10:18:54 -06:00
parent c796cc7413
commit d7391bc6a8
3 changed files with 18 additions and 13 deletions
+12 -7
View File
@@ -115,13 +115,18 @@ fn main() {
let size_old = fs_old.header.size();
let free_old = fs_old.allocator().free() * redoxfs::BLOCK_SIZE;
let used_old = size_old - free_old;
match clone(&mut fs_old, &mut fs, |used| {
eprint!(
"{}%: {} MB/{} MB\r",
(used * 100) / used_old,
used / 1000 / 1000,
used_old / 1000 / 1000
);
let mut last_percent = 0;
match clone(&mut fs_old, &mut fs, move |used| {
let percent = (used * 100) / used_old;
if percent != last_percent {
eprint!(
"{}%: {} MB/{} MB\r",
percent,
used / 1000 / 1000,
used_old / 1000 / 1000
);
last_percent = percent;
}
}) {
Ok(()) => (),
Err(err) => {
+5 -5
View File
@@ -10,13 +10,13 @@ fn syscall_err(err: syscall::Error) -> io::Error {
}
//TODO: handle hard links
pub fn clone_at<D: Disk, E: Disk, F: Fn(u64)>(
fn clone_at<D: Disk, E: Disk, F: FnMut(u64)>(
tx_old: &mut Transaction<D>,
parent_ptr_old: TreePtr<Node>,
fs: &mut FileSystem<E>,
parent_ptr: TreePtr<Node>,
buf: &mut [u8],
progress: &F,
progress: &mut F,
) -> syscall::Result<()> {
let mut entries = Vec::new();
tx_old.child_nodes(parent_ptr_old, &mut entries)?;
@@ -66,10 +66,10 @@ pub fn clone_at<D: Disk, E: Disk, F: Fn(u64)>(
Ok(())
}
pub fn clone<D: Disk, E: Disk, F: Fn(u64)>(
pub fn clone<D: Disk, E: Disk, F: FnMut(u64)>(
fs_old: &mut FileSystem<D>,
fs: &mut FileSystem<E>,
progress: F,
mut progress: F,
) -> syscall::Result<()> {
fs_old.tx(|tx_old| {
// Clone at root node
@@ -80,7 +80,7 @@ pub fn clone<D: Disk, E: Disk, F: Fn(u64)>(
fs,
TreePtr::root(),
&mut buf,
&progress,
&mut progress,
)?;
fs.tx(|tx| {
+1 -1
View File
@@ -28,7 +28,7 @@ pub use self::block::{
BlockAddr, BlockData, BlockLevel, BlockList, BlockMeta, BlockPtr, BlockRaw, BlockTrait,
};
#[cfg(feature = "std")]
pub use self::clone::{clone, clone_at};
pub use self::clone::clone;
pub use self::dir::{DirEntry, DirList};
pub use self::disk::*;
pub use self::filesystem::FileSystem;