logtoprocess: add a test to show pager and ltp bad interaction
authorBoris Feld <boris.feld@octobus.net>
Fri, 03 Nov 2017 21:35:36 +0100
changeset 39925 dfca83594145
parent 39924 7ea24d05d702
child 39926 c4a3d3c67c4f
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
tests/test-logtoprocess.t
--- 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