Mercurial > hg
view tests/test-logtoprocess.t @ 40432:968dd7e02ac5
changegroup: allow to force delta to be against p1
This new developer option is useful to general more "generic" bundle. Without
this option, a bundle generated from the repository use deltas similar to the
one stored in the specific repository it was generated from. This makes
performance testing a bit tricky.
Using deltas similar to the final result means all delta stored in the bundle
can be applied to the target repository without any further processing (except
for the rare case of a full snapshot). The application of such bundles
(almost) never exercises the (slower) path of searching for a new valid delta.
This result in unrealistic and too favorable timing and profile.
Instead, we introduce an option to make sure all revisions are stored as a
delta against p1. It might not be the best generation option, but it
guarantees that the content will be "generic", not favoring a specific target.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Wed, 10 Oct 2018 00:21:02 +0200 |
parents | 106adc261492 |
children | 175b590b1f51 |
line wrap: on
line source
#require no-windows 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. Test if logtoprocess correctly captures command-related log calls. $ hg init $ cat > $TESTTMP/foocommand.py << EOF > from __future__ import absolute_import > from mercurial import registrar > cmdtable = {} > command = registrar.command(cmdtable) > configtable = {} > configitem = registrar.configitem(configtable) > configitem('logtoprocess', 'foo', > default=None, > ) > @command(b'foobar', []) > def foo(ui, repo): > ui.log('foo', 'a message: %s\n', 'spam') > EOF $ cp $HGRCPATH $HGRCPATH.bak $ cat >> $HGRCPATH << EOF > [extensions] > logtoprocess= > foocommand=$TESTTMP/foocommand.py > [logtoprocess] > command=(echo 'logtoprocess command output:'; > echo "\$EVENT"; > echo "\$MSG1"; > echo "\$MSG2") > $TESTTMP/command.log > commandfinish=(echo 'logtoprocess commandfinish output:'; > echo "\$EVENT"; > echo "\$MSG1"; > echo "\$MSG2"; > echo "\$MSG3"; > echo "canonical: \$OPT_CANONICAL_COMMAND") > $TESTTMP/commandfinish.log > foo=(echo 'logtoprocess foo output:'; > echo "\$EVENT"; > echo "\$MSG1"; > echo "\$MSG2") > $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 fooba $ sleep 1 $ cat $TESTTMP/command.log | sort command fooba fooba logtoprocess command output: #if no-chg $ cat $TESTTMP/commandfinish.log | sort 0 canonical: foobar commandfinish fooba fooba exited 0 after * seconds (glob) logtoprocess commandfinish output: $ cat $TESTTMP/foo.log | sort a message: spam foo logtoprocess foo output: spam #endif Confirm that logging blocked time catches stdio properly: $ cp $HGRCPATH.bak $HGRCPATH $ cat >> $HGRCPATH << EOF > [extensions] > logtoprocess= > pager= > [logtoprocess] > uiblocked=echo "\$EVENT stdio \$OPT_STDIO_BLOCKED ms command \$OPT_COMMAND_DURATION ms" > $TESTTMP/uiblocked.log > [ui] > logblockedtimes=True > EOF $ hg log $ sleep 1 $ 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" SUCCESS Pager is not waiting on ltp