Hi Ævar, On Sat, 6 Jan 2018, Ævar Arnfjörð Bjarmason wrote: > Can you please provide me with the output of the test under -v -x -d > from github.com:avar/git.git wildmatch-refactor-8 branch? With -v -x -i: -- snip -- [...] expecting success: printf '%s' '?a?b' >expect && git --glob-pathspecs ls-files -z -- '\??\?b' >actual.raw 2>actual.err && tr -d '\0' actual && >expect.err && test_cmp expect.err actual.err && test_cmp expect actual ++ printf %s '?a?b' ++ git --glob-pathspecs ls-files -z -- '\??\?b' + test_eval_ret_=128 + want_trace + test t = t + test t = t + set +x error: last command exited with $?=128 not ok 734 - wildmatch(ls): match '\??\?b' '?a?b' # # printf '%s' '?a?b' >expect && # git --glob-pathspecs ls-files -z # -- '\??\?b' >actual.raw # 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # real 2m9.127s user 0m10.026s sys 1m0.617s -- snap -- and -- snip -- $ cat ./trash\ directory.t3070-wildmatch/actual.err fatal: Invalid path '/??': No such file or directory -- snap -- As to the speed: -- snip -- # still have 144 known breakage(s) # failed 28 among remaining 1746 test(s) 1..1890 real 5m55.162s user 0m26.396s sys 2m34.152s -- snap -- ... seems to be in the same ballpark. You are just leaning way too heavily on Unix shell scripting. FWIW the breakages are: -- snip -- not ok 734 - wildmatch(ls): match '\??\?b' '?a?b' # # printf '%s' '?a?b' >expect && # git --glob-pathspecs ls-files -z # -- '\??\?b' >actual.raw # 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 735 - iwildmatch: match '?a?b' '\??\?b' not ok 736 - iwildmatch(ls): match '\??\?b' '?a?b' # # printf '%s' '?a?b' >expect && # git --glob-pathspecs # --icase-pathspecs ls-files -z -- # '\??\?b' >actual.raw 2>actual.err # && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 737 - pathmatch: match '?a?b' '\??\?b' not ok 738 - pathmatch(ls): match '\??\?b' '?a?b' # # printf '%s' '?a?b' >expect && # git ls-files -z -- '\??\?b' # >actual.raw 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 739 - ipathmatch: match '?a?b' '\??\?b' not ok 740 - ipathmatch(ls): match '\??\?b' '?a?b' # # printf '%s' '?a?b' >expect && # git --icase-pathspecs ls-files -z # -- '\??\?b' >actual.raw # 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 741 - cleanup after previous file test ok 742 - setup wildtest file test for abc ok 743 - wildmatch: match 'abc' '\a\b\c' not ok 744 - wildmatch(ls): match '\a\b\c' 'abc' # # printf '%s' 'abc' >expect && # git --glob-pathspecs ls-files -z # -- '\a\b\c' >actual.raw # 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 745 - iwildmatch: match 'abc' '\a\b\c' not ok 746 - iwildmatch(ls): match '\a\b\c' 'abc' # # printf '%s' 'abc' >expect && # git --glob-pathspecs # --icase-pathspecs ls-files -z -- # '\a\b\c' >actual.raw 2>actual.err # && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 747 - pathmatch: match 'abc' '\a\b\c' not ok 748 - pathmatch(ls): match '\a\b\c' 'abc' # # printf '%s' 'abc' >expect && # git ls-files -z -- '\a\b\c' # >actual.raw 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 749 - ipathmatch: match 'abc' '\a\b\c' not ok 750 - ipathmatch(ls): match '\a\b\c' 'abc' # # printf '%s' 'abc' >expect && # git --icase-pathspecs ls-files -z # -- '\a\b\c' >actual.raw # 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # [...] not ok 964 - wildmatch(ls): match '[\-_]' '-' # # printf '%s' '-' >expect && # git --glob-pathspecs ls-files -z # -- '[\-_]' >actual.raw # 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 965 - iwildmatch: match '-' '[\-_]' not ok 966 - iwildmatch(ls): match '[\-_]' '-' # # printf '%s' '-' >expect && # git --glob-pathspecs # --icase-pathspecs ls-files -z -- # '[\-_]' >actual.raw 2>actual.err # && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 967 - pathmatch: match '-' '[\-_]' not ok 968 - pathmatch(ls): match '[\-_]' '-' # # printf '%s' '-' >expect && # git ls-files -z -- '[\-_]' # >actual.raw 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 969 - ipathmatch: match '-' '[\-_]' not ok 970 - ipathmatch(ls): match '[\-_]' '-' # # printf '%s' '-' >expect && # git --icase-pathspecs ls-files -z # -- '[\-_]' >actual.raw # 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 971 - cleanup after previous file test ok 972 - setup wildtest file test for ] ok 973 - wildmatch: match ']' '[\]]' not ok 974 - wildmatch(ls): match '[\]]' ']' # # printf '%s' ']' >expect && # git --glob-pathspecs ls-files -z # -- '[\]]' >actual.raw 2>actual.err # && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 975 - iwildmatch: match ']' '[\]]' not ok 976 - iwildmatch(ls): match '[\]]' ']' # # printf '%s' ']' >expect && # git --glob-pathspecs # --icase-pathspecs ls-files -z -- # '[\]]' >actual.raw 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 977 - pathmatch: match ']' '[\]]' not ok 978 - pathmatch(ls): match '[\]]' ']' # # printf '%s' ']' >expect && # git ls-files -z -- '[\]]' # >actual.raw 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 979 - ipathmatch: match ']' '[\]]' not ok 980 - ipathmatch(ls): match '[\]]' ']' # # printf '%s' ']' >expect && # git --icase-pathspecs ls-files -z # -- '[\]]' >actual.raw 2>actual.err # && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # [...] not ok 1284 - wildmatch(ls): match '[A-\\]' 'G' # # printf '%s' 'G' >expect && # git --glob-pathspecs ls-files -z # -- '[A-\\]' >actual.raw # 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 1285 - iwildmatch: match 'G' '[A-\\]' not ok 1286 - iwildmatch(ls): match '[A-\\]' 'G' # # printf '%s' 'G' >expect && # git --glob-pathspecs # --icase-pathspecs ls-files -z -- # '[A-\\]' >actual.raw 2>actual.err # && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 1287 - pathmatch: match 'G' '[A-\\]' not ok 1288 - pathmatch(ls): match '[A-\\]' 'G' # # printf '%s' 'G' >expect && # git ls-files -z -- '[A-\\]' # >actual.raw 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 1289 - ipathmatch: match 'G' '[A-\\]' not ok 1290 - ipathmatch(ls): match '[A-\\]' 'G' # # printf '%s' 'G' >expect && # git --icase-pathspecs ls-files -z # -- '[A-\\]' >actual.raw # 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # [...] not ok 1374 - wildmatch(ls): match '[\1-\3]' '2' # # printf '%s' '2' >expect && # git --glob-pathspecs ls-files -z # -- '[\1-\3]' >actual.raw # 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 1375 - iwildmatch: match '2' '[\1-\3]' not ok 1376 - iwildmatch(ls): match '[\1-\3]' '2' # # printf '%s' '2' >expect && # git --glob-pathspecs # --icase-pathspecs ls-files -z -- # '[\1-\3]' >actual.raw 2>actual.err # && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 1377 - pathmatch: match '2' '[\1-\3]' not ok 1378 - pathmatch(ls): match '[\1-\3]' '2' # # printf '%s' '2' >expect && # git ls-files -z -- '[\1-\3]' # >actual.raw 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 1379 - ipathmatch: match '2' '[\1-\3]' not ok 1380 - ipathmatch(ls): match '[\1-\3]' '2' # # printf '%s' '2' >expect && # git --icase-pathspecs ls-files -z # -- '[\1-\3]' >actual.raw # 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # [...] not ok 1424 - wildmatch(ls): match '[[-\]]' ']' # # printf '%s' ']' >expect && # git --glob-pathspecs ls-files -z # -- '[[-\]]' >actual.raw # 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 1425 - iwildmatch: match ']' '[[-\]]' not ok 1426 - iwildmatch(ls): match '[[-\]]' ']' # # printf '%s' ']' >expect && # git --glob-pathspecs # --icase-pathspecs ls-files -z -- # '[[-\]]' >actual.raw 2>actual.err # && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 1427 - pathmatch: match ']' '[[-\]]' not ok 1428 - pathmatch(ls): match '[[-\]]' ']' # # printf '%s' ']' >expect && # git ls-files -z -- '[[-\]]' # >actual.raw 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # ok 1429 - ipathmatch: match ']' '[[-\]]' not ok 1430 - ipathmatch(ls): match '[[-\]]' ']' # # printf '%s' ']' >expect && # git --icase-pathspecs ls-files -z # -- '[[-\]]' >actual.raw # 2>actual.err && # # tr -d '\0' actual && # >expect.err && # test_cmp expect.err actual.err && # test_cmp expect actual # -- snap -- Ciao, Dscho