Mercurial > hg
view tests/test-progress.t @ 16853:7863ff383894
help: format command and option list help using RST
This patch changes the function which generates help text about commands and
options to use RST formatting. Tables describing options have been formatted
using RST table markup for some time already, so their appearance does not
change. Command lists, however, change appearance.
To format non-verbose command lists, RST field list markup was chosen, because
it resembles the old format:
<http://docutils.sourceforge.net/docs/user/rst/quickref.html#field-lists>
In the old (hand-coded) format of non-verbose command lists, the left column is
12 characters wide. Our minirst implementation formats field lists with a left
column 14 characters wide, so this patch changes the appearance of help output
correspondingly:
<http://markmail.org/message/krl4cxopsnii7s6z?q=mercurial+reinert+from:%22Olav+Reinert%22&page=2>
The minirst markup most closely resembling the old verbose command lists is
definition lists. But using it would cause a blank line to be inserted between
each command definition, making the output excessively long, and no more
useful than before. To avoid this, I chose to use field lists also for verbose
command help, resulting in output like this example:
add add the specified files on the next commit
annotate, blame
show changeset information by line for each file
clone make a copy of an existing repository
commit, ci commit the specified files or all outstanding changes
diff diff repository (or selected files)
export dump the header and diffs for one or more changesets
forget forget the specified files on the next commit
init create a new repository in the given directory
log, history show revision history of entire repository or files
merge merge working directory with another revision
phase set or show the current phase name
pull pull changes from the specified source
push push changes to the specified destination
qdiff diff of the current patch and subsequent modifications
qinit init a new queue repository (DEPRECATED)
qnew create a new patch
qpop pop the current patch off the stack
qpush push the next patch onto the stack
qrefresh update the current patch
remove, rm remove the specified files on the next commit
serve start stand-alone webserver
status, st show changed files in the working directory
summary, sum summarize working directory state
update, up, checkout, co
update working directory (or switch revisions)
This change is a move towards generating all help text as a list of strings
marked up with RST.
author | Olav Reinert <seroton10@gmail.com> |
---|---|
date | Sat, 02 Jun 2012 11:25:40 +0200 |
parents | f29f187ee73d |
children | 6047947afb6b |
line wrap: on
line source
$ cat > loop.py <<EOF > from mercurial import commands > > def loop(ui, loops, **opts): > loops = int(loops) > total = None > if loops >= 0: > total = loops > if opts.get('total', None): > total = int(opts.get('total')) > nested = False > if opts.get('nested', None): > nested = True > loops = abs(loops) > > for i in range(loops): > ui.progress('loop', i, 'loop.%d' % i, 'loopnum', total) > if opts.get('parallel'): > ui.progress('other', i, 'other.%d' % i, 'othernum', total) > if nested: > for j in range(2): > ui.progress('nested', j, 'nested.%d' % j, 'nestnum', 2) > ui.progress('nested', None, 'nested.done', 'nestnum', 2) > ui.progress('loop', None, 'loop.done', 'loopnum', total) > > commands.norepo += " loop" > > cmdtable = { > "loop": (loop, [('', 'total', '', 'override for total'), > ('', 'nested', False, 'show nested results'), > ('', 'parallel', False, 'show parallel sets of results'), > ], > 'hg loop LOOPS'), > } > EOF $ cp $HGRCPATH $HGRCPATH.orig $ echo "[extensions]" >> $HGRCPATH $ echo "progress=" >> $HGRCPATH $ echo "loop=`pwd`/loop.py" >> $HGRCPATH $ echo "[progress]" >> $HGRCPATH $ echo "format = topic bar number" >> $HGRCPATH $ echo "assume-tty=1" >> $HGRCPATH $ echo "width=60" >> $HGRCPATH test default params, display nothing because of delay $ hg -y loop 3 2>&1 | "$TESTDIR/filtercr.py" $ echo "delay=0" >> $HGRCPATH $ echo "refresh=0" >> $HGRCPATH test with delay=0, refresh=0 $ hg -y loop 3 2>&1 | "$TESTDIR/filtercr.py" loop [ ] 0/3 loop [===============> ] 1/3 loop [===============================> ] 2/3 \r (esc) test nested short-lived topics (which shouldn't display with nestdelay): $ hg -y loop 3 --nested 2>&1 | \ > python "$TESTDIR/filtercr.py" loop [ ] 0/3 loop [===============> ] 1/3 loop [===============================> ] 2/3 \r (esc) $ hg --config progress.changedelay=0 -y loop 3 --nested 2>&1 | \ > python "$TESTDIR/filtercr.py" loop [ ] 0/3 nested [ ] 0/2 nested [======================> ] 1/2 loop [===============> ] 1/3 nested [ ] 0/2 nested [======================> ] 1/2 loop [===============================> ] 2/3 nested [ ] 0/2 nested [======================> ] 1/2 \r (esc) test two topics being printed in parallel (as when we're doing a local --pull clone, where you get the unbundle and bundle progress at the same time): $ hg loop 3 --parallel 2>&1 | python "$TESTDIR/filtercr.py" loop [ ] 0/3 loop [===============> ] 1/3 loop [===============================> ] 2/3 \r (esc) test refresh is taken in account $ hg -y --config progress.refresh=100 loop 3 2>&1 | "$TESTDIR/filtercr.py" test format options 1 $ hg -y --config 'progress.format=number topic item+2' loop 2 2>&1 \ > | "$TESTDIR/filtercr.py" 0/2 loop lo 1/2 loop lo \r (esc) test format options 2 $ hg -y --config 'progress.format=number item-3 bar' loop 2 2>&1 \ > | "$TESTDIR/filtercr.py" 0/2 p.0 [ ] 1/2 p.1 [=======================> ] \r (esc) test format options and indeterminate progress $ hg -y --config 'progress.format=number item bar' loop -- -2 2>&1 \ > | "$TESTDIR/filtercr.py" 0 loop.0 [ <=> ] 1 loop.1 [ <=> ] \r (esc) make sure things don't fall over if count > total $ hg -y loop --total 4 6 2>&1 | "$TESTDIR/filtercr.py" loop [ ] 0/4 loop [===========> ] 1/4 loop [=======================> ] 2/4 loop [===================================> ] 3/4 loop [===============================================>] 4/4 loop [ <=> ] 5/4 \r (esc) test immediate progress completion $ hg -y loop 0 2>&1 | "$TESTDIR/filtercr.py" test delay time estimates $ cat > mocktime.py <<EOF > import os > import time > > class mocktime(object): > def __init__(self, increment): > self.time = 0 > self.increment = increment > def __call__(self): > self.time += self.increment > return self.time > > def uisetup(ui): > time.time = mocktime(int(os.environ.get('MOCKTIME', '11'))) > EOF $ cp $HGRCPATH.orig $HGRCPATH $ echo "[extensions]" >> $HGRCPATH $ echo "mocktime=`pwd`/mocktime.py" >> $HGRCPATH $ echo "progress=" >> $HGRCPATH $ echo "loop=`pwd`/loop.py" >> $HGRCPATH $ echo "[progress]" >> $HGRCPATH $ echo "assume-tty=1" >> $HGRCPATH $ echo "delay=25" >> $HGRCPATH $ echo "width=60" >> $HGRCPATH $ hg -y loop 8 2>&1 | python "$TESTDIR/filtercr.py" loop [=========> ] 2/8 1m07s loop [===============> ] 3/8 56s loop [=====================> ] 4/8 45s loop [==========================> ] 5/8 34s loop [================================> ] 6/8 23s loop [=====================================> ] 7/8 12s \r (esc) $ MOCKTIME=10000 hg -y loop 4 2>&1 | python "$TESTDIR/filtercr.py" loop [ ] 0/4 loop [=========> ] 1/4 8h21m loop [====================> ] 2/4 5h34m loop [==============================> ] 3/4 2h47m \r (esc) $ MOCKTIME=1000000 hg -y loop 4 2>&1 | python "$TESTDIR/filtercr.py" loop [ ] 0/4 loop [=========> ] 1/4 5w00d loop [====================> ] 2/4 3w03d loop [=============================> ] 3/4 11d14h \r (esc) $ MOCKTIME=14000000 hg -y loop 4 2>&1 | python "$TESTDIR/filtercr.py" loop [ ] 0/4 loop [=========> ] 1/4 1y18w loop [===================> ] 2/4 46w03d loop [=============================> ] 3/4 23w02d \r (esc) Time estimates should not fail when there's no end point: $ hg -y loop -- -4 2>&1 | python "$TESTDIR/filtercr.py" loop [ <=> ] 2 loop [ <=> ] 3 \r (esc)