mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 03:27:44 +00:00
Merge branch 'main' into dd-seconds-precision-3
This commit is contained in:
commit
9a231be9c5
18 changed files with 50 additions and 50 deletions
26
Cargo.lock
generated
26
Cargo.lock
generated
|
@ -61,17 +61,6 @@ version = "0.7.2"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
|
||||
|
||||
[[package]]
|
||||
name = "atty"
|
||||
version = "0.2.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
|
||||
dependencies = [
|
||||
"hermit-abi 0.1.19",
|
||||
"libc",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.1.0"
|
||||
|
@ -236,13 +225,13 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.0.26"
|
||||
version = "4.1.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2148adefda54e14492fb9bddcc600b4344c5d1a3123bd666dcb939c6f0e0e57e"
|
||||
checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5"
|
||||
dependencies = [
|
||||
"atty",
|
||||
"bitflags",
|
||||
"clap_lex",
|
||||
"is-terminal",
|
||||
"once_cell",
|
||||
"strsim",
|
||||
"termcolor",
|
||||
|
@ -1808,20 +1797,19 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "rayon"
|
||||
version = "1.6.0"
|
||||
version = "1.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e060280438193c554f654141c9ea9417886713b7acd75974c85b18a69a88e0b"
|
||||
checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
|
||||
dependencies = [
|
||||
"crossbeam-deque",
|
||||
"either",
|
||||
"rayon-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rayon-core"
|
||||
version = "1.10.1"
|
||||
version = "1.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3"
|
||||
checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
|
||||
dependencies = [
|
||||
"crossbeam-channel",
|
||||
"crossbeam-deque",
|
||||
|
|
|
@ -269,7 +269,7 @@ bstr = "1.0"
|
|||
bytecount = "0.6.3"
|
||||
byteorder = "1.3.2"
|
||||
chrono = { version="^0.4.23", default-features=false, features=["std", "alloc", "clock"]}
|
||||
clap = { version = "4.0", features = ["wrap_help", "cargo"] }
|
||||
clap = { version = "4.1", features = ["wrap_help", "cargo"] }
|
||||
clap_complete = "4.0"
|
||||
clap_mangen = "0.2"
|
||||
compare = "0.1.0"
|
||||
|
@ -308,7 +308,7 @@ platform-info = "1.0.2"
|
|||
quick-error = "2.0.1"
|
||||
rand = { version = "0.8", features = ["small_rng"] }
|
||||
rand_core = "0.6"
|
||||
rayon = "1.5"
|
||||
rayon = "1.7"
|
||||
redox_syscall = "0.2"
|
||||
regex = "1.7.1"
|
||||
rust-ini = "0.18.0"
|
||||
|
|
|
@ -11,10 +11,10 @@ cargo-fuzz = true
|
|||
libfuzzer-sys = "0.4"
|
||||
|
||||
[dependencies.uucore]
|
||||
uucore = { workspace = true }
|
||||
path = "../src/uucore/"
|
||||
|
||||
[dependencies.uu_date]
|
||||
uu_date = { workspace = true }
|
||||
path = "../src/uu/date/"
|
||||
|
||||
# Prevent this from interfering with workspaces
|
||||
[workspace]
|
||||
|
|
|
@ -16,9 +16,13 @@ use std::fs;
|
|||
use std::fs::{File, OpenOptions};
|
||||
use std::io;
|
||||
use std::io::prelude::*;
|
||||
#[cfg(unix)]
|
||||
use std::os::unix::fs::PermissionsExt;
|
||||
use std::path::{Path, PathBuf};
|
||||
use uucore::display::Quotable;
|
||||
use uucore::error::{FromIo, UResult, USimpleError, UUsageError};
|
||||
#[cfg(unix)]
|
||||
use uucore::libc::S_IWUSR;
|
||||
use uucore::{format_usage, show, show_if_err, util_name};
|
||||
|
||||
const BLOCK_SIZE: usize = 512;
|
||||
|
@ -462,6 +466,18 @@ fn wipe_file(
|
|||
if force {
|
||||
let metadata = fs::metadata(path).map_err_context(String::new)?;
|
||||
let mut perms = metadata.permissions();
|
||||
#[cfg(unix)]
|
||||
#[allow(clippy::useless_conversion)]
|
||||
{
|
||||
// NOTE: set_readonly(false) makes the file world-writable on Unix.
|
||||
// NOTE: S_IWUSR type is u16 on macOS.
|
||||
if (perms.mode() & u32::from(S_IWUSR)) == 0 {
|
||||
perms.set_mode(u32::from(S_IWUSR));
|
||||
}
|
||||
}
|
||||
#[cfg(not(unix))]
|
||||
// TODO: Remove the following once https://github.com/rust-lang/rust-clippy/issues/10477 is resolved.
|
||||
#[allow(clippy::permissions_set_readonly_false)]
|
||||
perms.set_readonly(false);
|
||||
fs::set_permissions(path, perms).map_err_context(String::new)?;
|
||||
}
|
||||
|
|
|
@ -10,8 +10,9 @@ fn fix_negation(glob: &str) -> String {
|
|||
let mut chars = glob.chars().collect::<Vec<_>>();
|
||||
|
||||
let mut i = 0;
|
||||
while i < chars.len() {
|
||||
if chars[i] == '[' && i + 4 <= glob.len() && chars[i + 1] == '^' {
|
||||
// Add 3 to prevent out of bounds in loop
|
||||
while i + 3 < chars.len() {
|
||||
if chars[i] == '[' && chars[i + 1] == '^' {
|
||||
match chars[i + 3..].iter().position(|x| *x == ']') {
|
||||
None => (),
|
||||
Some(j) => {
|
||||
|
@ -105,5 +106,8 @@ mod tests {
|
|||
assert_eq!(fix_negation("[^]"), "[^]");
|
||||
assert_eq!(fix_negation("[^"), "[^");
|
||||
assert_eq!(fix_negation("[][^]"), "[][^]");
|
||||
|
||||
// Issue #4479
|
||||
assert_eq!(fix_negation("ààà[^"), "ààà[^");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -86,7 +86,7 @@ fn test_wrap() {
|
|||
fn test_wrap_no_arg() {
|
||||
for wrap_param in ["-w", "--wrap"] {
|
||||
let ts = TestScenario::new(util_name!());
|
||||
let expected_stderr = "The argument '--wrap <COLS>' requires a value but none was supplied";
|
||||
let expected_stderr = "a value is required for '--wrap <COLS>' but none was supplied";
|
||||
ts.ucmd()
|
||||
.arg(wrap_param)
|
||||
.fails()
|
||||
|
|
|
@ -79,7 +79,7 @@ fn test_wrap_no_arg() {
|
|||
new_ucmd!()
|
||||
.arg(wrap_param)
|
||||
.fails()
|
||||
.stderr_contains("The argument '--wrap <COLS>' requires a value but none was supplied")
|
||||
.stderr_contains("a value is required for '--wrap <COLS>' but none was supplied")
|
||||
.no_stdout();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -196,7 +196,7 @@ fn test_missing_files() {
|
|||
.arg("groupname")
|
||||
.fails()
|
||||
.stderr_contains(
|
||||
"error: The following required arguments were not provided:\n <FILE>...\n",
|
||||
"error: the following required arguments were not provided:\n <FILE>...\n",
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ fn test_missing_operand() {
|
|||
|
||||
assert!(result
|
||||
.stderr_str()
|
||||
.starts_with("error: The following required arguments were not provided"));
|
||||
.starts_with("error: the following required arguments were not provided"));
|
||||
|
||||
assert!(result.stderr_str().contains("<newroot>"));
|
||||
}
|
||||
|
|
|
@ -1495,7 +1495,7 @@ fn test_cp_reflink_bad() {
|
|||
.arg(TEST_HELLO_WORLD_SOURCE)
|
||||
.arg(TEST_EXISTING_FILE)
|
||||
.fails()
|
||||
.stderr_contains("error: 'bad' isn't a valid value for '--reflink[=<WHEN>]'");
|
||||
.stderr_contains("error: invalid value 'bad' for '--reflink[=<WHEN>]'");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -52,7 +52,7 @@ fn test_link_one_argument() {
|
|||
let file = "test_link_argument";
|
||||
ucmd.args(&[file])
|
||||
.fails()
|
||||
.stderr_contains("requires 2 values");
|
||||
.stderr_contains("2 values required");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -65,5 +65,5 @@ fn test_link_three_arguments() {
|
|||
];
|
||||
ucmd.args(&arguments[..])
|
||||
.fails()
|
||||
.stderr_contains("requires 2 values");
|
||||
.stderr_contains("2 values required");
|
||||
}
|
||||
|
|
|
@ -92,14 +92,14 @@ fn test_mknod_character_device_requires_major_and_minor() {
|
|||
.arg("1")
|
||||
.arg("c")
|
||||
.fails()
|
||||
.stderr_contains("Invalid value 'c'");
|
||||
.stderr_contains("invalid value 'c'");
|
||||
new_ucmd!()
|
||||
.arg("test_file")
|
||||
.arg("c")
|
||||
.arg("c")
|
||||
.arg("1")
|
||||
.fails()
|
||||
.stderr_contains("Invalid value 'c'");
|
||||
.stderr_contains("invalid value 'c'");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -109,7 +109,7 @@ fn test_mknod_invalid_arg() {
|
|||
.arg("--foo")
|
||||
.fails()
|
||||
.no_stdout()
|
||||
.stderr_contains("Found argument '--foo' which wasn't expected");
|
||||
.stderr_contains("unexpected argument '--foo' found");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -36,18 +36,12 @@ fn test_hex_rejects_sign_after_identifier() {
|
|||
.args(&["-0x-123ABC"])
|
||||
.fails()
|
||||
.no_stdout()
|
||||
.stderr_contains(
|
||||
"Found argument '-0' which wasn't expected, or isn't valid in this context",
|
||||
)
|
||||
.stderr_contains("For more information try '--help'");
|
||||
.stderr_contains("unexpected argument '-0' found");
|
||||
new_ucmd!()
|
||||
.args(&["-0x+123ABC"])
|
||||
.fails()
|
||||
.no_stdout()
|
||||
.stderr_contains(
|
||||
"Found argument '-0' which wasn't expected, or isn't valid in this context",
|
||||
)
|
||||
.stderr_contains("For more information try '--help'");
|
||||
.stderr_contains("unexpected argument '-0' found");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -999,7 +999,7 @@ fn test_conflict_check_out() {
|
|||
.fails()
|
||||
.stderr_contains(
|
||||
// the rest of the message might be subject to change
|
||||
"error: The argument",
|
||||
"error: the argument",
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ fn test_stdbuf_no_buffer_option_fails() {
|
|||
ts.ucmd()
|
||||
.args(&["head"])
|
||||
.fails()
|
||||
.stderr_contains("The following required arguments were not provided:");
|
||||
.stderr_contains("the following required arguments were not provided:");
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
|
|
|
@ -194,7 +194,7 @@ fn test_error_filename_only() {
|
|||
.args(&["file"])
|
||||
.fails()
|
||||
.code_is(1)
|
||||
.stderr_contains("error: The following required arguments were not provided:");
|
||||
.stderr_contains("error: the following required arguments were not provided:");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -50,7 +50,5 @@ fn test_multiple_arguments() {
|
|||
.arg("call_graph.txt")
|
||||
.arg("invalid_file")
|
||||
.fails()
|
||||
.stderr_contains(
|
||||
"Found argument 'invalid_file' which wasn't expected, or isn't valid in this context",
|
||||
);
|
||||
.stderr_contains("unexpected argument 'invalid_file' found");
|
||||
}
|
||||
|
|
|
@ -151,7 +151,7 @@ fn test_arg1_arg2() {
|
|||
#[test]
|
||||
fn test_too_many_args() {
|
||||
const EXPECTED: &str =
|
||||
"error: The value 'u' was provided to '[FILE]...' but it wasn't expecting any more values";
|
||||
"error: unexpected value 'u' for '[FILE]...' found; no more were expected";
|
||||
|
||||
let args = ["am", "i", "u"];
|
||||
new_ucmd!().args(&args).fails().stderr_contains(EXPECTED);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue