Mercurial > hg
changeset 39925:dfca83594145
logtoprocess: add a test to show pager and ltp bad interaction
The next changeset will fix the bad interaction between the pager and log-to-
process. Add a test first to make the next changeset easier to understand.
Differential Revision: https://phab.mercurial-scm.org/D4815
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Fri, 03 Nov 2017 21:35:36 +0100 |
parents | 7ea24d05d702 |
children | c4a3d3c67c4f |
files | tests/test-logtoprocess.t |
diffstat | 1 files changed, 62 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/test-logtoprocess.t Sun Sep 30 21:13:16 2018 +0300 +++ b/tests/test-logtoprocess.t Fri Nov 03 21:35:36 2017 +0100 @@ -27,47 +27,49 @@ > logtoprocess= > foocommand=$TESTTMP/foocommand.py > [logtoprocess] - > command=echo 'logtoprocess command output:'; + > command=(echo 'logtoprocess command output:'; > echo "\$EVENT"; > echo "\$MSG1"; - > echo "\$MSG2" - > commandfinish=echo 'logtoprocess commandfinish output:'; + > echo "\$MSG2") > $TESTTMP/command.log + > commandfinish=(echo 'logtoprocess commandfinish output:'; > echo "\$EVENT"; > echo "\$MSG1"; > echo "\$MSG2"; - > echo "\$MSG3" - > foo=echo 'logtoprocess foo output:'; + > echo "\$MSG3") > $TESTTMP/commandfinish.log + > foo=(echo 'logtoprocess foo output:'; > echo "\$EVENT"; > echo "\$MSG1"; - > echo "\$OPT_BAR" + > echo "\$OPT_BAR") > $TESTTMP/foo.log > EOF Running a command triggers both a ui.log('command') and a ui.log('commandfinish') call. The foo command also uses ui.log. Use sort to avoid ordering issues between the various processes we spawn: - $ hg foo | cat | sort - - + $ hg foo + $ sleep 0.2 + $ cat $TESTTMP/command.log | sort - (chg !) + command + foo + foo + logtoprocess command output: + +#if no-chg + $ cat $TESTTMP/commandfinish.log | sort + 0 - a message: spam - command - command (chg !) commandfinish foo - foo - foo + foo exited 0 after * seconds (glob) + logtoprocess commandfinish output: + $ cat $TESTTMP/foo.log | sort + + a message: spam foo - foo exited 0 after * seconds (glob) - logtoprocess command output: - logtoprocess command output: (chg !) - logtoprocess commandfinish output: logtoprocess foo output: - serve --cmdserver chgunix * (glob) (chg !) - serve --cmdserver chgunix * (glob) (chg !) spam +#endif Confirm that logging blocked time catches stdio properly: $ cp $HGRCPATH.bak $HGRCPATH @@ -76,10 +78,47 @@ > logtoprocess= > pager= > [logtoprocess] - > uiblocked=echo "\$EVENT stdio \$OPT_STDIO_BLOCKED ms command \$OPT_COMMAND_DURATION ms" + > uiblocked=echo "\$EVENT stdio \$OPT_STDIO_BLOCKED ms command \$OPT_COMMAND_DURATION ms" > $TESTTMP/uiblocked.log > [ui] > logblockedtimes=True > EOF - $ hg log | cat + $ hg log + $ sleep 0.2 + $ cat $TESTTMP/uiblocked.log uiblocked stdio [0-9]+.[0-9]* ms command [0-9]+.[0-9]* ms (re) + +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" + FAIL Pager is waiting on ltp