From 00c05b8687cca0d8a38dc3ad79e93857490f5799 Mon Sep 17 00:00:00 2001 From: Jan Scheer Date: Thu, 10 Jun 2021 00:19:23 +0200 Subject: [PATCH] id: add error handling (stderr/exit_code) for '-ugG' --- src/uu/id/src/id.rs | 25 +++++++++++++++++++------ tests/by-util/test_id.rs | 14 ++++++-------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/uu/id/src/id.rs b/src/uu/id/src/id.rs index f0659faf3..570a87790 100644 --- a/src/uu/id/src/id.rs +++ b/src/uu/id/src/id.rs @@ -201,6 +201,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 { }; let line_ending = if zflag { '\0' } else { '\n' }; + let mut exit_code = 0; if gflag { let id = possible_pw @@ -209,13 +210,17 @@ pub fn uumain(args: impl uucore::Args) -> i32 { print!( "{}{}", if nflag { - entries::gid2grp(id).unwrap_or_else(|_| id.to_string()) + entries::gid2grp(id).unwrap_or_else(|_| { + show_error!("cannot find name for group ID {}", id); + exit_code = 1; + id.to_string() + }) } else { id.to_string() }, line_ending ); - return 0; + return exit_code; } if uflag { @@ -225,13 +230,17 @@ pub fn uumain(args: impl uucore::Args) -> i32 { print!( "{}{}", if nflag { - entries::uid2usr(id).unwrap_or_else(|_| id.to_string()) + entries::uid2usr(id).unwrap_or_else(|_| { + show_error!("cannot find name for user ID {}", id); + exit_code = 1; + id.to_string() + }) } else { id.to_string() }, line_ending ); - return 0; + return exit_code; } if gsflag { @@ -246,7 +255,11 @@ pub fn uumain(args: impl uucore::Args) -> i32 { .unwrap_or_else(|| entries::get_groups_gnu(Some(id)).unwrap()) .iter() .map(|&id| if nflag { - entries::gid2grp(id).unwrap_or_else(|_| id.to_string()) + entries::gid2grp(id).unwrap_or_else(|_| { + show_error!("cannot find name for group ID {}", id); + exit_code = 1; + id.to_string() + }) } else { id.to_string() }) @@ -254,7 +267,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 { .join(delimiter), line_ending ); - return 0; + return exit_code; } if matches.is_present(options::OPT_PASSWORD) { diff --git a/tests/by-util/test_id.rs b/tests/by-util/test_id.rs index a885069a1..e8e2f8d35 100644 --- a/tests/by-util/test_id.rs +++ b/tests/by-util/test_id.rs @@ -209,10 +209,9 @@ fn test_id_default_format() { // u/g/G n/r let args = [opt2, opt1]; let result = scene.ucmd().args(&args).run(); - - if !result.succeeded() && is_ci() - // && (result.stderr_str().contains("cannot find name for") - // || result.stdout_str().contains("cannot find name for")) + if !result.succeeded() + && is_ci() + && result.stderr_str().contains("cannot find name for") { // '--name' does not work on CICD ubuntu-16/ubuntu-18 // id: cannot find name for user ID 1001 @@ -255,10 +254,9 @@ fn test_id_zero() { // u/g/G n/r z let args = [opt2, z_flag, opt1]; let result = scene.ucmd().args(&args).run(); - - if !result.succeeded() && is_ci() - // && (result.stderr_str().contains("cannot find name for") - // || result.stdout_str().contains("cannot find name for")) + if !result.succeeded() + && is_ci() + && result.stderr_str().contains("cannot find name for") { // '--name' does not work on CICD ubuntu-16/ubuntu-18 // id: cannot find name for user ID 1001