##// END OF EJS Templates
dirstate-v2: Add support when Rust is not enabled...
dirstate-v2: Add support when Rust is not enabled This wires into `dirstatemap` the parser and serializer added in previous changesets. The memory representation is still the same, with a flat `dict` for `DirstateItem`s and another one for copy sources. Serialization always creates a new dirstate-v2 data file and does not support (when Rust is not enabled) appending to an existing one, since we don’t keep track of which tree nodes are new or modified. Instead the tree is reconstructed during serialization. Differential Revision: https://phab.mercurial-scm.org/D11520

File last commit:

r49037:b4f83c9e default
r49037:b4f83c9e default
Show More
test-hgignore.t
417 lines | 9.2 KiB | text/troff | Tads3Lexer
Simon Sapin
dirstate: Remove the flat Rust DirstateMap implementation...
r48882 #testcases dirstate-v1 dirstate-v2
Simon Sapin
dirstate-tree: Add a dirstate-v1-tree variant of some tests...
r47900
Simon Sapin
dirstate-v2: Add a variant of some tests, that uses the new format...
r48056 #if dirstate-v2
$ 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
Simon Sapin
dirstate-v2: Add support when Rust is not enabled...
r49037 #if dirstate-v2 rust
Simon Sapin
dirstate-v2: Store a hash of ignore patterns (.hgignore)...
r48202
Simon Sapin
dirstate-v2: Introduce a docket file...
r48474 Check the hash of ignore patterns written in the dirstate
Simon Sapin
dirstate-v2: Add support when Rust is not enabled...
r49037 This is an optimization that is only relevant when using the Rust extensions
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: Introduce a docket file...
r48474 $ hg debugdirstateignorepatternshash
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: Introduce a docket file...
r48474 $ hg debugdirstateignorepatternshash
Simon Sapin
dirstate-v2: Store a hash of ignore patterns (.hgignore)...
r48202 dea19cc7119213f24b6b582a4bae7b0cb063e34e
#endif