1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 11:37:44 +00:00
Commit graph

89 commits

Author SHA1 Message Date
yuankunzhang
c1eeed61f3 tr: restore default action of SIGPIPE 2025-07-04 22:44:20 +08:00
yuankunzhang
31a5b54dc6 tr: handle broken pipe gracefully 2025-07-02 22:26:11 +08:00
Dorian Peron
6e23d4e979 tests: patch tests to simplify imports 2025-07-01 03:36:46 +02:00
Sylvestre Ledru
aba6128fc1 l10n: port tr for translation + add french 2025-06-08 13:57:42 +02:00
Jan Verbeek
181844eafa tr: Flush BufWriter, fix double error context
Write errors led with `tr: tr: write error:`.
2025-03-31 13:46:33 +02:00
Sylvestre Ledru
a0179ea239 uutests: adjust the tests to use them 2025-03-28 21:40:31 +01:00
Daniel Hofstetter
df4dfea852 tests: replace run() with succeeds() or fails() 2025-03-09 16:53:56 +01:00
Sylvestre Ledru
18cb7dcf9e Use the new function fails_with_code
Done with
```
$ perl -0777 -i -pe 's/([ \t]+)\.fails\(\)[ \t]*\n[ \t]+\.no_stdout\(\)[ \t]*\n[ \t]+\.code_is\(([0-9]+)\);/\1.fails_with_code(\2)\n\1.no_stdout();/gs' *rs
$ sed -i -e "s|.fails()(.*).code_is(|.fails_with_code(|g" *rs
$ perl -0777 -i -pe 's/([ \t]+)\.fails\(\)[ \t]*\n[ \t]+\.code_is\(([0-9]+)\);/\1.fails_with_code(\2);/gs' *rs
$ perl -0777 -i -pe 's/([ \t]+)\.fails\(\)(.*?)[ \t]+\.code_is\(([0-9]+)\);/\1.fails_with_code(\3)\2;/gs' *rs
...
```
2025-03-01 17:26:20 +01:00
Dorian Peron
989b6ba2a0 tr: raise an error when there are two chars or more in an equivalence class 2025-02-19 16:15:40 +01:00
Sylvestre Ledru
3e4221a461 tr: generate an error for real if the input is a directory 2024-12-03 21:38:28 +01:00
Sylvestre Ledru
2ad3c45230
tr: generate an error if the input is a directory (#6855)
* tr: generate an error if the input is a directory

tested by tests/misc/read-errors

* tr: improve the test

* tr: take the commentinto account
2024-11-30 10:38:46 +01:00
Peng Zijun
75de5a0613
tr: Add ambiguous octal escape warning (#6886)
* tr: Add ambiguous octal escape warning, issue #6821

* tr: Make code cleaner
2024-11-28 09:14:16 +01:00
Andrew Liebenow
186d749e94 Replace commented-out code with TODO comments 2024-10-24 13:12:38 -05:00
Andrew Liebenow
e53dd5ffe1 tr: forbid non-numeric repeat counts 2024-10-12 03:44:46 -05:00
Andrew Liebenow
0bf5a68c54 tr: forbid backwards ranges 2024-10-12 01:40:05 -05:00
Andrew Liebenow
a696e609eb tr: correctly handle multibyte octal sequences 2024-10-12 00:53:54 -05:00
Ben Wiederhake
576374d0c6 tr: enable ignored tests that have already been fixed
Specifically:
- check_against_gnu_tr_tests_e: Yes, the test is about octal interpretation.
- check_against_gnu_tr_tests_ross_0a: Yes, the [Y*] generates multiple Y's, which causes conflicting replacements, which is why the operation is rejected.
- check_against_gnu_tr_tests_ross_0b: Same, plus a newline character was accidentally forgotten.
- check_against_gnu_tr_tests_fowler_1: Apparently the problem was fixed at some point.
2024-10-01 00:57:53 +02:00
Daniel Hofstetter
c6f29407b1 tr: enable ignored test on unix 2024-09-25 15:31:03 +02:00
Ben Wiederhake
a8b9e042e1 tr: properly determine trailing backslash
Fixes #6729.
2024-09-24 02:23:58 +02:00
Andrew Liebenow
08992ec6b3 tr: fix unescaped trailing backslash warning
This warning is being emitted whenever the input string ends with a
backslash, even if the backslash is escaped.
2024-09-18 17:29:11 -05:00
Ben Wiederhake
471f047a64 clippy: simplify code according to nightly 'byte_char_slices' lint
https://rust-lang.github.io/rust-clippy/master/index.html#/byte_char_slices
2024-07-18 15:59:36 +02:00
Dorian Péron
9ab7fa9806 tr: accept non utf8 arguments for sets 2024-07-18 13:00:32 +02:00
Dorian Péron
128335a24b tr: Raise error if set2 is too big on complemented class 2024-07-15 17:55:40 +02:00
Christian von Elm
866366a874 tr: correctly detected matched [:upper:]
tr detects if a class in set2 is matched by a class at the correct position in set1 after it has expanded everything before the class in both sets:

So

tr 'abcd[:upper:]' 'a-d[:lower:]'

should not fail
2024-06-30 14:24:00 +02:00
Christian von Elm
0ae6d43536
Refuse to translate if set2 contains more than one unique characters and set1 contains a character class (#6472)
* Refuse to translate if set2 contains > 1 unique characters
2024-06-22 19:30:39 +02:00
Christian von Elm
a46e4fd290 Refuse to translate if set1 is longer than set2 and set2 ends in a character class
tr [:lower:]a [:upper:]

fails in GNU tr, so print an error for tr too.
2024-06-15 12:38:19 +02:00
Christian von Elm
7e8aaa8ad4 tr: A [:lower:]/[:upper:] in set2 must be matched in set1
If there is a [:lower:] or [:upper:] in set2, then there must be a [:lower:] or [:upper:] at the
same logical position in set1

So

tr -t [:upper:] [:lower:] works
tr -t 1[:upper:] [:lower:] doesnt
2024-06-02 14:22:17 +02:00
Christian von Elm
0d1bde2879 tr: disallow classes besides [:upper:]/[:lower:] in set2 when translating
Fixes issue #6342
2024-05-23 22:06:57 +02:00
Jalil David Salamé Messina
ff1a03c284 tr: don't truncate when not translating
An additional issue was found while reviewing #6340, check [this thread][1]. A summary is:

- `tr` ignores the `-t`/`--truncate-set1` flag when not translating
- Not translating is defined as `-d` was passed, or one set was passed.

[1]: https://github.com/uutils/coreutils/pull/6340#discussion_r1590007053
2024-05-04 19:55:49 +02:00
Jalil David Salamé Messina
3c47f27698 tr: calculate complement set early
Fixes #6163 and adds a test to verify that a regression is not caused.

Instead of inverting the conditions to check (e.g. delete characters **not** present in set1) invert
set1 when passed the complement flag (`-c`, `-C`, `--complement`). This is done by calculating set1
then "inverting" it by subtracting from the "full" (universe) set (0..=u8::MAX).

This fixes issue 6163 because it was caused by a combination of the `-c` and `-t` flag. `-c` is the
abovementioned complement flag and `-t`/`--truncate-set1` truncates set1 to the length of set2. What
happened in issue 6163 is that `set1={b'Y'}` and `set2={b'Z'}`, when truncated set1 stays the same
and we proceed. The problem is GNU utils does not consider set1 to be `{b'Y'}`, but the complement
of `{b'Y'}`, that is `U \ {b'Y'}={0, 1, ..., b'X', b'Z', ...}`, thus it is truncated to `{0}`.

We can verify this by doing: `printf '\0' | tr -c -t Y Z`, which prints `Z` to stdout as expected.

Additionally, by calculating the complement of set1 we no longer need to consider the complement
flag when doing the translate operation, this allows us to delete a lot of code.
2024-05-04 19:55:49 +02:00
Ben Wiederhake
909c47886a tr+tests: remove unused spell-checker:disable 2024-04-30 18:28:20 +02:00
Ben Wiederhake
e9045be593 tr: fix order inside class [:blank:] 2024-03-29 00:55:34 +01:00
Ben Wiederhake
76a2f2128b tr: guard against regressions of class [:space:] 2024-03-29 00:50:33 +01:00
Ben Wiederhake
44310f426c tr: enable passing -t multiple times 2024-02-24 18:37:45 +01:00
Ben Wiederhake
268af90843 tr: enable passing -s multiple times 2024-02-24 18:37:45 +01:00
Ben Wiederhake
dc664006fe tr: enable passing -d multiple times 2024-02-23 11:58:22 +01:00
Ben Wiederhake
cad94a69be tr: prevent passing options in the wrong place
Note: This requires using the DEPRECATED item Command::trailing_var_arg
in clap. This is going to be another
[problem with clap](https://github.com/tertsdiepraam/uutils-args/blob/main/docs/design/problems_with_clap.md).
2024-02-23 11:58:22 +01:00
Ben Wiederhake
d9b6675bbf tr: enable passing -c multiple times 2024-02-23 11:58:18 +01:00
Ben Wiederhake
617f3a8b6f tr: when deleting and squeezing, never complement set2 2024-02-23 06:08:37 +01:00
Ben Wiederhake
48c4b57c97 tr: require second string argument when deleting and squeezing 2024-02-23 03:23:07 +01:00
BaherSalama
5603305e75
fix tr with any flag with more than 2 operands (#5952)
* fix tr

* add tests

* fix clippy

* fix clippy2

* do suggestions

* do suggestions

* remove mut

* tr: move var to block & remove its type

---------

Co-authored-by: Daniel Hofstetter <daniel.hofstetter@42dh.com>
2024-02-13 15:30:15 +01:00
Daniel Hofstetter
9995c637aa tr: fix intermittent test caused by pipe_in() 2024-02-08 07:25:09 +01:00
BaherSalama
5c2ae5be4f
fix tr with delete flag if more than 1 operand given (#5945)
* fix tr

* fix

* adding a test

* tr: rename test function

---------

Co-authored-by: Daniel Hofstetter <daniel.hofstetter@42dh.com>
2024-02-06 16:42:08 +01:00
Terts Diepraam
bc5b5e013a tr: operate on bytes instead of chars 2023-12-11 13:35:17 +01:00
Sylvestre Ledru
bfca6bf70f Add license headers on all files 2023-08-21 10:49:27 +02:00
Daniel Hofstetter
6988eb7ec6 tests: expand wildcard imports 2023-03-20 15:32:35 +01:00
Yang Hau
ec81a23afc tr: Remove the extra newline in stderr
closes #4301
2023-02-15 02:04:43 +08:00
Joining7943
1fadeb43b2 tests/util: Do not trim stderr in CmdResult::stderr_is. Add method stderr_trimmed_is.
Fix tests assert whitespace instead of trimming it. Disable some tests in `test_tr` because `tr`
produces too many newlines.
2023-01-22 14:56:19 +01:00
Terts Diepraam
9177cb7b24 all: add tests for usage error exit code 2022-09-10 20:59:42 +02:00
DevSabb
b8a3795d95
tr: fix octal interpretation of repeat count string (#3178)
* tr: fix octal interpretation of repeat count string

* tr: fix formatting errors

* tr: fix formatting issues 2

* tr: attempt to bypass spell check error

* tr: fix spell check errors attempt 2

* tr: formatting fixes

Co-authored-by: DevSabb <devsabb@local>
2022-02-25 12:11:53 +01:00