Skip to content

Commit

Permalink
shuf: refuse repeating zero lines
Browse files Browse the repository at this point in the history
This was a GNU behavior bug:

```console
$ LC_ALL=C shuf -er
shuf: no lines to repeat
[$? = 1]
$ cargo run shuf -er  # old, bad (unexpected success)
$ cargo run shuf -er  # new
shuf: no lines to repeat
[$? = 1]
```
  • Loading branch information
BenWiederhake authored and ysthakur committed Feb 27, 2024
1 parent 3dc5b38 commit 1adbe1e
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 4 deletions.
7 changes: 3 additions & 4 deletions src/uu/shuf/src/shuf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -435,11 +435,10 @@ fn shuf_exec(input: &mut impl Shufable, opts: Options) -> UResult<()> {
None => WrappedRng::RngDefault(rand::thread_rng()),
};

if input.is_empty() {
return Ok(());
}

if opts.repeat {
if input.is_empty() {
return Err(USimpleError::new(1, "no lines to repeat"));
}
for _ in 0..opts.head_count {
let r = input.choose(&mut rng);

Expand Down
29 changes: 29 additions & 0 deletions tests/by-util/test_shuf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -624,3 +624,32 @@ fn test_shuf_multiple_input_line_count() {
.count();
assert_eq!(result_count, 5, "Output should have 5 items");
}

#[test]
#[ignore = "known issue"]
fn test_shuf_repeat_empty_range() {
new_ucmd!()
.arg("-ri4-3")
.fails()
.no_stdout()
.stderr_only("shuf: no lines to repeat\n");
}

#[test]
fn test_shuf_repeat_empty_echo() {
new_ucmd!()
.arg("-re")
.fails()
.no_stdout()
.stderr_only("shuf: no lines to repeat\n");
}

#[test]
fn test_shuf_repeat_empty_input() {
new_ucmd!()
.arg("-r")
.pipe_in("")
.fails()
.no_stdout()
.stderr_only("shuf: no lines to repeat\n");
}

0 comments on commit 1adbe1e

Please sign in to comment.