##// END OF EJS Templates
phabricator: warn if unable to amend, instead of aborting after posting...
phabricator: warn if unable to amend, instead of aborting after posting There was a divergence in behavior here between obsolete and strip based amending. I first noticed the abort when testing outside of the test harness, but then had trouble recreating it here after reverting the code changes. It turns out, strip based amend was successfully amending the public commit after it was posted! It looks like the protection is in the `commit --amend` command, not in the underlying code that it calls. I considered doing a preflight check and aborting. But the locks are only acquired at the end, if amending, and this is too large a section of code to be wrapped in a maybe-it's-held-or-not context manager for my tastes. Additionally, some people do post-push reviews, and amending is the default behavior, so they shouldn't see a misleading error message. The lack of a 'Differential Revision' entry in the commit message breaks a {phabreview} test, so it had to be partially conditionalized.

File last commit:

r40908:44378796 default
r41198:0101a35d default
Show More
test-logtoprocess.t
130 lines | 3.6 KiB | text/troff | Tads3Lexer
/ tests / test-logtoprocess.t
Matt Harbison
test-logtoprocess: don't run on Windows...
r32915 #require no-windows
Jun Wu
test-logtoprocess: use cat to wait for outputs...
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
logtoprocess: new experimental extension...
r28901 Test if logtoprocess correctly captures command-related log calls.
$ hg init
$ cat > $TESTTMP/foocommand.py << EOF
Augie Fackler
tests: update test-logtoprocess to pass our import checker
r33968 > from __future__ import absolute_import
Yuya Nishihara
registrar: move cmdutil.command to registrar module (API)...
r32337 > from mercurial import registrar
Martijn Pieters
logtoprocess: new experimental extension...
r28901 > cmdtable = {}
Yuya Nishihara
registrar: move cmdutil.command to registrar module (API)...
r32337 > command = registrar.command(cmdtable)
Boris Feld
configitems: register the test 'logtoprocess.foo' config
r34765 > configtable = {}
> configitem = registrar.configitem(configtable)
Yuya Nishihara
py3: byte-stringify inline extension in test-logtoprocess.t
r40655 > configitem(b'logtoprocess', b'foo',
Boris Feld
configitems: register the test 'logtoprocess.foo' config
r34765 > default=None,
> )
Boris Feld
logtoprocess: sends the canonical command name to the subprocess...
r40438 > @command(b'foobar', [])
Martijn Pieters
logtoprocess: new experimental extension...
r28901 > def foo(ui, repo):
Yuya Nishihara
py3: byte-stringify inline extension in test-logtoprocess.t
r40655 > ui.log(b'foo', b'a message: %s\n', b'spam')
Martijn Pieters
logtoprocess: new experimental extension...
r28901 > EOF
Simon Farnsworth
ui: provide a mechanism to track and log blocked time...
r30976 $ cp $HGRCPATH $HGRCPATH.bak
Martijn Pieters
logtoprocess: new experimental extension...
r28901 $ cat >> $HGRCPATH << EOF
> [extensions]
> logtoprocess=
> foocommand=$TESTTMP/foocommand.py
> [logtoprocess]
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 > command=(echo 'logtoprocess command output:';
Martijn Pieters
logtoprocess: new experimental extension...
r28901 > echo "\$EVENT";
Yuya Nishihara
logtoprocess: drop support for ui.log() call with invalid msg arguments (BC)...
r40656 > echo "\$MSG1") > $TESTTMP/command.log
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 > commandfinish=(echo 'logtoprocess commandfinish output:';
Martijn Pieters
logtoprocess: new experimental extension...
r28901 > echo "\$EVENT";
> echo "\$MSG1";
Boris Feld
logtoprocess: sends the canonical command name to the subprocess...
r40438 > echo "canonical: \$OPT_CANONICAL_COMMAND") > $TESTTMP/commandfinish.log
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 > foo=(echo 'logtoprocess foo output:';
Martijn Pieters
logtoprocess: new experimental extension...
r28901 > echo "\$EVENT";
Yuya Nishihara
logtoprocess: drop support for ui.log() call with invalid msg arguments (BC)...
r40656 > echo "\$MSG1") > $TESTTMP/foo.log
Martijn Pieters
logtoprocess: new experimental extension...
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
test-logtoprocess: use cat to wait for outputs...
r30991 Use sort to avoid ordering issues between the various processes we spawn:
Boris Feld
logtoprocess: sends the canonical command name to the subprocess...
r40438 $ hg fooba
Augie Fackler
tests: sleep longer in test-logtoprocess.t...
r40413 $ sleep 1
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 $ cat $TESTTMP/command.log | sort
Martijn Pieters
logtoprocess: new experimental extension...
r28901
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 command
Boris Feld
logtoprocess: sends the canonical command name to the subprocess...
r40438 fooba
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 logtoprocess command output:
#if no-chg
$ cat $TESTTMP/commandfinish.log | sort
Boris Feld
logtoprocess: sends the canonical command name to the subprocess...
r40438 canonical: foobar
Martijn Pieters
logtoprocess: new experimental extension...
r28901 commandfinish
Boris Feld
logtoprocess: sends the canonical command name to the subprocess...
r40438 fooba exited 0 after * seconds (glob)
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 logtoprocess commandfinish output:
$ cat $TESTTMP/foo.log | sort
a message: spam
Martijn Pieters
logtoprocess: new experimental extension...
r28901 foo
logtoprocess foo output:
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 #endif
Simon Farnsworth
ui: provide a mechanism to track and log blocked time...
r30976
Confirm that logging blocked time catches stdio properly:
$ cp $HGRCPATH.bak $HGRCPATH
$ cat >> $HGRCPATH << EOF
> [extensions]
> logtoprocess=
> pager=
> [logtoprocess]
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 > uiblocked=echo "\$EVENT stdio \$OPT_STDIO_BLOCKED ms command \$OPT_COMMAND_DURATION ms" > $TESTTMP/uiblocked.log
Simon Farnsworth
ui: provide a mechanism to track and log blocked time...
r30976 > [ui]
> logblockedtimes=True
> EOF
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 $ hg log
Augie Fackler
tests: sleep longer in test-logtoprocess.t...
r40413 $ sleep 1
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 $ cat $TESTTMP/uiblocked.log
Simon Farnsworth
ui: log time spent blocked on stdio...
r30978 uiblocked stdio [0-9]+.[0-9]* ms command [0-9]+.[0-9]* ms (re)
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
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.
Boris Feld
test: update test-logtoprocess.t to not requires less...
r40908 $ cat >> fakepager.py <<EOF
> import sys
> printed = False
> for line in sys.stdin:
> sys.stdout.write(line)
> printed = True
> if not printed:
> sys.stdout.write('paged empty output!\n')
> EOF
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 $ 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=
Boris Feld
test: update test-logtoprocess.t to not requires less...
r40908 > [pager]
> pager = "$PYTHON" $TESTTMP/fakepager.py
Boris Feld
logtoprocess: add a test to show pager and ltp bad interaction...
r39961 > [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
logtoprocess: connect all fds to /dev/null to avoid bad interaction with pager...
r39962 SUCCESS Pager is not waiting on ltp