Re: [PATCH v4 05/12] Integrate wildmatch to git
Johannes Sixt writes: > --- >8 --- > From: Johannes Sixt > Subject: [PATCH] test-wildmatch: avoid exit code -1 > > Our bash on Windows does not recognize -1 as failure. > > Signed-off-by: Johannes Sixt > --- > Please squash this in, in the next round. I do think the patch is good, but I am curious if people who ported bash to windows consider this a bug. Shouldn't the argument to exit() be truncated to its least significant 8 bits (that is, status & 0377) and be made available to the waiting parent process (which is bash in this case)? > test-wildmatch.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/test-wildmatch.c b/test-wildmatch.c > index d716852..74c0864 100644 > --- a/test-wildmatch.c > +++ b/test-wildmatch.c > @@ -4,11 +4,11 @@ > int main(int argc, char **argv) > { > if (!strcmp(argv[1], "wildmatch")) > - return wildmatch(argv[3], argv[2], 0); > + return !!wildmatch(argv[3], argv[2], 0); > else if (!strcmp(argv[1], "iwildmatch")) > - return wildmatch(argv[3], argv[2], FNM_CASEFOLD); > + return !!wildmatch(argv[3], argv[2], FNM_CASEFOLD); > else if (!strcmp(argv[1], "fnmatch")) > - return fnmatch(argv[3], argv[2], FNM_PATHNAME); > + return !!fnmatch(argv[3], argv[2], FNM_PATHNAME); > else > return 1; > } -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v4 05/12] Integrate wildmatch to git
--- >8 --- From: Johannes Sixt Subject: [PATCH] test-wildmatch: avoid exit code -1 Our bash on Windows does not recognize -1 as failure. Signed-off-by: Johannes Sixt --- Please squash this in, in the next round. test-wildmatch.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test-wildmatch.c b/test-wildmatch.c index d716852..74c0864 100644 --- a/test-wildmatch.c +++ b/test-wildmatch.c @@ -4,11 +4,11 @@ int main(int argc, char **argv) { if (!strcmp(argv[1], "wildmatch")) - return wildmatch(argv[3], argv[2], 0); + return !!wildmatch(argv[3], argv[2], 0); else if (!strcmp(argv[1], "iwildmatch")) - return wildmatch(argv[3], argv[2], FNM_CASEFOLD); + return !!wildmatch(argv[3], argv[2], FNM_CASEFOLD); else if (!strcmp(argv[1], "fnmatch")) - return fnmatch(argv[3], argv[2], FNM_PATHNAME); + return !!fnmatch(argv[3], argv[2], FNM_PATHNAME); else return 1; } -- 1.8.0.rc2.1237.g5522246 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v4 05/12] Integrate wildmatch to git
Signed-off-by: Nguyễn Thái Ngọc Duy --- .gitignore | 1 + Makefile | 3 + t/t3070-wildmatch.sh | 178 +++ t/t3070/wildtest.txt | 165 --- test-wildmatch.c | 14 wildmatch.c | 5 +- 6 files changed, 200 insertions(+), 166 deletions(-) create mode 100755 t/t3070-wildmatch.sh delete mode 100644 t/t3070/wildtest.txt create mode 100644 test-wildmatch.c diff --git a/.gitignore b/.gitignore index a188a82..37c3507 100644 --- a/.gitignore +++ b/.gitignore @@ -197,6 +197,7 @@ /test-string-list /test-subprocess /test-svn-fe +/test-wildmatch /common-cmds.h *.tar.gz *.dsc diff --git a/Makefile b/Makefile index 8413606..9a97379 100644 --- a/Makefile +++ b/Makefile @@ -523,6 +523,7 @@ TEST_PROGRAMS_NEED_X += test-sigchain TEST_PROGRAMS_NEED_X += test-string-list TEST_PROGRAMS_NEED_X += test-subprocess TEST_PROGRAMS_NEED_X += test-svn-fe +TEST_PROGRAMS_NEED_X += test-wildmatch TEST_PROGRAMS = $(patsubst %,%$X,$(TEST_PROGRAMS_NEED_X)) @@ -695,6 +696,7 @@ LIB_H += userdiff.h LIB_H += utf8.h LIB_H += varint.h LIB_H += walker.h +LIB_H += wildmatch.h LIB_H += wt-status.h LIB_H += xdiff-interface.h LIB_H += xdiff/xdiff.h @@ -826,6 +828,7 @@ LIB_OBJS += utf8.o LIB_OBJS += varint.o LIB_OBJS += version.o LIB_OBJS += walker.o +LIB_OBJS += wildmatch.o LIB_OBJS += wrapper.o LIB_OBJS += write_or_die.o LIB_OBJS += ws.o diff --git a/t/t3070-wildmatch.sh b/t/t3070-wildmatch.sh new file mode 100755 index 000..bb92f8d --- /dev/null +++ b/t/t3070-wildmatch.sh @@ -0,0 +1,178 @@ +#!/bin/sh + +test_description='wildmatch tests' + +. ./test-lib.sh + +match() { +test_expect_success "wildmatch $*" " + if [ $1 = 1 ]; then + test-wildmatch wildmatch '$3' '$4' + else + ! test-wildmatch wildmatch '$3' '$4' + fi && + if [ $2 = 1 ]; then + test-wildmatch fnmatch '$3' '$4' + else + ! test-wildmatch fnmatch '$3' '$4' + fi +" +} + +# Basic wildmat features +match 1 1 foo foo +match 0 0 foo bar +match 1 1 '' "" +match 1 1 foo '???' +match 0 0 foo '??' +match 1 1 foo '*' +match 1 1 foo 'f*' +match 0 0 foo '*f' +match 1 1 foo '*foo*' +match 1 1 foobar '*ob*a*r*' +match 1 1 aaabababab '*ab' +match 1 1 'foo*' 'foo\*' +match 0 0 foobar 'foo\*bar' +match 1 1 'f\oo' 'f\\oo' +match 1 1 ball '*[al]?' +match 0 0 ten '[ten]' +match 1 1 ten '**[!te]' +match 0 0 ten '**[!ten]' +match 1 1 ten 't[a-g]n' +match 0 0 ten 't[!a-g]n' +match 1 1 ton 't[!a-g]n' +match 1 1 ton 't[^a-g]n' +match 1 1 'a]b' 'a[]]b' +match 1 1 a-b 'a[]-]b' +match 1 1 'a]b' 'a[]-]b' +match 0 0 aab 'a[]-]b' +match 1 1 aab 'a[]a-]b' +match 1 1 ']' ']' + +# Extended slash-matching features +match 0 0 'foo/baz/bar' 'foo*bar' +match 1 0 'foo/baz/bar' 'foo**bar' +match 0 0 'foo/bar' 'foo?bar' +match 0 0 'foo/bar' 'foo[/]bar' +match 0 0 'foo/bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' +match 1 1 'foo-bar' 'f[^eiu][^eiu][^eiu][^eiu][^eiu]r' +match 0 0 'foo' '**/foo' +match 1 1 '/foo' '**/foo' +match 1 0 'bar/baz/foo' '**/foo' +match 0 0 'bar/baz/foo' '*/foo' +match 0 0 'foo/bar/baz' '**/bar*' +match 1 0 'deep/foo/bar/baz' '**/bar/*' +match 0 0 'deep/foo/bar/baz/' '**/bar/*' +match 1 0 'deep/foo/bar/baz/' '**/bar/**' +match 0 0 'deep/foo/bar' '**/bar/*' +match 1 0 'deep/foo/bar/' '**/bar/**' +match 1 0 'foo/bar/baz' '**/bar**' +match 1 0 'foo/bar/baz/x' '*/bar/**' +match 0 0 'deep/foo/bar/baz/x' '*/bar/**' +match 1 0 'deep/foo/bar/baz/x' '**/bar/*/*' + +# Various additional tests +match 0 0 'acrt' 'a[c-c]st' +match 1 1 'acrt' 'a[c-c]rt' +match 0 0 ']' '[!]-]' +match 1 1 'a' '[!]-]' +match 0 0 '' '\' +match 0 0 '\' '\' +match 0 0 '/\' '*/\' +match 1 1 '/\' '*/\\' +match 1 1 'foo' 'foo' +match 1 1 '@foo' '@foo' +match 0 0 'foo' '@foo' +match 1 1 '[ab]' '\[ab]' +match 1 1 '[ab]' '[[]ab]' +match 1 1 '[ab]' '[[:]ab]' +match 0 0 '[ab]' '[[::]ab]' +match 1 1 '[ab]' '[[:digit]ab]' +match 1 1 '[ab]' '[\[:]ab]' +match 1 1 '?a?b' '\??\?b' +match 1 1 'abc' '\a\b\c' +match 0 0 'foo' '' +match 1 0 'foo/bar/baz/to' '**/t[o]' + +# Character class tests +match 1 1 'a1B' '[[:alpha:]][[:digit:]][[:upper:]]' +match 0 0 'a' '[[:digit:][:upper:][:space:]]' +match 1 1 'A' '[[:digit:][:upper:][:space:]]' +match 1 0 '1' '[[:digit:][:upper:][:space:]]' +match 0 0 '1' '[[:digit:][:upper:][:spaci:]]' +match 1 1 ' ' '[[:digit:][:upper:][:space:]]' +match 0 0 '.' '[[:digit:][:upper:][:space:]]' +match 1 1 '.' '[[:digit:][:punct:][:space:]]' +match 1 1 '5' '[[:xdigit:]]' +match 1 1 'f' '[[:xdigit:]]' +match 1 1 'D' '[[:xdigit:]]' +match 1 0 '_' '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]' +match 1 0 '_' '[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]' +match 1 1 '.' '[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]