From 9f1ac221cd245d2b1db8d60bdc26fe9658cea169 Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Tue, 25 Oct 2022 00:29:49 +0200 Subject: [PATCH 1/7] chown: fails when XXXX. or XXXX: is provided (when XXXX is numeric values) If the arg starts with an id numeric value, the group isn't set but the separator is provided, we should fail with an error Should fix tests/chown/separator.sh --- src/uu/chown/src/chown.rs | 13 +++++++++++++ tests/by-util/test_chown.rs | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/src/uu/chown/src/chown.rs b/src/uu/chown/src/chown.rs index d99516d92..f434faaa7 100644 --- a/src/uu/chown/src/chown.rs +++ b/src/uu/chown/src/chown.rs @@ -246,6 +246,19 @@ fn parse_spec(spec: &str, sep: char) -> UResult<(Option, Option)> { } else { None }; + + if user.chars().next().map(char::is_numeric).unwrap_or(false) + && group.is_empty() + && spec != user + { + // if the arg starts with an id numeric value, the group isn't set but the separator is provided, + // we should fail with an error + return Err(USimpleError::new( + 1, + format!("invalid spec: {}", spec.quote()), + )); + } + Ok((uid, gid)) } diff --git a/tests/by-util/test_chown.rs b/tests/by-util/test_chown.rs index b54412857..c786afa8e 100644 --- a/tests/by-util/test_chown.rs +++ b/tests/by-util/test_chown.rs @@ -423,6 +423,38 @@ fn test_chown_only_user_id() { .stderr_contains("failed to change"); } +#[test] +fn test_chown_fail_id() { + // test chown 1111. file.txt + + let scene = TestScenario::new(util_name!()); + let at = &scene.fixtures; + + let result = scene.cmd_keepenv("id").arg("-u").run(); + if skipping_test_is_okay(&result, "id: cannot find name for group ID") { + return; + } + let user_id = String::from(result.stdout_str().trim()); + assert!(!user_id.is_empty()); + + let file1 = "test_chown_file1"; + at.touch(file1); + + scene + .ucmd() + .arg(format!("{}:", user_id)) + .arg(file1) + .fails() + .stderr_contains("invalid spec"); + + scene + .ucmd() + .arg(format!("{}.", user_id)) + .arg(file1) + .fails() + .stderr_contains("invalid spec"); +} + /// Test for setting the owner to a user ID for a user that does not exist. /// /// For example: From 58caf625d15d90763ae32d37b5d83febfc1ba2db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Oct 2022 06:51:50 +0000 Subject: [PATCH 2/7] build(deps): bump time from 0.3.15 to 0.3.16 Bumps [time](https://github.com/time-rs/time) from 0.3.15 to 0.3.16. - [Release notes](https://github.com/time-rs/time/releases) - [Changelog](https://github.com/time-rs/time/blob/main/CHANGELOG.md) - [Commits](https://github.com/time-rs/time/compare/v0.3.15...v0.3.16) --- updated-dependencies: - dependency-name: time dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Cargo.lock | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a12ec25c9..d1d61e12b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2076,21 +2076,32 @@ dependencies = [ [[package]] name = "time" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d634a985c4d4238ec39cacaed2e7ae552fbd3c476b552c1deac3021b7d7eaf0c" +checksum = "0fab5c8b9980850e06d92ddbe3ab839c062c801f3927c0fb8abd6fc8e918fbca" dependencies = [ "itoa", "libc", "num_threads", + "serde", + "time-core", "time-macros", ] [[package]] -name = "time-macros" -version = "0.2.4" +name = "time-core" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" +checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" + +[[package]] +name = "time-macros" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bb801831d812c562ae7d2bfb531f26e66e4e1f6b17307ba4149c5064710e5b" +dependencies = [ + "time-core", +] [[package]] name = "typenum" From 2213ad5d1ce8a609c27634b99435e9b45474f9a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Oct 2022 06:51:19 +0000 Subject: [PATCH 3/7] build(deps): bump libc from 0.2.135 to 0.2.136 Bumps [libc](https://github.com/rust-lang/libc) from 0.2.135 to 0.2.136. - [Release notes](https://github.com/rust-lang/libc/releases) - [Commits](https://github.com/rust-lang/libc/compare/0.2.135...0.2.136) --- updated-dependencies: - dependency-name: libc dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Cargo.lock | 4 ++-- src/uu/chmod/Cargo.toml | 2 +- src/uu/cp/Cargo.toml | 2 +- src/uu/hostid/Cargo.toml | 2 +- src/uu/logname/Cargo.toml | 2 +- src/uu/mkfifo/Cargo.toml | 2 +- src/uu/mknod/Cargo.toml | 2 +- src/uu/nice/Cargo.toml | 2 +- src/uu/nohup/Cargo.toml | 2 +- src/uu/nproc/Cargo.toml | 2 +- src/uu/pathchk/Cargo.toml | 2 +- src/uu/rmdir/Cargo.toml | 2 +- src/uu/sync/Cargo.toml | 2 +- src/uu/tail/Cargo.toml | 2 +- src/uu/tee/Cargo.toml | 2 +- src/uu/test/Cargo.toml | 2 +- src/uu/timeout/Cargo.toml | 2 +- src/uu/whoami/Cargo.toml | 2 +- src/uu/yes/Cargo.toml | 2 +- src/uucore/Cargo.toml | 2 +- 20 files changed, 21 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a12ec25c9..5438defb1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1145,9 +1145,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.135" +version = "0.2.136" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c" +checksum = "55edcf6c0bb319052dea84732cf99db461780fd5e8d3eb46ab6ff312ab31f197" [[package]] name = "libloading" diff --git a/src/uu/chmod/Cargo.toml b/src/uu/chmod/Cargo.toml index c794ad821..deacbc0f2 100644 --- a/src/uu/chmod/Cargo.toml +++ b/src/uu/chmod/Cargo.toml @@ -16,7 +16,7 @@ path = "src/chmod.rs" [dependencies] clap = { version = "4.0", features = ["wrap_help", "cargo"] } -libc = "0.2.135" +libc = "0.2.136" uucore = { version=">=0.0.16", package="uucore", path="../../uucore", features=["fs", "mode"] } [[bin]] diff --git a/src/uu/cp/Cargo.toml b/src/uu/cp/Cargo.toml index 15ce7c8f5..a54fdc212 100644 --- a/src/uu/cp/Cargo.toml +++ b/src/uu/cp/Cargo.toml @@ -21,7 +21,7 @@ path = "src/cp.rs" [dependencies] clap = { version = "4.0", features = ["wrap_help", "cargo"] } filetime = "0.2" -libc = "0.2.135" +libc = "0.2.136" quick-error = "2.0.1" selinux = { version="0.3", optional=true } uucore = { version=">=0.0.16", package="uucore", path="../../uucore", features=["entries", "fs", "perms", "mode"] } diff --git a/src/uu/hostid/Cargo.toml b/src/uu/hostid/Cargo.toml index 0938a1bec..6a81dd897 100644 --- a/src/uu/hostid/Cargo.toml +++ b/src/uu/hostid/Cargo.toml @@ -16,7 +16,7 @@ path = "src/hostid.rs" [dependencies] clap = { version = "4.0", features = ["wrap_help", "cargo"] } -libc = "0.2.135" +libc = "0.2.136" uucore = { version=">=0.0.16", package="uucore", path="../../uucore" } [[bin]] diff --git a/src/uu/logname/Cargo.toml b/src/uu/logname/Cargo.toml index e688346ce..ba300fbf1 100644 --- a/src/uu/logname/Cargo.toml +++ b/src/uu/logname/Cargo.toml @@ -15,7 +15,7 @@ edition = "2021" path = "src/logname.rs" [dependencies] -libc = "0.2.135" +libc = "0.2.136" clap = { version = "4.0", features = ["wrap_help", "cargo"] } uucore = { version=">=0.0.16", package="uucore", path="../../uucore" } diff --git a/src/uu/mkfifo/Cargo.toml b/src/uu/mkfifo/Cargo.toml index f932697ff..e24204f94 100644 --- a/src/uu/mkfifo/Cargo.toml +++ b/src/uu/mkfifo/Cargo.toml @@ -16,7 +16,7 @@ path = "src/mkfifo.rs" [dependencies] clap = { version = "4.0", features = ["wrap_help", "cargo"] } -libc = "0.2.135" +libc = "0.2.136" uucore = { version=">=0.0.16", package="uucore", path="../../uucore" } [[bin]] diff --git a/src/uu/mknod/Cargo.toml b/src/uu/mknod/Cargo.toml index 7e21983ff..96ca9ab48 100644 --- a/src/uu/mknod/Cargo.toml +++ b/src/uu/mknod/Cargo.toml @@ -17,7 +17,7 @@ path = "src/mknod.rs" [dependencies] clap = { version = "4.0", features = ["wrap_help", "cargo"] } -libc = "^0.2.135" +libc = "^0.2.136" uucore = { version=">=0.0.16", package="uucore", path="../../uucore", features=["mode"] } [[bin]] diff --git a/src/uu/nice/Cargo.toml b/src/uu/nice/Cargo.toml index c062d4db3..0e435e4c3 100644 --- a/src/uu/nice/Cargo.toml +++ b/src/uu/nice/Cargo.toml @@ -16,7 +16,7 @@ path = "src/nice.rs" [dependencies] clap = { version = "4.0", features = ["wrap_help", "cargo"] } -libc = "0.2.135" +libc = "0.2.136" nix = { version = "0.25", default-features = false } uucore = { version=">=0.0.16", package="uucore", path="../../uucore" } diff --git a/src/uu/nohup/Cargo.toml b/src/uu/nohup/Cargo.toml index 5603d96c0..9b13c7ec5 100644 --- a/src/uu/nohup/Cargo.toml +++ b/src/uu/nohup/Cargo.toml @@ -16,7 +16,7 @@ path = "src/nohup.rs" [dependencies] clap = { version = "4.0", features = ["wrap_help", "cargo"] } -libc = "0.2.135" +libc = "0.2.136" atty = "0.2" uucore = { version=">=0.0.16", package="uucore", path="../../uucore", features=["fs"] } diff --git a/src/uu/nproc/Cargo.toml b/src/uu/nproc/Cargo.toml index e830b06a2..e351ab3c8 100644 --- a/src/uu/nproc/Cargo.toml +++ b/src/uu/nproc/Cargo.toml @@ -15,7 +15,7 @@ edition = "2021" path = "src/nproc.rs" [dependencies] -libc = "0.2.135" +libc = "0.2.136" num_cpus = "1.10" clap = { version = "4.0", features = ["wrap_help", "cargo"] } uucore = { version=">=0.0.16", package="uucore", path="../../uucore", features=["fs"] } diff --git a/src/uu/pathchk/Cargo.toml b/src/uu/pathchk/Cargo.toml index b25450b89..5475eaa8a 100644 --- a/src/uu/pathchk/Cargo.toml +++ b/src/uu/pathchk/Cargo.toml @@ -16,7 +16,7 @@ path = "src/pathchk.rs" [dependencies] clap = { version = "4.0", features = ["wrap_help", "cargo"] } -libc = "0.2.135" +libc = "0.2.136" uucore = { version=">=0.0.16", package="uucore", path="../../uucore" } [[bin]] diff --git a/src/uu/rmdir/Cargo.toml b/src/uu/rmdir/Cargo.toml index a96a2cec1..b66ee12eb 100644 --- a/src/uu/rmdir/Cargo.toml +++ b/src/uu/rmdir/Cargo.toml @@ -17,7 +17,7 @@ path = "src/rmdir.rs" [dependencies] clap = { version = "4.0", features = ["wrap_help", "cargo"] } uucore = { version=">=0.0.16", package="uucore", path="../../uucore", features=["fs"] } -libc = "0.2.135" +libc = "0.2.136" [[bin]] name = "rmdir" diff --git a/src/uu/sync/Cargo.toml b/src/uu/sync/Cargo.toml index dc5754e43..ea6652522 100644 --- a/src/uu/sync/Cargo.toml +++ b/src/uu/sync/Cargo.toml @@ -16,7 +16,7 @@ path = "src/sync.rs" [dependencies] clap = { version = "4.0", features = ["wrap_help", "cargo"] } -libc = "0.2.135" +libc = "0.2.136" uucore = { version=">=0.0.16", package="uucore", path="../../uucore", features=["wide"] } [target.'cfg(any(target_os = "linux", target_os = "android"))'.dependencies] diff --git a/src/uu/tail/Cargo.toml b/src/uu/tail/Cargo.toml index a912bf352..7abb18b3c 100644 --- a/src/uu/tail/Cargo.toml +++ b/src/uu/tail/Cargo.toml @@ -17,7 +17,7 @@ path = "src/tail.rs" [dependencies] clap = { version = "4.0", features = ["wrap_help", "cargo"] } -libc = "0.2.135" +libc = "0.2.136" memchr = "2.5.0" notify = { version = "=5.0.0", features=["macos_kqueue"]} uucore = { version=">=0.0.16", package="uucore", path="../../uucore", features=["ringbuffer", "lines"] } diff --git a/src/uu/tee/Cargo.toml b/src/uu/tee/Cargo.toml index 311e09875..1b3a44e67 100644 --- a/src/uu/tee/Cargo.toml +++ b/src/uu/tee/Cargo.toml @@ -16,7 +16,7 @@ path = "src/tee.rs" [dependencies] clap = { version = "4.0", features = ["wrap_help", "cargo"] } -libc = "0.2.135" +libc = "0.2.136" retain_mut = "=0.1.7" # ToDO: [2021-01-01; rivy; maint/MinSRV] ~ v0.1.5 uses const generics which aren't stabilized until rust v1.51.0 uucore = { version=">=0.0.16", package="uucore", path="../../uucore", features=["libc"] } diff --git a/src/uu/test/Cargo.toml b/src/uu/test/Cargo.toml index 28b7362b1..7e0fae115 100644 --- a/src/uu/test/Cargo.toml +++ b/src/uu/test/Cargo.toml @@ -16,7 +16,7 @@ path = "src/test.rs" [dependencies] clap = { version = "4.0", features = ["wrap_help", "cargo"] } -libc = "0.2.135" +libc = "0.2.136" uucore = { version=">=0.0.16", package="uucore", path="../../uucore" } [target.'cfg(target_os = "redox")'.dependencies] diff --git a/src/uu/timeout/Cargo.toml b/src/uu/timeout/Cargo.toml index 77adcfe57..48c632de0 100644 --- a/src/uu/timeout/Cargo.toml +++ b/src/uu/timeout/Cargo.toml @@ -16,7 +16,7 @@ path = "src/timeout.rs" [dependencies] clap = { version = "4.0", features = ["wrap_help", "cargo"] } -libc = "0.2.135" +libc = "0.2.136" nix = { version = "0.25", default-features = false, features = ["signal"] } uucore = { version=">=0.0.16", package="uucore", path="../../uucore", features=["process", "signals"] } diff --git a/src/uu/whoami/Cargo.toml b/src/uu/whoami/Cargo.toml index f3a277e89..34402278f 100644 --- a/src/uu/whoami/Cargo.toml +++ b/src/uu/whoami/Cargo.toml @@ -22,7 +22,7 @@ uucore = { version=">=0.0.16", package="uucore", path="../../uucore", features=[ windows-sys = { version = "0.42.0", default-features = false, features = ["Win32_NetworkManagement_NetManagement", "Win32_System_WindowsProgramming", "Win32_Foundation"] } [target.'cfg(unix)'.dependencies] -libc = "0.2.135" +libc = "0.2.136" [[bin]] name = "whoami" diff --git a/src/uu/yes/Cargo.toml b/src/uu/yes/Cargo.toml index 677d60a5f..47cd10f53 100644 --- a/src/uu/yes/Cargo.toml +++ b/src/uu/yes/Cargo.toml @@ -16,7 +16,7 @@ path = "src/yes.rs" [dependencies] clap = { version = "4.0", features = ["wrap_help", "cargo"] } -libc = "0.2.135" +libc = "0.2.136" uucore = { version=">=0.0.16", package="uucore", path="../../uucore", features=["pipes"] } [target.'cfg(any(target_os = "linux", target_os = "android"))'.dependencies] diff --git a/src/uucore/Cargo.toml b/src/uucore/Cargo.toml index d9489c281..a83090857 100644 --- a/src/uucore/Cargo.toml +++ b/src/uucore/Cargo.toml @@ -32,7 +32,7 @@ time = { version="0.3", optional=true, features = ["formatting", "local-offset", data-encoding = { version="2.1", optional=true } data-encoding-macro = { version="0.1.12", optional=true } z85 = { version="3.0.5", optional=true } -libc = { version="0.2.135", optional=true } +libc = { version="0.2.136", optional=true } once_cell = "1.13.1" os_display = "0.1.3" From 52d82d54a3736a6298e2f0cb4b9ed186020f6a83 Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Tue, 25 Oct 2022 23:44:05 +0200 Subject: [PATCH 4/7] Revert "hashsum: test b3sum::test_nonames for real (#4027)" This reverts commit 02f6fa7b249f44d4fa5b10c5f008fadaaa9d6f56. --- src/uu/hashsum/src/hashsum.rs | 9 +++++---- tests/by-util/test_hashsum.rs | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/uu/hashsum/src/hashsum.rs b/src/uu/hashsum/src/hashsum.rs index 2d01c9d64..828436595 100644 --- a/src/uu/hashsum/src/hashsum.rs +++ b/src/uu/hashsum/src/hashsum.rs @@ -276,10 +276,11 @@ pub fn uumain(mut args: impl uucore::Args) -> UResult<()> { }; let check = matches.get_flag("check"); let tag = matches.get_flag("tag"); - let nonames = *matches - .try_get_one("no-names") - .unwrap_or(Some(&false)) - .unwrap(); + let nonames = if binary_name == "b3sum" { + matches.get_flag("no-names") + } else { + false + }; let status = matches.get_flag("status"); let quiet = matches.get_flag("quiet") || status; let strict = matches.get_flag("strict"); diff --git a/tests/by-util/test_hashsum.rs b/tests/by-util/test_hashsum.rs index e8f716815..f30eb42ce 100644 --- a/tests/by-util/test_hashsum.rs +++ b/tests/by-util/test_hashsum.rs @@ -34,7 +34,7 @@ macro_rules! test_digest { fn test_nonames() { let ts = TestScenario::new("hashsum"); // EXPECTED_FILE has no newline character at the end - if DIGEST_ARG == "--b3sum" { + if DIGEST_ARG == "b3sum" { // Option only available on b3sum assert_eq!(format!("{0}\n{0}\n", ts.fixtures.read(EXPECTED_FILE)), ts.ucmd().arg(DIGEST_ARG).arg(BITS_ARG).arg("--no-names").arg("input.txt").arg("-").pipe_in_fixture("input.txt") From bbc349589658a2630e3cfa073bdd3276cdda3109 Mon Sep 17 00:00:00 2001 From: Terts Diepraam Date: Wed, 26 Oct 2022 11:10:26 +0200 Subject: [PATCH 5/7] hashsum: enable testing --no-names Co-authored-by: Huijeong Kim --- src/uu/hashsum/src/hashsum.rs | 9 ++++----- tests/by-util/test_hashsum.rs | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/uu/hashsum/src/hashsum.rs b/src/uu/hashsum/src/hashsum.rs index 828436595..87c79fe1f 100644 --- a/src/uu/hashsum/src/hashsum.rs +++ b/src/uu/hashsum/src/hashsum.rs @@ -276,11 +276,10 @@ pub fn uumain(mut args: impl uucore::Args) -> UResult<()> { }; let check = matches.get_flag("check"); let tag = matches.get_flag("tag"); - let nonames = if binary_name == "b3sum" { - matches.get_flag("no-names") - } else { - false - }; + let nonames = *matches + .try_get_one("no-names") + .unwrap_or(None) + .unwrap_or(&false); let status = matches.get_flag("status"); let quiet = matches.get_flag("quiet") || status; let strict = matches.get_flag("strict"); diff --git a/tests/by-util/test_hashsum.rs b/tests/by-util/test_hashsum.rs index f30eb42ce..e8f716815 100644 --- a/tests/by-util/test_hashsum.rs +++ b/tests/by-util/test_hashsum.rs @@ -34,7 +34,7 @@ macro_rules! test_digest { fn test_nonames() { let ts = TestScenario::new("hashsum"); // EXPECTED_FILE has no newline character at the end - if DIGEST_ARG == "b3sum" { + if DIGEST_ARG == "--b3sum" { // Option only available on b3sum assert_eq!(format!("{0}\n{0}\n", ts.fixtures.read(EXPECTED_FILE)), ts.ucmd().arg(DIGEST_ARG).arg(BITS_ARG).arg("--no-names").arg("input.txt").arg("-").pipe_in_fixture("input.txt") From 34eabca299b8938bc61760091120bcca9e1a1519 Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Tue, 25 Oct 2022 22:29:46 +0200 Subject: [PATCH 6/7] pwd: support the env variable 'POSIXLY_CORRECT' Should fix tests/misc/pwd-option.sh --- src/uu/pwd/src/pwd.rs | 5 ++++- tests/by-util/test_pwd.rs | 29 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/uu/pwd/src/pwd.rs b/src/uu/pwd/src/pwd.rs index 732df19f6..b1e2b30ff 100644 --- a/src/uu/pwd/src/pwd.rs +++ b/src/uu/pwd/src/pwd.rs @@ -126,7 +126,10 @@ fn logical_path() -> io::Result { #[uucore::main] pub fn uumain(args: impl uucore::Args) -> UResult<()> { let matches = uu_app().try_get_matches_from(args)?; - let cwd = if matches.get_flag(OPT_LOGICAL) { + // if POSIXLY_CORRECT is set, we want to a logical resolution. + // This produces a different output when doing mkdir -p a/b && ln -s a/b c && cd c && pwd + // We should get c in this case instead of a/b at the end of the path + let cwd = if matches.get_flag(OPT_LOGICAL) || env::var("POSIXLY_CORRECT").is_ok() { logical_path() } else { physical_path() diff --git a/tests/by-util/test_pwd.rs b/tests/by-util/test_pwd.rs index 0ae63c895..0ae0cc909 100644 --- a/tests/by-util/test_pwd.rs +++ b/tests/by-util/test_pwd.rs @@ -90,6 +90,35 @@ fn test_symlinked_default() { env.ucmd.succeeds().stdout_is(env.subdir + "\n"); } +#[test] +fn test_symlinked_default_posix() { + let mut env = symlinked_env(); + env.ucmd + .env("POSIXLY_CORRECT", "1") + .succeeds() + .stdout_is(env.symdir.clone() + "\n"); +} + +#[test] +fn test_symlinked_default_posix_l() { + let mut env = symlinked_env(); + env.ucmd + .env("POSIXLY_CORRECT", "1") + .arg("-L") + .succeeds() + .stdout_is(env.symdir + "\n"); +} + +#[test] +fn test_symlinked_default_posix_p() { + let mut env = symlinked_env(); + env.ucmd + .env("POSIXLY_CORRECT", "1") + .arg("-P") + .succeeds() + .stdout_is(env.symdir + "\n"); +} + #[cfg(not(windows))] pub mod untrustworthy_pwd_var { use std::path::Path; From 2eb0b6dfe09c61a84814ea5aa391bad5c752dc80 Mon Sep 17 00:00:00 2001 From: Daniel Hofstetter Date: Thu, 27 Oct 2022 15:33:20 +0200 Subject: [PATCH 7/7] numfmt: round values if precision is 0 --- src/uu/numfmt/src/format.rs | 3 +-- tests/by-util/test_numfmt.rs | 28 +++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/uu/numfmt/src/format.rs b/src/uu/numfmt/src/format.rs index 5e61ce794..b97993f21 100644 --- a/src/uu/numfmt/src/format.rs +++ b/src/uu/numfmt/src/format.rs @@ -272,14 +272,13 @@ fn transform_to( let (i2, s) = consider_suffix(s, &opts.to, round_method, precision)?; let i2 = i2 / (opts.to_unit as f64); Ok(match s { - None if precision > 0 => { + None => { format!( "{:.precision$}", round_with_precision(i2, round_method, precision), precision = precision ) } - None => format!("{}", i2), Some(s) if precision > 0 => { format!( "{:.precision$}{}", diff --git a/tests/by-util/test_numfmt.rs b/tests/by-util/test_numfmt.rs index 72a9e39a9..821b8e70b 100644 --- a/tests/by-util/test_numfmt.rs +++ b/tests/by-util/test_numfmt.rs @@ -530,7 +530,7 @@ fn test_round() { new_ucmd!() .args(&[ "--to=si", - &format!("--round={}", method), + &format!("--round={method}"), "--", "9001", "-9001", @@ -542,6 +542,32 @@ fn test_round() { } } +#[test] +fn test_round_with_to_unit() { + for (method, exp) in [ + ("from-zero", ["6", "-6", "5.9", "-5.9", "5.86", "-5.86"]), + ("towards-zero", ["5", "-5", "5.8", "-5.8", "5.85", "-5.85"]), + ("up", ["6", "-5", "5.9", "-5.8", "5.86", "-5.85"]), + ("down", ["5", "-6", "5.8", "-5.9", "5.85", "-5.86"]), + ("nearest", ["6", "-6", "5.9", "-5.9", "5.86", "-5.86"]), + ] { + new_ucmd!() + .args(&[ + "--to-unit=1024", + &format!("--round={method}"), + "--", + "6000", + "-6000", + "6000.0", + "-6000.0", + "6000.00", + "-6000.00", + ]) + .succeeds() + .stdout_only(exp.join("\n") + "\n"); + } +} + #[test] fn test_suffix_is_added_if_not_supplied() { new_ucmd!()