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
--- 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