1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-08-05 15:37:47 +00:00

Merge branch 'main' into rm-correct-prompts

This commit is contained in:
Pat Laster 2022-10-27 13:38:41 -05:00 committed by GitHub
commit c4417bf9b2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
27 changed files with 145 additions and 32 deletions

25
Cargo.lock generated
View file

@ -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"
@ -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"

View file

@ -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]]

View file

@ -246,6 +246,19 @@ fn parse_spec(spec: &str, sep: char) -> UResult<(Option<u32>, Option<u32>)> {
} 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))
}

View file

@ -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"] }

View file

@ -278,8 +278,8 @@ pub fn uumain(mut args: impl uucore::Args) -> UResult<()> {
let tag = matches.get_flag("tag");
let nonames = *matches
.try_get_one("no-names")
.unwrap_or(Some(&false))
.unwrap();
.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");

View file

@ -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]]

View file

@ -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" }

View file

@ -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]]

View file

@ -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]]

View file

@ -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" }

View file

@ -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"] }

View file

@ -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"] }

View file

@ -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$}{}",

View file

@ -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]]

View file

@ -126,7 +126,10 @@ fn logical_path() -> io::Result<PathBuf> {
#[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()

View file

@ -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"

View file

@ -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]

View file

@ -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"] }

View file

@ -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"] }

View file

@ -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]

View file

@ -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"] }

View file

@ -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"

View file

@ -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]

View file

@ -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"

View file

@ -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:

View file

@ -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!()

View file

@ -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;