tests/test-fastannotate-corrupt.t
author Pierre-Yves David <pierre-yves.david@octobus.net>
Wed, 31 Aug 2022 06:37:42 +0200
branchstable
changeset 49467 0705afae6253
parent 39210 1ddb296e0dee
permissions -rw-r--r--
dirstate-v2: backup the data file during the transaction (issue6730) If we backup of the docket, without doing a backup of the data file, we highly risk restoring a docket pointing to a missing file in the future. So we now backup the data-file alongside the docket.

  $ 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