test-hgignore.t
365 lines
| 7.6 KiB
| text/troff
|
Tads3Lexer
/ tests / test-hgignore.t
|
r25869 | $ hg init ignorerepo | ||
$ cd ignorerepo | ||||
|
r12312 | |||
|
r32600 | debugignore with no hgignore should be deterministic: | ||
$ hg debugignore | ||||
<nevermatcher> | ||||
|
r12399 | Issue562: .hgignore requires newline at end: | ||
|
r12312 | |||
$ 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 | ||||
|
r39743 | $ "$PYTHON" makeignore.py | ||
|
r12312 | |||
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 | ||||
|
r12366 | $ hg status | ||
|
r25869 | abort: $TESTTMP/ignorerepo/.hgignore: invalid pattern (relre): *.o (glob) | ||
|
r12366 | [255] | ||
|
r12312 | |||
|
r33507 | Ensure given files are relative to cwd | ||
$ echo "dir/.*\.o" > .hgignore | ||||
$ hg status -i | ||||
I dir/c.o | ||||
$ hg debugignore dir/c.o dir/missing.o | ||||
|
r35394 | dir/c.o is ignored | ||
|
r33507 | (ignore rule in $TESTTMP/ignorerepo/.hgignore, line 1: 'dir/.*\.o') (glob) | ||
|
r35394 | dir/missing.o is ignored | ||
|
r33507 | (ignore rule in $TESTTMP/ignorerepo/.hgignore, line 1: 'dir/.*\.o') (glob) | ||
$ cd dir | ||||
$ hg debugignore c.o missing.o | ||||
c.o is ignored | ||||
(ignore rule in $TESTTMP/ignorerepo/.hgignore, line 1: 'dir/.*\.o') (glob) | ||||
missing.o is ignored | ||||
(ignore rule in $TESTTMP/ignorerepo/.hgignore, line 1: 'dir/.*\.o') (glob) | ||||
For icasefs, inexact matches also work, except for missing files | ||||
#if icasefs | ||||
$ hg debugignore c.O missing.O | ||||
c.o is ignored | ||||
(ignore rule in $TESTTMP/ignorerepo/.hgignore, line 1: 'dir/.*\.o') (glob) | ||||
missing.O is not ignored | ||||
#endif | ||||
$ cd .. | ||||
|
r12312 | $ echo ".*\.o" > .hgignore | ||
|
r16487 | $ hg status | ||
|
r12312 | A dir/b.o | ||
? .hgignore | ||||
? a.c | ||||
? syntax | ||||
|
r27326 | Ensure that comments work: | ||
|
r27381 | $ touch 'foo#bar' 'quux#' | ||
#if no-windows | ||||
|
r42855 | $ touch 'baz\wat' 'ba0\#wat' 'ba1\\wat' | ||
|
r27381 | #endif | ||
|
r27326 | $ cat <<'EOF' >> .hgignore | ||
> # full-line comment | ||||
> # whitespace-only comment line | ||||
> syntax# pattern, no whitespace, then comment | ||||
> a.c # pattern, then whitespace, then comment | ||||
|
r42854 | > baz\\# # (escaped) backslash, then comment | ||
|
r42855 | > ba0\\\#w # (escaped) backslash, escaped comment character, then comment | ||
> ba1\\\\# # (escaped) backslashes, then comment | ||||
|
r27326 | > foo\#b # escaped comment character | ||
> quux\## escaped comment character at end of name | ||||
> EOF | ||||
$ hg status | ||||
A dir/b.o | ||||
? .hgignore | ||||
|
r27381 | $ rm 'foo#bar' 'quux#' | ||
#if no-windows | ||||
|
r42855 | $ rm 'baz\wat' 'ba0\#wat' 'ba1\\wat' | ||
|
r27381 | #endif | ||
|
r27326 | |||
|
r33477 | Check that '^\.' does not ignore the root directory: | ||
|
r12312 | |||
$ echo "^\." > .hgignore | ||||
$ hg status | ||||
A dir/b.o | ||||
? a.c | ||||
? a.o | ||||
? dir/c.o | ||||
? syntax | ||||
|
r23628 | Test that patterns from ui.ignore options are read: | ||
$ echo > .hgignore | ||||
$ cat >> $HGRCPATH << EOF | ||||
> [ui] | ||||
|
r25869 | > ignore.other = $TESTTMP/ignorerepo/.hg/testhgignore | ||
|
r23628 | > EOF | ||
$ echo "glob:**.o" > .hg/testhgignore | ||||
|
r12312 | $ hg status | ||
A dir/b.o | ||||
? .hgignore | ||||
? a.c | ||||
? syntax | ||||
|
r23628 | empty out testhgignore | ||
$ echo > .hg/testhgignore | ||||
|
r23629 | |||
Test relative ignore path (issue4473): | ||||
$ cat >> $HGRCPATH << EOF | ||||
> [ui] | ||||
> ignore.relative = .hg/testhgignorerel | ||||
> EOF | ||||
$ echo "glob:*.o" > .hg/testhgignorerel | ||||
$ cd dir | ||||
|
r12312 | $ hg status | ||
A dir/b.o | ||||
? .hgignore | ||||
? a.c | ||||
? syntax | ||||
|
r23629 | $ cd .. | ||
$ echo > .hg/testhgignorerel | ||||
|
r12312 | $ echo "syntax: glob" > .hgignore | ||
$ echo "re:.*\.o" >> .hgignore | ||||
$ hg status | ||||
A dir/b.o | ||||
? .hgignore | ||||
? a.c | ||||
? syntax | ||||
$ echo "syntax: invalid" > .hgignore | ||||
|
r12366 | $ hg status | ||
|
r35394 | $TESTTMP/ignorerepo/.hgignore: ignoring invalid syntax 'invalid' | ||
|
r12312 | 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 | ||||
|
r13396 | $ hg debugignore | ||
|
r40818 | <includematcher includes='(?:|.*/)[^/]*(?:/|$)'> | ||
|
r16913 | |||
|
r27671 | $ hg debugignore b.o | ||
b.o is ignored | ||||
|
r27757 | (ignore rule in $TESTTMP/ignorerepo/.hgignore, line 1: '*') (glob) | ||
|
r27671 | |||
|
r16913 | $ cd .. | ||
|
r19128 | |||
Check patterns that match only the directory | ||||
|
r33211 | "(fsmonitor !)" below assumes that fsmonitor is enabled with | ||
"walk_on_invalidate = false" (default), which doesn't involve | ||||
re-walking whole repository at detection of .hgignore change. | ||||
|
r19128 | $ echo "^dir\$" > .hgignore | ||
$ hg status | ||||
A dir/b.o | ||||
? .hgignore | ||||
? a.c | ||||
? a.o | ||||
|
r33211 | ? dir/c.o (fsmonitor !) | ||
|
r19128 | ? syntax | ||
|
r21815 | |||
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 | ||||
|
r27671 | $ hg debugignore a.c | ||
a.c is not ignored | ||||
$ hg debugignore dir/c.o | ||||
|
r35394 | dir/c.o is ignored | ||
|
r27757 | (ignore rule in $TESTTMP/ignorerepo/.hgignore, line 2: 'dir/**/c.o') (glob) | ||
|
r25215 | |||
|
r41318 | Check rooted globs | ||
$ hg purge --all --config extensions.purge= | ||||
$ echo "syntax: rootglob" > .hgignore | ||||
$ echo "a/*.ext" >> .hgignore | ||||
$ for p in a b/a aa; do mkdir -p $p; touch $p/b.ext; done | ||||
$ hg status -A 'set:**.ext' | ||||
? aa/b.ext | ||||
? b/a/b.ext | ||||
I a/b.ext | ||||
|
r25215 | 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:' | ||||
|
r25870 | $ echo "include:nested/ignore" >> otherignore | ||
|
r41318 | $ mkdir nested nested/more | ||
|
r25870 | $ echo "glob:*ignore" > nested/ignore | ||
|
r41318 | $ echo "rootglob:a" >> nested/ignore | ||
$ touch a nested/a nested/more/a | ||||
|
r25215 | $ hg status | ||
A dir/b.o | ||||
|
r41318 | ? nested/a | ||
? nested/more/a | ||||
$ rm a nested/a nested/more/a | ||||
|
r25216 | |||
|
r25283 | $ cp otherignore goodignore | ||
|
r25216 | $ echo "include:badignore" >> otherignore | ||
$ hg status | ||||
|
r35230 | skipping unreadable pattern file 'badignore': $ENOENT$ | ||
|
r25216 | A dir/b.o | ||
|
r25283 | |||
$ mv goodignore otherignore | ||||
|
r25870 | Check using 'include:' while in a non-root directory | ||
$ cd .. | ||||
$ hg -R ignorerepo status | ||||
A dir/b.o | ||||
$ cd ignorerepo | ||||
|
r25283 | Check including subincludes | ||
$ hg revert -q --all | ||||
$ hg purge --all --config extensions.purge= | ||||
$ echo ".hgignore" > .hgignore | ||||
$ mkdir dir1 dir2 | ||||
$ touch dir1/file1 dir1/file2 dir2/file1 dir2/file2 | ||||
$ echo "subinclude:dir2/.hgignore" >> .hgignore | ||||
$ echo "glob:file*2" > dir2/.hgignore | ||||
$ hg status | ||||
? dir1/file1 | ||||
? dir1/file2 | ||||
? dir2/file1 | ||||
|
r41318 | Check including subincludes with other patterns | ||
|
r25283 | |||
$ echo "subinclude:dir1/.hgignore" >> .hgignore | ||||
|
r41318 | |||
$ mkdir dir1/subdir | ||||
$ touch dir1/subdir/file1 | ||||
$ echo "rootglob:f?le1" > dir1/.hgignore | ||||
$ hg status | ||||
? dir1/file2 | ||||
? dir1/subdir/file1 | ||||
? dir2/file1 | ||||
$ rm dir1/subdir/file1 | ||||
|
r25283 | $ echo "regexp:f.le1" > dir1/.hgignore | ||
$ hg status | ||||
? dir1/file2 | ||||
? dir2/file1 | ||||
Check multiple levels of sub-ignores | ||||
$ touch dir1/subdir/subfile1 dir1/subdir/subfile3 dir1/subdir/subfile4 | ||||
$ echo "subinclude:subdir/.hgignore" >> dir1/.hgignore | ||||
$ echo "glob:subfil*3" >> dir1/subdir/.hgignore | ||||
$ hg status | ||||
? dir1/file2 | ||||
? dir1/subdir/subfile4 | ||||
? dir2/file1 | ||||
Check include subignore at the same level | ||||
$ mv dir1/subdir/.hgignore dir1/.hgignoretwo | ||||
$ echo "regexp:f.le1" > dir1/.hgignore | ||||
$ echo "subinclude:.hgignoretwo" >> dir1/.hgignore | ||||
$ echo "glob:file*2" > dir1/.hgignoretwo | ||||
$ hg status | grep file2 | ||||
[1] | ||||
|
r27671 | $ hg debugignore dir1/file2 | ||
|
r35394 | dir1/file2 is ignored | ||
|
r27672 | (ignore rule in dir2/.hgignore, line 1: 'file*2') | ||
|
r28054 | |||
#if windows | ||||
Windows paths are accepted on input | ||||
$ rm dir1/.hgignore | ||||
$ echo "dir1/file*" >> .hgignore | ||||
$ hg debugignore "dir1\file2" | ||||
|
r41870 | dir1/file2 is ignored | ||
|
r28054 | (ignore rule in $TESTTMP\ignorerepo\.hgignore, line 4: 'dir1/file*') | ||
$ hg up -qC . | ||||
#endif | ||||