##// END OF EJS Templates
run-tests: mechanism to report exceptions during test execution...
run-tests: mechanism to report exceptions during test execution Sometimes when running tests you introduce a ton of exceptions. The most extreme example of this is running Mercurial with Python 3, which currently spews thousands of exceptions when running the test harness. This commit adds an opt-in feature to run-tests.py to aggregate exceptions encountered by `hg` when running tests. When --exceptions is used, the test harness enables the "logexceptions" extension in the test environment. This extension wraps the Mercurial function to handle exceptions and writes information about the exception to a random filename in a directory defined by the test harness via an environment variable. At the end of the test harness, these files are parsed, aggregated, and a list of all unique Mercurial frames triggering exceptions is printed in order of frequency. This feature is intended to aid Python 3 development. I've only really tested it on Python 3. There is no shortage of improvements that could be made. e.g. we could write a separate file containing the exception report - maybe even an HTML report. We also don't capture which tests demonstrate the exceptions, so there's no turnkey way to test whether a code change made an exception disappear. Perfect is the enemy of good. I think the current patch is useful enough to land. Whoever uses it can send patches to imprve its usefulness. Differential Revision: https://phab.mercurial-scm.org/D1477

File last commit:

r27524:f5b6b4e5 default
r35191:bd8875b6 default
Show More
test-eol-hook.t
218 lines | 5.9 KiB | text/troff | Tads3Lexer
Matt Mackall
tests: unify test-eol-hook
r12423 Test the EOL hook
$ hg init main
$ cat > main/.hg/hgrc <<EOF
> [hooks]
> pretxnchangegroup = python:hgext.eol.hook
> EOF
$ hg clone main fork
updating to branch default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd fork
Create repo
$ cat > .hgeol <<EOF
> [patterns]
> mixed.txt = BIN
Antoine Pitrou
eol: stop after first matched rule in hook (issue2660)...
r13501 > crlf.txt = CRLF
Matt Mackall
tests: unify test-eol-hook
r12423 > **.txt = native
> EOF
$ hg add .hgeol
$ hg commit -m 'Commit .hgeol'
$ printf "first\nsecond\nthird\n" > a.txt
$ hg add a.txt
$ hg commit -m 'LF a.txt'
$ hg push ../main
pushing to ../main
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files
$ printf "first\r\nsecond\r\nthird\n" > a.txt
$ hg commit -m 'CRLF a.txt'
$ hg push ../main
pushing to ../main
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
Patrick Mezard
eol: improve hook failure output...
r13649 error: pretxnchangegroup hook failed: end-of-line check failed:
a.txt in a8ee6548cd86 should not have CRLF line endings
Matt Mackall
tests: unify test-eol-hook
r12423 transaction abort!
rollback completed
Patrick Mezard
eol: improve hook failure output...
r13649 abort: end-of-line check failed:
a.txt in a8ee6548cd86 should not have CRLF line endings
Matt Mackall
tests: unify test-eol-hook
r12423 [255]
$ printf "first\nsecond\nthird\n" > a.txt
$ hg commit -m 'LF a.txt (fixed)'
$ hg push ../main
pushing to ../main
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files
Antoine Pitrou
eol: stop after first matched rule in hook (issue2660)...
r13501
$ printf "first\nsecond\nthird\n" > crlf.txt
$ hg add crlf.txt
$ hg commit -m 'LF crlf.txt'
$ hg push ../main
pushing to ../main
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
Patrick Mezard
eol: improve hook failure output...
r13649 error: pretxnchangegroup hook failed: end-of-line check failed:
crlf.txt in 004ba2132725 should not have LF line endings
Antoine Pitrou
eol: stop after first matched rule in hook (issue2660)...
r13501 transaction abort!
rollback completed
Patrick Mezard
eol: improve hook failure output...
r13649 abort: end-of-line check failed:
crlf.txt in 004ba2132725 should not have LF line endings
Antoine Pitrou
eol: stop after first matched rule in hook (issue2660)...
r13501 [255]
$ printf "first\r\nsecond\r\nthird\r\n" > crlf.txt
$ hg commit -m 'CRLF crlf.txt (fixed)'
$ hg push ../main
pushing to ../main
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files
Patrick Mezard
eol: make the hook check all new heads, not only tip (issue2666)...
r13616
$ printf "first\r\nsecond" > b.txt
$ hg add b.txt
$ hg commit -m 'CRLF b.txt'
$ hg push ../main
pushing to ../main
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
Patrick Mezard
eol: improve hook failure output...
r13649 error: pretxnchangegroup hook failed: end-of-line check failed:
b.txt in fbcf9b1025f5 should not have CRLF line endings
Patrick Mezard
eol: make the hook check all new heads, not only tip (issue2666)...
r13616 transaction abort!
rollback completed
Patrick Mezard
eol: improve hook failure output...
r13649 abort: end-of-line check failed:
b.txt in fbcf9b1025f5 should not have CRLF line endings
Patrick Mezard
eol: make the hook check all new heads, not only tip (issue2666)...
r13616 [255]
$ hg up -r -2
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ printf "some\nother\nfile" > c.txt
$ hg add c.txt
$ hg commit -m "LF c.txt, b.txt doesn't exist here"
created new head
$ hg push -f ../main
pushing to ../main
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files (+1 heads)
Patrick Mezard
eol: improve hook failure output...
r13649 error: pretxnchangegroup hook failed: end-of-line check failed:
b.txt in fbcf9b1025f5 should not have CRLF line endings
Patrick Mezard
eol: make the hook check all new heads, not only tip (issue2666)...
r13616 transaction abort!
rollback completed
Patrick Mezard
eol: improve hook failure output...
r13649 abort: end-of-line check failed:
b.txt in fbcf9b1025f5 should not have CRLF line endings
Patrick Mezard
eol: make the hook check all new heads, not only tip (issue2666)...
r13616 [255]
Patrick Mezard
eol: rename hook into checkheadshook, add checkallhook (issue2665)...
r13617
Test checkheadshook alias
$ cat > ../main/.hg/hgrc <<EOF
> [hooks]
> pretxnchangegroup = python:hgext.eol.checkheadshook
> EOF
$ hg push -f ../main
pushing to ../main
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files (+1 heads)
Patrick Mezard
eol: improve hook failure output...
r13649 error: pretxnchangegroup hook failed: end-of-line check failed:
b.txt in fbcf9b1025f5 should not have CRLF line endings
Patrick Mezard
eol: rename hook into checkheadshook, add checkallhook (issue2665)...
r13617 transaction abort!
rollback completed
Patrick Mezard
eol: improve hook failure output...
r13649 abort: end-of-line check failed:
b.txt in fbcf9b1025f5 should not have CRLF line endings
Patrick Mezard
eol: rename hook into checkheadshook, add checkallhook (issue2665)...
r13617 [255]
We can fix the head and push again
$ hg up 6
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ printf "first\nsecond" > b.txt
$ hg ci -m "remove CRLF from b.txt"
$ hg push -f ../main
pushing to ../main
searching for changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 3 changes to 2 files (+1 heads)
$ hg -R ../main rollback
repository tip rolled back to revision 5 (undo push)
Test it still fails with checkallhook
$ cat > ../main/.hg/hgrc <<EOF
> [hooks]
> pretxnchangegroup = python:hgext.eol.checkallhook
> EOF
$ hg push -f ../main
pushing to ../main
searching for changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 3 changes to 2 files (+1 heads)
Patrick Mezard
eol: improve hook failure output...
r13649 error: pretxnchangegroup hook failed: end-of-line check failed:
b.txt in fbcf9b1025f5 should not have CRLF line endings
Patrick Mezard
eol: rename hook into checkheadshook, add checkallhook (issue2665)...
r13617 transaction abort!
rollback completed
Patrick Mezard
eol: improve hook failure output...
r13649 abort: end-of-line check failed:
b.txt in fbcf9b1025f5 should not have CRLF line endings
Patrick Mezard
eol: rename hook into checkheadshook, add checkallhook (issue2665)...
r13617 [255]
But we can push the clean head
$ hg push -r7 -f ../main
pushing to ../main
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
Patrick Mezard
eol: improve hook failure output...
r13649 Test multiple files/revisions output
$ printf "another\r\nbad\r\none" > d.txt
$ hg add d.txt
$ hg ci -m "add d.txt"
$ hg push -f ../main
pushing to ../main
searching for changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 3 changes to 2 files (+1 heads)
error: pretxnchangegroup hook failed: end-of-line check failed:
Bryan O'Sullivan
eol: make output stable...
r27524 b.txt in fbcf9b1025f5 should not have CRLF line endings
Patrick Mezard
eol: improve hook failure output...
r13649 d.txt in a7040e68714f should not have CRLF line endings
transaction abort!
rollback completed
abort: end-of-line check failed:
Bryan O'Sullivan
eol: make output stable...
r27524 b.txt in fbcf9b1025f5 should not have CRLF line endings
Patrick Mezard
eol: improve hook failure output...
r13649 d.txt in a7040e68714f should not have CRLF line endings
[255]
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
$ cd ..