Mercurial > hg
view tests/test-contrib.t @ 44861:065421e12248
files: speed up `hg files` when no flags change display
It's not the first time I see slowness from this command slow down
tools built on top of hg.
The majority of the time is spent merely printing the result before
this change, which is clearly not how it should be (especially since
the computation of the result also looks slow).
Running `hg files` in mozilla-central:
parent revision: 1,260s
this commit: 0,683s
this commit without batching ui.write: 0,931s
this commit replacing the body of the loop with `pass`: 0,566s
This looks like a prime candidate for a rust fast path, but until
then, it seems reasonable to optimize the python.
Differential Revision: https://phab.mercurial-scm.org/D8586
author | Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> |
---|---|
date | Tue, 26 May 2020 08:15:09 -0400 |
parents | 5abc47d4ca6b |
children |
line wrap: on
line source
Set vars: $ CONTRIBDIR="$TESTDIR/../contrib" Test simplemerge command: $ cp "$CONTRIBDIR/simplemerge" . $ echo base > base $ echo local > local $ cat base >> local $ cp local orig $ cat base > other $ echo other >> other changing local directly $ "$PYTHON" simplemerge local base other && echo "merge succeeded" merge succeeded $ cat local local base other $ cp orig local printing to stdout $ "$PYTHON" simplemerge -p local base other local base other local: $ cat local local base conflicts $ cp base conflict-local $ cp other conflict-other $ echo not other >> conflict-local $ echo end >> conflict-local $ echo end >> conflict-other $ "$PYTHON" simplemerge -p conflict-local base conflict-other base <<<<<<< conflict-local not other ======= other >>>>>>> conflict-other end [1] 1 label $ "$PYTHON" simplemerge -p -L foo conflict-local base conflict-other base <<<<<<< foo not other ======= other >>>>>>> conflict-other end [1] 2 labels $ "$PYTHON" simplemerge -p -L foo -L bar conflict-local base conflict-other base <<<<<<< foo not other ======= other >>>>>>> bar end [1] 3 labels $ "$PYTHON" simplemerge -p -L foo -L bar -L base conflict-local base conflict-other base <<<<<<< foo not other end ||||||| base ======= other end >>>>>>> bar [1] too many labels $ "$PYTHON" simplemerge -p -L foo -L bar -L baz -L buz conflict-local base conflict-other abort: can only specify three labels. [255] binary file $ "$PYTHON" -c "f = open('binary-local', 'w'); f.write('\x00'); f.close()" $ cat orig >> binary-local $ "$PYTHON" simplemerge -p binary-local base other warning: binary-local looks like a binary file. [1] binary file --text $ "$PYTHON" simplemerge -a -p binary-local base other 2>&1 warning: binary-local looks like a binary file. \x00local (esc) base other help $ "$PYTHON" simplemerge --help simplemerge [OPTS] LOCAL BASE OTHER Simple three-way file merge utility with a minimal feature set. Apply to LOCAL the changes necessary to go from BASE to OTHER. By default, LOCAL is overwritten with the results of this operation. options: -L --label labels to use on conflict markers -a --text treat all files as text -p --print print results instead of overwriting LOCAL --no-minimal no effect (DEPRECATED) -h --help display help and exit -q --quiet suppress output wrong number of arguments $ "$PYTHON" simplemerge simplemerge: wrong number of arguments simplemerge [OPTS] LOCAL BASE OTHER Simple three-way file merge utility with a minimal feature set. Apply to LOCAL the changes necessary to go from BASE to OTHER. By default, LOCAL is overwritten with the results of this operation. options: -L --label labels to use on conflict markers -a --text treat all files as text -p --print print results instead of overwriting LOCAL --no-minimal no effect (DEPRECATED) -h --help display help and exit -q --quiet suppress output [1] bad option $ "$PYTHON" simplemerge --foo -p local base other simplemerge: option --foo not recognized simplemerge [OPTS] LOCAL BASE OTHER Simple three-way file merge utility with a minimal feature set. Apply to LOCAL the changes necessary to go from BASE to OTHER. By default, LOCAL is overwritten with the results of this operation. options: -L --label labels to use on conflict markers -a --text treat all files as text -p --print print results instead of overwriting LOCAL --no-minimal no effect (DEPRECATED) -h --help display help and exit -q --quiet suppress output [1]