test-hgignore.t
424 lines
| 9.4 KiB
| text/troff
|
Tads3Lexer
/ tests / test-hgignore.t
Simon Sapin
|
r48056 | #testcases dirstate-v1 dirstate-v1-tree dirstate-v2 | ||
Simon Sapin
|
r47900 | |||
#if dirstate-v1-tree | ||||
#require rust | ||||
$ echo '[experimental]' >> $HGRCPATH | ||||
$ echo 'dirstate-tree.in-memory=1' >> $HGRCPATH | ||||
#endif | ||||
Simon Sapin
|
r48056 | #if dirstate-v2 | ||
#require rust | ||||
$ echo '[format]' >> $HGRCPATH | ||||
$ echo 'exp-dirstate-v2=1' >> $HGRCPATH | ||||
#endif | ||||
Durham Goode
|
r25869 | $ hg init ignorerepo | ||
$ cd ignorerepo | ||||
Adrian Buehlmann
|
r12312 | |||
Siddharth Agarwal
|
r32600 | debugignore with no hgignore should be deterministic: | ||
$ hg debugignore | ||||
<nevermatcher> | ||||
Martin Geisler
|
r12399 | Issue562: .hgignore requires newline at end: | ||
Adrian Buehlmann
|
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 | ||||
Matt Harbison
|
r39743 | $ "$PYTHON" makeignore.py | ||
Adrian Buehlmann
|
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 | ||||
Matt Mackall
|
r12366 | $ hg status | ||
Durham Goode
|
r25869 | abort: $TESTTMP/ignorerepo/.hgignore: invalid pattern (relre): *.o (glob) | ||
Matt Mackall
|
r12366 | [255] | ||
Adrian Buehlmann
|
r12312 | |||
Matt Harbison
|
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 | ||||
Matt Harbison
|
r35394 | dir/c.o is ignored | ||
Matt Harbison
|
r33507 | (ignore rule in $TESTTMP/ignorerepo/.hgignore, line 1: 'dir/.*\.o') (glob) | ||
Matt Harbison
|
r35394 | dir/missing.o is ignored | ||
Matt Harbison
|
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 .. | ||||
Adrian Buehlmann
|
r12312 | $ echo ".*\.o" > .hgignore | ||
Mads Kiilerich
|
r16487 | $ hg status | ||
Adrian Buehlmann
|
r12312 | A dir/b.o | ||
? .hgignore | ||||
? a.c | ||||
? syntax | ||||
Bryan O'Sullivan
|
r27326 | Ensure that comments work: | ||
Yuya Nishihara
|
r42856 | $ touch 'foo#bar' 'quux#' 'quu0#' | ||
Matt Harbison
|
r27381 | #if no-windows | ||
Yuya Nishihara
|
r42856 | $ touch 'baz\' 'baz\wat' 'ba0\#wat' 'ba1\\' 'ba1\\wat' 'quu0\' | ||
Matt Harbison
|
r27381 | #endif | ||
Yuya Nishihara
|
r42856 | |||
Bryan O'Sullivan
|
r27326 | $ cat <<'EOF' >> .hgignore | ||
> # full-line comment | ||||
> # whitespace-only comment line | ||||
> syntax# pattern, no whitespace, then comment | ||||
> a.c # pattern, then whitespace, then comment | ||||
Yuya Nishihara
|
r42854 | > baz\\# # (escaped) backslash, then comment | ||
Yuya Nishihara
|
r42855 | > ba0\\\#w # (escaped) backslash, escaped comment character, then comment | ||
> ba1\\\\# # (escaped) backslashes, then comment | ||||
Bryan O'Sullivan
|
r27326 | > foo\#b # escaped comment character | ||
> quux\## escaped comment character at end of name | ||||
> EOF | ||||
$ hg status | ||||
A dir/b.o | ||||
? .hgignore | ||||
Yuya Nishihara
|
r42856 | ? quu0# | ||
? quu0\ (no-windows !) | ||||
$ cat <<'EOF' > .hgignore | ||||
> .*\.o | ||||
> syntax: glob | ||||
> syntax# pattern, no whitespace, then comment | ||||
> a.c # pattern, then whitespace, then comment | ||||
> baz\\#* # (escaped) backslash, then comment | ||||
> ba0\\\#w* # (escaped) backslash, escaped comment character, then comment | ||||
> ba1\\\\#* # (escaped) backslashes, then comment | ||||
> foo\#b* # escaped comment character | ||||
> quux\## escaped comment character at end of name | ||||
> quu0[\#]# escaped comment character inside [...] | ||||
> EOF | ||||
$ hg status | ||||
A dir/b.o | ||||
? .hgignore | ||||
? ba1\\wat (no-windows !) | ||||
? baz\wat (no-windows !) | ||||
? quu0\ (no-windows !) | ||||
$ rm 'foo#bar' 'quux#' 'quu0#' | ||||
Matt Harbison
|
r27381 | #if no-windows | ||
Yuya Nishihara
|
r42856 | $ rm 'baz\' 'baz\wat' 'ba0\#wat' 'ba1\\' 'ba1\\wat' 'quu0\' | ||
Matt Harbison
|
r27381 | #endif | ||
Bryan O'Sullivan
|
r27326 | |||
Martin von Zweigbergk
|
r33477 | Check that '^\.' does not ignore the root directory: | ||
Adrian Buehlmann
|
r12312 | |||
$ echo "^\." > .hgignore | ||||
$ hg status | ||||
A dir/b.o | ||||
? a.c | ||||
? a.o | ||||
? dir/c.o | ||||
? syntax | ||||
Siddharth Agarwal
|
r23628 | Test that patterns from ui.ignore options are read: | ||
$ echo > .hgignore | ||||
$ cat >> $HGRCPATH << EOF | ||||
> [ui] | ||||
Durham Goode
|
r25869 | > ignore.other = $TESTTMP/ignorerepo/.hg/testhgignore | ||
Siddharth Agarwal
|
r23628 | > EOF | ||
$ echo "glob:**.o" > .hg/testhgignore | ||||
Adrian Buehlmann
|
r12312 | $ hg status | ||
A dir/b.o | ||||
? .hgignore | ||||
? a.c | ||||
? syntax | ||||
Siddharth Agarwal
|
r23628 | empty out testhgignore | ||
$ echo > .hg/testhgignore | ||||
Siddharth Agarwal
|
r23629 | |||
Test relative ignore path (issue4473): | ||||
$ cat >> $HGRCPATH << EOF | ||||
> [ui] | ||||
> ignore.relative = .hg/testhgignorerel | ||||
> EOF | ||||
$ echo "glob:*.o" > .hg/testhgignorerel | ||||
$ cd dir | ||||
Adrian Buehlmann
|
r12312 | $ hg status | ||
A dir/b.o | ||||
? .hgignore | ||||
? a.c | ||||
? syntax | ||||
Valentin Gatien-Baron
|
r43128 | $ hg debugignore | ||
Valentin Gatien-Baron
|
r43132 | <includematcher includes='.*\\.o(?:/|$)'> | ||
Adrian Buehlmann
|
r12312 | |||
Siddharth Agarwal
|
r23629 | $ cd .. | ||
$ echo > .hg/testhgignorerel | ||||
Adrian Buehlmann
|
r12312 | $ echo "syntax: glob" > .hgignore | ||
$ echo "re:.*\.o" >> .hgignore | ||||
$ hg status | ||||
A dir/b.o | ||||
? .hgignore | ||||
? a.c | ||||
? syntax | ||||
$ echo "syntax: invalid" > .hgignore | ||||
Matt Mackall
|
r12366 | $ hg status | ||
Matt Harbison
|
r35394 | $TESTTMP/ignorerepo/.hgignore: ignoring invalid syntax 'invalid' | ||
Adrian Buehlmann
|
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 | ||||
jfh
|
r13396 | $ hg debugignore | ||
Valentin Gatien-Baron
|
r43132 | <includematcher includes='.*(?:/|$)'> | ||
Mads Kiilerich
|
r16913 | |||
Laurent Charignon
|
r27671 | $ hg debugignore b.o | ||
b.o is ignored | ||||
Matt Harbison
|
r27757 | (ignore rule in $TESTTMP/ignorerepo/.hgignore, line 1: '*') (glob) | ||
Laurent Charignon
|
r27671 | |||
Mads Kiilerich
|
r16913 | $ cd .. | ||
Durham Goode
|
r19128 | |||
Check patterns that match only the directory | ||||
FUJIWARA Katsunori
|
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. | ||||
Durham Goode
|
r19128 | $ echo "^dir\$" > .hgignore | ||
$ hg status | ||||
A dir/b.o | ||||
? .hgignore | ||||
? a.c | ||||
? a.o | ||||
FUJIWARA Katsunori
|
r33211 | ? dir/c.o (fsmonitor !) | ||
Durham Goode
|
r19128 | ? syntax | ||
Siddharth Agarwal
|
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 | ||||
Laurent Charignon
|
r27671 | $ hg debugignore a.c | ||
a.c is not ignored | ||||
$ hg debugignore dir/c.o | ||||
Matt Harbison
|
r35394 | dir/c.o is ignored | ||
Matt Harbison
|
r27757 | (ignore rule in $TESTTMP/ignorerepo/.hgignore, line 2: 'dir/**/c.o') (glob) | ||
Durham Goode
|
r25215 | |||
Valentin Gatien-Baron
|
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 | ||||
Durham Goode
|
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:' | ||||
Durham Goode
|
r25870 | $ echo "include:nested/ignore" >> otherignore | ||
Valentin Gatien-Baron
|
r41318 | $ mkdir nested nested/more | ||
Durham Goode
|
r25870 | $ echo "glob:*ignore" > nested/ignore | ||
Valentin Gatien-Baron
|
r41318 | $ echo "rootglob:a" >> nested/ignore | ||
$ touch a nested/a nested/more/a | ||||
Durham Goode
|
r25215 | $ hg status | ||
A dir/b.o | ||||
Valentin Gatien-Baron
|
r41318 | ? nested/a | ||
? nested/more/a | ||||
$ rm a nested/a nested/more/a | ||||
Durham Goode
|
r25216 | |||
Durham Goode
|
r25283 | $ cp otherignore goodignore | ||
Durham Goode
|
r25216 | $ echo "include:badignore" >> otherignore | ||
$ hg status | ||||
Matt Harbison
|
r35230 | skipping unreadable pattern file 'badignore': $ENOENT$ | ||
Durham Goode
|
r25216 | A dir/b.o | ||
Durham Goode
|
r25283 | |||
$ mv goodignore otherignore | ||||
Durham Goode
|
r25870 | Check using 'include:' while in a non-root directory | ||
$ cd .. | ||||
$ hg -R ignorerepo status | ||||
A dir/b.o | ||||
$ cd ignorerepo | ||||
Durham Goode
|
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 | ||||
Valentin Gatien-Baron
|
r41318 | Check including subincludes with other patterns | ||
Durham Goode
|
r25283 | |||
$ echo "subinclude:dir1/.hgignore" >> .hgignore | ||||
Valentin Gatien-Baron
|
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 | ||||
Durham Goode
|
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] | ||||
Laurent Charignon
|
r27671 | $ hg debugignore dir1/file2 | ||
Matt Harbison
|
r35394 | dir1/file2 is ignored | ||
Laurent Charignon
|
r27672 | (ignore rule in dir2/.hgignore, line 1: 'file*2') | ||
Matt Harbison
|
r28054 | |||
#if windows | ||||
Windows paths are accepted on input | ||||
$ rm dir1/.hgignore | ||||
$ echo "dir1/file*" >> .hgignore | ||||
$ hg debugignore "dir1\file2" | ||||
Matt Harbison
|
r41870 | dir1/file2 is ignored | ||
Matt Harbison
|
r28054 | (ignore rule in $TESTTMP\ignorerepo\.hgignore, line 4: 'dir1/file*') | ||
$ hg up -qC . | ||||
#endif | ||||
Simon Sapin
|
r48202 | |||
#if dirstate-v2 | ||||
Check the hash of ignore patterns written in the dirstate at offset | ||||
Simon Sapin
|
r48270 | 12 + 20 + 20 + 4 + 4 + 4 + 4 = 68 | ||
Simon Sapin
|
r48202 | |||
$ hg status > /dev/null | ||||
$ cat .hg/testhgignore .hg/testhgignorerel .hgignore dir2/.hgignore dir1/.hgignore dir1/.hgignoretwo | $TESTDIR/f --sha1 | ||||
sha1=6e315b60f15fb5dfa02be00f3e2c8f923051f5ff | ||||
Simon Sapin
|
r48270 | >>> import binascii; print(binascii.hexlify(open(".hg/dirstate", "rb").read()[68:][:20]).decode()) | ||
Simon Sapin
|
r48202 | 6e315b60f15fb5dfa02be00f3e2c8f923051f5ff | ||
$ echo rel > .hg/testhgignorerel | ||||
$ hg status > /dev/null | ||||
$ cat .hg/testhgignore .hg/testhgignorerel .hgignore dir2/.hgignore dir1/.hgignore dir1/.hgignoretwo | $TESTDIR/f --sha1 | ||||
sha1=dea19cc7119213f24b6b582a4bae7b0cb063e34e | ||||
Simon Sapin
|
r48270 | >>> import binascii; print(binascii.hexlify(open(".hg/dirstate", "rb").read()[68:][:20]).decode()) | ||
Simon Sapin
|
r48202 | dea19cc7119213f24b6b582a4bae7b0cb063e34e | ||
#endif | ||||