Commit graph

1398 commits

Author SHA1 Message Date
electricboogie
c01c6a7d78 Ran rustfmt 2021-04-25 22:41:11 -05:00
electricboogie
6654519c7d Specify a default tempdir for Windows 2021-04-25 22:39:17 -05:00
electricboogie
e5c19734c8 Change Default Buffer to usize::MAX 2021-04-25 21:38:22 -05:00
electricboogie
1a407c2328 Set a dynamic minimum buffer size 2021-04-25 21:17:56 -05:00
electricboogie
8e258075f6 Potential fix to tests on Windows 2021-04-25 19:21:19 -05:00
electricboogie
fc899ffe7a Implement a minimum readback buffer 2021-04-25 19:07:24 -05:00
electricboogie
32222c1ee7 Remove unneeded condition for use of NumCache 2021-04-25 17:52:20 -05:00
electricboogie
0f707cdb25 Adjust max buffer size for read back as well 2021-04-25 16:33:12 -05:00
Christopher Regali
368e984fac
Change unchecked unwrapping to unwrap_or_default for Args-trait (#1845) (#1852)
* Change unchecked unwrapping to unwrap_or_default for argument parsing (resolving #1845)

* Added unit-testing for the collect_str function on invalid utf8 OsStrs

* Added a warning-message for identification purpose to the collect_str method.

* - Add removal of wrongly encoded empty strings to basename
- Add testing of broken encoding to basename
- Changed UCommand to use collect_str in args method to allow for integration testing of that method
- Change UCommand to use unwarp_or_default in arg method to match the behaviour of collect_str

* Trying out a new pattern for convert_str for getting a feeling of how the API feels with more control

* Adding convenience API for compact calls

* Add new API to everywhere, fix test for basename

* Added unit-testing for the conversion options

* Added unit-testing for the conversion options for windows

* fixed compilation and some merge hiccups

* Remove windows tests in order to make merge request build

* Fix formatting to match rustfmt for the merged file

* Improve documentation of the collect_str method and the unit-tests

* Fix compilation problems with test

Co-authored-by: Christopher Regali <chris.vdop@gmail.com>
Co-authored-by: Sylvestre Ledru <sylvestre@debian.org>
2021-04-25 23:28:42 +02:00
electricboogie
6f82cd4f15 Fix errors for usize on 32bit platforms 2021-04-25 16:27:36 -05:00
electricboogie
dbdac22262 Add back unstable sort 2021-04-25 15:48:20 -05:00
electricboogie
5fb7014c2b Add a BufWriter for writes out to temp files 2021-04-25 15:42:36 -05:00
electricboogie
733949b2e7 Add dynamic buffer adjustment, fix test comment 2021-04-25 15:13:27 -05:00
Ricardo Iglesias
c3d7358df6
ls: ignore leading period when sorting by name (#2112)
* ls: ignore leading period when sorting by name

ls now behaves like GNU ls with respect to sorting files by ignoring
leading periods when sorting by main.

Added tests to ensure "touch a .a b .b ; ls" returns ".a  a  .b  b"

* Replaced clone/collect calls.
2021-04-25 21:08:05 +02:00
Alessandro Stoltenberg
43f3f7e01c feat2: Rebased on current master and incorporated changes done to the filetype handling. 2021-04-25 20:13:42 +02:00
electricboogie
2f37b85426 unwrap_or_else can be an unwrap_or 2021-04-25 12:58:04 -05:00
Alessandro Stoltenberg
9c221148a8 ls: Extension sorting, use file_stem() instead of to_string_lossy() 2021-04-25 19:45:59 +02:00
Alessandro Stoltenberg
bbcca3eefd ls: Implements https://github.com/uutils/coreutils/issues/1880 extension sorting. 2021-04-25 19:45:59 +02:00
electricboogie
f0a473f40e Fix tests 2021-04-25 12:38:43 -05:00
electricboogie
094d9a9e47 Fix bug in human_numeric convert 2021-04-25 12:27:11 -05:00
electricboogie
4c395146dd Merge branch 'master' of https://github.com/uutils/coreutils 2021-04-25 10:11:27 -05:00
electricboogie
26fc8e57c7 Fix NumCache and Serde JSON conflict by disabling NumCache during extsort general numeric compares 2021-04-25 10:03:29 -05:00
Sylvestre Ledru
e667cc2641
Merge pull request #2115 from tertsdiepraam/ls/reduce_write_calls
`ls`: reduce write syscalls & cleanup
2021-04-25 11:52:51 +02:00
Sylvestre Ledru
c19e191360
Merge pull request #2113 from siebenHeaven/ls-optimize-sort
ls: Use sort_by_cached_key
2021-04-25 11:13:23 +02:00
Terts Diepraam
fc6c7a279e ls: clean up imports 2021-04-25 10:46:51 +02:00
Anup Mahindre
7e06316ece ls: Use sort_by_cached_key 2021-04-25 13:37:07 +05:30
Sylvestre Ledru
441763b73d
Merge pull request #2059 from cbjadwani/master
uniq: avoid building list of duplicate lines
2021-04-25 09:48:48 +02:00
Sylvestre Ledru
d3775ea0e8
Merge pull request #2110 from nthery/cp_reflink_macos
cp: add  --reflink support to macos, fixes #1773
2021-04-25 09:28:14 +02:00
electricboogie
2b8a6e98ee Working ExtSort 2021-04-25 00:20:56 -05:00
Terts Diepraam
e995eea579 ls: general cleanup 2021-04-25 00:23:14 +02:00
Terts Diepraam
ce04f8a759 ls: use bufwriter to write stdout 2021-04-24 23:46:19 +02:00
Nicolas Thery
4bf33e98a8 cp: add --reflink support for macOS
Fixes #1773
2021-04-24 19:26:15 +02:00
Nicolas Thery
b8e23c20c2 cp: extract linux COW logic into function 2021-04-24 19:22:12 +02:00
Chirag Jadwani
2c1459cbfc cut: optimizations
* Use buffered stdout to reduce write sys calls.

This simple change yielded the biggest performace gain.

* Use `for_byte_record_with_terminator` from the `bstr` crate.

This is to minimize the per line copying needed by
`BufReader::read_until`. The `cut_fields` and `cut_fields_delimiter`
functions used `read_until` to iterate over lines. That required copying
each input line to the line buffer. With
`for_byte_record_with_terminator` copying is minimized as it calls our
closure with a reference to BufReader's buffer most of the time.  It
needs to copy (internally) only to process any incomplete lines at the
end of the buffer.

* Re-write `Searcher` to use `memchr`.

Switch from the naive implementation to one that uses `memchr`.

* Rewrite `cut_bytes` almost entirely.

This was already well optimized. The performance gain in this case is
not from avoiding copying. In fact, it needed zero copying whereas new
implementation introduces some copying similar to `cut_fields` described
above. But the occassional copying cost is more than offset by the use
of the very fast `memchr` inside `for_byte_record_with_terminator`.
This change also simplifies the code significantly. Removed the `buffer`
module.
2021-04-24 22:29:48 +05:30
Sylvestre Ledru
2f17bfc14c
Merge pull request #2106 from miDeb/sort-debug
sort: implement --debug
2021-04-24 18:46:58 +02:00
Sylvestre Ledru
c9b0378ca3
Merge pull request #2104 from tertsdiepraam/ls/skip_metadata
`ls`: skip reading metadata
2021-04-24 18:13:53 +02:00
Sylvestre Ledru
d7e8a03237
Merge pull request #2097 from miDeb/sort-disable-dictionary-mode
sort: disallow certain flags with -d and -i
2021-04-24 14:58:32 +02:00
Sylvestre Ledru
b41951614b
Merge branch 'master' into sort-disable-dictionary-mode 2021-04-24 13:56:39 +02:00
Terts Diepraam
1328d18878 ls: remove outdated comment 2021-04-24 13:19:50 +02:00
Michael Debertol
5dcfb51110 flip default for debug to the effective default 2021-04-24 10:52:40 +02:00
Terts Diepraam
728f0bd61d ls: remove redundant parentheses 2021-04-24 10:47:36 +02:00
Terts Diepraam
ce8c58b93e Merge branch 'master' into ls/skip_metadata 2021-04-24 10:45:43 +02:00
Sylvestre Ledru
8ccc6ade61
Merge branch 'master' into split-wsl-detection 2021-04-24 10:24:13 +02:00
Sylvestre Ledru
9517395839
Merge pull request #2088 from nthery/cp_reflink_never
cp: add support for --reflink=never
2021-04-24 10:07:41 +02:00
Sylvestre Ledru
fb6394554e
Merge pull request #2096 from tertsdiepraam/ls/fix_backslash_escape
ls: improve code cov
2021-04-24 10:05:32 +02:00
Sylvestre Ledru
513ff4e45f
Merge branch 'master' into sort-disable-dictionary-mode 2021-04-24 10:04:23 +02:00
Sylvestre Ledru
b96f7dbaea
Merge pull request #2087 from pedrohjordao/printf-clap-opts
Changes parameter parsing to clap
2021-04-24 10:02:05 +02:00
Sylvestre Ledru
372d08c341
Merge pull request #2098 from miDeb/sort-trailing-separator
sort: fix tokenization for trailing separators
2021-04-24 10:00:20 +02:00
Sylvestre Ledru
a9fa4adddf
Merge pull request #2102 from jaggededgedjustice/fix-tail-sleep-interval
tail --sleep-interval takes a value
2021-04-24 09:59:03 +02:00
Sylvestre Ledru
b10837f180
Merge pull request #2103 from jhscheer/refactor_tests
refactor tests (#1982)
2021-04-24 09:58:20 +02:00
Sylvestre Ledru
46b95fb8bd
Merge pull request #2099 from tertsdiepraam/ls/cross_platform_colors
ls: cross-platform colors
2021-04-24 09:56:46 +02:00
Michael Debertol
e6f6b109a5 sort: implement --debug
This adds a --debug flag, which, when activated, will draw lines below
the characters that are actually used for comparisons.

This is not a complete implementation of --debug. It should, quoting the man page
for GNU sort: "annotate the part of the line used to sort, and warn
about questionable usage to stderr". Warning about "questionable usage"
is not part of this patch.

This change required some adjustments to be able to get the range that
is actually used for comparisons. Most notably, general numeric comparisons
were rewritten, fixing some bugs along the lines.

Testing is mostly done by adding fixtures for the expected debug output of
existing tests.
2021-04-23 22:36:15 +02:00
James Robson
b68ecf1269 Allow space in truncate --size 2021-04-23 16:36:46 +01:00
Terts Diepraam
eccb86c9ed ls: fix -a test 2021-04-23 08:26:20 +02:00
Jan Scheer
646c6cacbc refactor tests (#1982) 2021-04-23 02:28:46 +02:00
Terts Diepraam
3874a24457 ls: add once_cell to Cargo.toml 2021-04-23 00:35:45 +02:00
Terts Diepraam
a114f855f0 ls: revert to_ascii_lowercase 2021-04-22 23:43:00 +02:00
Terts Diepraam
e241f3ad69 ls: skip reading metadata 2021-04-22 22:45:24 +02:00
James Robson
3678777539 tail --sleep-interval takes a value 2021-04-22 16:10:08 +01:00
Terts Diepraam
ea10647a62 Merge remote-tracking branch 'upstream/master' into ls/fix_backslash_escape 2021-04-22 14:23:35 +02:00
Terts Diepraam
b9f4964a96 ls: bring up to date with recent changes 2021-04-22 11:39:08 +02:00
Terts Diepraam
cd1514bd57 Merge branch 'master' into ls/cross_platform_colors 2021-04-22 11:30:26 +02:00
Terts Diepraam
4e4c3aba00 ls: don't color symlink target 2021-04-22 11:16:33 +02:00
Anup Mahindre
8554cdf35b
Optimize recursive ls (#2083)
* ls: Remove allocations by eliminating collect/clones

* ls: Introduce PathData structure

- PathData will hold Path related metadata / strings that are required
frequently in subsequent functions
- All data is precomputed and cached and subsequent functions just
use cached data

* ls: Cache more data related to paths

- Cache filename and sort by filename instead of full path
- Cache uid->usr and gid->grp mappings
https://github.com/uutils/coreutils/pull/2099/files
* ls: Add BENCHMARKING.md

* ls: Document PathData structure

* tests/ls: Add testcase for error paths with width option

* ls: Fix unused import warning

cached will be only used for unix currently as current use of
caching gid/uid mappings is only relevant on unix

* ls: Suggest checking syscall count in BENCHMARKING.md

* ls: Remove mentions of sort in BENCHMARKING.md

* ls: Remove dependency on cached

Implement caching using HashMap and lazy_static

* ls: Fix MSRV error related to map_or

Rust 1.40 did not support map_or for result types
2021-04-22 09:19:17 +02:00
Terts Diepraam
1d7e206d72 ls: fix mac build 2021-04-21 20:04:52 +02:00
Michael Debertol
8a05148d7b sort: fix tokenization for trailing separators
Trailing separators were included at the end of the last token, but they
should not be.

This changes tokenize_with_separator as suggested by @cbjadwani.
2021-04-21 19:07:03 +02:00
Terts Diepraam
3fc8d2e422 ls: make compatible with Rust 1.40 again 2021-04-21 18:05:10 +02:00
Terts Diepraam
ff39538375 ls: further refactor --color and classification 2021-04-21 18:00:43 +02:00
Michael Debertol
8b906b9547 remove feature use stabilized in 1.51 2021-04-21 18:00:01 +02:00
Michael Debertol
4a305b32c6 sort: disallow certain flags with -d and -i
GNU sort disallows these combinations, presumably because they are
likely not what the user really wants.

Ignoring characters would cause things to be put together that aren't
together in the input. For example, -dn would cause "0.12" or "0,12" to
be parsed as "12" which is highly unexpected and confusing.
2021-04-21 17:49:40 +02:00
Terts Diepraam
34a824af71 ls: use lscolors crate 2021-04-21 17:35:02 +02:00
Terts Diepraam
29b5b6b276 ls: fix unit tests to match last change 2021-04-21 13:03:31 +02:00
Terts Diepraam
f34c992932 ls: always quote backslash in shell style 2021-04-21 12:45:21 +02:00
Árni Dagur
387227087f
cat: Put splice code in separate file, handle more failures (#2067)
* cat: Refactor splice code, handle more failures

* cat: Add tests for stdout redirected to files
2021-04-21 12:21:31 +02:00
Terts Diepraam
fd54614130 Merge branch 'master' into ls/fix_backslash_escape 2021-04-21 12:06:54 +02:00
Terts Diepraam
f84f23ddfe tests/ls: add coverage for special shell character after escaped char 2021-04-21 11:22:10 +02:00
Terts Diepraam
795d89f11d ls: don't escape backslash in shell style quoting 2021-04-21 11:08:40 +02:00
electricboogie
25021f31eb Incorporate overhead of Line struct 2021-04-19 21:24:52 -05:00
Sivachandran
0ea35f3fbc
Implement install create leading components(-D) option (#2092)
* Implement install's create leading components(-D) option

* Format changes

* Add install test to check fail on long dir name
2021-04-19 22:03:13 +02:00
electricboogie
b8d667c383 Clippy lints, more work on ext_sorter leads to 2 failing tests 2021-04-19 10:57:53 -05:00
Pedro Jordão
158ae35da5 Commented out code removal 2021-04-19 14:21:49 +01:00
Chirag Jadwani
3bb99e7047 uniq: avoid building list of duplicate lines
This reduces memory usage by only storing two lines of the input file at
a time. The current implementation first builds a list of all duplicate
lines ('group') and then decides which lines of the group should be
printed.
2021-04-19 17:02:59 +05:30
Jan Scheer
049f21a199
du: fix tests on linux (#2066) (#2090) 2021-04-19 10:45:51 +02:00
electricboogie
e7bcd59558 Remove a clone 2021-04-18 18:22:30 -05:00
electricboogie
fcebdbb7a7 Cleanup comment 2021-04-18 17:51:44 -05:00
electricboogie
5efd67b5e2 License cleanup 2021-04-18 17:44:45 -05:00
electricboogie
72858dda42 Ran rustfmt 2021-04-18 17:40:59 -05:00
electricboogie
258325491f Make human_numeric_convert a method 2021-04-18 17:39:42 -05:00
electricboogie
8072e2092a Cleanup loop, run rustfmt 2021-04-18 16:33:18 -05:00
electricboogie
deb94cef7a Cleanup 2021-04-18 15:52:48 -05:00
electricboogie
559f4e81f6 More license cleanup 2021-04-18 15:47:05 -05:00
electricboogie
fb19522ca0 Bring back non-external sort as default 2021-04-18 15:39:20 -05:00
electricboogie
e841bb6a24 More license cleanup 2021-04-18 15:20:16 -05:00
electricboogie
9170e7a511 Modify NOTICE 2021-04-18 15:15:12 -05:00
electricboogie
298e269531 Remove unsed code 2021-04-18 15:08:42 -05:00
electricboogie
0151f30c4e Change directory structure 2021-04-18 15:04:25 -05:00
electricboogie
e3e1ee30eb Add additional notices 2021-04-18 14:37:16 -05:00
electricboogie
0275a43c5b Make modifications clearer per Apache license 2021-04-18 14:05:27 -05:00
electricboogie
42da444f40 Remove unused deps 2021-04-18 13:49:11 -05:00
electricboogie
5bb66b26dd Merge branch 'master' of https://github.com/uutils/coreutils 2021-04-18 13:45:33 -05:00
electricboogie
dad7761be9 Add test 2021-04-18 13:43:41 -05:00
electricboogie
da94e35044 Cleanup, removed unused code, add copyright 2021-04-18 13:02:50 -05:00
electricboogie
d7b7ce52bc Vendored ext_sorter, removed unstable, created a byte buffer sized vector instead of a numbered capacity vector 2021-04-18 11:54:18 -05:00
Nicolas Thery
f36832c392 cp: add support for --reflink=never
- Passing `never` to `--reflink` does not raise an error anymore.
- Remove `Options::reflink` flag as it was redundant with
  `reflink_mode`.
- Add basic tests for this option.  Does not check that a copy-on-write
  rather than a regular copy was made.
2021-04-18 18:51:59 +02:00
Sylvestre Ledru
d3f71810df
Merge pull request #2063 from jhscheer/iss2060
chown: fix #2060
2021-04-18 09:50:23 +02:00
electricboogie
a73d108dd8 Merge branch 'master' of https://github.com/uutils/coreutils 2021-04-17 23:25:02 -05:00
electricboogie
4c8d62c2be More cleanup 2021-04-17 23:24:32 -05:00
electricboogie
3a1e92fdd2 More cleanup 2021-04-17 22:39:05 -05:00
electricboogie
7a8767e359 Cleanup 2021-04-17 22:34:03 -05:00
electricboogie
65e9c7b1b5 Sorta working ExtSort - concat struct elements 2021-04-17 21:30:03 -05:00
Jan Scheer
df2dcc5b99 chown: fix parse_spec() for colon (#2060) 2021-04-18 00:11:59 +02:00
Michael Debertol
519b9d34a6
sort: use unstable sort when possible (#2076)
* sort: use unstable sort when possible

This results in a very minor performance (speed) improvement.
It does however result in a memory usage reduction, because unstable
sort does not allocate auxiliary memory. There's also an improvement in
overall CPU usage.

* add benchmarking instructions

* add user time

* fix typo
2021-04-17 22:40:13 +02:00
Pedro Jordão
01fef70143 Changes parameter parsing to clap
- Uses clap to parse parameters
- Removes of "allow" directive where they are not necessary
- Removes of unused variables
2021-04-17 20:42:05 +01:00
electricboogie
acfe0681d4 Merge branch 'master' of https://github.com/uutils/coreutils 2021-04-17 11:54:45 -05:00
Michael Debertol
4bbbe3a3f2
sort: implement numeric string comparison (#2070)
* sort: implement numeric string comparison

This implements -n and -h using a string comparison algorithm instead
of parsing each number to a f64 and comparing those.

This should result in a moderate performance increase and eliminate loss
of precision.

* cache parsed f64 numbers

For general numeric comparisons we have to parse numbers as f64,
as this behavior is explicitly documented by GNU coreutils.
We can however cache the parsed value to speed up comparisons.

* fix leading zeroes for negative numbers

* use more appropriate name for exponent

* improvements to the parse function

* move checks into main loop and fix thousands separator condition

* remove unneeded checks

* rustfmt
2021-04-17 13:49:35 +02:00
Sylvestre Ledru
481d1ee659
Merge pull request #2077 from tertsdiepraam/ls/dereference-command-line
ls: dereference command line
2021-04-17 13:31:52 +02:00
Sylvestre Ledru
c5b43c0994 rustfmt the recent change 2021-04-17 13:21:30 +02:00
Sylvestre Ledru
eec389fa94
Merge branch 'master' into ls/dereference-command-line 2021-04-17 10:30:42 +02:00
Andrew Rowson
d0c7e8c09e
du error output should match GNU (#1776)
* du error output should match GNU

* Created a new error macro which allows the customization of the
  "error:" string part
* Match the du output based on the type of error encountered. Can extend
  to handling other errors I guess.

* Rustfmt updates

* Added non-windows test for du no permission output
2021-04-17 10:26:52 +02:00
Sylvestre Ledru
fc057b816b
Merge branch 'master' into split-wsl-detection 2021-04-17 10:22:54 +02:00
Aleksandar Janicijevic
fe207640e2
touch: dealing with DST in touch -m -t (#2073) 2021-04-17 10:08:10 +02:00
electricboogie
a76d452f75
Sort: More small fixes (#2065)
* Various fixes and performance improvements

* fix a typo

Co-authored-by: Michael Debertol <michael.debertol@gmail.com>

* Fix month parse for months with leading whitespace

* Implement test for months whitespace fix

* Confirm human numeric works as expected with whitespace with a test

* Correct arg help value name for --parallel

* Fix SemVer non version lines/empty line sorting with a test

Co-authored-by: Sylvestre Ledru <sledru@mozilla.com>
Co-authored-by: Michael Debertol <michael.debertol@gmail.com>
2021-04-17 10:06:19 +02:00
Terts Diepraam
2c130ae7c0 ls: take -l into account with dereference-command-line 2021-04-14 14:42:14 +02:00
Terts Diepraam
5c28ac1b0d ls: dereference command line 2021-04-14 14:12:00 +02:00
electricboogie
c49f93c9af Psuedo working extsort 2021-04-12 18:05:37 -05:00
electricboogie
e6c195a675 ExtSort 2021-04-12 14:24:22 -05:00
Reto Hablützel
a4253d1254 apply more clippy suggestions from nightly 2021-04-12 20:07:10 +02:00
Reto Hablützel
07e9c5896c ignore strip_suffix until minimum rust version is 1.45 2021-04-12 19:53:47 +02:00
Reto Hablützel
d219b6e705 strip_suffix is not avaialble with rust 1.40 2021-04-12 19:50:23 +02:00
Reto Hablützel
d67560c37a fix clippy for unix 2021-04-11 16:34:19 +02:00
Reto Hablützel
b465c34eef fix ls 2021-04-11 16:16:38 +02:00
Reto Hablützel
75a76613e4 fix clippy in cp 2021-04-11 16:09:18 +02:00
Reto Hablützel
97d12d6e3c fix trivial warnings without features 2021-04-11 16:05:25 +02:00
electricboogie
c6021e10c2 Fix SemVer non version lines/empty line sorting with a test 2021-04-10 15:27:16 -05:00
Árni Dagur
eb4971e6f4
cat: Unrevert splice patch (#2020)
* cat: Unrevert splice patch

* cat: Add fifo test

* cat: Add tests for error cases

* cat: Add tests for character devices

* wc: Make sure we handle short splice writes

* cat: Fix tests for 1.40.0 compiler

* cat: Run rustfmt on test_cat.rs

* Run 'cargo +1.40.0 update'
2021-04-10 22:19:53 +02:00
electricboogie
7133273725 Correct arg help value name for --parallel 2021-04-10 14:13:49 -05:00
electricboogie
3c1c76444b Merge branch 'master' of https://github.com/uutils/coreutils 2021-04-10 13:26:56 -05:00
Michael Debertol
69f4410a8a
sort: dedup using compare_by (#2064)
compare_by is the function used for sorting, we should use it for dedup
as well.
2021-04-10 19:49:10 +02:00
electricboogie
2d9f15d12c Fix month parse for months with leading whitespace 2021-04-10 12:02:02 -05:00
Michael Debertol
49c9d8c901
sort: implement -k and -t support (#1996)
* sort: implement basic -k and -t support

This allows to specify keys after the -k flag and a custom field
separator using -t.

Support for options for specific keys is still missing, and the -b flag
is not passed down correctly.

* sort: implement support for key options

* remove unstable feature use

* don't pipe in input when we expect a failure

* only tokenize when needed, remove a clone()

* improve comments

* fix clippy lints

* re-add test

* buffer writes to stdout

* fix ignore_non_printing

and make the test fail in case it is broken :)

* move attribute to the right position

* add more tests

* add my name to the copyright section

* disallow dead code

* move a comment

* re-add a loc

* use smallvec for a perf improvement in the common case

* add BENCHMARKING.md

* add ignore_case to benchmarks
2021-04-10 14:54:58 +02:00
Sylvestre Ledru
e1221ef3f8
Merge pull request #2036 from joppich/issue1930
stdbuf: move from getopts to clap
2021-04-10 11:58:01 +02:00
electricboogie
e5113ad00e
Sort: Various fixes and performance improvements (#2057)
* Various fixes and performance improvements

* fix a typo

Co-authored-by: Michael Debertol <michael.debertol@gmail.com>

Co-authored-by: Sylvestre Ledru <sledru@mozilla.com>
Co-authored-by: Michael Debertol <michael.debertol@gmail.com>
2021-04-10 11:56:20 +02:00
Sivachandran
ee070028e4
install: implement stripping symbol table (#2047) 2021-04-10 11:53:29 +02:00
Nicolas Thery
698924a20a
unlink: move from getopts to clap (#2052) (#2058) 2021-04-10 11:50:21 +02:00
Aleksandar Janicijevic
18191f9212
shred: Implemented --force option (#2012) 2021-04-10 10:41:59 +02:00
joppich
c54b5f2d82 stdbuf: move from getopts to clap 2021-04-10 00:39:12 +02:00
Sylvestre Ledru
844e318a67
Merge branch 'master' into pr 2021-04-09 22:02:25 +02:00
Sylvestre Ledru
9ae4928b7b
Ignore a test (#2053)
* Disable chksum: test_arg_overrides_stdin
fails often with:

---- test_cksum::test_arg_overrides_stdin stdout ----
current_directory_resolved:
touch: /tmp/.tmpv9hydc/a
run: /target/x86_64-unknown-linux-gnu/debug/coreutils cksum a
thread 'test_cksum::test_arg_overrides_stdin' panicked at 'Broken pipe (os error 32)', tests/common/util.rs:742:37
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

* rustfmt the recent change
2021-04-09 10:14:41 +02:00
electricboogie
8474249e5f
Sort: Implement stable sort, ignore non-printing, month sort dedup, auto parallel sort through rayon, zero terminated sort, check silent (#2008) 2021-04-08 22:07:09 +02:00
Sylvestre Ledru
717b875b5d
Merge pull request #2046 from ricardoaiglesias/timeout-clap
timeout: Moved argument parsing to clap
2021-04-07 23:19:36 +02:00
Sylvestre Ledru
ac43052cc5
Merge pull request #1602 from wishawa/master
ptx: Improve performance: remove N^2 loop and reduce repetitive regex compilations.
2021-04-07 23:14:23 +02:00
paulotten
52706372aa
Replace outdated time 0.1 dependancy with latest version of chrono (#2044)
* Replace outdated time 0.1 dependancy with latest version of chrono

I also noticed that times are being miscalculated on linux, so I fixed that.

* Add time test for issue #2042

* Cleanup use declarations

* Tie time test to `touch` feature
- if we compile with the right OS feature flag then we should have it,
  even on Windows
2021-04-07 08:41:04 +02:00
Ricardo Iglesias
8232c527a3 timeout: tests passing.
Forgot to handle the case where no arguments were passed to the COMMAND.
Because ARGS can be empty, we need two separate cases for handling
options.values_of(options::ARGS)
2021-04-06 23:30:15 -07:00
Ricardo Iglesias
431a6ee1b5 timeout: Fixed ownership issues
Fixed some minor ownership issues in converting from the options to the
arguments to the timeout COMMAND.

Additionally, fixed a rustfmt issue in other files (fold/stdbuf.rs)
2021-04-06 23:07:52 -07:00
Ricardo Iglesias
cccf89a48c timeout: Moved argument parsing to clap
Changed from optparse to clap.

None of the logic within timeout has been changed, which could use some
refactoring, but that's beyond the scope of this commit.
2021-04-06 22:13:28 -07:00
Sylvestre Ledru
b2b45d8af2
Merge branch 'master' into fold-backspace-and-carriage-return 2021-04-06 22:53:10 +02:00
Yagiz Degirmenci
c965effe07
fold: move to clap, add tests (#2015) 2021-04-06 22:51:27 +02:00
Wisha Wa
7b20c79bdd ptx: fix an incorrect option name in option parsing 2021-04-06 18:07:02 +00:00
Wisha Wa
5fc007b295 ptx: remove a hack that was added in attempt to mimick GNU ptx 2021-04-06 13:40:14 +00:00
Wisha Wa
f9fc3b5a1d ptx: add explaination comments, replace mut with shadowing, and rename variables for clarity. 2021-04-06 13:37:16 +00:00
Sylvestre Ledru
45d70b0c98
Merge pull request #2033 from Gilnaa/panic_2021
Fixed panic!/assert! used with improper format strings
2021-04-06 13:46:07 +02:00
Gilad Naaman
bc426fb3af Fixed panic!/assert! used with improper format strings 2021-04-06 14:23:54 +03:00
Wisha Wa
f00df3f3d8 Merge remote-tracking branch 'upstream/master' 2021-04-06 10:56:19 +00:00
Daniel Rocco
56bc7a44eb fold: preserve carriage return and overwritten chars in output 2021-04-06 06:55:52 -04:00
Daniel Rocco
0b731dfd1a fold: preserve backspace and overwritten chars in output 2021-04-06 06:55:52 -04:00
ReggaeMuffin
b1fcb621a8
wsl2: wsl no longer differs in output
refactor `is_wsl` to `is_wsl_1` and `is_wsl_2`

On my tests with wsl2 ubuntu2004 all tests pass without special cases

I moved wsl detection into uucore so that it can be shared instead of duplicated

I moved `parse_mode` into uucode as it seemed to fit there better and anyway requires libc feature
2021-04-06 10:58:49 +01:00
Sylvestre Ledru
cc4f32d87a
Merge pull request #2035 from tertsdiepraam/ls/hide_and_ignore
ls: add short option for ignore
2021-04-06 08:54:26 +02:00
Terts Diepraam
cbc5132981 ls: add short option for ignore 2021-04-05 23:06:56 +02:00
Sylvestre Ledru
3f3b12ebcc
Merge pull request #1998 from paulotten/issue1969
Consider device id when comparing files
2021-04-05 22:34:12 +02:00
Sylvestre Ledru
f57eb0fdfa
Merge pull request #1993 from cbjadwani/master
uniq: Implement --group option
2021-04-05 22:33:04 +02:00
Sylvestre Ledru
7cdeb18dff
Merge pull request #2026 from tertsdiepraam/ls/hide_and_ignore
ls: --hide and --ignore
2021-04-05 22:31:23 +02:00
Marvin Hofmann
9581fcf688
rm: add verbose output and trim multiple slashes (#1988)
* rm: add verbose output and trim multiple slashes

Uses the normalize_path used in cargo to strip duplicate slashes
With a link to a std rfc https://github.com/rust-lang/rfcs/issues/2208

This fixes https://github.com/uutils/coreutils/issues/1829

This also touches https://github.com/uutils/coreutils/issues/1768 
but does not attempt to fully solve it
2021-04-05 22:18:47 +02:00
Daniel Rocco
e5c61a28be fold: variable width tabs, guard treating tab as whitespace
Treat tab chars as advancing to the next tab stop rather than having a fixed
8-column width.

Also treat tab as a whitespace split target only when splitting on word
boundaries.
2021-04-05 08:55:07 -04:00
Terts Diepraam
5134348a11 ls: use globset instead of glob 2021-04-04 23:39:11 +02:00
Terts Diepraam
51770e6bee ls: invalid pattern move from error to warning 2021-04-04 22:40:36 +02:00
Terts Diepraam
76308dbec9 ls: tests for invalid patterns for hide and ignore 2021-04-04 22:35:22 +02:00
Terts Diepraam
fa4272a19b ls: --hide and --ignore 2021-04-04 19:19:56 +02:00
Sylvestre Ledru
bd8b129d9a
Merge pull request #2016 from tertsdiepraam/ls/control_characters
ls: show/hide control chars
2021-04-04 18:38:15 +02:00
Sylvestre Ledru
c196f4ae8b
Merge pull request #2023 from ycd/cut
cut: move to clap, add gnu like error messages + tests
2021-04-04 14:47:15 +02:00
Sylvestre Ledru
6bee31e8e8
Merge pull request #2021 from ycd/dirname
dirname: move to clap, write to stderr on errors
2021-04-04 14:45:37 +02:00
Chirag Jadwani
19c6a42de5 uniq: implement group option 2021-04-04 15:22:17 +05:30
Daniel Rocco
bad1df9c1b fold: improve newline handling and test coverage
- refactor implementation for readability

- correct handling of files with no trailing newline and/or blank lines
2021-04-03 22:47:38 -04:00
Yagiz Degirmenci
f47345ec9b cut: add gnu compatability to error messages 2021-04-03 20:55:10 +03:00
Yagiz Degirmenci
e84b60b7d5 cut: add display order 2021-04-03 20:30:28 +03:00
Yagiz Degirmenci
7e677b3e6c cut: fix formatting, use constant values 2021-04-03 20:21:57 +03:00
Yagiz Degirmenci
cfc3d52be4 cut: move to clap 2021-04-03 20:19:30 +03:00
Yagiz Degirmenci
b940b2d79c dirname: move to clap, simplify code 2021-04-03 18:24:39 +03:00
Sylvestre Ledru
f37284129e new release 0.0.6 to address the cat issue 2021-04-03 16:06:58 +02:00
Sylvestre Ledru
a852574745 Fix bug #2017 - cat isn't working
Revert "cat: Improve performance on Linux (#1978)"

This reverts commit 7a947cfe46.
2021-04-03 15:50:59 +02:00
Terts Diepraam
06bdc144d7 ls: show/hide control chars 2021-04-03 12:43:37 +02:00
Sylvestre Ledru
ac031dffa4 new release 0.0.5 2021-04-03 10:30:07 +02:00
Sylvestre Ledru
4d7ad77433 rustfmt the recent change 2021-04-02 23:31:22 +02:00
est31
14a49edd1c
Use Iterator::copied() in sieve.rs (#1774) 2021-04-02 23:30:07 +02:00
Jamie Quigley
31f5666727
more: add error message if the argument is a directory (#1983) 2021-04-02 22:34:02 +02:00
Sivachandran
9151410d08
csplit: move from getopts to clap (#1995) 2021-04-02 22:14:56 +02:00
Juliana Rodrigueiro
97da14fcb2 install: Fix behaviour of the -d flag
The '-d' flag should create all ancestors (or components) of a
directory regardless of the presence of the "-D" flag.

From the man page:
       -d, --directory
              treat all arguments as directory names; create all components of the specified directories

With GNU:
    $ install -v -d dir1/di2
    install: creating directory 'dir1'
    install: creating directory 'dir1/di2'
With this version:
    $ ./target/release/install -v -d dir3/di4
    install: dir3/di4: No such file or directory (os error 2)
    install: dir3/di4: chmod failed with error No such file or directory (os error 2)
    install: created directory 'dir3/di4'

Also, one of the unit tests misinterprets what a "component" is,
and hence was fixed.
2021-04-02 20:04:25 +01:00
Juliana Rodrigueiro
2a02f01fc2 install: Don't display success message when the dir was not created
Also don't run chmod when we just failed to create the directory.

Behaviour before this patch:

    $ ./target/release/install -v -d dir1/dir2
    install: dir1/dir2: Permission denied (os error 13)
    install: dir1/dir2: chmod failed with error No such file or directory (os error 2)
    install: created directory 'dir1/dir2'
2021-04-02 19:59:43 +01:00
Juliana Rodrigueiro
349c4f7af6 install: Make log message identical to GNU install
$ install -v -d dir1
    install: creating directory 'dir1'
2021-04-02 19:59:43 +01:00
Sylvestre Ledru
4934af0c3d
Merge pull request #2007 from drocco007/fold-preserve-blank-lines
fold: preserve blank lines
2021-04-02 20:00:05 +02:00
Daniel Rocco
d12f96d9ca fold: preserve blank lines 2021-04-02 10:14:11 -04:00
ReggaeMuffin
2eb32d845e
chores: run cargo +1.40.0 fmt
Apparently fmt from 1.40.0 is a bit more strict in some places

Let me know if this is worthwhile merging :)
2021-04-02 10:56:49 +01:00
Sylvestre Ledru
de6aa69259
Merge pull request #1997 from sylvestre/polish3
Rustfmt+clippy+cargo.lock update
2021-04-02 11:37:56 +02:00
Jan Scheer
4a6176855a
relpath: move from getops to clap (#1939) (#1990)
* relpath: add tests

* relpath: move from getopts to clap
2021-04-02 09:55:57 +02:00
Paul Otten
7859bf885f Consistency with GNU version of du when doing du -h on an empty file 2021-04-01 19:42:43 -04:00
Paul Otten
7112182dbc Consider device id when comparing files 2021-04-01 18:37:20 -04:00
Sylvestre Ledru
dcbcf01665 Fix some clippy warnings 2021-04-01 23:42:30 +02:00
Sylvestre Ledru
6734ce785d rustfmt the recent changes 2021-04-01 23:25:37 +02:00
paulotten
090d29496a
Issue #1622 port du to windows (#1788)
* Issue #1622 port `du` to windows

* Attempt to support Rust 1.32

Old version was getting "attributes are not yet allowed on `if`
expressions" on Rust 1.32

* Less #[cfg]

* Less duplicate code.

I need the return and the semicolon after if otherwise the second #[cfg]
leads to unexpected token complilation error

* More accurate size on disk calculations for windows

* Expect the same output on windows as with WSL

* Better matches output from du on WSL

* In the absence of feedback I'm disabling these tests on Windows.
They require `ln`. Windows does not ship with this utility.

* Use the coreutils version of `ln` to test `du`

`fn ccmd` is courtesy of @Artoria2e5

* Look up inodes (file ids) on Windows

* One more #[cfg(windows)] to prevent unreachable statement warning on linux
2021-04-01 23:16:47 +02:00
Árni Dagur
7a947cfe46
cat: Improve performance on Linux (#1978)
* cat: Improve performance, especially on Linux

* cat: Don't use io::copy for splice fallback

On my MacBook Pro 2020, it is around 25% faster to not use io::copy.

* cat: Only fall back to generic copy if first splice fails

* cat: Don't double buffer stdout

* cat: Don't use experimental or-pattern syntax

* cat: Remove nix symbol use from non-Linux
2021-04-01 23:08:48 +02:00
Terts Diepraam
2941dfd698
ls: quoting style (#1989) 2021-04-01 22:50:13 +02:00
Aleksandar Janicijevic
cf4970f083
shred: Replaced eprintln with show_error (#1992) 2021-04-01 08:53:48 +02:00
Alessandro Stoltenberg
7669a4387a
echo: Some minor changes to options (#1960) 2021-03-31 22:27:24 +02:00
Yagiz Degirmenci
e958864bd9
tac: exit with proper code, move from getopts to clap, add test for invalid inputs (#1957) 2021-03-31 21:21:10 +02:00
Aleksandar Janicijevic
751ae6a8f8
shred: use clap for argument management (#1961) 2021-03-31 21:19:04 +02:00
desbma
be03c948ed
Add pre-commit hook + run fmt (#1959) 2021-03-30 21:24:01 +02:00
Árni Dagur
698dab12a6
wc: Don't read() if we only need to count number of bytes (Version 2) (#1851)
* wc: Don't read() if we only need to count number of bytes

* Resolve a few code review comments

* Use write macros instead of print

* Fix wc tests in case only one thing is printed

* wc: Fix style

* wc: Use return value of first splice rather than second

* wc: Make main loop more readable

* wc: Don't unwrap on failed write to stdout

* wc: Increment error count when stats fail to print

* Re-add Cargo.lock
2021-03-30 20:53:02 +02:00
Kourosh
775682508a
more: move from getopts to clap (#1962) 2021-03-30 20:39:58 +02:00
Sylvestre Ledru
a5402eed41
Merge pull request #1967 from jhscheer/iss1775
chmod: fixed behavior for dangling symlinks (#1775)
2021-03-30 20:30:16 +02:00
Jan Scheer
2647a72e9e chmod: fixed behavior for dangling symlinks (#1775) 2021-03-29 22:07:09 +02:00
Yagiz Degirmenci
25df51a525
fix(cksum): check metadata of the path (#1951)
* fix: check metadata of the path

* chore: use existing path
2021-03-29 18:44:42 +02:00
Raymond Wang
d88de3c6a6
tr: more explicit flag names (#1966) 2021-03-29 17:16:48 +02:00
Ricardo Iglesias
5f17719a59
Implemented --indicator-style flag on ls. (#1907)
* Implemented --indicator-style flag on ls.

* Rust fmt

* Grouped indicator_style args.

* Added tests for sockets and pipes.

Needed to modify util.rs to add support for pipes (aka FIFOs).

* Updated util.rs to remove FIFO operations on Windows

* Fixed slight error in specifying (not(windows))

* Fixed style violations and added indicator_style test for non-unix systems
2021-03-29 13:10:13 +02:00
Mikadore
8320b1ec5f
Rewrote head (#1911)
See https://github.com/uutils/coreutils/pull/1911
for the details
2021-03-29 13:08:48 +02:00
electricboogie
da5f2f3a6c
sort: Add a GNU-style Random Sorter (#1922) 2021-03-29 13:05:52 +02:00
Yagiz Degirmenci
8cc7a90d7c
sum: fix crash on invalid inputs, move to clap, add tests (#1952) 2021-03-29 13:03:56 +02:00
Raymond Wang
ab5b6dd844
tr: move from getopts to claps #1929 (#1954) 2021-03-29 13:03:24 +02:00
Sylvestre Ledru
acb57ecbd0
Merge pull request #1955 from jhscheer/chmod2clap
chmod: move from getopts to clap
2021-03-29 13:02:13 +02:00
Dominik Bittner
3714e2201b
tty: Move from getopts to clap (#1956)
+ tty: Add some tests
2021-03-29 13:00:47 +02:00
Jan Scheer
a9a3794d5a chmod: add tests 2021-03-28 20:56:37 +02:00
Craig Pastro
6d4f70ccb2
shuf: move from getopts to clap (#1950) 2021-03-28 15:08:37 +02:00
Jan Scheer
43c6a52b63 chmod: move from getopts to clap 2021-03-28 13:11:39 +02:00
k0ur0x
bcb1828ad6 comm: move from getopts to clap 2021-03-28 05:51:43 +04:30
Sylvestre Ledru
dc879634cb
Merge pull request #1839 from jhscheer/iss1769
rm: fix for -d to match GNU's output #1769
2021-03-27 22:56:16 +01:00
Ivan
500771c78d
tee: should match GNU's output if used with /dev/full (#1944)
+ aligned 'tee' output with GNU tee when one of the files is '/dev/full'
+ don't stop tee when one of the outputs fails; just continue and return
error status from tee in the end

Co-authored-by: Ivan Rymarchyk <irymarchyk@arlo.com>
2021-03-27 20:02:49 +01:00
Yagiz Degirmenci
f66a188414
mkfifo: general refactor, move to clap, add tests (#1945)
* mkfifo: general refactor, move to clap, add unimplemented flags

* chore: update Cargo.lock

* chore: delete unused variables, simplify multiple lines with crash

* test: add tests

* chore: revert the use of crash

* test: use even more invalid mod mode
2021-03-27 20:00:59 +01:00
Yagiz Degirmenci
0bdd61af5e
cksum: use clap for argument management (#1943) 2021-03-27 13:31:29 +01:00
Yagiz Degirmenci
ac7edcc4fa
ptx: delete getopts dependency (#1942)
* chore: delete getopts dependency

* deps: update Cargo.lock
2021-03-27 13:31:06 +01:00
Sylvestre Ledru
faef7e9214 fix(install): Unbreak the CI by bringing the old behavior for install of /dev/null 2021-03-27 10:08:06 +01:00
Antonio Gurgel
35675fdfe7
install: implement -C / --compare (#1811)
* install: implement `-C` / `--compare`

GNU coreutils [1] checks the following: whether
- either file is nonexistent,
- there's a sticky bit or set[ug]id bit in play,
- either file isn't a regular file,
- the sizes of both files mismatch,
- the destination file's owner differs from intended, or
- the contents of both files mismatch.

[1] https://git.savannah.gnu.org/cgit/coreutils.git/tree/src/install.c?h=v8.32#n174

* Add test: non-regular files

* Forgot a #[test]

* Give up on non-regular file test

* `cargo fmt` install.rs
2021-03-27 09:18:47 +01:00
Rein F
3ca21940f8
nl: move from getopts to clap (#1921) 2021-03-27 08:55:31 +01:00
Terts Diepraam
955c547adf
ls: overrideable -n option (#1917) 2021-03-26 19:12:01 +01:00
Yagiz Degirmenci
83f8140aaf
cat: move cat to clap (#1910) 2021-03-26 17:26:37 +01:00
Max Semenik
9e759267ee pr: Remove commented out stuff from Cargo.toml 2021-03-26 18:19:52 +03:00
Max Semenik
bc2b385744 pr: Fix a bunch of Clippy problems 2021-03-26 17:57:21 +03:00
Max Semenik
62fe68850e pr: Fixes after rebasing
Only the minimum needed to:
* Make everything compile without warnings
* Move files according to the new project structure
* Make tests pass
2021-03-26 17:57:19 +03:00
Max Semenik
035f811dd0
Fix "panic message is not a string literal" warnings (#1915)
New in Rust 1.51.

Closes #1914
2021-03-26 11:09:16 +01:00
Jan Scheer
aac79d13b3
Merge branch 'master' into iss1769 2021-03-25 23:23:08 +01:00
Jan Scheer
61eb4f250d rm: add more tests 2021-03-25 23:04:02 +01:00
Terts Diepraam
23b70001a8
ls: version sort (#1898) 2021-03-25 20:24:53 +01:00
Sivachandran
52997b63fb
pathchk: move from getopts to clap (#1897) 2021-03-25 11:27:34 +01:00
Mekka
99da9ea6ec
Cleanup: Fix grammar in "cp" macro comments. (#1905)
Replaced "they if" with "if they" in the comments above the "prompt_yes" macro.
2021-03-25 10:36:48 +01:00
Yagiz Degirmenci
63317b3529
ptx: move from getopts to clap (#1893)
* ptx: move from getopts to clap

* chore: delete comment

* chore: fix some clippy warnings
2021-03-24 21:46:17 +01:00
Jan Scheer
bdf603a65e rm: make -d/-r obligatory for removing symlink_dir (windows) 2021-03-24 12:42:23 +01:00
Kevin Burke
4873c8a24b
mv: ensure line prints (#1890)
Previously this used `print` instead of `println`, and as a result the
prompt would never appear and the command would hang. The Rust docs
note this about print:

> Note that stdout is frequently line-buffered by default so it may be
> necessary to use io::stdout().flush() to ensure the output is emitted
> immediately.

Changing to `println` fixes the issue.

Fixes #1889.

Co-authored-by: Kevin Burke <kevin@burke.dev>
2021-03-23 21:49:35 +01:00
Alessandro Stoltenberg
b54f0b1ff2
echo: Refactored help message. (#1886) 2021-03-23 11:55:18 +01:00
Yagiz Degirmenci
545fe7d887
feat(unexpand): move from getopts to clap (#1883)
* feat: move unexpand to clap

* chore: allow muliple files

* test: add test fixture, test reading from a file

* test: fix typo on file name, add test for multiple inputs

* chore: use 'success()' instead of asserting

* chore: delete unused variables

* chore: use help instead of long_help, break long line
2021-03-23 09:42:05 +01:00
Yagiz Degirmenci
5e2e2e8ab6
echo: allow leading hyphens (#1887)
* fix: use settings to allow leading hyphen and trailing var arg

fixes: https://github.com/uutils/coreutils/issues/1873

* test: add test cases

* test: add more test cases with different order in hyphen values

* chore: add comment to explain why we need TrailingVarArg
2021-03-23 09:40:05 +01:00
Yagiz Degirmenci
e5ef7486d5
feat: move echo to clap (#1884) 2021-03-22 22:42:14 +01:00
Neculai Balaban
a1b50ae0f4
nohup: move from getopts to clap (#1871)
- changed some error return codes to match GNU implementation
- changed warning/error messages to match GNU nohup
- replaced getopts dependency with clap
- added a test
2021-03-22 20:09:00 +01:00
Yagiz Degirmenci
20dec4cbba
fix: fix clippy warnings (#1876) 2021-03-22 20:08:07 +01:00
Terts Diepraam
de3f9b8186
ls: across & commas formats and width parameter (#1869) 2021-03-22 18:24:23 +01:00
Yagiz Degirmenci
d86ee34bc6
tsort: move from getopts to clap (#1867) 2021-03-22 18:16:28 +01:00
Yagiz Degirmenci
27b7552ef4
fix(tail): add support for negative indexing (#1865)
closes: https://github.com/uutils/coreutils/issues/1860
2021-03-22 10:01:54 +01:00
Sylvestre Ledru
21be280c5a rustfmt the od changes 2021-03-21 22:22:21 +01:00
Yagiz Degirmenci
6c98415340
fix(head): check the whether file exists before unwrap (#1858)
closes https://github.com/uutils/coreutils/issues/1800
2021-03-21 21:27:44 +01:00
pedrohjordao
ca8fbc37bf
od: Changes command line parser to clap (#1849) 2021-03-21 16:19:30 +01:00
Yagiz Degirmenci
f60790dd41
chroot: move to clap from getopts (#1792)
+ add tests
2021-03-21 16:18:47 +01:00
Terts Diepraam
25d4a08387
ls: long format author, group and owner (#1850)
This PR adds the options to customize what information is shown in long format regarding author, group & owner. Specifically it adds:
- `--author`: shows the author, which is always the same as the owner. GNU has this feature because GNU/Hurd supports a difference between author and owner, but I don't think Rust supports GNU/Hurd, so I just used the owner.
- `-G` & `--no-group`: hide the group information.
- `-o`: hide the group and use long format (equivalent to `-lG`).
- `-g`: hide the owner and use long format.

The `-o` and `-g` options have some interesting behaviour that I had to account for. Some examples:
- `-og` hides both group and owner.
- `-ol` still hides the group. Same behaviour with variations such as `-o --format=long`, `-gl`, `-g --format=long` and `-ogl`.
- They even retain some information when overridden by another format: `-oCl` (or `-o --format=vertical --format=long`) still hides the group.

My previous solution for handling the behaviour where `-l1` shows the long format did not fit with these additions, so I had to rewrite that as well.

The tests only cover the how many names (author, group and owner) are present in the output, so it can't distinguish between, for example, author & group and group & owner.
2021-03-21 16:18:06 +01:00
Sylvestre Ledru
45acb087b8
Merge pull request #1848 from nomius10/install_bugfix
install: fix bug #1823
2021-03-20 20:53:57 +01:00
Neculai Balaban
f8125a1040 install: match GNU warning output 2021-03-20 16:11:29 +02:00
Neculai Balaban
0f7423dfa6 install: fix bug #1823 2021-03-20 14:49:22 +02:00
nicoo
8b9ac0c7c3
Revert #1571 “perf/factor ~ deduplicate divisors” (#1842)
It was a draft PR, not ready for merging, and its premature inclusion
caused repeated issues, see 368f47381b & friends.

Close #1841.

This reverts commits 3743a3e1e7,
                     ce218e01b6, and
                     b7b0c76b8e.
2021-03-20 11:46:58 +01:00
Alex Lyon
e9adc5067b
cksum: generate CRC table in a const fn (#1744) 2021-03-20 10:33:04 +01:00
Jan Scheer
0e217e202a
tee: move from getopts to clap (#1814) 2021-03-19 22:58:50 +01:00
Sylvestre Ledru
e76ce1e908
Merge pull request #1844 from tertsdiepraam/ls/si
ls: --si flag and more compatible size formatting
2021-03-19 21:18:25 +01:00
Neculai Balaban
c6927d97c8
cp: add support for -x/--one-file-system (#1840) 2021-03-19 21:15:35 +01:00
Terts Diepraam
118b802fe8 ls: --si and more compatible size formatting 2021-03-19 15:14:25 +01:00
Sylvestre Ledru
976fa95ce8 fix(ls): fix a clippy warning
"this `if` has identical blocks"
2021-03-19 14:25:07 +01:00
Sylvestre Ledru
e521b46c09
Merge pull request #1820 from tertsdiepraam/master
ls: move from getopts to clap and structure configuration
2021-03-19 09:55:27 +01:00
Marco Satti
5ec87dc70a
date: Implement setting the date on Unix & Windows (#1798)
* date: implement set date for unix and windows

Parsing the date string is not fully implemented yet, as in it relies
on the internals of chrono - things like "Mon, 14 Aug 2006 02:34:56 -0600"
do not work, nor does "2006-08-14 02:34:56" (no TZ / local time). This
is no different to using the "--date" option however, and will get fixed
when `parse_date` is a bit smarter.

Only supports unix and Windows platforms for now.
2021-03-19 09:54:01 +01:00
Sylvestre Ledru
fcccc2a973
Merge pull request #1826 from pfnsec/master
head: add support for -z/--zero-terminated
2021-03-18 21:37:12 +01:00
Jan Scheer
58b9372dbe rm: fix for -d to match GNU's output #1769 2021-03-18 14:46:56 +01:00
Sylvestre Ledru
22e22bc074
Merge pull request #1835 from aspenluxxxy/update-nix
Update nix to 0.13 in uu_more
2021-03-18 14:37:54 +01:00
aspen
4e29b693f8
uutils: change every target_os = "macos" to target_vendor = "apple" 2021-03-18 08:42:53 -04:00
aspen
ed7e24c5b0
uu_more: update nix to 0.13 2021-03-18 08:39:06 -04:00
Sylvestre Ledru
99be7a3172
Merge pull request #1810 from jeckersb/nice-clap
nice: move from getopts to clap #1794
2021-03-17 22:03:42 +01:00
Sylvestre Ledru
44a7adc9a0
Merge pull request #1812 from konomith/feature/preserve_timestamps_#1758
install: Implement --preserve-timestamps (-p)
2021-03-17 22:02:54 +01:00
Sylvestre Ledru
a690ffde41
Merge pull request #1821 from deantvv/expand-clap
expand: replace getopts with clap
2021-03-17 22:01:31 +01:00
Sylvestre Ledru
6a109a5069
Merge pull request #1834 from jhscheer/patch-3
rm: add an additional flag -R for --recursive
2021-03-17 21:52:02 +01:00
Sylvestre Ledru
ba55ef166e
Merge pull request #1827 from drocco007/numfmt-delimiter
numfmt: implement --delimiter
2021-03-17 21:50:47 +01:00
Jan Scheer
d9adec3496
add comment 2021-03-17 14:46:25 +01:00
nicoo
955fa74a42
factor::tests: Check that powers of known-factorization numbers are factored correctly (#1831)
* factor::tests::recombines_factors: Minor refactor (skip useless bool)

* factor::tests: Check factorizations of powers of factored numbers

* factor::Factors: Add debug assertions to (Factor ^ Exponent)

* factor::tests: Drop obsoleted tests

`factor_correctly_recombines_prior_test_failures` was replaced with
`factor_2044854919485649` as this was the only test not subsumed.

* factor::tests::2044854919485649: Check the expected factorisation
2021-03-17 13:58:53 +01:00
John Eckersberg
64b8c8aac7 nice: move from getopts to clap #1794 2021-03-17 08:52:13 -04:00
Daniel Rocco
fbb9c50050 tr: process octal escape sequences
closes #1817
2021-03-17 08:04:45 -04:00
Jan Scheer
97f40b0aee
rm: add an additional flag -R for --recursive
make clap support -R in addition to -r
2021-03-17 10:16:31 +01:00
Peter Sherman
e3e5bf0178
Format head.rs 2021-03-15 20:48:49 +00:00
Peter Sherman
13e61c3234 head: add support for -z/--zero-terminated 2021-03-15 15:56:11 +00:00
Daniel Rocco
52f2ab6898 numfmt: implement --delimiter
closes #1454
2021-03-15 11:55:56 -04:00
Daniel Rocco
02e9ffecdd numfmt: split implementation into modules 2021-03-15 11:55:17 -04:00
Hari
406cd865eb
install: run rustfmt
Fix formatting issues based on PR review comments
2021-03-15 11:00:30 -04:00
Dean Li
cd775ed704 Expand: use mod::options 2021-03-15 21:28:47 +08:00
Chirag Jadwani
116e253cc0 uniq: Fix skip fields
Current implementation of the skip fields logic does not handle
multibyte code points correctly. It assumes each code point (`char`) is
one byte. If the skipped part of the input line has any multibyte code
points then this can cause fields not being skipped correctly (field
start index is calculated to be before it actually starts).
2021-03-15 18:48:54 +05:30
Chirag Jadwani
ce4342d12e uniq: Fix panic on invalid utf-8 input 2021-03-15 18:48:54 +05:30
Terts Diepraam
10135dccef ls: fix unused import and improve coverage 2021-03-15 13:46:21 +01:00
Terts Diepraam
20094127c3 ls: --color back on windows as noop 2021-03-15 12:21:08 +01:00
Terts Diepraam
f28d5f4a73 ls: attempt to fix windows sorting issues 2021-03-15 12:07:10 +01:00
Terts Diepraam
a4c79c92ae ls: fix windows issues 2021-03-15 10:24:24 +01:00
Terts Diepraam
01fd207c81 ls: remove list of missing features 2021-03-15 09:53:19 +01:00
Terts Diepraam
5656a717c9 ls: make name sort case insensitive 2021-03-15 09:31:13 +01:00
Terts Diepraam
61a95239ce ls: rename display to format, set arg overrides 2021-03-15 09:30:50 +01:00
Terts Diepraam
7bde2e78a9 ls: simplify --color and remove it on windows 2021-03-14 23:34:52 +01:00
Terts Diepraam
c86c18cbb5 ls: implement -c and -u 2021-03-14 23:11:11 +01:00
Terts Diepraam
c454d2640c ls: structure options some more 2021-03-14 21:32:21 +01:00
Terts Diepraam
5d7a851471 ls: fix --color behaviour 2021-03-14 21:30:21 +01:00
Dean Li
6829e7f359 expand: replace getopts with clap
expand has one odd behavior that allows two format for tabstop

From expand --help
```
-t, --tabs=N     have tabs N characters apart, not 8
-t, --tabs=LIST  use comma separated list of tab positions
```

This patch use one `value_name("N, LIST")` for tabstop and
deal with above behavior in `parse_tabstop`.

Close #1795
2021-03-14 20:47:53 +08:00
Terts Diepraam
0717a5f301 ls: formatting 2021-03-14 13:32:15 +01:00
Terts Diepraam
8df239a4e2 Merge branch 'master' of github.com:tertsdiepraam/coreutils 2021-03-14 12:22:38 +01:00
Terts Diepraam
7c8e8b2d4c ls: refactor arguments into a config struct 2021-03-14 12:22:32 +01:00
Terts Diepraam
225c1be28d
Merge pull request #1 from uutils/master
Sync
2021-03-13 23:52:42 +01:00
Terts Diepraam
9e98d24f5f ls: move from getopts to clap 2021-03-13 23:43:36 +01:00
Andre Julius
2158b2c5b4
sleep: move from getopts to clap #1735 (#1777)
and Add some sleep test cases #1735
2021-03-13 23:11:11 +01:00
Terts Diepraam
fd5ec099d0
touch: use an ArgGroup for sources and turn macros into functions (#1813)
* touch: use arggroup for sources

* tests/touch: add tests for multiple sources

* touch: turn macros into functions

* test/touch: fmt

* touch: constant for the sources ArgGroup
2021-03-13 17:20:39 +01:00
Terts Diepraam
44c390c290 touch: constant for the sources ArgGroup 2021-03-13 13:52:08 +01:00
Terts Diepraam
86422a70d2 touch: turn macros into functions 2021-03-13 12:47:20 +01:00
Terts Diepraam
5ec1bba5e8 touch: use arggroup for sources 2021-03-13 12:42:52 +01:00
Hari
8471088d6d
Merge branch 'master' of github.com:uutils/coreutils into feature/preserve_timestamps_#1758 2021-03-12 17:47:02 -05:00
Hari
68ec2ed0f3
install: Implement --preserve-timestamps (-p)
Last access and last modify timestamps are extracted from the
existing file metadata and are applied to the newly created file.
2021-03-12 16:51:47 -05:00
Michael Kefeder
e1626b8c64
ptx: ignore empty regex (#1808)
* ptx: ignore empty -W regex

* ptx: test to verify empty -W regex is ignored

* tests/ptx: verify word regexp from cmd-line is used
2021-03-12 21:52:37 +01:00
Ali
5ced3a670b
paste: cleanup multi-stdin support (#1803)
cleaner impl for multi-stdin support
2021-03-12 13:26:09 +01:00
Craig Pastro
3ab114f283
cp: Implement --parents & --parent (#1797) 2021-03-12 13:25:15 +01:00
Ali
374a4fde86
paste: support multi-stdin (#1791)
- added `-` as the default input, since `paste` reads stdin if no file
is provided
- `paste` also supports providing `-` multiple times
- added a test for it
2021-03-10 23:19:12 +01:00
Mikadore
734ef0a8a1
uniq: fixed #550 (#1790) 2021-03-10 21:54:31 +01:00
John Eckersberg
08eb56f120 Fix some clippy warnings 2021-03-10 08:42:00 -05:00
Sylvestre Ledru
517b2a6a22
Merge pull request #1767 from FelipeLema/mod_opt
Group OPT_ARGUMENTS into mods
2021-03-09 22:57:30 +01:00
Sylvestre Ledru
955b7ee6d5
Merge pull request #1785 from ali5h/paste-clap
paste: move from getopts to clap
2021-03-09 22:52:16 +01:00
Felipe Lema
d1addc97cc missing OPT_ s 2021-03-09 18:10:04 -03:00
Ali Shariat
54eebebff8 paste: move from getopts to clap
closes #1734
2021-03-09 12:46:27 -08:00
Sylvestre Ledru
a96ca1359e
Merge pull request #1772 from foxbenjaminfox/master
cp: implement --strip-trailing-slashes
2021-03-09 20:10:06 +01:00
Edward Betts
e1a9c19b6f Correct spelling 2021-03-09 15:19:35 +00:00
Benjamin Fox
5446ea2abf cp: implement --strip-trailing-slashes 2021-03-09 12:59:26 +02:00
Daniel Rocco
0e02607dc7 numfmt: implement --field 2021-03-08 10:53:34 -05:00
Felipe Lema
75b3bc02eb uniq 2021-03-08 12:02:46 -03:00
Felipe Lema
3e0a10d732 update wc 2021-03-08 11:50:26 -03:00
Sylvestre Ledru
6ad8528b99 update of the uucore dep to 0.0.7 2021-03-07 11:29:38 +01:00
Sylvestre Ledru
8772d81236 Update to platform-info 0.1 2021-03-07 11:29:38 +01:00
Sylvestre Ledru
6481c5a247 Prepare version 0.0.4 2021-03-07 11:29:38 +01:00
Chad Brewbaker
c820329efd
muted test not for windows and added windows temp file convention (#1748)
* muted test not for windows and added windows temp file convention

* Update mktemp.rs

Revert windows mktmp template difference

Co-authored-by: Chad Brewbaker <chad@flyingdogsolutions.com>
2021-03-06 18:26:55 +01:00
Daniel Rocco
d06f91fbe2
numfmt: align format output values with GNU (#1745)
When converting to SI or IEC, produce values that align with the conventions
used by GNU numfmt.

- values > 10 are represented without a decimal place, so 10000 becomes 10K
  instead of 10.0K

- when truncating, take the ceiling of the value, so 100001 becomes 101K

- values < 10 are truncated to the highest tenth, so 1001 becomes 1.1K

closes #1726
2021-03-06 18:26:05 +01:00
Felipe Lema
e4d9d1868a remove markers
this can be improved in the future. this branch is just the kick-off
2021-03-04 15:38:01 -03:00
Felipe Lema
975e9ea565 separate options into modules for chown 2021-03-04 15:37:27 -03:00
Sylvestre Ledru
c06967a45a rustfmt two files 2021-02-23 20:56:41 +01:00
Alex Lyon
5935876f38
od: remove Vec::set_len() usage in InputDecoder (#1739) 2021-02-23 12:35:17 +01:00
Alex Lyon
7341a1a033
shred: remove usage of Vec::set_len() (#1738)
* shred: use a fixed-size array for BytesGenerator
2021-02-23 12:34:49 +01:00
Chad Brewbaker
bb54669a5d
Fix macOS aarch64 compile errors (#1724) 2021-02-23 10:25:06 +01:00
Alex Lyon
7e5d9ee32d
factor, stdbuf, timeout, uname, uptime: update dependencies (#1746) 2021-02-22 15:07:51 +01:00
Alex Lyon
15eaaa9473
Merge pull request #1731 from jaggededgedjustice/seq-check-for-zero-step
Do not allow seq to run with an increment of zero
2021-02-18 18:28:35 -08:00
James Robson
0dbed0fd59 Do not allow seq to run with an increment of zero 2021-02-18 21:10:53 +00:00
Sylvestre Ledru
4bdd7a5e42 trivial(truncate): remove old comments 2021-02-18 22:05:11 +01:00
Alex Lyon
39d62c6c1f
od: remove potential unsoundness and an allocation in PartialReader (#1730) 2021-02-18 08:23:13 +01:00
Daniel Rocco
e2b58051e6
yes: correct a typo (#1727)
Improve readability by fixing an inadvertent rename during a performance
enhancement (b46e228).
2021-02-16 23:40:23 +01:00
Daniel Rocco
f595164063 numfmt: prohibit --header=0 to align with GNU
Adjust header option handling to prohibit passing a value of 0 to align
with GNU numfmt. Also report header option parse errors as GNU does.

closes #1708
2021-02-15 08:14:44 +01:00
Daniel Rocco
f8006f47df
numfmt: handle leading whitespace & implied padding (#1721)
Align with GNU numfmt by trimming leading whitespace from supplied values.
If the user did not specify a padding, calculate an implied padding from
the leading whitespace and the value.

Also track closer to GNU numfmt’s error message format.
2021-02-14 09:04:29 +01:00
Sylvestre Ledru
bd6b958655 Moved to atty 2021-02-12 11:37:32 +01:00
Kevin Burke
26aa1f346e ls: only print colors if stdout is a tty
Previously if no --color argument was input, we would always print
colors in the output. This breaks `configure` scripts which run `ls`
and then compare the output against what they expect to see, since the
left side has ANSI escape sequences and the right side doesn't.

Instead, only print escape sequences if a TTY is present, or if
`--color=always` is specified.

Fixes #1638.
2021-02-12 11:37:32 +01:00
Daniel Rocco
9081e120d6
numfmt: replace getopts with clap (#1717) 2021-02-11 23:58:26 +01:00
Felipe Lema
35a7f01d15
Refactor(split) - migrate from getopts to clap (#1712) 2021-02-11 20:45:23 +01:00
Sylvestre Ledru
51383e10e6
Fix: install /dev/null target (#1646)
* fix(install): workaround the /dev/null bug

Caused by a limitation of fs::copy in rust. see:
https://github.com/rust-lang/rust/issues/79390
2021-02-11 15:59:58 +01:00
Sylvestre Ledru
6c8af26e7f
fix(cp) - make "cp /dev/null target" work (#1674) 2021-02-11 15:59:20 +01:00
Sylvestre Ledru
b8987f3d5f
fix(mktemp) - Make mktemp --tempdir foo.XXXXXX works (#1716)
Used by apt-key
2021-02-11 00:03:23 +01:00
Chad Brewbaker
6c2bca110d
Fixed wc -L no end of line LF bug (#1714) 2021-02-08 21:54:48 +01:00
Sylvestre Ledru
beda329a21 Fix some clippy warnings 2021-02-07 15:12:15 +01:00
Sylvestre Ledru
2bb9a85dde bug(tee) - needs libc from uucore 2021-02-02 09:23:01 +01:00
Sylvestre Ledru
858ea108ce bug(ln) - needs fs from uucore too 2021-02-02 00:18:46 +01:00
Sylvestre Ledru
d7a6bfa76c bug(install) - needs entries from uucore too 2021-02-02 00:09:25 +01:00
Sylvestre Ledru
262b508b89 update the dep to uucore 0.0.6 2021-02-01 23:55:43 +01:00
Sylvestre Ledru
f0b302d716 refactor(fmt) move to clap 2021-01-25 21:48:52 +01:00
Sylvestre Ledru
cacaf0cde8 bug(fmt): just like the GNU version, fails when -W is bigger than 2500
Closes: #1704
2021-01-25 08:45:33 +01:00
Sylvestre Ledru
992c113f09 Remove some old code 2021-01-22 09:40:38 +01:00
Sylvestre Ledru
a807fc623a Update to version 0.0.3 2021-01-22 09:40:38 +01:00
nicoo
ea20b22d12 factor::numeric::gcd: Refactor divisor test
Should be clearer; does not handle the `gcd(0, 0)` case, which is already
covered by the `zero` test.
2021-01-21 15:28:28 +01:00
nicoo
42b048d316
factor: Get rid of the custom OverflowingAdd trait (#1697)
* factor: Confine knowledge of num_traits to numeric::traits

This should make it easier to deal with API changes of num_traits,
or eventually switching to an abstraction provided in the stdlib.
2021-01-21 15:27:22 +01:00
Sylvestre Ledru
9f7259b986 refactor(realpath): move to clap 2021-01-19 20:56:27 +01:00
Sylvestre Ledru
e331186fee
unbreak build with rustc 1.32: force tempfile 3.1.0 (#1695) 2021-01-19 08:15:53 +01:00
Sylvestre Ledru
013bb285cd
bug(chmod): chmod on symlink pointing to non existing file is failing (#1694) 2021-01-18 23:09:00 +01:00
Felipe Lema
88911be6e0
--filter argument for split (#1681) 2021-01-18 14:42:44 +01:00
Gaurang Tandon
ac7cac2910
tail: moving to clap from getopt (#1689) 2021-01-12 17:44:11 +01:00
Sylvestre Ledru
04b92f3e94
Replaces failure by thiserror. (#1688)
Failure isn't maintained anymore:
https://github.com/rust-lang-nursery/failure/pull/347
https://rustsec.org/advisories/RUSTSEC-2020-0036.html
2021-01-11 22:01:14 +01:00
Sylvestre Ledru
b8e886ad1a bump the minimal version of uucore & uucore_procs 2021-01-10 18:27:20 +01:00
Sylvestre Ledru
d9ae043a05
update of the version 0.0.1 => 0.0.2 (#1686) 2021-01-10 18:16:04 +01:00
Sylvestre Ledru
d9580c2f3a
ls: move from isatty (deprecated) to atty (#1685) 2021-01-09 21:21:02 +01:00
jaggededgedjustice
18c39daed7
fold: Handle input with newlines (#1680)
The read_line function appends to the given buffer which is never
cleared. This leads to lines being duplicated.
2021-01-05 09:10:01 +01:00
Sylvestre Ledru
4a23a1a218 feature(ln): Implement -n 2021-01-03 18:55:53 +01:00
Sylvestre Ledru
7f1d47b77a refactor(ln): move to clap 2021-01-02 22:35:21 +01:00
Sylvestre Ledru
105e2cb26f feature(mktemp): implement -t
Deprecated but used in various places:
https://sources.debian.org/src/libreoffice/1:7.0.4-1/solenv/gbuild/platform/solaris.mk/?hl=22#L22
https://sources.debian.org/src/glibc/2.31-6/malloc/memusage.sh/?hl=225#L225
https://sources.debian.org/src/sbox-dtc/1.11.7-1/debian/postinst/?hl=20#L20
2021-01-02 13:07:27 +01:00
Sylvestre Ledru
66b503a77e refactor(mktemp): move to clap 2021-01-02 09:40:40 +01:00
Sylvestre Ledru
7942a64231 Remove 'extern crate'
Not necessary anymore. See:
https://doc.rust-lang.org/edition-guide/rust-2018/module-system/path-clarity.html#no-more-extern-crate
2020-12-31 15:44:00 +01:00
Sylvestre Ledru
bc4c82b132 Fix some clippy warnings 2020-12-29 00:47:59 +01:00
Sylvestre Ledru
7955d346a8 csplit - rustfmt 2020-12-28 17:22:46 +01:00
Sylvestre Ledru
3a1eb1e05f Various fixes before landing csplit 2020-12-28 17:22:02 +01:00
Stéphane Campinas
89bf7a726e csplit: refresh of the previous PR 2020-12-28 17:21:29 +01:00
Kevin Burke
10cd480a01
rm: allow "-f" to be specified multiple times (#1667)
This matches the behavior of GNU rm.

Fixes #1663.

Co-authored-by: Kevin Burke <kevin@burke.dev>
2020-12-25 12:41:48 +01:00
Sylvestre Ledru
36d903e611
number-prefix: Move from 0.2 to 0.4 (#1670) 2020-12-22 13:53:20 +01:00
Diego Magdaleno
8b12686888
ls: On Windows don't display files hidden by NTFS (#1662)
This little check, allows us to hide the files that
shouldn't be shown on the listing on Windows operating
systems.

Just like the "dot" in UNIX based operating systems
Windows uses its own file attributes to determine if a file
is hidden or not.

The lack of support for this option is normally an annoyance
for many users, this commit adds full support for this feature
2020-12-19 17:54:28 +01:00
Sylvestre Ledru
469abf2427 bug(seq) - Allow 'seq 6 -1 0'
Was failing with
```
Found argument '-1' which wasn't expected, or isn't valid in this context
```
otherwise
2020-12-19 11:55:43 +01:00
Sylvestre Ledru
dbc716546b fix(mkdir) - Add --parent as alias of --parents
It is used this way sometimes:
https://sources.debian.org/src/php-symfony-polyfill/1.21.0-2/debian/rules/?hl=49#L49
https://sources.debian.org/src/firebird3.0/3.0.7.33374.ds4-1/debian/functions.sh/?hl=24#L24
https://sources.debian.org/src/postfix/3.5.6-1/debian/configure-instance.sh/?hl=67#L67
2020-12-18 14:41:59 +01:00
Sylvestre Ledru
718695d541 fix(install) - Install was failing with '-m 0333'
The parse_numeric was getting ' 0333' as input
and showing 'mode is too large ( 0333 > 7777) as error

Syntax used: https://sources.debian.org/src/firebird3.0/3.0.7.33374.ds4-1/debian/functions.sh/?hl=145#L145
2020-12-18 13:36:55 +01:00
Sylvestre Ledru
c506b5402b fix clippy warnings 2020-12-17 21:34:10 +01:00
Sylvestre Ledru
5a62dcafaa bug(cp): like gnu/cp, don't show any message when --no-clobber is used
Simple example:
touch bar
rm -rf /tmp/foo
mkdir -p /tmp/foo
cp -pnL -v bar /tmp/foo
echo $?
cp -pnL -v bar /tmp/foo
echo $?

rm -rf /tmp/foo
mkdir -p /tmp/foo
./target/debug/coreutils cp -pnL -v bar /tmp/foo
echo $?
./target/debug/coreutils cp -pnL bar /tmp/foo
echo $?
2020-12-17 20:50:38 +01:00
Sylvestre Ledru
1e9820a7c4
Merge pull request #1659 from sylvestre/base-non-utf8
base32/base64: tolerate non-utf8 encoded inputs
2020-12-16 08:46:48 +01:00
Gabriel Ganne
607b70a896 base32/base64: tolerate non-utf8 encoded inputs
For inputs that are valid base64 but that encode non-utf8 strings (like
garbage), base64 panicks when trying to unwrap the result from
String::from_utf8().
Instead of interpreting the byte stream as utf8, simply dump the raw
bytes to stdout.

Since the test assert that all io is valid utf8, this does not come with
a unit test. See run() in tests/common/utils.rs.

Eg.
"gD63hSj3ScS+wuOeGrubXlq35N1c5Lby/S+T7MNTjxo=" -> ">(Iľ^Z\/S"
2020-12-16 00:14:18 +01:00
Hiroki Noda
2916e8d811 tee: implement ignore-interrupts option 2020-12-15 23:50:43 +01:00
Sylvestre Ledru
d9cf0374be fix(sync) - Remove 'unused import' on mac 2020-12-13 18:02:33 +01:00
Sylvestre Ledru
ba126afe54 fix(ls): follow the display of GNU ls 2020-12-13 12:12:19 +01:00
Sylvestre Ledru
8a1628cf89 fix(ls): When a file doesn't exist, exit early and fails ls
Currently, running
$ ls doesntexist
will return 0
while it should return 1

Ditto for
$ ls doesntexist a
2020-12-13 12:12:19 +01:00
Sylvestre Ledru
dca1f28085 install: various improvements in output & tests 2020-12-12 14:36:23 +01:00
Sylvestre Ledru
3024ade071 refactor(chgrp, install): Show the error in the program instead of the lib 2020-12-12 14:28:50 +01:00
Sylvestre Ledru
55c660b986 feature(install): move chown functions into uucore and have install owner support use it 2020-12-12 14:27:59 +01:00
Sylvestre Ledru
015e18731f feature(install): install group support 2020-12-12 14:27:03 +01:00
Sylvestre Ledru
763de90fda refactor(chgrp): move chgrp perms function into the uucore to reuse it into install
Will move chown later
2020-12-12 14:26:32 +01:00
Sylvestre Ledru
431a4e9f2f cosmetic: consistency in the clap cargo declaration 2020-12-12 13:12:13 +01:00
Sylvestre Ledru
e19010e9fe cosmetic: consistency in the walkdir cargo declaration 2020-12-12 13:10:57 +01:00
Sylvestre Ledru
d8e345df0a
refactor(whoami): only use advapi32/winapi on Windows (#1653) 2020-12-12 11:04:39 +01:00
Sylvestre Ledru
576aa29f0f
refactor(chmod): move from walker to walkdir, simplify the code and add tests (#1645) 2020-12-12 10:31:12 +01:00
Sylvestre Ledru
49b32ea68d
refactor(chown): move to clap & add tests (#1648) 2020-12-12 00:14:00 +01:00
Sylvestre Ledru
068fee2ebd
feature(uname): Implement -p & -i (#1649)
Just return 'unknown' for both

Closes: #1636
2020-12-11 22:46:36 +01:00
Sylvestre Ledru
516839e081
refactor(mv): move to clap (#1652) 2020-12-10 22:28:17 +01:00
Piyush Jaipuriayar
3ca8ba997c
hashsum: added blake2 as a hashing algorithm (#1651) 2020-12-08 23:32:02 +01:00
Sylvestre Ledru
d21acc4621
cosmetic(cp): use the variable instead of the string 2020-12-08 23:19:51 +01:00
Sylvestre Ledru
0cfb83a040
Merge pull request #1580 from sylvestre/archive3
feature(cp): implement archive & -L
2020-12-06 17:15:56 +01:00
Sylvestre Ledru
5f47d1249d use the same version of clap everywhere 2020-12-01 22:59:14 +01:00
Sylvestre Ledru
c483fa501b feature(cp): also implement --dereference/-L 2020-11-29 20:48:29 +01:00
Sylvestre Ledru
f76a0ec972 feature(cp): implement archive + add missing tests 2020-11-29 20:48:23 +01:00
Sylvestre Ledru
b07f496b70 fix(install): 'install file_a file_b' should just copy the file 2020-11-29 16:33:46 +01:00
Sylvestre Ledru
261b4e24d6 feature(install): remove a duplicate check.
Already done in is_new_file_path
2020-11-29 16:33:46 +01:00
Sylvestre Ledru
11ecf80a25
feature(sync): add --data & --file-system (#1639) 2020-11-29 16:32:21 +01:00
Sylvestre Ledru
89f8624936
bug(install) - install -d can be run on an existing directory (#1643)
GNU:
$ install -d foo
$ install -d foo

Rust:
$ install -d foo
$ install -d foo
install: cannot create directory 'foo': File exists
install: foo: File exists (os error 17)
2020-11-29 16:31:26 +01:00
Sylvestre Ledru
8ef7f394c1
address some new clippy warnings (#1642) 2020-11-29 16:26:38 +01:00
Sylvestre Ledru
adc9b12f32 install: fix a typo 2020-11-25 13:09:28 +01:00
Sylvestre Ledru
bfba889f8e
refactor(touch): Move to clap + add a test (#1629) 2020-11-21 09:53:13 +01:00
Sylvestre Ledru
5efaa0bf32
refactor(id) - move to clap and add more tests (#1628) 2020-11-21 09:52:50 +01:00
Sylvestre Ledru
41ba5ed913
refactor(uniq): Move to clap + add a test (#1626) 2020-11-21 09:52:40 +01:00
Sylvestre Ledru
7bbb4c98e8
Merge pull request #1623 from sylvestre/clap-pwd
refactor(pwd): move to clap + add a test
2020-11-21 00:49:30 +01:00
Sylvestre Ledru
6870d81b33
Merge pull request #1631 from sylvestre/clap-version
Remove version mgmt, it is done by clap
2020-11-20 10:02:33 +01:00
Sylvestre Ledru
6fc4129daf
Merge pull request #1624 from sylvestre/uptime-refresh
refactor(uptime): some minor improvements
2020-11-20 10:02:13 +01:00
Sylvestre Ledru
641aba5bd7 maint/hostname: Fix a clippy warning 'single_char_push_str' 2020-11-19 23:16:31 +01:00
Sylvestre Ledru
8271faf3a2
Merge branch 'master' into clap-pwd 2020-11-19 22:32:02 +01:00
Sylvestre Ledru
252f527b55
Merge branch 'master' into uptime-refresh 2020-11-19 22:30:33 +01:00
Sylvestre Ledru
62265656b4
Merge pull request #1630 from sylvestre/clap-mkdir
refactor(mkdir): Move to clap + add a test
2020-11-17 13:01:09 +01:00
Sylvestre Ledru
5eaab5327c
Merge pull request #1632 from sylvestre/clap-rm
refactor(rm): Move to clap + add a test
2020-11-17 13:00:35 +01:00
Sylvestre Ledru
eada6e58e5
Merge pull request #1637 from sylvestre/clap-install
refactor(install): move to clap
2020-11-17 13:00:04 +01:00
Sylvestre Ledru
27d5256cb6
Use the correct syntax to define the mode 2020-11-16 22:02:06 +01:00
Sylvestre Ledru
55221a18b4
change order + remove useless import 2020-11-15 22:53:49 +01:00
Sylvestre Ledru
f55d8a22ec
remove useless mut
Co-authored-by: Roy Ivy III <rivy.dev@gmail.com>
2020-11-15 22:49:26 +01:00
Sylvestre Ledru
5718af023b
use the OPT_VERBOSE
Co-authored-by: Roy Ivy III <rivy.dev@gmail.com>
2020-11-15 22:49:01 +01:00
Sylvestre Ledru
4fec824421
change the position of the TODO
Co-authored-by: Roy Ivy III <rivy.dev@gmail.com>
2020-11-15 22:48:39 +01:00
Sylvestre Ledru
d268bda28e
Merge pull request #1635 from sylvestre/clap-sync
refactor(sync): Move to clap + add tests
2020-11-15 22:40:46 +01:00
Sylvestre Ledru
2edfe32c48 refactor(install): move to clap 2020-11-13 18:21:56 +01:00
Sylvestre Ledru
2febd13733 refactor(sync): Move to clap + add tests 2020-11-11 22:57:55 +01:00
Sylvestre Ledru
61520546a5 refactor(rm): Move to clap + add a test 2020-11-09 10:27:58 +01:00
Roy Ivy III
6539b8c6b9 maint/deps ~ change version specification for dependencies between sub-packages
- refactor internal version specifications to be ">=M.m.p" (where M.m.p is *already published*)

## [why]

Loosening internal version dependencies decreases the coupling between packages such
that packages can be published in a looser order. It allows the packages to be version
updated and published in tandem (ie, by using `cargo workspace ...`). Once published,
the internal versions can then be updated (again, to an *already published* package
version), as needed.
2020-11-08 20:26:46 -06:00
Roy Ivy III
c17307c757 fix ~ update workspace pointers to 'uucore' and 'uucore_procs' 2020-11-08 20:26:46 -06:00
Sylvestre Ledru
5c8e47a4d1 Remove version mgmt, it is done by clap 2020-11-08 17:55:31 +01:00
Sylvestre Ledru
897bcb2e67 refactor(mkdir): Move to clap + add a test 2020-11-08 17:51:04 +01:00
Sylvestre Ledru
92d5d47434 refactor(pwd): move to clap + add a test 2020-11-03 23:12:16 +01:00
Sylvestre Ledru
8bd533ffe8 refactor(uptime): some minor improvements 2020-11-03 23:10:32 +01:00
Sylvestre Ledru
a3f3a050a8
Merge pull request #1618 from sylvestre/wc-clap
refactor(wc): use clap instead of getopts
2020-11-03 09:39:53 +01:00
Sylvestre Ledru
38e90b9a03
Merge pull request #1621 from sylvestre/clap-stat
refactor(stat): Move to clap
2020-11-03 08:37:39 +01:00
Sylvestre Ledru
57c83db6b6
Merge pull request #1616 from sylvestre/users
refactor(users): move to clap and simplify the code a bit
2020-11-03 08:37:16 +01:00
Sylvestre Ledru
bd41cb621b
Merge pull request #1620 from sylvestre/clap-printenv
refactor(printenv): use clap instead of getopts
2020-11-03 08:36:56 +01:00
Sylvestre Ledru
32ccd7d54d
Merge pull request #1619 from sylvestre/rmdir-clap
refactor(rmdir): use clap instead of getopts
2020-11-03 08:36:25 +01:00
Sylvestre Ledru
daf0f96b94
Update of the about description
Co-authored-by: Roy Ivy III <rivy.dev@gmail.com>
2020-11-02 22:47:55 +01:00
Sylvestre Ledru
2ad587ccbd
Update of the about description
Co-authored-by: Roy Ivy III <rivy.dev@gmail.com>
2020-11-02 22:32:44 +01:00
Sylvestre Ledru
1e37c29b1f refactor(stat): Move to clap 2020-11-02 22:18:51 +01:00
Sylvestre Ledru
58099f4203 refactor(wc): use clap instead of getopts 2020-10-29 20:40:00 +01:00
Roy Ivy III
114fda0519 tests ~ (sub-crate factor) refactor divisor() test for improved readability 2020-10-26 15:06:29 -05:00
Roy Ivy III
ae06368cd8 polish/factor ~ correct spelling 2020-10-26 15:06:29 -05:00
Roy Ivy III
6a525c950d perf/factor ~ tune number of stack inlined decomposition values (~1% time improvement) 2020-10-26 15:06:29 -05:00
Roy Ivy III
6eea8c5f30 perf/factor ~ improve factor() quotient and loop comparison (~6% time improvement) 2020-10-26 15:06:28 -05:00
Roy Ivy III
368f47381b fix/factor ~ fix fault when factoring number composed of a squared factor 2020-10-26 15:06:28 -05:00
Roy Ivy III
8593b4c46c tests ~ (sub-crate/factor) add tests for known prior factorization failures 2020-10-26 15:06:28 -05:00
Roy Ivy III
3bb3080170 factor/refactor ~ fix cargo clippy complaints (allow many_single_char_names) 2020-10-26 15:06:28 -05:00
nicoo
0d39732300 factor::Decomposition: Inline a small number (4) of factors
This avoids allocating on the heap when factoring most numbers,
without using much space on the stack.

This is ~3.5% faster than the previous commit, and ~8.3% faster than “master”.
2020-10-26 15:06:28 -05:00
nicoo
78ae0cca31 factor: Slightly refactor main loop, fix bug 2020-10-26 15:06:28 -05:00
nicoo
b7b0c76b8e factor::Decomposition: Optimise as a factor is never added twice
The invariant is checked by a debug_assert!, and follows from the previous
commit, as `dec` and `factors` only ever contains coprime numbers:
  - true at the start: factor = ∅ and dec = { n¹ } ;
  - on every loop iteration, we pull out an element `f` from `dec` and either:
    - discover it is prime, and add it to `factors` ;
    - split it into a number of coprime factors, that get reinserted into `dec`;
      the invariant is maintained, as all divisors of `f` are coprime with all
      numbers in `dec` and `factors` (as `f` itself is coprime with them.

As we only add elements to `Decomposition` objects that are coprime with the
existing ones, they are distinct.
2020-10-26 15:06:28 -05:00
nicoo
ce218e01b6 factor: Ensure we only need to find every single factor once [WiP]
~17% faster, many optimisation opportunities still missed  >:)
2020-10-26 15:06:28 -05:00
nicoo
3743a3e1e7 factor: Derecursify and refactor
~7% slowdown, paves the way for upcoming improvements
2020-10-26 15:06:28 -05:00
nicoo
8643489096 factor::Factors: Use a RefCell rather than copy data when printing
~2.9% faster than the previous commit, ~11% faster than “master” overall.
2020-10-26 15:06:28 -05:00
nicoo
30f9cf32f2 factor::Decomposition: Use a flat vector representation
~18% faster than BTreeMap, and ~5% faster than 'master'
2020-10-26 15:06:27 -05:00
nicoo
b8ef58c002 factor::Factors: Split off a Decomposition type
The new type can be used to represent in-progress factorisations,
which contain non-prime factors.
2020-10-26 15:06:27 -05:00
nicoo
6158cd5714 factor: Introduce a type alias for exponents
This way, we can easily replace u8 with a larger type when moving to support
larger integers.
2020-10-26 15:06:27 -05:00
Sylvestre Ledru
af151703b3 refactor(rmdir): use clap instead of getopts 2020-10-26 09:53:55 +01:00
Sylvestre Ledru
17a99f8e53 refactor(printenv): use clap instead of getopts 2020-10-26 09:52:53 +01:00
Roy Ivy III
5837bc4fc9
Merge pull request #1610 from sylvestre/sort-clap
refactor(sort): move to use of 'clap'
2020-10-25 18:56:58 -05:00
Roy Ivy III
a9fb64abb4
Merge pull request #1612 from sylvestre/clap-seq
Move seq to use of 'clap'
2020-10-25 18:56:24 -05:00
Sylvestre Ledru
dc4eb79329 refactor/sort ~ changes based on PR feedback
- change `const`=>`static` and remove unneeded help/version (supplied by default by `clap`)
- update of the ABOUT description
- move to alphabetical order (where reasonable)
- rename OPT_FILES => ARG_FILES
- change the order of the declarations
2020-10-25 11:14:15 -05:00
Sylvestre Ledru
7fb5aaa108
only one file is allowed
Co-authored-by: Roy Ivy III <rivy.dev@gmail.com>
2020-10-25 17:07:32 +01:00
Sylvestre Ledru
bd339f142e
Improve the "about" description
Co-authored-by: Roy Ivy III <rivy.dev@gmail.com>
2020-10-25 17:07:17 +01:00
Sylvestre Ledru
58b0aeabee refactor(sort): move to clap 2020-10-25 11:01:30 -05:00
Sylvestre Ledru
75e1c517a0 refactor/seq ~ changes based on PR feedback
- fix the ABOUT description
- rename OPT_NUMBERS => ARG_NUMBERS
- improve the get_usage of seq
- rename seq => incremetal
- `cargo fmt`
2020-10-25 10:58:14 -05:00
Sylvestre Ledru
e06aaace59 refactor/readline ~ changes based on PR feedback
- add a trailing "." to ABOUT for consistency
- rename OPT_FILES => ARG_FILES
- move to alphabetical order for OPTIONs (where reasonable)

Co-authored-by: Roy Ivy III <rivy.dev@gmail.com>
2020-10-25 10:54:24 -05:00
Sylvestre Ledru
733fe925ad refactor(readlink): move to clap 2020-10-25 10:53:09 -05:00
Sylvestre Ledru
dfb922f66e refactor(seq): use clap instead of doing arg mgmt by hand 2020-10-25 10:46:38 -05:00
Roy Ivy III
58d7d89e07
Merge pull request #1617 from sylvestre/clippy-fix
Fix some clippy warnings
2020-10-25 10:35:35 -05:00
Sylvestre Ledru
a12509f32e Fix some clippy warnings 2020-10-25 15:50:51 +01:00
Sylvestre Ledru
4804e52c97 refactor(users): move to clap and simplify the code a bit 2020-10-25 15:29:02 +01:00
Sylvestre Ledru
7c3dccb981 remove the useless format 2020-10-25 12:28:27 +01:00
Sylvestre Ledru
0d4e36d5cd reorder the args 2020-10-25 12:27:04 +01:00
Sylvestre Ledru
b72972e0b2
Rename OPT_FILES => ARG_FILES
Co-authored-by: Roy Ivy III <rivy.dev@gmail.com>
2020-10-25 12:22:07 +01:00
Sylvestre Ledru
8ad2fd3534 refactor(truncate): Move to clap 2020-10-23 00:40:46 +02:00
Kevin Burke
7fc1b16115
sort: fix panic on write to closed pipe
If the output of sort is piped to another program that closes the file
descriptor, sort currently panics. The GNU coreutils is able to handle
this case.

Replacing panic with crash_if_err reports the closed pipe and exits
with a return code, which seems like the correct behavior. Tested on
my Mac and the panic disappears.

Add a test which pipes data to sort - it won't protect against this
specific regression, but it increases the test coverage, at least.

Fixes #1608.
2020-10-21 16:55:10 -07:00
Roy Ivy III
92075c7d14 refactor/polish ~ (factor) fix cargo clippy complaint (unused_imports) 2020-10-16 20:25:49 -05:00
Sylvestre Ledru
fba62f39c6
Merge pull request #1603 from rivy/fix.warnings
Fix `cargo clippy` warnings
2020-10-12 09:23:15 +02:00
Roy Ivy III
77a04546f0 fix/printf ~ use calculated VERSION 2020-10-11 17:39:50 -05:00
Wisha Wa
b387565ba3 ptx: remove unneeded regex and reduce repetitive regex compilations 2020-10-12 01:59:06 +07:00
Wisha Wa
351d1fc068 ptx: improve performance by removing N^2 routine. 2020-10-12 01:27:35 +07:00
Roy Ivy III
46f30f3836 refactor/polish ~ fix cargo clippy complaint (stable_sort_primitive) 2020-10-10 20:35:35 -05:00
Roy Ivy III
10b6926ccc refactor/polish ~ fix cargo clippy complaint (allow match_like_matches_macro) 2020-10-10 20:35:35 -05:00
Roy Ivy III
6fa16343f1 refactor/polish ~ fix cargo clippy complaint (same_item_push) 2020-10-10 20:35:35 -05:00
Roy Ivy III
7b4d81efd4 refactor/polish ~ fix cargo clippy complaint (needless_collect) 2020-10-10 20:35:35 -05:00
Roy Ivy III
4a041f95e3
Merge pull request #1598 from sylvestre/nproc
cleanup(nproc): remove some artifacts from the clap migration
2020-10-10 16:28:22 -05:00
Roy Ivy III
0fa249a944
Fix tr argument handling for missing arguments (#1601)
* tests/tr ~ confirm failure for missing argument(s)

* fix/tr ~ mimic GNU error reponse for missing argument(s)
2020-10-02 22:43:57 +02:00
Sylvestre Ledru
c660684a8c nproc: use the variable name 2020-09-26 23:09:08 +02:00
Sylvestre Ledru
805801ec39 nproc: remove the extern crate declaration 2020-09-26 23:09:02 +02:00
nicoo
9a1c560aba
factor: Refactor and optimise the Factors datastructure (#1572)
* factor: Introduce a type alias for exponents

This way, we can easily replace u8 with a larger type when moving to support
larger integers.

* factor::Factors: Split off a Decomposition type

The new type can be used to represent in-progress factorisations,
which contain non-prime factors.

* factor::Decomposition: Use a flat vector representation

~18% faster than BTreeMap, and ~5% faster than “master”.

* factor::Factors: Use a RefCell rather than copy data when printing

~2.9% faster than the previous commit, ~11% faster than “master” overall.
2020-09-21 21:44:50 +02:00
Jens Humrich
bfca334ec1 style issues 2020-09-17 12:40:48 +02:00
Katzmann1983
f322f72c34
Update src/uu/split/src/split.rs
Co-authored-by: Sylvestre Ledru <sledru@mozilla.com>
2020-09-17 10:27:40 +02:00
Jens Humrich
5a75905476 Add additional-suffix option to split 2020-09-16 17:59:39 +02:00
Roy Ivy III
2ff6b67077
stat: fix cargo clippy complaint (unnecessary_sort_by) (#1594) 2020-09-04 08:01:53 +02:00
Roy Ivy III
c33284f38b factor::numeric::gcd: modify divisor() test to return correct true/false results for all possible inputs 2020-09-03 14:56:14 -05:00
nicoo
07eaa7fe5a factor::numeric::gcd: Add explicit test for the 0 case 2020-09-03 14:56:14 -05:00
nicoo
c11cebc4d3 factor::numeric::gcd: Exclude the 0 case from test divisor 2020-09-03 14:56:10 -05:00
16yuki0702
19e967ef31
ls: deleting user defined max function (#1591)
This is trivial refactor.
```usize``` can call max method, so deleting user defined max function.
2020-08-26 09:42:27 +02:00
Roy Ivy III
74510d2fa4 refactor/polish ~ cargo fmt 2020-08-19 09:13:09 -05:00
Roy Ivy III
74200f368b tests ~ (sub-crate/mknod) fix WSL variation in expected test values 2020-08-19 09:13:09 -05:00
Roy Ivy III
2a50dc42c1 tests ~ (sub-crate/factor) fix divisor(0,0) test of factor::numeric::gcd() with early value check and return (fixes #1587) 2020-08-19 09:13:09 -05:00
Roy Ivy III
5478ca9108 tests ~ (sub-crate/od) fix expected f16 formatted test value 2020-08-10 10:19:42 -05:00
Roy Ivy III
b2483cb3c3 tests ~ (sub-crate/od) fix/remove inadvertent doc test (by using ignore) 2020-08-10 10:19:42 -05:00
Roy Ivy III
49d17f9587 tests ~ (sub-crate/od) fix compiler error (mismatched types) 2020-08-10 10:19:42 -05:00
Roy Ivy III
4fa27345be tests ~ (sub-crate/od) fix cargo clippy complaints (from deprecated half::consts to f16::...) 2020-08-10 10:19:42 -05:00
Roy Ivy III
c7cb5cbc37 tests ~ (sub-crate/cat) fix incorrect test attribute usage 2020-08-10 10:19:42 -05:00
Roy Ivy III
c3893edf94 tests ~ (sub-crates) fix 'edition=2018' module import errors
- ref: <https://users.rust-lang.org/t/imports-can-only-refer-to-extern-crate-names/24388> @@ <https://archive.is/iCaXp>
2020-08-10 10:19:42 -05:00
Roy Ivy III
925137afce tests ~ (sub-crate/od) fix cargo clippy complaints (unused imports) 2020-08-10 10:19:41 -05:00
Roy Ivy III
dd72893771 tests ~ (sub-crate/od) fix cargo clippy complaints (deprecated std::error::Error::description) 2020-08-10 10:19:41 -05:00
nicoo
dc6b9a8d62
CI: Improve annotations (#1584)
* CI: Only run rustfmt in one environment

- This displays clippy warnings even when rustfmt fails.
- This avoids displaying 3 copies of the same rustfmt warning as Github
  annotations.
- Avoids duplicated work.

* CI: Suppress warnings when building for the oldest toolchain version

We had cases of warnings emitted due to `rustc` bugs that were fixed
in non-obsolete versions.

* factor: Remove a workaround for warnings on obsolete rustc
2020-08-10 16:53:32 +02:00
Felipe Lema
ba6b55f117 feature[env]: Add support for --chdir=DIR in env (fixes #1568) (#1569) 2020-08-08 22:26:49 -05:00
nicoo
d9be24e354 factor: Make the implementation of GCD more readable (#1576)
* factor::numeric::gcd: Switch variable names to be more consistent

* factor::numeric::gcd: Improve comments

* factor::numeric::gcd: Extend loop invariant to v
2020-08-08 22:26:49 -05:00
nicoo
37f717f5e3 factor: Add tests against (random) numbers with known factorisations (#1573) (#1578)
* factor::Factors: Derive implementations of Eq and PartialEq

* factors::Factors: Implement quickcheck::Arbitrary

This generates uniformly-distributed integers with known factorisations,
and will enable further testing.

* factor: Test against random numbers with known factorisations

* factor::Factors::arbitrary: Simplify method signature
2020-08-08 22:26:25 -05:00
nicoo
34a5941ee9
factor::numeric: Add more property-based tests (#1577)
* factor::numeric::gcd: Rename test against the Euclidean algorithm

* factor::numeric::gcd: Add various property-based tests

* factor::numeric::modular_inverse: Rename test

* factor::numeric::modular_inverse: Add test on random values
2020-08-03 14:00:34 +02:00
nicoo
70828329ba
factor::miller_rabin: Deduplicate parametrized_check macro (#1575)
* factor::miller_rabin::tests::first_composite: Drop useless generic

* factor::miller_rabin::tests: Reuse parametrized_check macro
2020-08-03 13:58:09 +02:00
nicoo
1eabda91cf
factor: Split numeric.rs into multiple modules (#1567)
* factor::numeric: Start refactoring into multiple submodules

No change to the module's interface, but it should make it much easier to
keep the tests right next to the code they are related to.

Moreover, build.rs' dependency is now limited to numeric::{modular_inverse,
traits}, meaning that the rest of it can use build-time generated tables etc.

* factor::numeric: Move gcd (and its test) to a submodule

* factor::numeric: Move Montgomery arithmetic to its own module

Finally hollowed-out numeric.rs

* factor: Move numeric.rs to numeric/mod.rs

* factor::numeric: Fix an erroneous lint on obsolete Rust versions
2020-08-02 20:28:00 +02:00
Sylvestre Ledru
85e2e1d0ee
Merge pull request #1566 from nbraud/factor/miller-rabin/copyright
factor::miller_rabin: Add missing copyright header in source file
2020-08-02 14:09:44 +02:00
nicoo
645e9a24bd factor::miller_rabin: Add missing copyright header in source file 2020-07-26 14:59:30 +02:00
Roy Ivy III
c36d71ba43 refactor/polish ~ fix cargo clippy complaint (needless_lifetimes) 2020-07-25 11:09:10 -05:00
Roy Ivy III
305c3cbcdb refactor/polish ~ fix cargo clippy complaint (bind_instead_of_map) 2020-07-25 11:09:10 -05:00
Roy Ivy III
326ff36793 refactor/polosh ~ fix cargo clippy complaint (reversed_empty_ranges) 2020-07-25 11:09:10 -05:00
Roy Ivy III
a6d7379b97
Merge pull request #1563 from nbraud/factor/faster/gcd
factor/perf ~ speed up factor::numeric::gcd
2020-07-25 11:07:57 -05:00
nicoo
6bef6306c0 factor::numeric::gcd: Avoid redundant u64::trailing_zeros and shifts
7 to 10% faster, according to criterion.
2020-07-25 15:04:57 +02:00
nicoo
3e55139c13 factor::miller_rabbin::Result: Mark as #[must_use]
Ignoring a value of that type is a bug: they are only produced by
`miller_rabbin::test`, which is a pure, but expensive, function.

As such, an ignored value is always either a mistake, or an easy
optimisation opportunity (just remove the useless call to `test`).
2020-07-24 23:06:08 +02:00
nicoo
ecc3e2db24 factor::miller_rabin::test: Minor readability improvement 2020-07-24 23:06:08 +02:00
nicoo
e415b17c01 factor::miller_rabin: Remove duplicated work
The duplicate work was introduced in 2015.
2020-07-24 23:06:06 +02:00
nicoo
29d45e472d factor::numeric::gcd: Implement Stein's binary GCD algorithm
Also add a property-based test against the Euclidean implementation.

numeric::gcd got ~50-65% faster, according to criterion. The effect on the
overall system is small, but later PRs will use a lot more GCD computations.
2020-07-24 23:00:32 +02:00
nicoo
4f23767b85 factor::numeric::gcd: Add criterion-powered benchmark
The function had to be made `pub`, this is a [known limitation] of Criterion.

[known limitation]: https://bheisler.github.io/criterion.rs/book/user_guide/known_limitations.html
2020-07-24 22:58:26 +02:00
nicoo
1b593d94c9 factor: Update rand dependency to v0.7 2020-07-24 22:57:08 +02:00
nicoo
9a80ab7741 factor::numeric::DoubleInt: Document the DoubleWidth associated type 2020-07-24 11:28:26 -05:00
nicoo
17c69674eb factor::numeric::Int: Remove from_u128 method
It was unused, the debug assertions only need `to_u128`.
2020-07-24 11:28:26 -05:00
nicoo
1172af09c0 factor::numeric::DoubleInt: Clarify methods and associated types
- `DoubleInt::Double` renamed to `DoubleWidth`
- `{as,from}_double()` renamed to `{as,from}_double_width()`.

This should hopefully clarify that this is not a “double precision”
floating-point type, but an integer type with a larger range (used
for storing intermediate results, typ. from a multiplication)
2020-07-24 11:28:26 -05:00
nicoo
86a4749e3a factor::numeric: fix original "Generalise modular inverse computation" 2020-07-24 11:28:12 -05:00
nicoo
6e228d3184 Merge branches 'factor/faster/{centralise_logic, montgomery32}' 2020-07-05 00:20:16 +02:00
nicoo
4cfe754551 factor::miller_rabin::is_prime: Fix bug
Montgomery only works for odd n, so attempting to construct an instance
for an even number results in a panic!

The most obvious solution is to special-case even numbers.
2020-07-05 00:08:49 +02:00
nicoo
9b0f131135 Fix bug in factor::factor::factor (>_>")
Non-prime numbers, such as 0 or 1, shouldn't be inserted in the factorisation.
2020-07-05 00:07:38 +02:00
nicoo
e9e263ac66 factor::Factors: Derive Clone and Debug
Useful for printing out in-progress factorisations when debugging.
2020-07-05 00:07:33 +02:00
nicoo
7bdc81b882 factor: Add a first property-based test 2020-07-05 00:07:16 +02:00
nicoo
dcc22188ba factor: Fix clippy warnings 2020-07-05 00:05:45 +02:00
nicoo
f1d1cb80e4 factor::Factors: Generalise invariant check (from prime() to add()) 2020-07-05 00:05:45 +02:00
nicoo
2d2b6faab4 factor: Avoid moving data around in main factoring loop
Instead, the same `Factors` object is passed around through the execution.
~10% faster.
2020-07-05 00:05:45 +02:00
nicoo
6713d2ad62 factor: Move recursive factoring logic from rho to factor
No functional change, but prepares a coming optimisation.
2020-07-05 00:05:45 +02:00
nicoo
bd4d6fcac5 factor: Split the CLI and I/O code off the factoring logic 2020-07-05 00:05:45 +02:00
nicoo
6256750376 factor::miller_rabin: Use a macro to instantiate every test 2020-07-05 00:04:56 +02:00
nicoo
7a1b86c9c2 factor::numeric::tests: Use a macro to instantiate every test 2020-07-05 00:04:53 +02:00
nicoo
cbcc760f83 factor::miller_rabin: Squash another bug! >:3
Detected by the testsuite improvement just prior.
2020-07-05 00:04:49 +02:00
nicoo
3d6fdffe14 factor::miller_rabin: Generalise tests to 32 and 64b Montgomery 2020-07-05 00:04:29 +02:00
nicoo
9b149a759b factor::miller_rabin: Hoist edge-cases (even, <2) out of test()
test() takes a modulus that is known to not be even or <2 (otherwise the
Montgomery value could not be constructed), so those checks can be hoisted
into is_prime() and out of the critical path.
2020-07-05 00:04:26 +02:00
nicoo
4f08e28167 factor::miller_rabin: Add property-based test 2020-07-05 00:04:08 +02:00
nicoo
d2fa0fe63c factor::miller_rabin::tests: small_composites → small_semiprimes
This is more descriptive, as semiprime are the products of 2 primes;
all semiprimes are composite, but not all composite numbers are semiprime.
2020-07-05 00:01:48 +02:00
nicoo
1e4d824829 factor::miller_rabin: Add negative test over all small composites 2020-07-05 00:01:44 +02:00
nicoo
600268c6e4 factor::miller_rabin::tests: Refactor 2020-07-05 00:01:40 +02:00
nicoo
0a1200bdb8 factor::miller_rabin: Add test for the largest 64b composite numbers 2020-07-05 00:01:37 +02:00
nicoo
308290325a factor::miller_rabin::is_prime: Fix bug
Montgomery<_> only works for odd n, so attempting to construct an instance
for an even number results in a panic!

The most obvious solution is to special-case even numbers.
2020-07-05 00:01:33 +02:00
nicoo
d2b43f49f9 factor::numeric::OverflowingAdd: Generate impls with a macro 2020-07-05 00:01:21 +02:00
nicoo
b25c77c5f9 factor::numeric: Generate implementations of DoubleInt with a macro 2020-07-05 00:01:21 +02:00
nicoo
f95f977f98 factor::numeric: Generate implementations of Int with a macro 2020-07-05 00:01:21 +02:00
nicoo
53954badd7 factor::numeric: Refactor away the use of {To,From}Primitives 2020-07-05 00:01:21 +02:00
nicoo
19a8231fb2 factor::numeric::Arithmetic: Rename associated type I to ModInt 2020-07-05 00:01:21 +02:00
nicoo
caa79a1261 factor::numeric: Split Int and DoubleInt traits 2020-07-05 00:01:21 +02:00
nicoo
28244413d1 factor::numeric: Document when to remove OverflowingAdd trait 2020-07-05 00:01:21 +02:00
nicoo
3f79be0219 factor::numeric: Use debug_assert! for runtime assertions. 2020-07-05 00:01:21 +02:00
nicoo
774feb0a40 factor::numeric: Generalise tests for Arithmetic trait 2020-07-05 00:01:21 +02:00
Alex Lyon
4d28f48ad9 factor: combine Montgomery and Montgomery32 2020-07-05 00:01:21 +02:00
nicoo
a440807e6c factor::miller_rabin: Use a specialized basis for 32b integers
~3% faster
2020-07-05 00:01:21 +02:00
nicoo
e68bb192f2 factor::numeric: Add a 32b Montgomery variant [WiP]
~32% faster
2020-07-05 00:01:21 +02:00
nicoo
43ee92c40f factor::numeric: Generalise modular inverse computation 2020-07-05 00:01:21 +02:00
Alex Lyon
9de82d92b0
Merge pull request #1557 from nbraud/factor/issue_1556
factor::miller_rabin: Fix bug #1556
2020-06-24 04:53:32 -07:00
Alex Lyon
700d51a92b
Merge pull request #1528 from sylvestre/cp-no-deref
feature(cp) implement -P/--no-deference
2020-06-23 23:05:26 -07:00
nicoo
abf579975c factor::miller_rabin: Fix bug in primality test
Introduced in 6b9585b1 (#1525: Performance improvements for `factor`).
Closes #1556
2020-06-23 16:19:16 +02:00
nicoo
c5c86b00e9 factor::miller_rabin: Add tests reproducing #1556 2020-06-23 16:14:52 +02:00
nicoo
8e040bbf1a factor::table: Optimise the size of the precomputed table
A too-large precomputed table actually slows down the program: we spend
time fetching it from disk and from memory (into the CPU's cache), and
larger prime factors are more unlikely to occur in random integers (prime p
occurs with probability ~1/p when sampling 64b numbers uniformly-at-random)

The new value was chosen after measuring the execution time (for all
integers between 2 and 10⁷) for a broad set of values:

| n    | time (s) |
|------|----------|
| 16   | 40.84    |
| 32   | 34.491   |
| 64   | 29.044   |
| 128  | 25.121   |
| 192  | 23.98    |
| 256  | 23.102   |
| 256  | 24.93    |
| 272  | 23.57    |
| 288  | 23.85    |
| 304  | 23.91    |
| 320  | 23.24    |
| 329  | 23.45    |
| 336  | 23.55    |
| 352  | 23.09    |
| 368  | 23.65    |
| 384  | 23.32    |
| 384  | 23.36    |
| 400  | 23.30    |
| 416  | 23.38    |
| 432  | 23.42    |
| 448  | 23.95    |
| 448  | 24.00    |
| 464  | 23.81    |
| 480  | 23.55    |
| 496  | 24.10    |
| 512  | 24.101   |
| 512  | 24.23    |
| 1027 | 29.864   |
2020-06-20 22:22:55 +02:00
nicoo
9d992b77b2 factor: Keep the primes table size in a single place 2020-06-20 22:22:55 +02:00
nicoo
b956e632e1 factor::table: Coalesce accesses to the factors table
~5.6% faster
2020-06-20 22:22:55 +02:00
Sylvestre Ledru
2d62097843 feature(cp): Manage -P & -R 2020-06-20 10:49:15 +02:00
nicoo
0518e06053 factor::rho: Minor refactor for readability 2020-06-20 10:39:56 +02:00
nicoo
dacee413db factor::rho: Refactor to avoid unnecessary allocations 2020-06-20 10:39:56 +02:00
nicoo
71e1c52920 factor::Factors: Rename new() to one() 2020-06-20 10:39:56 +02:00
Sylvestre Ledru
280fafed8a feature(cp) implement -P/--no-deference 2020-06-20 09:38:39 +02:00
nicoo
45a1408fb0 fixup! factor: Add test exhibiting a bug in ρ 2020-06-19 15:28:01 +02:00
nicoo
9fe3de72f2 factor::rho: Fix very-unlikely bug (resulting in assertion failure)
This bug can only be triggered when:
- the Miller-Rabin test produces a divisor `d` (rare) ;
- n / d is prime.
2020-06-19 13:51:29 +02:00
nicoo
9eb944b6b9 factor: Add test exhibiting a bug in ρ
The test is repeated 20 times to make it overwhelmingly-likely to fail
(the bug itself is only triggered rarely)
2020-06-19 13:48:00 +02:00
nicoo
3a90e31307 factor::numeric::inv_mod_u64: Provide a more-helpful error message 2020-06-19 13:39:42 +02:00
nicoo
ef12991ee7 factors: Avoid repeatedly locking and flushing stdout
By default, stdout's LineWriter results one syscall per line, i.e. a billion
syscalls when factoring a billion numbers...

Buffering the output yields a ~28% speedup.
2020-06-18 16:45:40 -07:00
nicoo
2869248318 factor::Factors: Use a tree-based map internally
This eliminate the need for sorting the prime factors for display.
25% performance improvement after the changes from factor/montgomery.
2020-06-18 16:44:08 -07:00
nicoo
4b4d11b61a
factor: Add/update copyright notices as necessary (#1546) 2020-06-18 21:38:28 +02:00
Alex Lyon
6105cce69a
Merge pull request #1529 from nbraud/factor/montgomery
factor: Faster modular arithmetic with the Montgomery transform
2020-06-18 09:19:12 -07:00
nicoo
fb08d9ff9e factor::numeric::Montgomery::add: Deal with rare overflow case 2020-06-18 14:32:58 +02:00
Alex Lyon
e02b8a60f7
hashsum: switch from getopts to clap (#1542)
* hashsum: switch from getopts to clap

Additionally, slightly refactor.  This commit will be the first of
a series of commits refactoring (at the very least) `hashsum`.
2020-06-18 11:46:00 +02:00
Sylvestre Ledru
f17a112781
feature(ln): implement -r (#1540)
* bump the minimal version of rustc to 1.32

* feature(ln): implement -r

* fix two issues

* Use cow

* rustfmt the change

* with cargo.lock 1.31

* try to unbreak windows
2020-06-18 00:54:18 -07:00
nicoo
d1470dadf8 factor::numeric::gcd: Silence the (erroneous) dead code lint 2020-06-16 15:45:10 +02:00
nicoo
334e02786d factor: Run cargo fmt 2020-06-16 15:43:25 +02:00
Alex Lyon
8377abadb6
Fix to build on Rust 1.32.0 and formatting 2020-06-16 04:08:17 -05:00
Alex Lyon
110d6844ad
Use an iterator over OsString for uumain()
Additionally, restructure `uname` so that we don't need to find the
iterator's length.
2020-06-16 03:28:02 -05:00
nicoo
f1788d9e70 fixup! factor::numeric::Montgomery: Fix overflow bug 2020-06-16 01:17:16 +02:00
nicoo
4851619d62 factor::miller_rabin: Avoid repeatedly transforming 1 and -1
Approx. 25% speedup
2020-06-15 23:05:31 +02:00
nicoo
cb6051c580 factor::numeric::Montgomery: Fix overflow bug 2020-06-15 22:40:57 +02:00
nicoo
2238065c9d factor::numeric: Simplify Montgomery (remove superfluous Wrapping) 2020-06-15 19:18:34 +02:00
nicoo
19a0645a0a factor::numeric: Simplify inv_mod_u64
Just call `u64::wrapping_{mul,sub}` instead of (de)constructing Wrapping<u64>
values.
2020-06-15 19:18:34 +02:00
nicoo
918035e01e factor: Fix for old Rust 2020-06-15 19:18:34 +02:00
nicoo
f84d0f9398 factor::Factors::add: Make the precondition check a debug_assert 2020-06-15 19:18:34 +02:00
nicoo
33e18b4cd3 factor::numeric::Montgomery: Add debug assertions
In debug mode, checks that all arithmetic operations coincide with the
plain-u64 versions, as long as the latter does not overflow.
2020-06-15 19:18:34 +02:00
nicoo
8a4d0d30ad factor::numeric: Implement Montgomery's transform
This is a facter way to perform arithmetic mod n, when n is odd and a 64b
number.
2020-06-15 19:18:29 +02:00
nicoo
e91155519a factor::factor: Add integration tests 2020-06-15 19:10:16 +02:00
nicoo
bada7530fb factor::miller_rabin: Add tests 2020-06-15 19:10:16 +02:00
Roy Ivy III
813e57d225 fix cargo clippy complaint (redundant_clone) 2020-06-14 23:38:30 -05:00
Roy Ivy III
39e3c57198 fix cargo clippy complaint (clone_on_copy) 2020-06-14 23:38:30 -05:00
Sylvestre Ledru
7b452f3bfe style(nproc): reformat with rustfmt 2020-06-09 13:38:29 +02:00
Sylvestre Ledru
ac34d136f2 refactor(global): Move from tempdir to tempfile:
* the crate has been deprecated
2020-06-09 11:30:19 +02:00
Alex Lyon
80987250d2
Merge pull request #1521 from sylvestre/nproc
Add tests for nproc + clap migration
2020-06-08 19:18:00 -07:00
Alex Lyon
49771d4fda
Merge pull request #1535 from sylvestre/1.32
Move to 1.32 as minimal supported version
2020-06-08 14:31:02 -07:00
Sylvestre Ledru
5926315507 bump the minimal version of rustc to 1.32 2020-06-08 22:54:28 +02:00
Sylvestre Ledru
d0890b72cd
Merge pull request #1522 from sylvestre/groups
groups: clap migration
2020-06-08 22:19:08 +02:00
Sylvestre Ledru
851e25d134 refactor(logname): simplify the code 2020-06-07 17:54:30 +02:00
Sylvestre Ledru
5963b15746 refactor(nproc): fix some bugs and use clap 2020-06-02 23:29:21 +02:00
Sylvestre Ledru
ed1ebe09ff refactor(groups): move to clap 2020-06-02 23:16:18 +02:00
Sylvestre Ledru
78c04a254e refactor ~ rename MinSRV => MinRustV 2020-06-02 12:23:48 -05:00
Roy Ivy III
fbbd881ca9 docs ~ reduce sub-crate meta-information keywords to the maximum of five 2020-05-31 15:48:54 -05:00
Roy Ivy III
b2a566d50d fix/mknod ~ correct uucore feature dependency 2020-05-30 02:21:05 -05:00
Roy Ivy III
2fd7e15d63 fix/install ~ correct uucore feature dependency 2020-05-30 02:21:05 -05:00
Roy Ivy III
4b0dd73adb fix/chmod ~ correct uucore feature dependency 2020-05-30 02:21:05 -05:00
Roy Ivy III
923c47a408 refactor ~ remove outdated clippy attributes 2020-05-30 01:36:02 -05:00
Roy Ivy III
fb5ab86aee refactor help text and variable names 2020-05-30 01:36:02 -05:00
Roy Ivy III
8cf58de0a7 docs ~ polish/update comments 2020-05-30 01:36:02 -05:00
Roy Ivy III
619d0ab72b docs ~ add markdown-lint directives 2020-05-30 01:36:02 -05:00
Roy Ivy III
f82de13847 docs ~ spell-check repairs and addition of exceptions 2020-05-30 01:36:02 -05:00
Roy Ivy III
38ebc14b29 maint/build ~ remove .gitignore from sub-crate 'cut' 2020-05-29 22:59:48 -05:00
Roy Ivy III
21a4da905f fix cargo clippy complaint (single_component_path_imports) 2020-05-29 22:59:48 -05:00
Roy Ivy III
ea3235c7e2 change ~ new_coreopts!() => app!() (from uucore v0.0.4) 2020-05-29 22:59:48 -05:00
Roy Ivy III
4b8fc7445b change ~ disp_err!() => show_usage_error!() (from uucore v0.0.4) 2020-05-29 22:59:48 -05:00
Roy Ivy III
6f465eeb9f deps ~ update utils to uucore/uucore_procs v0.0.4 2020-05-29 22:59:48 -05:00
Roy Ivy III
e3fd15e73c fix cargo clippy complaint (single_component_path_imports) 2020-05-29 22:59:48 -05:00
Roy Ivy III
156031b929 fix/sync ~ update to correct current WinAPI usage (ref #1496) 2020-05-29 22:59:48 -05:00
Roy Ivy III
fc9abdc179 fix/tail ~ update to correct current WinAPI usage (ref #1496) 2020-05-29 22:59:48 -05:00
Roy Ivy III
64f888d364 fix/cp ~ update to correct current WinAPI usage (ref #1496) 2020-05-29 22:59:48 -05:00
Roy Ivy III
251905da3d fix/du ~ update to correct WinAPI usage (fixes #1496) 2020-05-29 22:59:47 -05:00
Roy Ivy III
131bca3d53 fix/split ~ fix 'edition=2018' trait specification error 2020-05-29 22:59:47 -05:00
Roy Ivy III
3129c8fbe5 fix/od ~ fix 'edition=2018' trait specification error 2020-05-29 22:59:47 -05:00
Roy Ivy III
d4aa3a2231 fix 'edition="2018"' module import errors
- ref: <https://users.rust-lang.org/t/imports-can-only-refer-to-extern-crate-names/24388> @@ <https://archive.is/iCaXp>
2020-05-29 22:59:47 -05:00
Roy Ivy III
d70db1f7d2 docs ~ improve/update sub-crate meta information 2020-05-29 22:59:47 -05:00
Roy Ivy III
45a1609a38 update held/pinned dependencies (to maintain MinSRV v1.31.0) 2020-05-29 22:59:47 -05:00
Roy Ivy III
7cfa8be5f2 docs ~ add meta information to sub-crates 2020-05-29 22:59:47 -05:00
Roy Ivy III
6cb609aeee docs/codespell ~ fix spelling errors 2020-05-29 22:59:47 -05:00
Roy Ivy III
db2e950918 change ~ make all sub-crates independent 2020-05-29 22:59:40 -05:00
Roy Ivy III
6606408ce9 refactor/polish ~ whitespace normalization (consistent indentation [either tabs *or* spaces], EOF EOLNs, no trailing whitespace) 2020-05-24 17:29:07 -05:00
Roy Ivy III
09abcf8cbe
Merge pull request #1525 from nbraud/factor/faster
Performance improvements for `factor`
2020-05-24 16:54:04 -05:00
Nicolas Braud-Santoni
4c3682aec7
factor::Factors::add: Split up to work without NLL
Co-authored-by: Roy Ivy III <rivy.dev@gmail.com>
2020-05-24 19:14:37 +02:00
nicoo
36a2948959 factor::miller_rabin: Avoid unecessary exponentiation
Instead of computing a^r and a^(n-1) = a^(r 2ⁱ) separately,
compute the latter by repeatedly squaring the former.

33.6% performance improvement
2020-05-24 19:10:34 +02:00
nicoo
543c7b941a factor::rho: Small refactor 2020-05-24 19:10:29 +02:00
nicoo
30fd6a0309 factor::numeric: Replace lose functions with an Arithmetic trait 2020-05-24 18:16:21 +02:00
nicoo
29eb8fd77b format: Make clippy happy 2020-05-24 17:06:19 +02:00
nicoo
8241037690 factor::miller_rabin: Extract dividers from the primality test
Another 36% improvement.
2020-05-24 15:41:23 +02:00
nicoo
6b9585b1dc factor::miller_rabbin: Refactor before extracting dividers
Replace iterated division with u64::trailing_zeros, hoist the selection of `mul`
out of the loop, another cool 49.5% runtime improvement.
2020-05-24 15:41:23 +02:00
nicoo
e3ecc81d97 factor: Move the Miller-Rabin primality test to its own module. 2020-05-24 15:41:23 +02:00
nicoo
74054feb94 factor::factor: Remove extraneous call to the primality test
Another 6.97% runtime improvement
2020-05-24 15:41:23 +02:00
nicoo
e1a6dbe619 factor::table: Remove obsolete, commented code 2020-05-24 15:41:23 +02:00
nicoo
169740629b factor::table: Remove extraneous calls to the primality test
50% performance improvement on factoring all numbers between 2 and 10⁶.
2020-05-24 15:41:23 +02:00
nicoo
418fd61759 factor::factor: Short-circuit the fallback to Pollard's rho
When the remainder is smaller than the max. entry in the table,
it is guaranteed to be prime.
2020-05-24 15:41:23 +02:00
nicoo
bc11e57962 factor::factor: Use u64::trailing_zero instead of iterated division
No significant performance impact (most of the time is spent elsewhere),
but an easy and satisfying fix nevertheless.
2020-05-24 15:41:23 +02:00
nicoo
a1b2522750 factor: Move each factorisation method to its own module
Also decoupled the factorisation methods; now factor::factor contains
the logic that chains the different algorithms and aggregates results.

As a side-effect, rho::factor now performs extraneous allocations (as each
recursive step creates a new `Factors` value, which is then aggregated into
the previous one) but there is no significant performance impact.
2020-05-24 15:41:23 +02:00
nicoo
d9095a2539 factor: Refactor (eheh) around a Factors datatype
It is clearer to see what is going on, as opposed to passing around an
unmarked `Vec<u64>`, and there is a single place to add invariants checks.

This is also a more compact memory representation: each prime factor is
represented only once, with an additional byte for multiplicity.  The
performance impact is however not significant.
2020-05-24 15:41:23 +02:00
Sylvestre Ledru
75b7f768ea
fix(mv): Allow move across file systems (#1524)
Co-authored-by: Arni Dagur <arni@dagur.eu>
2020-05-24 12:49:56 +02:00
Sylvestre Ledru
272b66aac8
refactor(hostname): use clap instead of getopts for consistency (#1516)
* refactor(hostname): use clap instead of getopts for consistency

* deps ~ uucore/wide is required

Co-authored-by: Roy Ivy III <rivy.dev@gmail.com>
2020-05-22 17:27:03 +02:00
Sylvestre Ledru
817a237821
Merge pull request #1513 from sylvestre/uptime-since
feature(uptime): add option --since
2020-05-21 22:18:52 +02:00
Sylvestre Ledru
2fe2fe7275
be less prescriptive with clap versions (#1514) 2020-05-21 22:18:13 +02:00
Sylvestre Ledru
0a02aeda71
refactor(hostname): rely on the hostname crate (#1517) 2020-05-21 10:58:38 +02:00