Commit graph

8168 commits

Author SHA1 Message Date
Niyaz Nigmatullin
7e1c6d1baf tests/touch: add tests for trailing slashes + -c 2022-08-10 11:07:22 +03:00
Niyaz Nigmatullin
13e912bcbd touch: fix error handling 2022-08-10 11:07:22 +03:00
Sylvestre Ledru
33e4b96675
Merge pull request #3799 from jhscheer/patch-8
README: add badge for MSRV
2022-08-09 10:34:08 +02:00
Jan Scheer
f6ecf30f35
README: add badge for MSRV
* add badge for MSRV
* use the term "Minimum Supported Rust Version (MSRV)"
2022-08-09 10:02:13 +02:00
Sylvestre Ledru
87415f063d
Merge pull request #3781 from niyaznigmatullin/disable_max_value_tests
disable numfmt and printf LONG_MIN and INT_MAX+1 gnu-tests
2022-08-09 09:48:15 +02:00
Niyaz Nigmatullin
5978185f94 fix spelling 2022-08-09 08:35:10 +03:00
Niyaz Nigmatullin
dbaff49de6 gnu-tests: disable some tests that implementation-specific 2022-08-09 08:35:10 +03:00
Sylvestre Ledru
ab791b6c0b
Merge pull request #3796 from niyaznigmatullin/fix_broken_pipe_test_positive_zero_lines
test/tail: ignore broken pipe for tail -n 0
2022-08-09 00:24:32 +02:00
Sylvestre Ledru
2a6371fff8
Merge pull request #3797 from niyaznigmatullin/fix_broken_pipe_test_bytes_oseek_bytes_trunc_oflag
test/dd: fix broken pipe in test_bytes_oseek_bytes_trunc_oflag
2022-08-09 00:17:06 +02:00
Niyaz Nigmatullin
161fc6b642 test/dd: add ignore_stdin_write_error, because count=0 and dd doesn't
read anything
2022-08-08 22:44:59 +03:00
Niyaz Nigmatullin
04df57ebd4 test/tail: ignore pipe errors when tail -n 0, since it doesn't read
anything
2022-08-08 22:29:53 +03:00
Sylvestre Ledru
5b2313de78
Merge pull request #3792 from uutils/dependabot/cargo/unindent-0.1.10
build(deps): bump unindent from 0.1.9 to 0.1.10
2022-08-08 19:31:12 +02:00
Niyaz Nigmatullin
fee851dc1c
test/cp: fix test_copy_through_dangling_symlink_no_dereference_permissions (#3789)
* test/cp: -p changes ctime and added sleep for better timestamp testing

* test/cp: add nanoseconds checking for copied timestamps

* test/cp: made compilable on other OSes

* test/cp: added error messages to assert_eq calls
2022-08-08 11:11:17 +02:00
dependabot[bot]
35510ae073
build(deps): bump unindent from 0.1.9 to 0.1.10
Bumps [unindent](https://github.com/dtolnay/indoc) from 0.1.9 to 0.1.10.
- [Release notes](https://github.com/dtolnay/indoc/releases)
- [Commits](https://github.com/dtolnay/indoc/compare/0.1.9...0.1.10)

---
updated-dependencies:
- dependency-name: unindent
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-08 09:02:56 +00:00
Sylvestre Ledru
175f8aa16f
Merge pull request #3791 from uutils/dependabot/cargo/ouroboros-0.15.2
build(deps): bump ouroboros from 0.15.0 to 0.15.2
2022-08-08 11:01:09 +02:00
dependabot[bot]
54840b5fe1
build(deps): bump ouroboros from 0.15.0 to 0.15.2
Bumps [ouroboros](https://github.com/joshua-maros/ouroboros) from 0.15.0 to 0.15.2.
- [Release notes](https://github.com/joshua-maros/ouroboros/releases)
- [Commits](https://github.com/joshua-maros/ouroboros/commits)

---
updated-dependencies:
- dependency-name: ouroboros
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-08 06:30:58 +00:00
Sylvestre Ledru
b3d92ddf03
Merge pull request #3776 from jhscheer/patch-7
build-gnu: attempt to fix #3765
2022-08-06 20:49:12 +02:00
Sylvestre Ledru
2e0ed71bce
Merge pull request #3782 from koutheir/main
Use `u64` instead of `ino_t`/`dev_t` types
2022-08-06 20:44:55 +02:00
Koutheir Attouchi
81a762ced6 Use u64 instead of ino_t/dev_t types 2022-08-06 02:50:19 -04:00
Sylvestre Ledru
774c3f8f60
Merge pull request #3777 from jhscheer/fix_3733
tests: fix Freebsd test failures
2022-08-05 09:26:20 +02:00
Jan Scheer
0555745052
tests: fix Freebsd test failures 2022-08-05 08:04:25 +02:00
Jan Scheer
39505e39ed
build-gnu: attempt to fix #3765 2022-08-05 07:33:36 +02:00
Terts Diepraam
fa47af73d0
Merge pull request #3774 from sylvestre/consistency
Add more consistency in the --help output and declarations
2022-08-04 23:53:51 +02:00
Sylvestre Ledru
68647d3082
Merge pull request #3773 from uutils/sylvestre-patch-2
Remove manpages from the spell list ignore
2022-08-04 21:55:14 +02:00
Sylvestre Ledru
d957a11f34 Add more consistency in the --help output and declarations 2022-08-04 21:53:27 +02:00
Sylvestre Ledru
9b28debd50
Merge pull request #3771 from cakebaker/clap_replace_deprecated_possible_values
Replace possible_values() with value_parser()
2022-08-04 21:52:24 +02:00
Sylvestre Ledru
fcef8676f7
Remove manpages from the spell list ignore 2022-08-04 17:58:25 +02:00
Daniel Hofstetter
07b218e55a Replace possible_values() with value_parser() 2022-08-04 14:38:10 +02:00
Pierre Marsais
e1991525af
cp: Implement --sparse flag (#3766)
* cp: Refactor `reflink`/`sparse` handling to enable `--sparse` flag

`--sparse` and `--reflink` options have a lot of similarities:
 - They have similar options (`always`, `never`, `auto`)
 - Both need OS specific handling
 - They can be mutually exclusive

Prior to this change, `sparse` was defined as `CopyMode`, but `reflink`
wasn't. Given the similarities, it makes sense to handle them similarly.

The idea behind this change is to move all OS specific file copy
handling in the `copy_on_write_*` functions. Those function then
dispatch to the correct logic depending on the arguments (at the moment,
the tuple `(reflink, sparse)`).

Also, move the handling of `--reflink=never` from `copy_file` to the
`copy_on_write_*` functions, at the cost of a bit of code duplication,
to allow `copy_on_write_*` to handle all cases (and later handle
`--reflink=never` with `--sparse`).

* cp: Implement `--sparse` flag

This begins to address #3362

At the moment, only the `--sparse=always` logic matches the requirement
form GNU cp info page, i.e. always make holes in destination when
possible.

Sparse copy is done by copying the source to the destination block by
block (blocks being of the destination's fs block size). If the block
only holds NUL bytes, we don't write to the destination.

About `--sparse=auto`: according to GNU cp info page, the destination
file will be made sparse if the source file is sparse as well. The next
step are likely to use `lseek` with `SEEK_HOLE` detect if the source
file has holes. Currently, this has the same behaviour as
`--sparse=never`. This `SEEK_HOLE` logic can also be applied to
`--sparse=always` to improve performance when copying sparse files.

About `--sparse=never`: from my understanding, it is not guaranteed that
Rust's `fs::copy` will always produce a file with no holes, as
["platform-specific behavior may change in the
future"](https://doc.rust-lang.org/std/fs/fn.copy.html#platform-specific-behavior)

About other platforms:
 - `macos`: The solution may be to use `fcntl` command `F_PUNCHHOLE`.
 - `windows`: I only see `FSCTL_SET_SPARSE`.

This should pass the following GNU tests:
 - `tests/cp/sparse.sh`
 - `tests/cp/sparse-2.sh`
 - `tests/cp/sparse-extents.sh`
 - `tests/cp/sparse-extents-2.sh`

`sparse-perf.sh` needs `--sparse=auto`, and in particular a way to skip
holes in the source file.

Co-authored-by: Sylvestre Ledru <sylvestre@debian.org>
2022-08-04 13:22:59 +02:00
Pierre Marsais
90a9829287
cp: truncate destination when --reflink is set (#3759)
* cp: truncate destination when `--reflink` is set

This is needed in order to allow overriding an existing file.

```
$ truncate -s 512M /tmp/disk.img
$ mkfs.btrfs /tmp/disk.img
[...]
$ mkdir /tmp/disk
$ sudo mount /tmp/disk.img /tmp/disk
$ sudo chown $(id -u):$(id -g) -R /tmp/disk
$ for i in $(seq 0 8192); do echo -ne 'a' >>/tmp/disk/src1; done
$ echo "success" >/tmp/disk/src2
$
$ # GNU ls supports overriding files created with `--reflink`
$ cp --reflink=always /tmp/disk/src1 /tmp/disk/dst1
$ cp --reflink=always /tmp/disk/src2 /tmp/disk/dst1
$ cat /tmp/disk/dst1
success
$
$ # Now testing with uutils
$ cargo run cp --reflink=always /tmp/disk/src1 /tmp/disk/dst2
    Finished dev [unoptimized + debuginfo] target(s) in 0.25s
     Running `target/debug/coreutils cp --reflink=always /tmp/disk/src1 /tmp/disk/dst2`
$ cargo run cp --reflink=always /tmp/disk/src2 /tmp/disk/dst2
    Finished dev [unoptimized + debuginfo] target(s) in 0.26s
     Running `target/debug/coreutils cp --reflink=always /tmp/disk/src2 /tmp/disk/dst2`
cp: failed to clone "/tmp/disk/src2" from "/tmp/disk/dst2": Invalid argument (os error 22)
$ cat /tmp/disk/dst2
[lots of 'a']
$
$ # With truncate(true)
$ cargo run cp --reflink=always /tmp/disk/src1 /tmp/disk/dst3
    Finished dev [unoptimized + debuginfo] target(s) in 7.98s
     Running `target/debug/coreutils cp --reflink=always /tmp/disk/src1 /tmp/disk/dst3`
$ cargo run cp --reflink=always /tmp/disk/src2 /tmp/disk/dst3
    Finished dev [unoptimized + debuginfo] target(s) in 0.27s
     Running `target/debug/coreutils cp --reflink=always /tmp/disk/src2 /tmp/disk/dst3`
$ cat /tmp/disk/dst3
success
```
2022-08-04 08:50:19 +02:00
Sylvestre Ledru
aed0a5ce0f
Merge pull request #3737 from niyaznigmatullin/try_fix_F-headers
gnu-tests/F-headers: increase number of attempts
2022-08-02 22:22:44 +02:00
Sylvestre Ledru
59aede5f6c
Merge pull request #3768 from cakebaker/clap_replace_is_present
Replace deprecated is_present() with contains_id()
2022-08-02 22:21:10 +02:00
Daniel Hofstetter
7c3116330e Replace deprecated is_present() with contains_id() 2022-08-02 15:21:39 +02:00
Niyaz Nigmatullin
85021041b4 F-headers: try make 409 seconds timeout 2022-08-02 15:38:25 +03:00
Niyaz Nigmatullin
20a103f9c7 gnu-tests/F-headers: increase number of attempts 2022-08-02 15:38:25 +03:00
Sylvestre Ledru
c660fc700f
Merge pull request #3757 from cakebaker/clap_update
bump clap from 3.1.18 to 3.2.15
2022-08-02 09:56:01 +02:00
Sylvestre Ledru
dba21d5ee0
Merge pull request #3763 from uutils/dependabot/cargo/sha3-0.10.2
build(deps): bump sha3 from 0.10.1 to 0.10.2
2022-08-02 09:54:39 +02:00
Sylvestre Ledru
9b81e09f7a
Merge pull request #3764 from cakebaker/numfmt_preserve_trailing_zeros
numfmt: preserve trailing zeros
2022-08-01 13:32:55 +02:00
Sylvestre Ledru
7af3327c5c doc: refresh of the targets 2022-08-01 10:26:31 +02:00
Sylvestre Ledru
025cb75416 doc: fix some flake8 warnings 2022-08-01 10:24:50 +02:00
Sylvestre Ledru
0d593f334b compiles_table: reformat with black 2022-08-01 10:24:50 +02:00
Sylvestre Ledru
d7a67454f6 docs: add missing commands 2022-08-01 10:24:50 +02:00
Sylvestre Ledru
2d4c0cc227
doc: mark the deprecation comment as bold 2022-08-01 10:23:37 +02:00
Sylvestre Ledru
7f51d64a34 doc: comment that the table isn't up to date 2022-08-01 10:06:19 +02:00
Sylvestre Ledru
86a32049b3 doc: move the list of target into a different file 2022-08-01 10:06:15 +02:00
Daniel Hofstetter
e642ca90dd numfmt: preserve trailing zeros 2022-08-01 09:48:13 +02:00
dependabot[bot]
92778de1f4
build(deps): bump sha3 from 0.10.1 to 0.10.2
Bumps [sha3](https://github.com/RustCrypto/hashes) from 0.10.1 to 0.10.2.
- [Release notes](https://github.com/RustCrypto/hashes/releases)
- [Commits](https://github.com/RustCrypto/hashes/compare/sha3-v0.10.1...sha3-v0.10.2)

---
updated-dependencies:
- dependency-name: sha3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 06:39:05 +00:00
Pierre Marsais
4ad0d5c5a3
ls: Implement --zero flag. (#2929) (#3746)
* ls: Implement --zero flag. (#2929)

This flag can be used to provide a easy machine parseable output from
ls, as discussed in the GNU bug report
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=49716.

There are some peculiarities with this flag:

 - Current implementation of GNU ls of the `--zero` flag implies some
   other flags. Those can be overridden by setting those flags after
   `--zero` in the command line.
 - This flag is not compatible with `--dired`. This patch is not 100%
   compliant with GNU ls: GNU ls `--zero` will fail if `--dired` and
   `-l` are set, while with this patch only `--dired` is needed for the
   command to fail.

We also add `--dired` flag to the parser, with no additional behaviour
change.

Testing done:
```
$ bash util/build-gnu.sh
 [...]
$ bash util/run-gnu-test.sh tests/ls/zero-option.sh
 [...]
 PASS: tests/ls/zero-option.sh
 ============================================================================
 Testsuite summary for GNU coreutils 9.1.36-8ec11
 ============================================================================
 # TOTAL: 1
 # PASS:  1
 # SKIP:  0
 # XFAIL: 0
 # FAIL:  0
 # XPASS: 0
 # ERROR: 0
 ============================================================================
```

* Use the US way to spell Behavior

* Fix formatting with cargo fmt -- tests/by-util/test_ls.rs

* Simplify --zero flag overriding logic by using index_of

Also, allow multiple --zero flags, as this is possible with GNU ls
command. Only the last one is taken into account.

Co-authored-by: Sylvestre Ledru <sledru@mozilla.com>
2022-07-31 19:02:50 +02:00
Sylvestre Ledru
38679f1c1b
Merge pull request #3751 from cakebaker/numfmt_format
numfmt: implement --format
2022-07-29 18:40:18 +02:00
Sylvestre Ledru
612f874d8f
Merge pull request #3755 from uutils/dependabot/github_actions/vmactions/freebsd-vm-0.2.3
build(deps): bump vmactions/freebsd-vm from 0.2.1 to 0.2.3
2022-07-29 18:40:02 +02:00