From 746a7b14d03f32fb0db6e951b46cbbd3003c5ff7 Mon Sep 17 00:00:00 2001 From: SaHHiiLL <87093947+SaHHiiLL@users.noreply.github.com> Date: Fri, 19 Jan 2024 14:39:00 +0000 Subject: [PATCH] tsort: returns error when input is dir - same as GNU tsort (#5860) * fix: return error when input is dir * test: when tsort is given a dir * fix: do not need to mention tsort in error message * test: using concrete directory name * tsort: fix formatting in test --------- Co-authored-by: Daniel Hofstetter --- src/uu/tsort/src/tsort.rs | 9 ++++++++- tests/by-util/test_tsort.rs | 9 +++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/uu/tsort/src/tsort.rs b/src/uu/tsort/src/tsort.rs index 3ae4f4f97..2bc9d3175 100644 --- a/src/uu/tsort/src/tsort.rs +++ b/src/uu/tsort/src/tsort.rs @@ -32,7 +32,14 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { stdin_buf = stdin(); &mut stdin_buf as &mut dyn Read } else { - file_buf = File::open(Path::new(&input)).map_err_context(|| input.to_string())?; + let path = Path::new(&input); + if path.is_dir() { + return Err(USimpleError::new( + 1, + format!("{}: read error: Is a directory", input), + )); + } + file_buf = File::open(path).map_err_context(|| input.to_string())?; &mut file_buf as &mut dyn Read }); diff --git a/tests/by-util/test_tsort.rs b/tests/by-util/test_tsort.rs index 188894516..79195efa2 100644 --- a/tests/by-util/test_tsort.rs +++ b/tests/by-util/test_tsort.rs @@ -64,3 +64,12 @@ fn test_multiple_arguments() { .fails() .stderr_contains("unexpected argument 'invalid_file' found"); } + +#[test] +fn test_error_on_dir() { + let (at, mut ucmd) = at_and_ucmd!(); + at.mkdir("tsort_test_dir"); + ucmd.arg("tsort_test_dir") + .fails() + .stderr_contains("tsort: tsort_test_dir: read error: Is a directory"); +}