##// END OF EJS Templates
wireprotov2: implement commands as a generator of objects...
wireprotov2: implement commands as a generator of objects Previously, wire protocol version 2 inherited version 1's model of having separate types to represent the results of different wire protocol commands. As I implemented more powerful commands in future commits, I found I was using a common pattern of returning a special type to hold a generator. This meant the command function required a closure to do most of the work. That made logic flow more difficult to follow. I also noticed that many commands were effectively a sequence of objects to be CBOR encoded. I think it makes sense to define version 2 commands as generators. This way, commands can simply emit the data structures they wish to send to the client. This eliminates the need for a closure in command functions and removes encoding from the bodies of commands. As part of this commit, the handling of response objects has been moved into the serverreactor class. This puts the reactor in the driver's seat with regards to CBOR encoding and error handling. Having error handling in the function that emits frames is particularly important because exceptions in that function can lead to things getting in a bad state: I'm fairly certain that uncaught exceptions in the frame generator were causing deadlocks. I also introduced a dedicated error type for explicit error reporting in command handlers. This will be used in subsequent commits. There's still a bit of work to be done here, especially around formalizing the error handling "protocol." I've added yet another TODO to track this so we don't forget. Test output changed because we're using generators and no longer know we are at the end of the data until we hit the end of the generator. This means we can't emit the end-of-stream flag until we've exhausted the generator. Hence the introduction of 0-sized end-of-stream frames. Differential Revision: https://phab.mercurial-scm.org/D4472

File last commit:

r35230:feecfefe default
r39595:07b58266 default
Show More
test-hgignore.t
339 lines | 6.8 KiB | text/troff | Tads3Lexer
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
Augie Fackler
cleanup: use $PYTHON to run python in many more tests...
r32940 $ $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:
Matt Harbison
test-hgignore: conditionalize an illegal Windows filename
r27381 $ touch 'foo#bar' 'quux#'
#if no-windows
$ touch 'baz\#wat'
#endif
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
> baz\\# # escaped comment character
> foo\#b # escaped comment character
> quux\## escaped comment character at end of name
> EOF
$ hg status
A dir/b.o
? .hgignore
Matt Harbison
test-hgignore: conditionalize an illegal Windows filename
r27381 $ rm 'foo#bar' 'quux#'
#if no-windows
$ rm 'baz\#wat'
#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
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
Martin von Zweigbergk
match: remove support for non-include patterns from includematcher...
r32502 <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
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
$ mkdir nested
$ echo "glob:*ignore" > nested/ignore
Durham Goode
match: add 'include:' syntax...
r25215 $ hg status
A dir/b.o
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
Check including subincludes with regexs
$ echo "subinclude:dir1/.hgignore" >> .hgignore
$ echo "regexp:f.le1" > dir1/.hgignore
$ hg status
? dir1/file2
? dir2/file1
Check multiple levels of sub-ignores
$ mkdir dir1/subdir
$ 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"
dir1\file2 is ignored
(ignore rule in $TESTTMP\ignorerepo\.hgignore, line 4: 'dir1/file*')
$ hg up -qC .
#endif