From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Johannes Sixt <j6t@kdbg.org>
Cc: git@vger.kernel.org, "Junio C Hamano" <gitster@pobox.com>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>,
"Anthony Ramine" <n.oxyde@gmail.com>,
"Ramsay Jones" <ramsay@ramsay1.demon.co.uk>
Subject: Re: [PATCH 6/6] wildmatch test: create & test files on disk in addition to in-memory
Date: Sun, 24 Dec 2017 12:06:09 +0100 [thread overview]
Message-ID: <874logs7vi.fsf@evledraar.gmail.com> (raw)
In-Reply-To: <8f4cdb23-8e2e-144a-1f70-99776b027166@kdbg.org>
On Sun, Dec 24 2017, Johannes Sixt jotted:
> Am 23.12.2017 um 22:30 schrieb Ævar Arnfjörð Bjarmason:
>> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
>> ---
>> a[]b | 0
>> t/t3070-wildmatch.sh | 336 ++++++++++++++++++++++++++++++++++++++++++++++++---
>> 2 files changed, 319 insertions(+), 17 deletions(-)
>> create mode 100644 a[]b
>>
>> diff --git a/a[]b b/a[]b
>> new file mode 100644
>> index 0000000000..e69de29bb2
>
> A big no-no! This file can't be created on Windows!
Urgh, that was a mistake of mine. Will be gone in v2.
>> diff --git a/t/t3070-wildmatch.sh b/t/t3070-wildmatch.sh
>> index 47b479e423..d423bb01f3 100755
>> --- a/t/t3070-wildmatch.sh
>> +++ b/t/t3070-wildmatch.sh
>> @@ -4,31 +4,146 @@ test_description='wildmatch tests'
>>
>> . ./test-lib.sh
>>
>> +create_test_file() {
>> + file=$1
>> +
>> + # `touch .` will succeed but obviously not do what we intend
>> + # here.
>> + test "$file" = "." && return 1
>> + # We cannot create a file with an empty filename.
>> + test "$file" = "" && return 1
>> + # The tests that are testing that e.g. foo//bar is matched by
>> + # foo/*/bar can't be tested on filesystems since there's no
>> + # way we're getting a double slash.
>> + echo "$file" | grep -q -F '//' && return 1
>> + # When testing the difference between foo/bar and foo/bar/ we
>> + # can't test the latter.
>> + echo "$file" | grep -q -E '/$' && return 1
>> +
>> + dirs=$(echo "$file" | sed -r 's!/[^/]+$!!')
>
> Booh! Booh! So many fork()s! ;)
>
> case "$file" in
> *//*)
> # The tests that are testing that e.g. foo//bar is matched by
> # foo/*/bar can't be tested on filesystems since there's no
> # way we're getting a double slash.
> return 1;;
> */)
> # When testing the difference between foo/bar and foo/bar/ we
> # can't test the latter.
> return 1;;
> esac
>
> dirs=${file%/*}
Thanks. Will fix.
>> +
>> + # We touch "./$file" instead of "$file" because even an
>> + # escaped "touch -- -" means something different.
>> + if test "$file" != "$dirs"
>> + then
>> + mkdir -p -- "$dirs" 2>/dev/null &&
>> + touch -- "./$file" 2>/dev/null &&
>> + return 0
>> + else
>> + touch -- "./$file" 2>/dev/null &&
>> + return 0
>> + fi
>> + return 1
>> +}
>> +
>> wildtest() {
>> - match_w_glob=$1
>> - match_w_globi=$2
>> - match_w_pathmatch=$3
>> - match_w_pathmatchi=$4
>> - text=$5
>> - pattern=$6
>> + if test "$#" = 6
>> + then
>> + # When test-wildmatch and git ls-files produce the same
>> + # result.
>> + match_w_glob=$1
>> + match_f_w_glob=$match_w_glob
>> + match_w_globi=$2
>> + match_f_w_globi=$match_w_globi
>> + match_w_pathmatch=$3
>> + match_f_w_pathmatch=$match_w_pathmatch
>> + match_w_pathmatchi=$4
>> + match_f_w_pathmatchi=$match_w_pathmatchi
>> + text=$5
>> + pattern=$6
>> + elif test "$#" = 10
>> + then
>> + match_w_glob=$1
>> + match_w_globi=$2
>> + match_w_pathmatch=$3
>> + match_w_pathmatchi=$4
>> + match_f_w_glob=$5
>> + match_f_w_globi=$6
>> + match_f_w_pathmatch=$7
>> + match_f_w_pathmatchi=$8
>> + text=$9
>> + pattern=$10
>> + fi
>>
>> + # $1: Case sensitive glob match: test-wildmatch
>> if test "$match_w_glob" = 1
>> then
>> - test_expect_success "wildmatch: match '$text' '$pattern'" "
>> + test_expect_success "wildmatch: match '$text' '$pattern'" "
>> test-wildmatch wildmatch '$text' '$pattern'
>> "
>> elif test "$match_w_glob" = 0
>> then
>> - test_expect_success "wildmatch: no match '$text' '$pattern'" "
>> + test_expect_success "wildmatch: no match '$text' '$pattern'" "
>> ! test-wildmatch wildmatch '$text' '$pattern'
>> "
>> else
>> test_expect_success "PANIC: Test framework error. Unknown matches value $match_w_glob" 'false'
>
> I think you can write this as 'say ...; exit 1'. See t0000*.
Thanks. Didn't see an existing idiom for this, will use that.
>> fi
>>
>> + # $1: Case sensitive glob match: ls-files
>> + if test "$match_f_w_glob" = 'E'
>> + then
>> + if create_test_file "$text"
>> + then
>> + test_expect_success "wildmatch(ls): match dies on '$pattern' '$text'" "
>> + test_when_finished \"
>> + rm -rf -- * &&
>
> Can we be a bit more careful with this rm -rf, please?
> There is only one similarly loose case in t/t7003-filter-branch.sh,
> and it is outside test_when_finished, i.e., it is well under control;
> this instance here inside test_when_finished is not.
I can create the files inside some subfolder, cd to that and then run
the ls-files there. It would also cover cases where we have pattern
matching text that starts with ".".
>> + git reset
>> + \" &&
>> + git add -A &&
>> + >expect.err &&
>> + printf '%s' '$text' >expect &&
>> + test_must_fail git --glob-pathspecs ls-files -z -- '$pattern'
>> + "
>> + else
>> + test_expect_failure "wildmatch(ls): match skip '$pattern' '$text'" 'false'
>> + fi
>> + elif test "$match_f_w_glob" = 1
>> + then
>> + if create_test_file "$text"
>> + then
>> + test_expect_success "wildmatch(ls): match '$pattern' '$text'" "
>> + test_when_finished \"
>> + rm -rf -- * &&
>> + git reset
>> + \" &&
>> + git add -A &&
>> + >expect.err &&
>> + printf '%s' '$text' >expect &&
>
> There are no single-quotes in any $text instances, right?
There's not, but maybe we should be more careful here and use here-docs.
>> + git --glob-pathspecs ls-files -z -- '$pattern' 2>actual.err | tr -d '\0' >actual &&
>
> If possible, do not put git commands in the upstream of a pipe.
> It does not detect failures.
Thanks, will split these up.
> Unfortunately, printf '%s\0' foo is not portable. If it were,
> you could omit the tr invocation alltogether.
>
>> + test_cmp expect.err actual.err &&
>> + test_cmp expect actual
>> + "
>> + else
>> + test_expect_failure "wildmatch(ls): match skip '$pattern' '$text'" 'false'
>> + fi
>
> -- Hannes
next prev parent reply other threads:[~2017-12-24 11:06 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-23 21:30 [PATCH 0/6] increase wildmatch test coverage Ævar Arnfjörð Bjarmason
2017-12-23 21:30 ` [PATCH 1/6] wildmatch test: indent with tabs, not spaces Ævar Arnfjörð Bjarmason
2017-12-23 21:30 ` [PATCH 2/6] wildmatch test: use more standard shell style Ævar Arnfjörð Bjarmason
2017-12-23 21:30 ` [PATCH 3/6] wildmatch test: use a paranoia pattern from nul_match() Ævar Arnfjörð Bjarmason
2017-12-23 21:30 ` [PATCH 4/6] wildmatch test: remove dead fnmatch() test code Ævar Arnfjörð Bjarmason
2017-12-23 21:30 ` [PATCH 5/6] wildmatch test: perform all tests under all wildmatch() modes Ævar Arnfjörð Bjarmason
2017-12-23 21:30 ` [PATCH 6/6] wildmatch test: create & test files on disk in addition to in-memory Ævar Arnfjörð Bjarmason
2017-12-24 9:24 ` Johannes Sixt
2017-12-24 11:06 ` Ævar Arnfjörð Bjarmason [this message]
2017-12-24 11:51 ` Johannes Sixt
2017-12-25 0:28 ` [PATCH v2 0/7] increase wildmatch test coverage Ævar Arnfjörð Bjarmason
2017-12-28 22:48 ` Junio C Hamano
2017-12-28 23:49 ` Ævar Arnfjörð Bjarmason
2017-12-28 23:28 ` [PATCH v3 " Ævar Arnfjörð Bjarmason
2017-12-28 23:28 ` [PATCH v3 1/7] wildmatch test: indent with tabs, not spaces Ævar Arnfjörð Bjarmason
2017-12-28 23:28 ` [PATCH v3 2/7] wildmatch test: use more standard shell style Ævar Arnfjörð Bjarmason
2017-12-28 23:28 ` [PATCH v3 3/7] wildmatch test: don't try to vertically align our output Ævar Arnfjörð Bjarmason
2017-12-28 23:28 ` [PATCH v3 4/7] wildmatch test: use a paranoia pattern from nul_match() Ævar Arnfjörð Bjarmason
2017-12-28 23:28 ` [PATCH v3 5/7] wildmatch test: remove dead fnmatch() test code Ævar Arnfjörð Bjarmason
2017-12-28 23:28 ` [PATCH v3 6/7] wildmatch test: perform all tests under all wildmatch() modes Ævar Arnfjörð Bjarmason
2017-12-28 23:28 ` [PATCH v3 7/7] wildmatch test: create & test files on disk in addition to in-memory Ævar Arnfjörð Bjarmason
2017-12-29 0:16 ` Ævar Arnfjörð Bjarmason
2017-12-25 0:28 ` [PATCH v2 1/7] wildmatch test: indent with tabs, not spaces Ævar Arnfjörð Bjarmason
2017-12-25 0:28 ` [PATCH v2 2/7] wildmatch test: use more standard shell style Ævar Arnfjörð Bjarmason
2017-12-25 0:28 ` [PATCH v2 3/7] wildmatch test: don't try to vertically align our output Ævar Arnfjörð Bjarmason
2017-12-25 0:28 ` [PATCH v2 4/7] wildmatch test: use a paranoia pattern from nul_match() Ævar Arnfjörð Bjarmason
2017-12-25 0:28 ` [PATCH v2 5/7] wildmatch test: remove dead fnmatch() test code Ævar Arnfjörð Bjarmason
2017-12-25 0:28 ` [PATCH v2 6/7] wildmatch test: perform all tests under all wildmatch() modes Ævar Arnfjörð Bjarmason
2017-12-28 20:28 ` Junio C Hamano
2017-12-25 0:28 ` [PATCH v2 7/7] wildmatch test: create & test files on disk in addition to in-memory Ævar Arnfjörð Bjarmason
2017-12-25 9:26 ` Johannes Sixt
2017-12-27 19:07 ` Junio C Hamano
2018-01-03 13:02 ` Adam Dinwoodie
2018-01-03 13:31 ` Ævar Arnfjörð Bjarmason
2018-01-03 14:41 ` Adam Dinwoodie
2018-01-03 19:14 ` Ævar Arnfjörð Bjarmason
2018-01-04 11:50 ` Adam Dinwoodie
2018-01-04 19:26 ` [PATCH v4 0/7] increase wildmatch test coverage Ævar Arnfjörð Bjarmason
2018-01-30 21:21 ` [PATCH v5 00/10] " Ævar Arnfjörð Bjarmason
2018-01-30 21:21 ` [PATCH v5 01/10] wildmatch test: indent with tabs, not spaces Ævar Arnfjörð Bjarmason
2018-01-30 21:21 ` [PATCH v5 02/10] wildmatch test: use more standard shell style Ævar Arnfjörð Bjarmason
2018-01-30 21:21 ` [PATCH v5 03/10] wildmatch test: don't try to vertically align our output Ævar Arnfjörð Bjarmason
2018-01-30 21:21 ` [PATCH v5 04/10] wildmatch test: use a paranoia pattern from nul_match() Ævar Arnfjörð Bjarmason
2018-01-30 21:21 ` [PATCH v5 05/10] wildmatch test: remove dead fnmatch() test code Ævar Arnfjörð Bjarmason
2018-01-30 21:21 ` [PATCH v5 06/10] wildmatch test: use test_must_fail, not ! for test-wildmatch Ævar Arnfjörð Bjarmason
2018-01-30 21:21 ` [PATCH v5 07/10] wildmatch test: perform all tests under all wildmatch() modes Ævar Arnfjörð Bjarmason
2018-01-30 21:21 ` [PATCH v5 08/10] wildmatch test: create & test files on disk in addition to in-memory Ævar Arnfjörð Bjarmason
2018-01-30 21:21 ` [PATCH v5 09/10] test-lib: add an EXPENSIVE_ON_WINDOWS prerequisite Ævar Arnfjörð Bjarmason
2018-01-30 21:21 ` [PATCH v5 10/10] wildmatch test: mark test as EXPENSIVE_ON_WINDOWS Ævar Arnfjörð Bjarmason
2018-01-04 19:26 ` [PATCH v4 1/7] wildmatch test: indent with tabs, not spaces Ævar Arnfjörð Bjarmason
2018-01-04 19:26 ` [PATCH v4 2/7] wildmatch test: use more standard shell style Ævar Arnfjörð Bjarmason
2018-01-04 19:26 ` [PATCH v4 3/7] wildmatch test: don't try to vertically align our output Ævar Arnfjörð Bjarmason
2018-01-04 19:26 ` [PATCH v4 4/7] wildmatch test: use a paranoia pattern from nul_match() Ævar Arnfjörð Bjarmason
2018-01-04 19:26 ` [PATCH v4 5/7] wildmatch test: remove dead fnmatch() test code Ævar Arnfjörð Bjarmason
2018-01-04 19:26 ` [PATCH v4 6/7] wildmatch test: perform all tests under all wildmatch() modes Ævar Arnfjörð Bjarmason
2018-01-04 19:26 ` [PATCH v4 7/7] wildmatch test: create & test files on disk in addition to in-memory Ævar Arnfjörð Bjarmason
2018-01-05 16:41 ` Johannes Schindelin
2018-01-05 19:08 ` Ævar Arnfjörð Bjarmason
2018-01-05 20:48 ` Johannes Schindelin
2018-01-05 22:12 ` [PATCH v4 8/7] wildmatch test: skip file creation tests on Windows proper Ævar Arnfjörð Bjarmason
2018-01-05 23:13 ` Junio C Hamano
2018-01-06 12:51 ` Johannes Schindelin
2018-01-06 13:32 ` Ævar Arnfjörð Bjarmason
2018-01-06 20:46 ` Johannes Schindelin
2018-01-08 12:46 ` Johannes Schindelin
2018-01-08 18:49 ` Junio C Hamano
2018-01-07 2:51 ` Duy Nguyen
2018-01-08 12:25 ` Johannes Schindelin
2018-01-10 9:07 ` Duy Nguyen
2018-01-10 10:38 ` Adam Dinwoodie
2018-01-10 10:52 ` Duy Nguyen
2018-01-10 20:24 ` Johannes Schindelin
2018-01-11 9:25 ` Duy Nguyen
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=874logs7vi.fsf@evledraar.gmail.com \
--to=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=j6t@kdbg.org \
--cc=n.oxyde@gmail.com \
--cc=pclouds@gmail.com \
--cc=ramsay@ramsay1.demon.co.uk \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.