--- /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