Skip to content

Commit

Permalink
Merge pull request uutils#5306 from cakebaker/nl_fix_output_order_if_…
Browse files Browse the repository at this point in the history
…stdin_and_files_are_mixed

nl: fix output order if stdin and files are mixed
  • Loading branch information
tertsdiepraam authored Sep 24, 2023
2 parents 50255a2 + 0621935 commit 4ca792d
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 13 deletions.
20 changes: 7 additions & 13 deletions src/uu/nl/src/nl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,6 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
));
}

let mut read_stdin = false;
let files: Vec<String> = match matches.get_many::<String>(options::FILE) {
Some(v) => v.clone().map(|v| v.to_owned()).collect(),
None => vec!["-".to_owned()],
Expand All @@ -178,21 +177,16 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {

for file in &files {
if file == "-" {
// If both file names and '-' are specified, we choose to treat first all
// regular files, and then read from stdin last.
read_stdin = true;
continue;
let mut buffer = BufReader::new(stdin());
nl(&mut buffer, &mut stats, &settings)?;
} else {
let path = Path::new(file);
let reader = File::open(path).map_err_context(|| file.to_string())?;
let mut buffer = BufReader::new(reader);
nl(&mut buffer, &mut stats, &settings)?;
}
let path = Path::new(file);
let reader = File::open(path).map_err_context(|| file.to_string())?;
let mut buffer = BufReader::new(reader);
nl(&mut buffer, &mut stats, &settings)?;
}

if read_stdin {
let mut buffer = BufReader::new(stdin());
nl(&mut buffer, &mut stats, &settings)?;
}
Ok(())
}

Expand Down
13 changes: 13 additions & 0 deletions tests/by-util/test_nl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,19 @@ fn test_default_body_numbering_multiple_files() {
.stdout_is(" 1\ta\n 2\tb\n 3\tc\n");
}

#[test]
fn test_default_body_numbering_multiple_files_and_stdin() {
let (at, mut ucmd) = at_and_ucmd!();

at.write("a.txt", "a");
at.write("c.txt", "c");

ucmd.args(&["a.txt", "-", "c.txt"])
.pipe_in("b")
.succeeds()
.stdout_is(" 1\ta\n 2\tb\n 3\tc\n");
}

#[test]
fn test_body_numbering_all_lines_without_delimiter() {
for arg in ["-ba", "--body-numbering=a"] {
Expand Down

0 comments on commit 4ca792d

Please sign in to comment.