Feature: Add min-size parameter

Add often requested feature. '--min-size 50000' will only include files
above a size of 50kB
This commit is contained in:
andy.boot
2022-08-22 11:17:21 +01:00
parent f70f4b7e12
commit d6f9bb3c47
10 changed files with 109 additions and 12 deletions
+8 -8
View File
@@ -7,6 +7,7 @@ use std::path::PathBuf;
pub fn get_biggest(
top_level_nodes: Vec<Node>,
min_size: Option<usize>,
n: usize,
depth: usize,
using_a_filter: bool,
@@ -22,14 +23,14 @@ pub fn get_biggest(
let mut allowed_nodes = HashSet::new();
allowed_nodes.insert(root.name.as_path());
heap = add_children(using_a_filter, &root, depth, heap);
heap = add_children(using_a_filter, min_size, &root, depth, heap);
for _ in number_top_level_nodes..n {
let line = heap.pop();
match line {
Some(line) => {
allowed_nodes.insert(line.name.as_path());
heap = add_children(using_a_filter, line, depth, heap);
heap = add_children(using_a_filter, min_size, line, depth, heap);
}
None => break,
}
@@ -39,17 +40,16 @@ pub fn get_biggest(
fn add_children<'a>(
using_a_filter: bool,
min_size: Option<usize>,
file_or_folder: &'a Node,
depth: usize,
mut heap: BinaryHeap<&'a Node>,
) -> BinaryHeap<&'a Node> {
if depth > file_or_folder.depth {
heap.extend(
file_or_folder
.children
.iter()
.filter(|c| !using_a_filter || c.name.is_file() || c.size > 0),
)
heap.extend(file_or_folder.children.iter().filter(|c| match min_size {
Some(ms) => c.size > ms as u64,
None => !using_a_filter || c.name.is_file() || c.size > 0,
}))
}
heap
}