From c366801eb3a4ae30dc1a4d9628c1ad5c810fa070 Mon Sep 17 00:00:00 2001 From: oech3 <79379754+oech3@users.noreply.github.com> Date: Sun, 15 Mar 2026 15:01:51 +0900 Subject: [PATCH] ls: Fix error message for ls file/missing-file --- src/uu/ls/locales/en-US.ftl | 1 + src/uu/ls/src/ls.rs | 1 + tests/by-util/test_ls.rs | 14 ++++++++++++++ 3 files changed, 16 insertions(+) diff --git a/src/uu/ls/locales/en-US.ftl b/src/uu/ls/locales/en-US.ftl index 7de4a17ce2e..edffde7e861 100644 --- a/src/uu/ls/locales/en-US.ftl +++ b/src/uu/ls/locales/en-US.ftl @@ -22,6 +22,7 @@ ls-error-cannot-open-directory-bad-descriptor = cannot open directory {$path}: B ls-error-unknown-io-error = unknown io error: {$path}, '{$error}' ls-error-invalid-block-size = invalid --block-size argument {$size} ls-error-dired-and-zero-incompatible = --dired and --zero are incompatible +ls-error-not-directory = cannot access {$path}: Not a directory ls-error-not-listing-already-listed = {$path}: not listing already-listed directory ls-error-invalid-time-style = invalid --time-style argument {$style} Possible values are: diff --git a/src/uu/ls/src/ls.rs b/src/uu/ls/src/ls.rs index 6ce28cd7cea..ad434865564 100644 --- a/src/uu/ls/src/ls.rs +++ b/src/uu/ls/src/ls.rs @@ -185,6 +185,7 @@ enum LsError { IOError(#[from] std::io::Error), #[error("{}", match .1.kind() { + ErrorKind::NotADirectory => translate!("ls-error-not-directory", "path" => .0.quote()), ErrorKind::NotFound => translate!("ls-error-cannot-access-no-such-file", "path" => .0.quote()), ErrorKind::PermissionDenied => match .1.raw_os_error().unwrap_or(1) { 1 => translate!("ls-error-cannot-access-operation-not-permitted", "path" => .0.quote()), diff --git a/tests/by-util/test_ls.rs b/tests/by-util/test_ls.rs index 11365392ae1..fbbba1a0a22 100644 --- a/tests/by-util/test_ls.rs +++ b/tests/by-util/test_ls.rs @@ -57,6 +57,20 @@ const COMMA_ARGS: &[&str] = &["-m", "--format=commas", "--for=commas"]; const COLUMN_ARGS: &[&str] = &["-C", "--format=columns", "--for=columns"]; +#[test] +#[cfg(unix)] +fn test_directory_in_file() { + let scene = TestScenario::new(util_name!()); + let at = &scene.fixtures; + at.touch("file"); + + scene + .ucmd() + .arg("file/missing") + .fails_with_code(2) + .stderr_is("ls: cannot access 'file/missing': Not a directory\n"); +} + #[test] fn test_invalid_flag() { new_ucmd!()