##// END OF EJS Templates
dirstate-v2: Use 32-bit integers instead of 64-bit for offsets...
dirstate-v2: Use 32-bit integers instead of 64-bit for offsets This saves 12 bytes per node. (Nodes representing files or directories.) These are offsets to other parts of the file. This would only be a limitation for a `.hg/dirstate` file larger than 4 GiB, which would only happen for a repository with dozens of millions of files and directories. Differential Revision: https://phab.mercurial-scm.org/D10920

File last commit:

r48270:f23eafb0 default
r48270:f23eafb0 default
Show More
test-hgignore.t
424 lines | 9.4 KiB | text/troff | Tads3Lexer
Simon Sapin
dirstate-v2: Add a variant of some tests, that uses the new format...
r48056 #testcases dirstate-v1 dirstate-v1-tree dirstate-v2
Simon Sapin
dirstate-tree: Add a dirstate-v1-tree variant of some tests...
r47900
#if dirstate-v1-tree
#require rust
$ echo '[experimental]' >> $HGRCPATH
$ echo 'dirstate-tree.in-memory=1' >> $HGRCPATH
#endif
Simon Sapin
dirstate-v2: Add a variant of some tests, that uses the new format...
r48056 #if dirstate-v2
#require rust
$ echo '[format]' >> $HGRCPATH
$ echo 'exp-dirstate-v2=1' >> $HGRCPATH
#endif
Durham Goode
test: move ignore test run into a subdirectory...
r25869 $ hg init ignorerepo
$ cd ignorerepo
Adrian Buehlmann
tests: unify test-hgignore
r12312
Siddharth Agarwal
match: introduce nevermatcher for when no ignore files are present...
r32600 debugignore with no hgignore should be deterministic:
$ hg debugignore
<nevermatcher>
Martin Geisler
tests: added a short description to issue numbers...
r12399 Issue562: .hgignore requires newline at end:
Adrian Buehlmann
tests: unify test-hgignore
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
tests: quote PYTHON usage...
r39743 $ "$PYTHON" makeignore.py
Adrian Buehlmann
tests: unify test-hgignore
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
tests: drop a bunch of sed calls from unified tests
r12366 $ hg status
Durham Goode
test: move ignore test run into a subdirectory...
r25869 abort: $TESTTMP/ignorerepo/.hgignore: invalid pattern (relre): *.o (glob)
Matt Mackall
tests: drop a bunch of sed calls from unified tests
r12366 [255]
Adrian Buehlmann
tests: unify test-hgignore
r12312
Matt Harbison
debugignore: eliminate inconsistencies with `hg status` (issue5222)...
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
tests: remove (glob) annotations that were only for '\' matches...
r35394 dir/c.o is ignored
Matt Harbison
debugignore: eliminate inconsistencies with `hg status` (issue5222)...
r33507 (ignore rule in $TESTTMP/ignorerepo/.hgignore, line 1: 'dir/.*\.o') (glob)
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 dir/missing.o is ignored
Matt Harbison
debugignore: eliminate inconsistencies with `hg status` (issue5222)...
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
tests: unify test-hgignore
r12312 $ echo ".*\.o" > .hgignore
Mads Kiilerich
tests: fix incorrect markup of continued lines of sh commands
r16487 $ hg status
Adrian Buehlmann
tests: unify test-hgignore
r12312 A dir/b.o
? .hgignore
? a.c
? syntax
Bryan O'Sullivan
test-hgignore.t: add tests for comments...
r27326 Ensure that comments work:
Yuya Nishihara
hgignore: add escape syntax test for glob patterns...
r42856 $ touch 'foo#bar' 'quux#' 'quu0#'
Matt Harbison
test-hgignore: conditionalize an illegal Windows filename
r27381 #if no-windows
Yuya Nishihara
hgignore: add escape syntax test for glob patterns...
r42856 $ touch 'baz\' 'baz\wat' 'ba0\#wat' 'ba1\\' 'ba1\\wat' 'quu0\'
Matt Harbison
test-hgignore: conditionalize an illegal Windows filename
r27381 #endif
Yuya Nishihara
hgignore: add escape syntax test for glob patterns...
r42856
Bryan O'Sullivan
test-hgignore.t: add tests for comments...
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
hgignore: update \-escape test to reflect actual behavior...
r42854 > baz\\# # (escaped) backslash, then comment
Yuya Nishihara
hgignore: add a few more weird patterns to test case
r42855 > ba0\\\#w # (escaped) backslash, escaped comment character, then comment
> ba1\\\\# # (escaped) backslashes, then comment
Bryan O'Sullivan
test-hgignore.t: add tests for comments...
r27326 > foo\#b # escaped comment character
> quux\## escaped comment character at end of name
> EOF
$ hg status
A dir/b.o
? .hgignore
Yuya Nishihara
hgignore: add escape syntax test for glob patterns...
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
test-hgignore: conditionalize an illegal Windows filename
r27381 #if no-windows
Yuya Nishihara
hgignore: add escape syntax test for glob patterns...
r42856 $ rm 'baz\' 'baz\wat' 'ba0\#wat' 'ba1\\' 'ba1\\wat' 'quu0\'
Matt Harbison
test-hgignore: conditionalize an illegal Windows filename
r27381 #endif
Bryan O'Sullivan
test-hgignore.t: add tests for comments...
r27326
Martin von Zweigbergk
tests: fix an incorrect description in test-ignore.t...
r33477 Check that '^\.' does not ignore the root directory:
Adrian Buehlmann
tests: unify test-hgignore
r12312
$ echo "^\." > .hgignore
$ hg status
A dir/b.o
? a.c
? a.o
? dir/c.o
? syntax
Siddharth Agarwal
test-hgignore: add testing for ui.ignore...
r23628 Test that patterns from ui.ignore options are read:
$ echo > .hgignore
$ cat >> $HGRCPATH << EOF
> [ui]
Durham Goode
test: move ignore test run into a subdirectory...
r25869 > ignore.other = $TESTTMP/ignorerepo/.hg/testhgignore
Siddharth Agarwal
test-hgignore: add testing for ui.ignore...
r23628 > EOF
$ echo "glob:**.o" > .hg/testhgignore
Adrian Buehlmann
tests: unify test-hgignore
r12312 $ hg status
A dir/b.o
? .hgignore
? a.c
? syntax
Siddharth Agarwal
test-hgignore: add testing for ui.ignore...
r23628 empty out testhgignore
$ echo > .hg/testhgignore
Siddharth Agarwal
ignore: resolve ignore files relative to repo root (issue4473) (BC)...
r23629
Test relative ignore path (issue4473):
$ cat >> $HGRCPATH << EOF
> [ui]
> ignore.relative = .hg/testhgignorerel
> EOF
$ echo "glob:*.o" > .hg/testhgignorerel
$ cd dir
Adrian Buehlmann
tests: unify test-hgignore
r12312 $ hg status
A dir/b.o
? .hgignore
? a.c
? syntax
Valentin Gatien-Baron
tests: show the pattern generated for a relative glob...
r43128 $ hg debugignore
Valentin Gatien-Baron
match: simplify the regexps created for glob patterns...
r43132 <includematcher includes='.*\\.o(?:/|$)'>
Adrian Buehlmann
tests: unify test-hgignore
r12312
Siddharth Agarwal
ignore: resolve ignore files relative to repo root (issue4473) (BC)...
r23629 $ cd ..
$ echo > .hg/testhgignorerel
Adrian Buehlmann
tests: unify test-hgignore
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
tests: drop a bunch of sed calls from unified tests
r12366 $ hg status
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 $TESTTMP/ignorerepo/.hgignore: ignoring invalid syntax 'invalid'
Adrian Buehlmann
tests: unify test-hgignore
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
add debugignore which yields the combined ignore patten of the .hgignore files...
r13396 $ hg debugignore
Valentin Gatien-Baron
match: simplify the regexps created for glob patterns...
r43132 <includematcher includes='.*(?:/|$)'>
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
Laurent Charignon
debugignore: find out if a file is being ignored...
r27671 $ hg debugignore b.o
b.o is ignored
Matt Harbison
test-hgignore: add globs for Windows
r27757 (ignore rule in $TESTTMP/ignorerepo/.hgignore, line 1: '*') (glob)
Laurent Charignon
debugignore: find out if a file is being ignored...
r27671
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913 $ cd ..
Durham Goode
hgignore: fix regression with hgignore directory matches (issue3921)...
r19128
Check patterns that match only the directory
FUJIWARA Katsunori
tests: add line specific for testing with fsmonitor
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
hgignore: fix regression with hgignore directory matches (issue3921)...
r19128 $ echo "^dir\$" > .hgignore
$ hg status
A dir/b.o
? .hgignore
? a.c
? a.o
FUJIWARA Katsunori
tests: add line specific for testing with fsmonitor
r33211 ? dir/c.o (fsmonitor !)
Durham Goode
hgignore: fix regression with hgignore directory matches (issue3921)...
r19128 ? syntax
Siddharth Agarwal
match: make glob '**/' match the empty string...
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
debugignore: find out if a file is being ignored...
r27671 $ hg debugignore a.c
a.c is not ignored
$ hg debugignore dir/c.o
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 dir/c.o is ignored
Matt Harbison
test-hgignore: add globs for Windows
r27757 (ignore rule in $TESTTMP/ignorerepo/.hgignore, line 2: 'dir/**/c.o') (glob)
Durham Goode
match: add 'include:' syntax...
r25215
Valentin Gatien-Baron
match: support rooted globs in hgignore...
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
match: add 'include:' syntax...
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
ignore: fix include: rules depending on current directory (issue4759)...
r25870 $ echo "include:nested/ignore" >> otherignore
Valentin Gatien-Baron
match: support rooted globs in hgignore...
r41318 $ mkdir nested nested/more
Durham Goode
ignore: fix include: rules depending on current directory (issue4759)...
r25870 $ echo "glob:*ignore" > nested/ignore
Valentin Gatien-Baron
match: support rooted globs in hgignore...
r41318 $ echo "rootglob:a" >> nested/ignore
$ touch a nested/a nested/more/a
Durham Goode
match: add 'include:' syntax...
r25215 $ hg status
A dir/b.o
Valentin Gatien-Baron
match: support rooted globs in hgignore...
r41318 ? nested/a
? nested/more/a
$ rm a nested/a nested/more/a
Durham Goode
ignore: use 'include:' rules instead of custom syntax...
r25216
Durham Goode
match: enable 'subinclude:' syntax...
r25283 $ cp otherignore goodignore
Durham Goode
ignore: use 'include:' rules instead of custom syntax...
r25216 $ echo "include:badignore" >> otherignore
$ hg status
Matt Harbison
tests: add a substitution for ENOENT/ERROR_FILE_NOT_FOUND messages...
r35230 skipping unreadable pattern file 'badignore': $ENOENT$
Durham Goode
ignore: use 'include:' rules instead of custom syntax...
r25216 A dir/b.o
Durham Goode
match: enable 'subinclude:' syntax...
r25283
$ mv goodignore otherignore
Durham Goode
ignore: fix include: rules depending on current directory (issue4759)...
r25870 Check using 'include:' while in a non-root directory
$ cd ..
$ hg -R ignorerepo status
A dir/b.o
$ cd ignorerepo
Durham Goode
match: enable 'subinclude:' syntax...
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
match: support rooted globs in hgignore...
r41318 Check including subincludes with other patterns
Durham Goode
match: enable 'subinclude:' syntax...
r25283
$ echo "subinclude:dir1/.hgignore" >> .hgignore
Valentin Gatien-Baron
match: support rooted globs in 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
Durham Goode
match: enable 'subinclude:' syntax...
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
debugignore: find out if a file is being ignored...
r27671 $ hg debugignore dir1/file2
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 dir1/file2 is ignored
Laurent Charignon
debugignore: find out why a file is being ignored (issue4856)...
r27672 (ignore rule in dir2/.hgignore, line 1: 'file*2')
Matt Harbison
debugignore: normalize the file before testing dirstate._ignore()...
r28054
#if windows
Windows paths are accepted on input
$ rm dir1/.hgignore
$ echo "dir1/file*" >> .hgignore
$ hg debugignore "dir1\file2"
Matt Harbison
tests: correct the remaining fallout from recent path style changes on Windows...
r41870 dir1/file2 is ignored
Matt Harbison
debugignore: normalize the file before testing dirstate._ignore()...
r28054 (ignore rule in $TESTTMP\ignorerepo\.hgignore, line 4: 'dir1/file*')
$ hg up -qC .
#endif
Simon Sapin
dirstate-v2: Store a hash of ignore patterns (.hgignore)...
r48202
#if dirstate-v2
Check the hash of ignore patterns written in the dirstate at offset
Simon Sapin
dirstate-v2: Use 32-bit integers instead of 64-bit for offsets...
r48270 12 + 20 + 20 + 4 + 4 + 4 + 4 = 68
Simon Sapin
dirstate-v2: Store a hash of ignore patterns (.hgignore)...
r48202
$ hg status > /dev/null
$ cat .hg/testhgignore .hg/testhgignorerel .hgignore dir2/.hgignore dir1/.hgignore dir1/.hgignoretwo | $TESTDIR/f --sha1
sha1=6e315b60f15fb5dfa02be00f3e2c8f923051f5ff
Simon Sapin
dirstate-v2: Use 32-bit integers instead of 64-bit for offsets...
r48270 >>> import binascii; print(binascii.hexlify(open(".hg/dirstate", "rb").read()[68:][:20]).decode())
Simon Sapin
dirstate-v2: Store a hash of ignore patterns (.hgignore)...
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
dirstate-v2: Use 32-bit integers instead of 64-bit for offsets...
r48270 >>> import binascii; print(binascii.hexlify(open(".hg/dirstate", "rb").read()[68:][:20]).decode())
Simon Sapin
dirstate-v2: Store a hash of ignore patterns (.hgignore)...
r48202 dea19cc7119213f24b6b582a4bae7b0cb063e34e
#endif