Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 31 additions & 5 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use num_format::{Locale, ToFormattedString};

use diskus::{CountType, Directories, DiskUsage, DiskUsageResult, Error};

fn print_result(result: &DiskUsageResult, size_format: FormatSizeOptions, verbose: bool) {
fn print_result(result: &DiskUsageResult, size_format: FormatSizeOptions, verbose: bool, path_to_print: Option<&PathBuf>) {
if verbose {
for err in result.errors() {
match err {
Expand All @@ -32,14 +32,21 @@ fn print_result(result: &DiskUsageResult, size_format: FormatSizeOptions, verbos
}

let size = result.ignore_errors().size_in_bytes();
let path_str = if let Some(path) = path_to_print {
format!("\t{}", path.display())
} else {
String::new()
};

if stdout().is_terminal() {
println!(
"{} ({:} bytes)",
"{} ({:} bytes){}",
format_size(size, size_format),
size.to_formatted_string(&Locale::en)
size.to_formatted_string(&Locale::en),
path_str
);
} else {
println!("{}", size);
println!("{}{}", size, path_str);
}
}

Expand Down Expand Up @@ -74,6 +81,12 @@ fn main() {
.action(ArgAction::SetTrue)
.help("Do not hide filesystem errors"),
)
.arg(
Arg::new("print-path")
.long("print-path")
.action(ArgAction::SetTrue)
.help("Print the path in the output"),
)
.arg(
Arg::new("directories")
.long("directories")
Expand Down Expand Up @@ -119,19 +132,32 @@ fn main() {
};

let verbose = matches.get_flag("verbose");
let print_path = matches.get_flag("print-path");

// Reject --print-path with multiple paths
if print_path && paths.len() > 1 {
eprintln!("error: --print-path cannot be used with multiple paths");
std::process::exit(1);
}

let directories = match matches.get_one::<String>("directories").map(|s| s.as_str()) {
Some("included") => Directories::Included,
Some("excluded") => Directories::Excluded,
_ => Directories::Auto,
};

let path_to_print = if print_path {
paths.first().cloned()
} else {
None
};

let mut disk_usage = DiskUsage::new(paths)
.count_type(count_type)
.directories(directories);
if let Some(n) = num_workers {
disk_usage = disk_usage.num_workers(n);
}
let result = disk_usage.count();
print_result(&result, size_format, verbose);
print_result(&result, size_format, verbose, path_to_print.as_ref());
}