diff options
author | Brian Campbell <lambda@continuation.org> | 2018-12-20 22:18:52 -0500 |
---|---|---|
committer | nachoparker <nacho@ownyourbits.com> | 2019-09-22 20:33:11 -0600 |
commit | b947b9cd545a8dd3c4965e8e50744f4f87720b51 (patch) | |
tree | cce5b483561206d588155da23debc192d147a243 | |
parent | 9bbdcfeef892be9b275de4072c485c82fc5db363 (diff) |
Render the bars relative to the largest size shownv0.2.11
-rw-r--r-- | Cargo.lock | 2 | ||||
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | src/lib.rs | 42 | ||||
-rw-r--r-- | src/main.rs | 2 |
4 files changed, 27 insertions, 21 deletions
@@ -10,7 +10,7 @@ dependencies = [ [[package]] name = "dutree" -version = "0.2.10" +version = "0.2.11" dependencies = [ "getopts 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1,6 +1,6 @@ [package] name = "dutree" -version = "0.2.10" +version = "0.2.11" authors = ["nacho <nacho@ownyourbits.com>"] description = "Command line tool to analyze disk usage" repository = "https://github.com/nachoparker/dutree" @@ -193,7 +193,7 @@ impl Config { aggr = 1024u64.pow(2); } - XOk( Config{ paths, color_dict, depth, depth_flag, bytes_flag, + XOk( Config{ paths, color_dict, depth, depth_flag, bytes_flag, usage_flag, hiddn_flag, ascii_flag, no_dir_flg, aggr, exclude } ) } } @@ -220,7 +220,7 @@ fn try_read_dir( path : &Path ) -> Option<fs::ReadDir> { if try_is_symlink( path ) { return None } // don't follow symlinks match path.read_dir() { Ok(dir_list) => Some(dir_list), - Err(err) => { + Err(err) => { print_io_error( path, err ); None }, @@ -234,7 +234,7 @@ fn try_bytes_from_path( path : &Path, usage_flag : bool ) -> u64 { Ok(metadata) => if usage_flag { metadata.st_blocks()*512 } else { metadata.st_size() }, #[cfg(target_os = "macos")] Ok(metadata) => if usage_flag { metadata.blocks()*512 } else { metadata.size() }, - Err(err) => { + Err(err) => { print_io_error( path, err ); 0 }, @@ -287,7 +287,7 @@ impl<'a> Entry<'a> { } vec.sort_unstable_by( |a, b| b.bytes.cmp( &a.bytes ) ); if aggr_bytes > 0 { - vec.push( Entry { + vec.push( Entry { name: "<aggregated>".to_string(), bytes: aggr_bytes, color: None, @@ -322,8 +322,9 @@ impl<'a> Entry<'a> { Entry { name, bytes, color, last: false, entries } } - fn print_entries( &self, open_parents : Vec<bool>, parent_vals : Vec<u64>, - bytes_flag : bool, ascii_flag : bool, bar_width : usize, tree_name_width : usize ) { + fn print_entries( &self, open_parents : Vec<bool>, parent_vals : Vec<u64>, + bytes_flag : bool, ascii_flag : bool, + max_bytes : u64, bar_width : usize, tree_name_width : usize ) { if let Some(ref entries) = self.entries { for entry in entries { let mut op = open_parents.clone(); @@ -366,20 +367,20 @@ impl<'a> Entry<'a> { // draw the tree for open in &open_parents { - if *open { print!( " " ); } + if *open { print!( " " ); } else { print!( "│ " ); } } if entry.last { print!( "└─ " ); op.push( true ); } else { print!( "├─ " ); op.push( false ); } // print it - println!( "{} {} {:>13}", + println!( "{} {} {:>13}", name, - fmt_bar( &bytes, bar_width, ascii_flag ), + fmt_bar( &bytes, max_bytes, bar_width, ascii_flag ), fmt_size_str( entry.bytes, bytes_flag ) ); if let Some(_) = entry.entries { entry.print_entries( op, bytes, bytes_flag, ascii_flag, - bar_width, tree_name_width ); + max_bytes, bar_width, tree_name_width ); } } } @@ -389,7 +390,7 @@ impl<'a> Entry<'a> { fn print( &self, bytes_flag : bool, ascii_flag : bool ) { // calculate plot widths - let mut twidth = DEF_WIDTH; + let mut twidth = DEF_WIDTH; let size = terminal_size(); if let Some( ( Width(w), Height(_h) ) ) = size { twidth = w; @@ -397,30 +398,35 @@ impl<'a> Entry<'a> { eprintln!("Unable to get terminal size"); } let size_width = 15; - let var_width = twidth - size_width; - let bar_width = var_width as usize * 75 / 100; - let tree_name_width = var_width as usize * 25 / 100; + let var_width = (twidth - size_width) as usize; + let tree_name_width = 25.max(var_width * 25 / 100); + let bar_width = var_width - tree_name_width; // initalize let open_parents : Vec<bool> = Vec::new(); let mut parent_vals : Vec<u64> = Vec::new(); + let max_bytes = match self.entries { + Some(ref entries) => entries.iter().map(|e| e.bytes).max().unwrap_or(self.bytes), + None => self.bytes, + }; parent_vals.push( self.bytes ); // print println!( "[ {} {} ]", self.name, fmt_size_str( self.bytes, bytes_flag ) ); self.print_entries( open_parents, parent_vals, bytes_flag, ascii_flag, - bar_width, tree_name_width ); + max_bytes, bar_width, tree_name_width ); } } -fn fmt_bar( bytes : &Vec<u64>, width : usize, ascii_flag : bool ) -> String { +fn fmt_bar( bytes : &Vec<u64>, max_bytes : u64, width : usize, ascii_flag : bool ) -> String { let width = width as u64 - 2 - 5; // not including bars and percentage let mut str = String::with_capacity( width as usize ); str.push( '│' ); let mut bytesi = bytes.iter(); - let mut total = bytesi.next().unwrap(); + let _ = bytesi.next(); + let mut total = &max_bytes; let mut part = bytesi.next().unwrap(); let mut bars = ( part * width ) / total; let mut pos = width - bars; @@ -567,7 +573,7 @@ pub fn run( cfg: &Config ) { if len > 0 { entries[len-1].last = true; } - Entry { + Entry { name : "<collection>".to_string(), bytes, color : None, diff --git a/src/main.rs b/src/main.rs index c6ef49a..613a9da 100644 --- a/src/main.rs +++ b/src/main.rs @@ -49,7 +49,7 @@ fn main() { XExit => process::exit(0), XErr(err) => { eprintln!( "{}", err ); - process::exit(1) + process::exit(1) } }; |