From bf2a591b0a095508fa4d732fb198af75f4fa2a07 Mon Sep 17 00:00:00 2001 From: shutefan Date: Thu, 5 Oct 2017 21:25:21 +0200 Subject: [PATCH] tail: suppress headers when --quiet flag is used --- src/tail/tail.rs | 11 +++++------ .../fixtures/tail/foobar_multiple_quiet.expected | 12 ++++++++++++ tests/test_tail.rs | 16 ++++++++++++++++ 3 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 tests/fixtures/tail/foobar_multiple_quiet.expected diff --git a/src/tail/tail.rs b/src/tail/tail.rs index b7e169424..80287ac7b 100755 --- a/src/tail/tail.rs +++ b/src/tail/tail.rs @@ -79,6 +79,8 @@ pub fn uumain(args: Vec) -> i32 { opts.optflag("h", "help", "help"); opts.optflag("V", "version", "version"); opts.optflag("v", "verbose", "always output headers giving file names"); + // TODO: --silent flag as alias to --quiet + opts.optflag("q", "quiet", "never output headers giving file names"); let given_options = match opts.parse(&args) { Ok (m) => { m } @@ -165,6 +167,7 @@ pub fn uumain(args: Vec) -> i32 { } let verbose = given_options.opt_present("v"); + let quiet = given_options.opt_present("q"); let files = given_options.free; @@ -172,16 +175,12 @@ pub fn uumain(args: Vec) -> i32 { let mut buffer = BufReader::new(stdin()); unbounded_tail(&mut buffer, &settings); } else { - let mut multiple = false; + let multiple = files.len() > 1; let mut first_header = true; let mut readers = Vec::new(); - if files.len() > 1 { - multiple = true; - } - for filename in &files { - if multiple || verbose { + if (multiple || verbose) && !quiet { if !first_header { println!(""); } println!("==> {} <==", filename); } diff --git a/tests/fixtures/tail/foobar_multiple_quiet.expected b/tests/fixtures/tail/foobar_multiple_quiet.expected new file mode 100644 index 000000000..d4f919f09 --- /dev/null +++ b/tests/fixtures/tail/foobar_multiple_quiet.expected @@ -0,0 +1,12 @@ +dos +tres +quattro +cinco +seis +siette +ocho +nueve +diez +once +un +deux diff --git a/tests/test_tail.rs b/tests/test_tail.rs index dea1a56f8..9d9e44883 100644 --- a/tests/test_tail.rs +++ b/tests/test_tail.rs @@ -245,3 +245,19 @@ fn test_lines_with_size_suffix() { ucmd.arg(FILE).arg("-n").arg("2K").run().stdout_is_fixture(EXPECTED_FILE); } + +#[test] +fn test_multiple_input_files() { + new_ucmd!().arg(FOOBAR_TXT).arg(FOOBAR_2_TXT).run().stdout_is_fixture("foobar_follow_multiple.expected"); +} + +#[test] +fn test_multiple_input_files_with_suppressed_headers() { + new_ucmd!().arg(FOOBAR_TXT).arg(FOOBAR_2_TXT).arg("-q").run().stdout_is_fixture("foobar_multiple_quiet.expected"); +} + +#[test] +fn test_multiple_input_quiet_flag_overrides_verbose_flag_for_suppressing_headers() { + // TODO: actually the later one should win, i.e. -qv should lead to headers being printed, -vq to them being suppressed + new_ucmd!().arg(FOOBAR_TXT).arg(FOOBAR_2_TXT).arg("-q").arg("-v").run().stdout_is_fixture("foobar_multiple_quiet.expected"); +}