Mercurial > hg
diff tests/test-fastannotate-corrupt.t @ 39210:1ddb296e0dee
fastannotate: initial import from Facebook's hg-experimental
I made as few changes as I could to get the tests to pass, but this
was a bit involved due to some churn in the blame code since someone
last gave fastannotate any TLC.
There's still follow-up work here to rip out support for old versions
of hg and to integrate the protocol with modern standards.
Some performance numbers (all on my 2016 MacBook Pro with a 2.6Ghz i7):
Mercurial mercurial/manifest.py
traditional blame
time: real 1.050 secs (user 0.990+0.000 sys 0.060+0.000)
build cache
time: real 5.900 secs (user 5.720+0.000 sys 0.110+0.000)
fastannotate
time: real 0.120 secs (user 0.100+0.000 sys 0.020+0.000)
Mercurial mercurial/localrepo.py
traditional blame
time: real 3.330 secs (user 3.220+0.000 sys 0.070+0.000)
build cache
time: real 30.610 secs (user 30.190+0.000 sys 0.230+0.000)
fastannotate
time: real 0.180 secs (user 0.160+0.000 sys 0.020+0.000)
mozilla-central dom/ipc/ContentParent.cpp
traditional blame
time: real 7.640 secs (user 7.210+0.000 sys 0.380+0.000)
build cache
time: real 98.650 secs (user 97.000+0.000 sys 0.950+0.000)
fastannotate
time: real 1.580 secs (user 1.340+0.000 sys 0.240+0.000)
mozilla-central dom/base/nsDocument.cpp
traditional blame
time: real 17.110 secs (user 16.490+0.000 sys 0.500+0.000)
build cache
time: real 399.750 secs (user 394.520+0.000 sys 2.610+0.000)
fastannotate
time: real 1.780 secs (user 1.530+0.000 sys 0.240+0.000)
So building the cache is expensive (but might be faster with xdiff
enabled), but the blame results are *way* faster.
Differential Revision: https://phab.mercurial-scm.org/D3994
author | Augie Fackler <augie@google.com> |
---|---|
date | Mon, 30 Jul 2018 22:50:00 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-fastannotate-corrupt.t Mon Jul 30 22:50:00 2018 -0400 @@ -0,0 +1,83 @@ + $ cat >> $HGRCPATH << EOF + > [extensions] + > fastannotate= + > EOF + + $ hg init repo + $ cd repo + $ for i in 0 1 2 3 4; do + > echo $i >> a + > echo $i >> b + > hg commit -A -m $i a b + > done + +use the "debugbuildannotatecache" command to build annotate cache at rev 0 + + $ hg debugbuildannotatecache --debug --config fastannotate.mainbranch=0 + fastannotate: a: 1 new changesets in the main branch + fastannotate: b: 1 new changesets in the main branch + +"debugbuildannotatecache" should work with broken cache (and other files would +be built without being affected). note: linelog being broken is only noticed +when we try to append to it. + + $ echo 'CORRUPT!' >> .hg/fastannotate/default/a.m + $ hg debugbuildannotatecache --debug --config fastannotate.mainbranch=1 + fastannotate: a: rebuilding broken cache + fastannotate: a: 2 new changesets in the main branch + fastannotate: b: 1 new changesets in the main branch + + $ echo 'CANNOT REUSE!' > .hg/fastannotate/default/a.l + $ hg debugbuildannotatecache --debug --config fastannotate.mainbranch=2 + fastannotate: a: rebuilding broken cache + fastannotate: a: 3 new changesets in the main branch + fastannotate: b: 1 new changesets in the main branch + + $ rm .hg/fastannotate/default/a.m + $ hg debugbuildannotatecache --debug --config fastannotate.mainbranch=3 + fastannotate: a: rebuilding broken cache + fastannotate: a: 4 new changesets in the main branch + fastannotate: b: 1 new changesets in the main branch + + $ rm .hg/fastannotate/default/a.l + $ hg debugbuildannotatecache --debug --config fastannotate.mainbranch=3 + $ hg debugbuildannotatecache --debug --config fastannotate.mainbranch=4 + fastannotate: a: rebuilding broken cache + fastannotate: a: 5 new changesets in the main branch + fastannotate: b: 1 new changesets in the main branch + +"fastannotate" should deal with file corruption as well + + $ rm -rf .hg/fastannotate + $ hg fastannotate --debug -r 0 a + fastannotate: a: 1 new changesets in the main branch + 0: 0 + + $ echo 'CORRUPT!' >> .hg/fastannotate/default/a.m + $ hg fastannotate --debug -r 0 a + fastannotate: a: cache broken and deleted + fastannotate: a: 1 new changesets in the main branch + 0: 0 + + $ echo 'CORRUPT!' > .hg/fastannotate/default/a.l + $ hg fastannotate --debug -r 1 a + fastannotate: a: cache broken and deleted + fastannotate: a: 2 new changesets in the main branch + 0: 0 + 1: 1 + + $ rm .hg/fastannotate/default/a.l + $ hg fastannotate --debug -r 1 a + fastannotate: a: using fast path (resolved fctx: True) + fastannotate: a: cache broken and deleted + fastannotate: a: 2 new changesets in the main branch + 0: 0 + 1: 1 + + $ rm .hg/fastannotate/default/a.m + $ hg fastannotate --debug -r 2 a + fastannotate: a: cache broken and deleted + fastannotate: a: 3 new changesets in the main branch + 0: 0 + 1: 1 + 2: 2