mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-30 04:27:45 +00:00
Merge branch 'master' of github.com:backwaterred/coreutils
This commit is contained in:
commit
0bbd4d4992
22 changed files with 19 additions and 70 deletions
|
@ -4,9 +4,10 @@ Contributions are very welcome, and should target Rust's master branch until the
|
||||||
standard libraries are stabilized. You may *claim* an item on the to-do list by
|
standard libraries are stabilized. You may *claim* an item on the to-do list by
|
||||||
following these steps:
|
following these steps:
|
||||||
|
|
||||||
1. Open an issue named "Implement [the utility of your choice]", e.g. "Implement ls"
|
1. Open an issue named "Implement [the utility of your choice]", e.g. "Implement
|
||||||
|
ls".
|
||||||
1. State that you are working on this utility.
|
1. State that you are working on this utility.
|
||||||
1. Develop the utility
|
1. Develop the utility.
|
||||||
1. Add integration tests.
|
1. Add integration tests.
|
||||||
1. Add the reference to your utility into Cargo.toml and Makefile.
|
1. Add the reference to your utility into Cargo.toml and Makefile.
|
||||||
1. Remove utility from the to-do list in the README.
|
1. Remove utility from the to-do list in the README.
|
||||||
|
@ -17,12 +18,20 @@ search the issues to make sure no one else is working on it.
|
||||||
|
|
||||||
## Best practices
|
## Best practices
|
||||||
|
|
||||||
1. Follow what GNU is doing in terms of options and behavior. It is recommended to look at the GNU Coreutils manual ([on the web](https://www.gnu.org/software/coreutils/manual/html_node/index.html), or locally using `info <utility>`). It is more in depth than the man pages and provides a good description of available features and their implementation details.
|
1. Follow what GNU is doing in terms of options and behavior. It is recommended
|
||||||
1. If possible, look at the GNU test suite execution in the CI and make the test work if failing.
|
to look at the GNU Coreutils manual ([on the
|
||||||
|
web](https://www.gnu.org/software/coreutils/manual/html_node/index.html), or
|
||||||
|
locally using `info <utility>`). It is more in depth than the man pages and
|
||||||
|
provides a good description of available features and their implementation
|
||||||
|
details.
|
||||||
|
1. If possible, look at the GNU test suite execution in the CI and make the test
|
||||||
|
work if failing.
|
||||||
1. Use clap for argument management.
|
1. Use clap for argument management.
|
||||||
1. Make sure that the code coverage is covering all of the cases, including errors.
|
1. Make sure that the code coverage is covering all of the cases, including
|
||||||
|
errors.
|
||||||
1. The code must be clippy-warning-free and rustfmt-compliant.
|
1. The code must be clippy-warning-free and rustfmt-compliant.
|
||||||
1. Don't hesitate to move common functions into uucore if they can be reused by other binaries.
|
1. Don't hesitate to move common functions into uucore if they can be reused by
|
||||||
|
other binaries.
|
||||||
1. Unsafe code should be documented with Safety comments.
|
1. Unsafe code should be documented with Safety comments.
|
||||||
1. uutils is original code. It cannot contain code from existing GNU or Unix-like
|
1. uutils is original code. It cannot contain code from existing GNU or Unix-like
|
||||||
utilities, nor should it link to or reference GNU libraries.
|
utilities, nor should it link to or reference GNU libraries.
|
||||||
|
@ -99,9 +108,11 @@ project, a tool like `cargo-license` can be used to show their license details.
|
||||||
The following types of license are acceptable:
|
The following types of license are acceptable:
|
||||||
|
|
||||||
* MIT License
|
* MIT License
|
||||||
* Dual- or tri-license with an MIT License option ("Apache-2.0 or MIT" is a popular combination)
|
* Dual- or tri-license with an MIT License option ("Apache-2.0 or MIT" is a
|
||||||
|
popular combination)
|
||||||
* "MIT equivalent" license (2-clause BSD, 3-clause BSD, ISC)
|
* "MIT equivalent" license (2-clause BSD, 3-clause BSD, ISC)
|
||||||
* License less restrictive than the MIT License (CC0 1.0 Universal)
|
* License less restrictive than the MIT License (CC0 1.0 Universal)
|
||||||
|
* Apache License version 2.0
|
||||||
|
|
||||||
Licenses we will not use:
|
Licenses we will not use:
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,6 @@
|
||||||
// For the full copyright and license information, please view the LICENSE
|
// For the full copyright and license information, please view the LICENSE
|
||||||
// file that was distributed with this source code.
|
// file that was distributed with this source code.
|
||||||
|
|
||||||
// clippy bug https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
|
|
||||||
|
|
|
@ -10,9 +10,6 @@
|
||||||
|
|
||||||
// spell-checker:ignore (ToDO) nonprint nonblank nonprinting
|
// spell-checker:ignore (ToDO) nonprint nonblank nonprinting
|
||||||
|
|
||||||
// clippy bug https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
extern crate unix_socket;
|
extern crate unix_socket;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
|
|
|
@ -55,7 +55,6 @@ use walkdir::WalkDir;
|
||||||
use std::os::unix::fs::PermissionsExt;
|
use std::os::unix::fs::PermissionsExt;
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
#[allow(clippy::missing_safety_doc)]
|
|
||||||
ioctl!(write ficlone with 0x94, 9; std::os::raw::c_int);
|
ioctl!(write ficlone with 0x94, 9; std::os::raw::c_int);
|
||||||
|
|
||||||
quick_error! {
|
quick_error! {
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
// clippy bug https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
use std::io;
|
use std::io;
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,6 @@
|
||||||
// For the full copyright and license information, please view the LICENSE
|
// For the full copyright and license information, please view the LICENSE
|
||||||
// file that was distributed with this source code.
|
// file that was distributed with this source code.
|
||||||
|
|
||||||
// Clippy bug: https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,6 @@
|
||||||
// * For the full copyright and license information, please view the LICENSE
|
// * For the full copyright and license information, please view the LICENSE
|
||||||
// * file that was distributed with this source code.
|
// * file that was distributed with this source code.
|
||||||
|
|
||||||
// Clippy bug: https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,6 @@
|
||||||
// For the full copyright and license information, please view the LICENSE
|
// For the full copyright and license information, please view the LICENSE
|
||||||
// file that was distributed with this source code.
|
// file that was distributed with this source code.
|
||||||
|
|
||||||
// clippy bug https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,6 @@
|
||||||
// * For the full copyright and license information, please view the LICENSE
|
// * For the full copyright and license information, please view the LICENSE
|
||||||
// * file that was distributed with this source code.
|
// * file that was distributed with this source code.
|
||||||
|
|
||||||
// Clippy bug: https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
|
|
||||||
|
|
|
@ -7,9 +7,6 @@
|
||||||
|
|
||||||
// spell-checker:ignore (ToDO) gethostid
|
// spell-checker:ignore (ToDO) gethostid
|
||||||
|
|
||||||
// Clippy bug: https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
|
|
||||||
|
|
|
@ -7,9 +7,6 @@
|
||||||
|
|
||||||
// spell-checker:ignore (ToDO) MAKEWORD addrs hashset
|
// spell-checker:ignore (ToDO) MAKEWORD addrs hashset
|
||||||
|
|
||||||
// Clippy bug: https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
|
|
||||||
|
|
|
@ -7,9 +7,6 @@
|
||||||
|
|
||||||
// spell-checker:ignore (ToDO) signalname pids
|
// spell-checker:ignore (ToDO) signalname pids
|
||||||
|
|
||||||
// clippy bug https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
|
|
||||||
|
|
|
@ -7,9 +7,6 @@
|
||||||
|
|
||||||
// spell-checker:ignore (ToDO) cpio svgz webm somegroup nlink rmvb xspf
|
// spell-checker:ignore (ToDO) cpio svgz webm somegroup nlink rmvb xspf
|
||||||
|
|
||||||
// clippy bug https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
|
|
|
@ -5,9 +5,6 @@
|
||||||
// * For the full copyright and license information, please view the LICENSE
|
// * For the full copyright and license information, please view the LICENSE
|
||||||
// * file that was distributed with this source code.
|
// * file that was distributed with this source code.
|
||||||
|
|
||||||
// clippy bug https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,6 @@
|
||||||
|
|
||||||
// spell-checker:ignore (paths) GPGHome
|
// spell-checker:ignore (paths) GPGHome
|
||||||
|
|
||||||
// clippy bug https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
|
|
||||||
|
|
|
@ -170,7 +170,7 @@ fn check_basic(path: &[String]) -> bool {
|
||||||
fn check_extra(path: &[String]) -> bool {
|
fn check_extra(path: &[String]) -> bool {
|
||||||
// components: leading hyphens
|
// components: leading hyphens
|
||||||
for p in path {
|
for p in path {
|
||||||
if !no_leading_hyphen(p) {
|
if p.starts_with('-') {
|
||||||
writeln!(
|
writeln!(
|
||||||
&mut std::io::stderr(),
|
&mut std::io::stderr(),
|
||||||
"leading hyphen in file name component '{}'",
|
"leading hyphen in file name component '{}'",
|
||||||
|
@ -236,11 +236,6 @@ fn check_searchable(path: &str) -> bool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for a hyphen at the beginning of a path segment
|
|
||||||
fn no_leading_hyphen(path_segment: &str) -> bool {
|
|
||||||
!path_segment.starts_with('-')
|
|
||||||
}
|
|
||||||
|
|
||||||
// check whether a path segment contains only valid (read: portable) characters
|
// check whether a path segment contains only valid (read: portable) characters
|
||||||
fn check_portable_chars(path_segment: &str) -> bool {
|
fn check_portable_chars(path_segment: &str) -> bool {
|
||||||
const VALID_CHARS: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-";
|
const VALID_CHARS: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-";
|
||||||
|
|
|
@ -5,9 +5,6 @@
|
||||||
// * For the full copyright and license information, please view the LICENSE
|
// * For the full copyright and license information, please view the LICENSE
|
||||||
// * file that was distributed with this source code.
|
// * file that was distributed with this source code.
|
||||||
|
|
||||||
// clippy bug https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,6 @@
|
||||||
// * For the full copyright and license information, please view the LICENSE
|
// * For the full copyright and license information, please view the LICENSE
|
||||||
// * file that was distributed with this source code.
|
// * file that was distributed with this source code.
|
||||||
|
|
||||||
// clippy bug https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,6 @@
|
||||||
|
|
||||||
// spell-checker:ignore (ToDO) filetime strptime utcoff strs datetime MMDDhhmm
|
// spell-checker:ignore (ToDO) filetime strptime utcoff strs datetime MMDDhhmm
|
||||||
|
|
||||||
// clippy bug https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
pub extern crate filetime;
|
pub extern crate filetime;
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
|
|
|
@ -5,9 +5,6 @@
|
||||||
// * For the full copyright and license information, please view the LICENSE
|
// * For the full copyright and license information, please view the LICENSE
|
||||||
// * file that was distributed with this source code.
|
// * file that was distributed with this source code.
|
||||||
|
|
||||||
// Clippy bug: https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
// *
|
// *
|
||||||
// * For the full copyright and license information, please view the LICENSE
|
// * For the full copyright and license information, please view the LICENSE
|
||||||
// * file that was distributed with this source code.
|
// * file that was distributed with this source code.
|
||||||
// clippy bug https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate uucore;
|
extern crate uucore;
|
||||||
|
|
|
@ -7,9 +7,6 @@
|
||||||
|
|
||||||
// spell-checker:ignore (strings) ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
// spell-checker:ignore (strings) ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
||||||
|
|
||||||
// clippy bug https://github.com/rust-lang/rust-clippy/issues/7422
|
|
||||||
#![allow(clippy::nonstandard_macro_braces)]
|
|
||||||
|
|
||||||
extern crate data_encoding;
|
extern crate data_encoding;
|
||||||
|
|
||||||
use self::data_encoding::{DecodeError, BASE32, BASE64};
|
use self::data_encoding::{DecodeError, BASE32, BASE64};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue