Throttle clone progress messages
This commit is contained in:
+12
-7
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user