From b3d446bfefe606365f87238221bb2bf2a5c5061e Mon Sep 17 00:00:00 2001 From: "andy.boot" Date: Tue, 2 Jun 2020 13:57:46 +0100 Subject: [PATCH] Display: No padding if no bars drawn If not drawing the percent bars do not add padding to the filenames https://github.com/bootandy/dust/issues/89 --- src/display.rs | 15 ++++++++------- tests/tests.rs | 10 ++++++++++ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/display.rs b/src/display.rs index 573ec5d..770abdd 100644 --- a/src/display.rs +++ b/src/display.rs @@ -285,15 +285,16 @@ pub fn format_string( let name = get_printable_name(&node.name, display_data.short_paths); let width = get_unicode_width_of_indent_and_name(indent, &name); - let name_and_padding = name - + &(repeat(" ") - .take(display_data.longest_string_length - width) - .collect::()); + let (percents, name_and_padding) = if percent_bar != "" { + let percents = format!("│{} │ {:>4}", percent_bar, percent_size_str); - let percents = if percent_bar != "" { - format!("│{} │ {:>4}", percent_bar, percent_size_str) + let name_and_padding = name + + &(repeat(" ") + .take(display_data.longest_string_length - width) + .collect::()); + (percents, name_and_padding) } else { - "".into() + ("".into(), name) }; let pretty_size = if is_biggest && display_data.colors_on { diff --git a/tests/tests.rs b/tests/tests.rs index 28f245a..eef46c9 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -32,6 +32,16 @@ pub fn test_basic_output() { assert!(output.contains("a_file ")); } +#[test] +pub fn test_output_no_bars_means_no_excess_spaces() { + let mut cmd = Command::cargo_bin("dust").unwrap(); + let output = cmd.arg("-b").arg("src/test_dir/").unwrap().stdout; + let output = str::from_utf8(&output).unwrap(); + // If bars are not being shown we don't need to pad the output with spaces + assert!(output.contains("many")); + assert!(!output.contains("many ")); +} + // "windows" result data can vary by host (size seems to be variable by one byte); fix code vs test and re-enable #[cfg_attr(target_os = "windows", ignore)] #[test]