test-logtoprocess.t
124 lines
| 3.4 KiB
| text/troff
|
Tads3Lexer
/ tests / test-logtoprocess.t
Matt Harbison
|
r32915 | #require no-windows | ||
Jun Wu
|
r30991 | ATTENTION: logtoprocess runs commands asynchronously. Be sure to append "| cat" | ||
to hg commands, to wait for the output, if you want to test its output. | ||||
Otherwise the test will be flaky. | ||||
Martijn Pieters
|
r28901 | Test if logtoprocess correctly captures command-related log calls. | ||
$ hg init | ||||
$ cat > $TESTTMP/foocommand.py << EOF | ||||
Augie Fackler
|
r33968 | > from __future__ import absolute_import | ||
Yuya Nishihara
|
r32337 | > from mercurial import registrar | ||
Martijn Pieters
|
r28901 | > cmdtable = {} | ||
Yuya Nishihara
|
r32337 | > command = registrar.command(cmdtable) | ||
Boris Feld
|
r34765 | > configtable = {} | ||
> configitem = registrar.configitem(configtable) | ||||
> configitem('logtoprocess', 'foo', | ||||
> default=None, | ||||
> ) | ||||
Pulkit Goyal
|
r33097 | > @command(b'foo', []) | ||
Martijn Pieters
|
r28901 | > def foo(ui, repo): | ||
> ui.log('foo', 'a message: %(bar)s\n', bar='spam') | ||||
> EOF | ||||
Simon Farnsworth
|
r30976 | $ cp $HGRCPATH $HGRCPATH.bak | ||
Martijn Pieters
|
r28901 | $ cat >> $HGRCPATH << EOF | ||
> [extensions] | ||||
> logtoprocess= | ||||
> foocommand=$TESTTMP/foocommand.py | ||||
> [logtoprocess] | ||||
Boris Feld
|
r39961 | > command=(echo 'logtoprocess command output:'; | ||
Martijn Pieters
|
r28901 | > echo "\$EVENT"; | ||
> echo "\$MSG1"; | ||||
Boris Feld
|
r39961 | > echo "\$MSG2") > $TESTTMP/command.log | ||
> commandfinish=(echo 'logtoprocess commandfinish output:'; | ||||
Martijn Pieters
|
r28901 | > echo "\$EVENT"; | ||
> echo "\$MSG1"; | ||||
> echo "\$MSG2"; | ||||
Boris Feld
|
r39961 | > echo "\$MSG3") > $TESTTMP/commandfinish.log | ||
> foo=(echo 'logtoprocess foo output:'; | ||||
Martijn Pieters
|
r28901 | > echo "\$EVENT"; | ||
> echo "\$MSG1"; | ||||
Boris Feld
|
r39961 | > echo "\$OPT_BAR") > $TESTTMP/foo.log | ||
Martijn Pieters
|
r28901 | > EOF | ||
Running a command triggers both a ui.log('command') and a | ||||
ui.log('commandfinish') call. The foo command also uses ui.log. | ||||
Jun Wu
|
r30991 | Use sort to avoid ordering issues between the various processes we spawn: | ||
Boris Feld
|
r39961 | $ hg foo | ||
$ sleep 0.2 | ||||
$ cat $TESTTMP/command.log | sort | ||||
Martijn Pieters
|
r28901 | |||
Boris Feld
|
r39961 | command | ||
foo | ||||
foo | ||||
logtoprocess command output: | ||||
#if no-chg | ||||
$ cat $TESTTMP/commandfinish.log | sort | ||||
Martijn Pieters
|
r28901 | 0 | ||
commandfinish | ||||
foo | ||||
Boris Feld
|
r39961 | foo exited 0 after * seconds (glob) | ||
logtoprocess commandfinish output: | ||||
$ cat $TESTTMP/foo.log | sort | ||||
a message: spam | ||||
Martijn Pieters
|
r28901 | foo | ||
logtoprocess foo output: | ||||
spam | ||||
Boris Feld
|
r39961 | #endif | ||
Simon Farnsworth
|
r30976 | |||
Confirm that logging blocked time catches stdio properly: | ||||
$ cp $HGRCPATH.bak $HGRCPATH | ||||
$ cat >> $HGRCPATH << EOF | ||||
> [extensions] | ||||
> logtoprocess= | ||||
> pager= | ||||
> [logtoprocess] | ||||
Boris Feld
|
r39961 | > uiblocked=echo "\$EVENT stdio \$OPT_STDIO_BLOCKED ms command \$OPT_COMMAND_DURATION ms" > $TESTTMP/uiblocked.log | ||
Simon Farnsworth
|
r30976 | > [ui] | ||
> logblockedtimes=True | ||||
> EOF | ||||
Boris Feld
|
r39961 | $ hg log | ||
$ sleep 0.2 | ||||
$ cat $TESTTMP/uiblocked.log | ||||
Simon Farnsworth
|
r30978 | uiblocked stdio [0-9]+.[0-9]* ms command [0-9]+.[0-9]* ms (re) | ||
Boris Feld
|
r39961 | |||
Try to confirm that pager wait on logtoprocess: | ||||
Add a script that wait on a file to appears for 5 seconds, if it sees it touch | ||||
another file or die after 5 seconds. If the scripts is awaited by hg, the | ||||
script will die after the timeout before we could touch the file and the | ||||
resulting file will not exists. If not, we will touch the file and see it. | ||||
$ cat > $TESTTMP/wait-output.sh << EOF | ||||
> #!/bin/sh | ||||
> for i in \`$TESTDIR/seq.py 50\`; do | ||||
> if [ -f "$TESTTMP/wait-for-touched" ]; | ||||
> then | ||||
> touch "$TESTTMP/touched"; | ||||
> break; | ||||
> else | ||||
> sleep 0.1; | ||||
> fi | ||||
> done | ||||
> EOF | ||||
$ chmod +x $TESTTMP/wait-output.sh | ||||
$ cat >> $HGRCPATH << EOF | ||||
> [extensions] | ||||
> logtoprocess= | ||||
> pager= | ||||
> [logtoprocess] | ||||
> commandfinish=$TESTTMP/wait-output.sh | ||||
> EOF | ||||
$ hg version -q --pager=always | ||||
Mercurial Distributed SCM (version *) (glob) | ||||
$ touch $TESTTMP/wait-for-touched | ||||
$ sleep 0.2 | ||||
$ test -f $TESTTMP/touched && echo "SUCCESS Pager is not waiting on ltp" || echo "FAIL Pager is waiting on ltp" | ||||
Boris Feld
|
r39962 | SUCCESS Pager is not waiting on ltp | ||