##// END OF EJS Templates
match: add 'include:' syntax...
match: add 'include:' syntax This allows the matcher to understand 'include:path/to/file' style rules. The files support the standard hgignore syntax and any rules read from the file are included in the matcher without regard to the files location in the repository (i.e. if the included file is in somedir/otherdir, all of it's rules will still apply to the entire repository).

File last commit:

r25215:4040e06e default
r25215:4040e06e default
Show More
test-hgignore.t
191 lines | 3.1 KiB | text/troff | Tads3Lexer
$ hg init
Issue562: .hgignore requires newline at end:
$ touch foo
$ touch bar
$ touch baz
$ cat > makeignore.py <<EOF
> f = open(".hgignore", "w")
> f.write("ignore\n")
> f.write("foo\n")
> # No EOL here
> f.write("bar")
> f.close()
> EOF
$ python makeignore.py
Should display baz only:
$ hg status
? baz
$ rm foo bar baz .hgignore makeignore.py
$ touch a.o
$ touch a.c
$ touch syntax
$ mkdir dir
$ touch dir/a.o
$ touch dir/b.o
$ touch dir/c.o
$ hg add dir/a.o
$ hg commit -m 0
$ hg add dir/b.o
$ hg status
A dir/b.o
? a.c
? a.o
? dir/c.o
? syntax
$ echo "*.o" > .hgignore
$ hg status
abort: $TESTTMP/.hgignore: invalid pattern (relre): *.o (glob)
[255]
$ echo ".*\.o" > .hgignore
$ hg status
A dir/b.o
? .hgignore
? a.c
? syntax
Check it does not ignore the current directory '.':
$ echo "^\." > .hgignore
$ hg status
A dir/b.o
? a.c
? a.o
? dir/c.o
? syntax
Test that patterns from ui.ignore options are read:
$ echo > .hgignore
$ cat >> $HGRCPATH << EOF
> [ui]
> ignore.other = $TESTTMP/.hg/testhgignore
> EOF
$ echo "glob:**.o" > .hg/testhgignore
$ hg status
A dir/b.o
? .hgignore
? a.c
? syntax
empty out testhgignore
$ echo > .hg/testhgignore
Test relative ignore path (issue4473):
$ cat >> $HGRCPATH << EOF
> [ui]
> ignore.relative = .hg/testhgignorerel
> EOF
$ echo "glob:*.o" > .hg/testhgignorerel
$ cd dir
$ hg status
A dir/b.o
? .hgignore
? a.c
? syntax
$ cd ..
$ echo > .hg/testhgignorerel
$ echo "syntax: glob" > .hgignore
$ echo "re:.*\.o" >> .hgignore
$ hg status
A dir/b.o
? .hgignore
? a.c
? syntax
$ echo "syntax: invalid" > .hgignore
$ hg status
$TESTTMP/.hgignore: ignoring invalid syntax 'invalid' (glob)
A dir/b.o
? .hgignore
? a.c
? a.o
? dir/c.o
? syntax
$ echo "syntax: glob" > .hgignore
$ echo "*.o" >> .hgignore
$ hg status
A dir/b.o
? .hgignore
? a.c
? syntax
$ echo "relglob:syntax*" > .hgignore
$ hg status
A dir/b.o
? .hgignore
? a.c
? a.o
? dir/c.o
$ echo "relglob:*" > .hgignore
$ hg status
A dir/b.o
$ cd dir
$ hg status .
A b.o
$ hg debugignore
(?:(?:|.*/)[^/]*(?:/|$))
$ cd ..
Check patterns that match only the directory
$ echo "^dir\$" > .hgignore
$ hg status
A dir/b.o
? .hgignore
? a.c
? a.o
? syntax
Check recursive glob pattern matches no directories (dir/**/c.o matches dir/c.o)
$ echo "syntax: glob" > .hgignore
$ echo "dir/**/c.o" >> .hgignore
$ touch dir/c.o
$ mkdir dir/subdir
$ touch dir/subdir/c.o
$ hg status
A dir/b.o
? .hgignore
? a.c
? a.o
? syntax
Check using 'include:' in ignore file
$ hg purge --all --config extensions.purge=
$ touch foo.included
$ echo ".*.included" > otherignore
$ hg status -I "include:otherignore"
? foo.included
$ echo "include:otherignore" >> .hgignore
$ hg status
A dir/b.o
? .hgignore
? otherignore
Check recursive uses of 'include:'
$ echo "include:nestedignore" >> otherignore
$ echo "glob:*ignore" > nestedignore
$ hg status
A dir/b.o