From: "Sam James" <sam@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/gentoo-functions:master commit in: /
Date: Mon, 8 Jul 2024 02:31:17 +0000 (UTC) [thread overview]
Message-ID: <1720395507.8ac82c7c7923954765b994de841f82ec2d5456b7.sam@gentoo> (raw)
commit: 8ac82c7c7923954765b994de841f82ec2d5456b7
Author: Kerin Millar <kfm <AT> plushkava <DOT> net>
AuthorDate: Sun Jul 7 23:16:44 2024 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Jul 7 23:38:27 2024 +0000
URL: https://gitweb.gentoo.org/proj/gentoo-functions.git/commit/?id=8ac82c7c
Correct the implementation of contains_all()
It was not translating IFS to FS correctly. Have it do so and extend the
test suite accordingly.
Signed-off-by: Kerin Millar <kfm <AT> plushkava.net>
functions.sh | 36 +++++++++++++----
test-functions | 126 ++++++++++++++++++++++++++++++++++++++++++---------------
2 files changed, 122 insertions(+), 40 deletions(-)
diff --git a/functions.sh b/functions.sh
index cfaddc3..ccd0d1d 100644
--- a/functions.sh
+++ b/functions.sh
@@ -61,21 +61,41 @@ chdir()
#
contains_all()
{
- [ "$#" -ge 2 ] && IFS=${IFS} awk -f - -- "$@" <<-'EOF'
+ # shellcheck disable=2097,2098
+ [ "$#" -ge 2 ] &&
+ IFS=${IFS} awk -v ifs_set=${IFS+1} -f - -- "$@" <<-'EOF'
BEGIN {
- ifs = ENVIRON["IFS"]
haystack = ARGV[1]
argc = ARGC
ARGC = 1
+ if (ifs_set) {
+ ifs = ENVIRON["IFS"]
+ } else {
+ ifs = " \t\n"
+ }
+ # Translate IFS to FS, in accordance with section 2.6.5.
if (length(ifs) == 0) {
FS = "^"
- } else if (length(ifs) != 3 || ifs ~ /[^ \t\n]/) {
- # Split by the first character of IFS.
- FS = "[" substr(ifs, 1, 1) "]"
} else {
- # Mimic default field splitting behaviour, per section 2.6.5.
- FS = "[ \t\n]+"
- sub("^" FS, "", haystack)
+ whitespace = ""
+ FS = "("
+ for (i = 1; i <= length(ifs); i++) {
+ char = substr(ifs, i, 1)
+ if (seen[char]++) {
+ continue
+ } else if (char ~ /[ \t\n]/) {
+ whitespace = whitespace char
+ FS = FS "[" char "]+|"
+ } else {
+ FS = FS "[" char "]|"
+ }
+ }
+ sub(/\|$/, "", FS)
+ FS = FS ")"
+ }
+ # Leading whitespace characters must be removed.
+ if (length(whitespace) > 0) {
+ sub("^[" whitespace "]+", "", haystack)
}
# In sh, fields are terminated, not separated.
sub(FS "$", "", haystack)
diff --git a/test-functions b/test-functions
index 59c0b29..dab0aea 100755
--- a/test-functions
+++ b/test-functions
@@ -721,43 +721,105 @@ test_substr() {
test_contains_all() {
set -- \
- ge 1 N/A N/A N/A N/A \
- ge 1 'foo bar' '' N/A N/A \
- ge 1 'foo bar' '' ' ' N/A \
- ge 1 'foo bar' '' ' bar' N/A \
- ge 1 'foo bar' '' ' bar' N/A \
- ge 1 'foo bar' '' 'foo ' N/A \
- ge 1 'foo bar' '' 'foo bar' N/A \
- ge 1 'foo bar' ' ' '' N/A \
- ge 1 'foo bar' ' ' ' ' N/A \
- ge 1 'foo bar' ' ' N/A N/A \
- ge 1 'foo bar' ' bar' '' N/A \
- ge 1 'foo bar' ' bar' N/A N/A \
- ge 1 'foo bar' 'foo ' '' N/A \
- ge 1 'foo bar' 'foo ' ' bar' N/A \
- ge 1 'foo bar' 'foo ' N/A N/A \
- ge 1 'foo bar' 'foo bar' '' N/A \
- ge 1 'foo bar' 'foo bar' N/A N/A \
- ge 1 'foo bar' N/A N/A N/A \
- ge 1 'foo bar' bar foo '' \
- ge 1 'foo bar' bar foo ' ' \
- ge 1 'foo bar' baz bar foo \
- ge 1 'foo bar' fo ba N/A \
- ge 1 'foo bar' foo bar '' \
- ge 1 'foo bar' foo bar ' ' \
- ge 1 'foo bar' foo bar baz \
- ge 1 'foo bar' o a N/A \
- ge 1 'foo bar' oo ar N/A \
- eq 0 'foo bar' foo bar N/A \
- eq 0 'foo bar' bar foo N/A
+ ge 1 default N/A N/A N/A N/A \
+ ge 1 default ' foo bar ' '' N/A N/A \
+ ge 1 default ' foo bar ' '' ' ' N/A \
+ ge 1 default ' foo bar ' '' ' bar' N/A \
+ ge 1 default ' foo bar ' '' 'foo ' N/A \
+ ge 1 default ' foo bar ' '' 'foo bar' N/A \
+ ge 1 default ' foo bar ' ' ' '' N/A \
+ ge 1 default ' foo bar ' ' ' ' ' N/A \
+ ge 1 default ' foo bar ' ' ' N/A N/A \
+ ge 1 default ' foo bar ' ' bar' '' N/A \
+ ge 1 default ' foo bar ' ' bar' N/A N/A \
+ ge 1 default ' foo bar ' 'foo ' '' N/A \
+ ge 1 default ' foo bar ' 'foo ' ' bar' N/A \
+ ge 1 default ' foo bar ' 'foo ' N/A N/A \
+ ge 1 default ' foo bar ' 'foo bar' '' N/A \
+ ge 1 default ' foo bar ' 'foo bar' N/A N/A \
+ ge 1 default ' foo bar ' N/A N/A N/A \
+ ge 1 default ' foo bar ' bar foo '' \
+ ge 1 default ' foo bar ' bar foo ' ' \
+ ge 1 default ' foo bar ' baz bar foo \
+ ge 1 default ' foo bar ' fo ba N/A \
+ ge 1 default ' foo bar ' foo bar '' \
+ ge 1 default ' foo bar ' foo bar ' ' \
+ ge 1 default ' foo bar ' foo bar baz \
+ ge 1 default ' foo bar ' o a N/A \
+ ge 1 default ' foo bar ' oo ar N/A \
+ eq 0 default ' foo bar ' foo bar N/A \
+ eq 0 default ' foo bar ' bar foo N/A \
+ ge 1 ', ' N/A N/A N/A N/A \
+ ge 1 ', ' ' foo bar ' '' N/A N/A \
+ ge 1 ', ' ' foo bar ' '' ' ' N/A \
+ ge 1 ', ' ' foo ,bar, ' '' ',' N/A \
+ ge 1 ', ' ' foo bar ' '' ' bar' N/A \
+ ge 1 ', ' ' foo ,bar ' '' ',bar' N/A \
+ ge 1 ', ' ' foo bar ' '' 'foo ' N/A \
+ ge 1 ', ' ' foo, bar ' '' 'foo,' N/A \
+ ge 1 ', ' ' foo bar ' '' 'foo bar' N/A \
+ ge 1 ', ' ' foo bar ' ' ' '' N/A \
+ ge 1 ', ' ' foo,bar, ' ',' '' N/A \
+ ge 1 ', ' ' foo bar ' ' ' ' ' N/A \
+ ge 1 ', ' ',foo,,bar,' ',' ',' N/A \
+ ge 1 ', ' ' foo bar ' ' ' N/A N/A \
+ ge 1 ', ' ',foo,,bar,' ',' N/A N/A \
+ ge 1 ', ' ' foo bar ' ' bar' '' N/A \
+ ge 1 ', ' 'foo,bar,' ',bar' '' N/A \
+ ge 1 ', ' ' foo bar ' ' bar' N/A N/A \
+ ge 1 ', ' ',foo,,bar,' ',bar' N/A N/A \
+ ge 1 ', ' ' foo bar ' 'foo ' '' N/A \
+ ge 1 ', ' 'foo,bar,' 'foo,' '' N/A \
+ ge 1 ', ' ' foo bar ' 'foo ' ' bar' N/A \
+ ge 1 ', ' ',foo,,bar,' 'foo,' ',bar' N/A \
+ ge 1 ', ' ' foo bar ' 'foo ' N/A N/A \
+ ge 1 ', ' ',foo,,bar,' 'foo,' N/A N/A \
+ ge 1 ', ' ' foo bar ' 'foo bar' '' N/A \
+ ge 1 ', ' 'foo,bar,' 'foo,bar' '' N/A \
+ ge 1 ', ' ' foo bar ' 'foo bar' N/A N/A \
+ ge 1 ', ' ',foo,,bar,' 'foo,,bar' N/A N/A \
+ ge 1 ', ' ' foo bar ' N/A N/A N/A \
+ ge 1 ', ' ' foo bar ' bar foo '' \
+ ge 1 ', ' ' foo,bar ' bar foo '' \
+ ge 1 ', ' ' foo bar ' bar foo ' ' \
+ ge 1 ', ' ' foo,,bar ' bar foo ',' \
+ ge 1 ', ' ' foo bar ' baz bar foo \
+ ge 1 ', ' ',foo,,bar,' baz bar foo \
+ ge 1 ', ' ' foo bar ' fo ba N/A \
+ ge 1 ', ' ',foo,,bar,' fo ba N/A \
+ ge 1 ', ' ' foo bar ' foo bar '' \
+ ge 1 ', ' ' foo,bar ' foo bar '' \
+ ge 1 ', ' ' foo bar ' foo bar ' ' \
+ ge 1 ', ' ' foo,,bar ' foo bar ',' \
+ ge 1 ', ' ' foo bar ' foo bar baz \
+ ge 1 ', ' ',foo,,bar,' foo bar baz \
+ ge 1 ', ' ' foo bar ' o a N/A \
+ ge 1 ', ' ',foo,,bar,' o a N/A \
+ ge 1 ', ' ' foo bar ' oo ar N/A \
+ ge 1 ', ' ',foo,,bar,' oo ar N/A \
+ eq 0 ', ' ' foo bar ' foo bar N/A \
+ eq 0 ', ' ',foo bar,' foo bar N/A \
+ eq 0 ', ' ' foo,,bar ' foo bar N/A \
+ eq 0 ', ' ',foo,,bar,' foo bar N/A \
+ eq 0 ', ' ' foo bar ' bar foo N/A \
+ eq 0 ', ' ',foo bar,' bar foo N/A \
+ eq 0 ', ' ' foo,,bar ' bar foo N/A \
+ eq 0 ', ' ',foo,,bar,' bar foo N/A
callback() {
shift
- test_description="contains_all $(quote_args "$@")"
- contains_all "$@"
+ ifs=$1
+ shift
+ if [ "${ifs}" = "default" ]; then
+ test_description="contains_all $(quote_args "$@")"
+ contains_all "$@"
+ else
+ test_description="IFS='${ifs}' contains_all $(quote_args "$@")"
+ IFS=${ifs} contains_all "$@"
+ fi
}
- iterate_tests 6 "$@"
+ iterate_tests 7 "$@"
}
test_contains_any() {
next reply other threads:[~2024-07-08 2:31 UTC|newest]
Thread overview: 281+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-08 2:31 Sam James [this message]
-- strict thread matches above, loose matches on Subject: below --
2024-10-05 7:25 [gentoo-commits] proj/gentoo-functions:master commit in: / Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-10-05 4:15 Sam James
2024-08-11 10:23 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-11 10:11 Sam James
2024-08-05 20:39 Sam James
2024-08-05 20:39 Sam James
2024-08-05 2:03 Sam James
2024-08-05 2:02 Sam James
2024-08-05 2:02 Sam James
2024-08-05 2:02 Sam James
2024-08-05 2:02 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-08-02 23:14 Sam James
2024-07-08 3:00 Sam James
2024-07-08 2:31 Sam James
2024-07-07 5:55 Sam James
2024-07-07 5:55 Sam James
2024-07-07 5:55 Sam James
2024-07-07 5:55 Sam James
2024-07-07 5:55 Sam James
2024-07-07 5:55 Sam James
2024-07-07 5:55 Sam James
2024-07-07 5:55 Sam James
2024-07-07 5:55 Sam James
2024-07-07 5:55 Sam James
2024-06-25 4:06 Sam James
2024-06-25 4:06 Sam James
2024-06-25 4:06 Sam James
2024-06-25 4:06 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-06-21 13:14 Sam James
2024-05-24 6:05 Sam James
2024-05-24 1:18 Sam James
2024-05-24 1:18 Sam James
2024-05-22 1:12 Sam James
2024-05-22 1:12 Sam James
2024-05-22 1:12 Sam James
2024-05-22 1:12 Sam James
2024-05-22 1:12 Sam James
2024-05-22 1:12 Sam James
2024-05-22 1:12 Sam James
2024-05-22 1:12 Sam James
2024-05-22 1:12 Sam James
2024-05-19 15:27 Sam James
2024-05-19 15:27 Sam James
2024-05-19 15:27 Sam James
2024-05-19 15:27 Sam James
2024-05-18 16:07 Sam James
2024-05-18 16:06 Sam James
2024-05-18 16:06 Sam James
2024-05-18 15:34 Sam James
2024-05-18 15:32 Sam James
2024-05-18 15:32 Sam James
2024-05-18 14:04 Sam James
2024-05-18 14:04 Sam James
2024-05-18 14:04 Sam James
2024-05-18 14:04 Sam James
2024-05-18 14:04 Sam James
2024-05-18 14:04 Sam James
2024-05-17 4:03 Sam James
2024-05-17 4:03 Sam James
2024-05-17 4:03 Sam James
2024-05-17 4:03 Sam James
2024-05-17 4:03 Sam James
2024-05-17 4:03 Sam James
2024-05-17 4:03 Sam James
2024-05-17 4:03 Sam James
2024-05-17 4:03 Sam James
2024-05-17 4:03 Sam James
2024-05-17 4:03 Sam James
2024-05-17 4:03 Sam James
2024-05-17 4:03 Sam James
2024-05-15 10:28 Sam James
2024-05-15 10:28 Sam James
2024-05-14 0:18 Sam James
2024-05-14 0:15 Sam James
2024-05-14 0:12 Sam James
2024-05-14 0:12 Sam James
2024-05-14 0:08 Sam James
2024-05-14 0:08 Sam James
2024-05-14 0:05 Sam James
2024-05-14 0:05 Sam James
2024-05-14 0:05 Sam James
2024-05-14 0:05 Sam James
2024-05-14 0:05 Sam James
2024-02-16 21:35 Sam James
2023-06-11 16:47 Sam James
2023-06-11 16:47 Sam James
2023-06-11 16:47 Sam James
2023-06-11 16:47 Sam James
2023-06-11 16:47 Sam James
2023-06-11 16:47 Sam James
2023-06-11 16:47 Sam James
2023-06-11 16:47 Sam James
2023-06-10 7:23 Sam James
2023-06-10 7:23 Sam James
2023-06-10 6:04 Sam James
2023-06-10 4:22 Sam James
2023-06-10 4:22 Sam James
2023-06-10 4:22 Sam James
2023-06-10 4:22 Sam James
2023-06-10 4:22 Sam James
2023-06-10 4:22 Sam James
2023-06-10 4:22 Sam James
2023-06-10 4:22 Sam James
2023-06-10 4:22 Sam James
2023-06-10 4:22 Sam James
2023-06-09 11:17 Sam James
2023-06-09 11:11 Sam James
2023-06-09 11:02 Sam James
2023-06-09 11:02 Sam James
2023-06-09 11:02 Sam James
2023-06-09 11:02 Sam James
2023-06-07 11:13 Sam James
2023-06-07 11:13 Sam James
2023-06-07 11:13 Sam James
2023-06-07 11:13 Sam James
2023-06-07 11:13 Sam James
2023-06-07 11:13 Sam James
2023-06-07 11:13 Sam James
2023-06-07 11:13 Sam James
2023-06-07 11:13 Sam James
2023-02-19 16:14 Sam James
2023-02-19 16:14 Sam James
2023-02-19 16:14 Sam James
2023-02-19 16:14 Sam James
2023-02-19 16:14 Sam James
2023-02-19 16:14 Sam James
2023-02-19 16:14 Sam James
2023-02-19 16:14 Sam James
2023-02-19 16:14 Sam James
2023-02-17 7:44 Sam James
2023-02-17 7:44 Sam James
2023-02-17 7:44 Sam James
2023-02-17 1:33 Sam James
2023-02-17 1:33 Sam James
2023-02-17 1:33 Sam James
2023-02-15 8:18 Sam James
2023-02-15 7:48 Sam James
2023-02-15 7:46 Sam James
2023-02-15 7:46 Sam James
2023-02-15 7:46 Sam James
2023-02-15 7:46 Sam James
2023-02-15 7:46 Sam James
2023-02-15 7:46 Sam James
2023-02-15 2:24 Sam James
2023-02-15 2:24 Sam James
2023-02-15 2:24 Sam James
2023-02-14 3:40 Sam James
2023-02-14 3:40 Sam James
2023-02-14 3:40 Sam James
2023-02-14 3:40 Sam James
2023-02-14 0:09 Sam James
2023-02-14 0:09 Sam James
2023-02-13 21:37 Sam James
2023-02-13 21:37 Sam James
2023-02-13 21:37 Sam James
2023-02-13 21:37 Sam James
2023-02-13 21:37 Sam James
2023-02-13 21:37 Sam James
2023-02-13 21:37 Sam James
2023-02-13 21:37 Sam James
2023-02-12 18:53 Sam James
2023-02-12 18:53 Sam James
2023-02-12 6:53 Sam James
2023-02-12 6:53 Sam James
2023-02-12 6:53 Sam James
2023-02-11 1:43 Sam James
2023-02-11 1:43 Sam James
2023-02-10 6:09 Sam James
2023-02-10 6:09 Sam James
2023-02-10 6:09 Sam James
2023-02-09 3:54 Sam James
2023-02-09 3:54 Sam James
2023-02-08 3:37 Sam James
2023-02-08 1:06 Sam James
2023-02-08 0:03 Sam James
2023-02-08 0:03 Sam James
2023-02-07 23:47 Sam James
2023-02-07 23:42 Sam James
2023-02-07 23:42 Sam James
2023-02-07 23:42 Sam James
2023-02-07 23:42 Sam James
2023-02-07 1:08 Sam James
2023-02-07 1:08 Sam James
2023-02-06 13:47 Sam James
2023-02-06 4:32 Sam James
2023-02-06 4:23 Sam James
2023-02-06 4:19 Sam James
2023-02-06 4:10 Sam James
2023-02-06 4:10 Sam James
2023-02-06 3:59 Sam James
2023-02-06 3:59 Sam James
2023-02-06 3:59 Sam James
2022-07-30 5:48 Sam James
2022-07-29 2:03 Sam James
2022-07-29 2:03 Sam James
2022-07-29 2:03 Sam James
2021-08-30 21:14 Mike Gilbert
2021-08-30 21:14 Mike Gilbert
2020-11-19 18:20 Mike Gilbert
2020-11-19 18:20 Mike Gilbert
2020-11-19 18:20 Mike Gilbert
2020-01-26 23:19 Mike Gilbert
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1720395507.8ac82c7c7923954765b994de841f82ec2d5456b7.sam@gentoo \
--to=sam@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox