Mercurial > hg
view tests/test-inotify-issue1208.t @ 17970:0b03454abae7
ancestor: faster algorithm for difference of ancestor sets
One of the major reasons rebase is slow in large repositories is
the computation of the detach set: the set of ancestors of the
changesets to rebase not in the destination parent. This is currently
done via a revset that does two walks all the way to the root of
the DAG. Instead of doing that, to find ancestors of a set <revs>
not in another set <common> we walk up the tree in reverse revision
number order, maintaining sets of nodes visited from <revs>, <common>
or both.
For the common case where the sets are close both topologically and
in revision number (relative to repository size), this has been
found to speed up rebase by around 15-20%. When the nodes are farther
apart and the DAG is highly branching, it is harder to say which
would win.
Here's how long computing the detach set takes in a linear repository
with over 400000 changesets, rebasing near tip:
Rebasing across 4 changesets
Revset method: 2.2s
New algorithm: 0.00015s
Rebasing across 250 changesets
Revset method: 2.2s
New algorithm: 0.00069s
Rebasing across 10000 changesets
Revset method: 2.4s
New algorithm: 0.019s
author | Siddharth Agarwal <sid0@fb.com> |
---|---|
date | Mon, 26 Nov 2012 11:46:51 -0800 |
parents | f2719b387380 |
children | cd53e40ab0e2 |
line wrap: on
line source
$ "$TESTDIR/hghave" inotify || exit 80 $ echo "[extensions]" >> $HGRCPATH $ echo "inotify=" >> $HGRCPATH $ p="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" $ hg init $p $ cd $p fail $ ln -sf doesnotexist .hg/inotify.sock $ hg st abort: inotify-server: cannot start: .hg/inotify.sock is a broken symlink inotify-client: could not start inotify server: child process failed to start $ hg inserve abort: inotify-server: cannot start: .hg/inotify.sock is a broken symlink [255] $ rm .hg/inotify.sock inserve $ hg inserve -d --pid-file=hg.pid $ cat hg.pid >> "$DAEMON_PIDS" status $ hg status ? hg.pid if we try to start twice the server, make sure we get a correct error $ hg inserve -d --pid-file=hg2.pid abort: inotify-server: cannot start: socket is already bound abort: child process failed to start [255] $ kill `cat hg.pid` $ cd ..