view tests/test-strip-cross.t @ 29917:f32f8bf5dc4c

streamclone: force @filecache properties to be reloaded from file Before this patch, consumev1() invokes repo.invalidate() after closing transaction, to force @filecache properties to be reloaded from files at next access, because streamclone writes data into files directly. But this doesn't work as expected in the case below: 1. at closing transaction, repo._refreshfilecachestats() refreshes file stat of each @filecache properties with streamclone-ed files This means that in-memory properties are treated as valid. 2. but streamclone doesn't changes in-memory properties This means that in-memory properties are actually invalid. 3. repo.invalidate() just forces to examine file stat of @filecache properties at the first access after it Such examination should concludes that reloading from file isn't needed, because file stat was already refreshed at (1). Therefore, invalid in-memory cached properties (2) are unintentionally treated as valid (1). This patch invokes repo.invalidate() with clearfilecache=True, to force @filecache properties to be reloaded from file at next access. BTW, it is accidental that repo.invalidate() without clearfilecache=True in streamclone case seems to work as expected before this patch. If transaction is started via "filtered repo" object, repo._refreshfilecachestats() tries to refresh file stat of each @filecache properties on "filtered repo" object, even though all of them are stored into "unfiltered repo" object. In this case, repo._refreshfilecachestats() does nothing unintentionally, but this unexpected behavior causes reloading @filecache properties after repo.invalidate(). This is reason why this patch should be applied before making _refreshfilecachestats() correctly refresh file stat of @filecache properties.
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Mon, 12 Sep 2016 03:06:28 +0900
parents aa9385f983fa
children 009d0283de5f
line wrap: on
line source

test stripping of filelogs where the linkrev doesn't always increase

  $ echo '[extensions]' >> $HGRCPATH
  $ echo 'strip =' >> $HGRCPATH
  $ hg init orig
  $ cd orig
  $ commit()
  > {
  >     hg up -qC null
  >     count=1
  >     for i in "$@"; do
  >         for f in $i; do
  >             echo $count > $f
  >         done
  >         count=`expr $count + 1`
  >     done
  >     hg commit -qAm "$*"
  > }

2 1 0 2 0 1 2

  $ commit '201 210'
  $ commit '102 120' '210'
  $ commit '021'
  $ commit '201' '021 120'
  $ commit '012 021' '102 201' '120 210'
  $ commit 'manifest-file'
  $ commit '102 120' '012 210' '021 201'
  $ commit '201 210' '021 120' '012 102'
  $ HGUSER=another-user; export HGUSER
  $ commit 'manifest-file'
  $ commit '012' 'manifest-file'
  $ cd ..
  $ hg clone -q -U -r -1 -r -2 -r -3 -r -4 -r -6 orig crossed
  $ cd crossed
  $ hg debugindex --manifest
     rev    offset  length  ..... linkrev nodeid       p1           p2 (re)
       0         0     112  .....       0 6f105cbb914d 000000000000 000000000000 (re)
       1       112      56  .....       3 1b55917b3699 000000000000 000000000000 (re)
       2       168     123  .....       1 8f3d04e263e5 000000000000 000000000000 (re)
       3       291     122  .....       2 f0ef8726ac4f 000000000000 000000000000 (re)
       4       413      87  .....       4 0b76e38b4070 000000000000 000000000000 (re)

  $ for i in 012 021 102 120 201 210 manifest-file; do
  >     echo $i
  >     hg debugindex $i
  >     echo
  > done
  012
     rev    offset  length  ..... linkrev nodeid       p1           p2 (re)
       0         0       3  .....       0 b8e02f643373 000000000000 000000000000 (re)
       1         3       3  .....       1 5d9299349fc0 000000000000 000000000000 (re)
       2         6       3  .....       2 2661d26c6496 000000000000 000000000000 (re)
  
  021
     rev    offset  length  ..... linkrev nodeid       p1           p2 (re)
       0         0       3  .....       0 b8e02f643373 000000000000 000000000000 (re)
       1         3       3  .....       2 5d9299349fc0 000000000000 000000000000 (re)
       2         6       3  .....       1 2661d26c6496 000000000000 000000000000 (re)
  
  102
     rev    offset  length  ..... linkrev nodeid       p1           p2 (re)
       0         0       3  .....       1 b8e02f643373 000000000000 000000000000 (re)
       1         3       3  .....       0 5d9299349fc0 000000000000 000000000000 (re)
       2         6       3  .....       2 2661d26c6496 000000000000 000000000000 (re)
  
  120
     rev    offset  length  ..... linkrev nodeid       p1           p2 (re)
       0         0       3  .....       1 b8e02f643373 000000000000 000000000000 (re)
       1         3       3  .....       2 5d9299349fc0 000000000000 000000000000 (re)
       2         6       3  .....       0 2661d26c6496 000000000000 000000000000 (re)
  
  201
     rev    offset  length  ..... linkrev nodeid       p1           p2 (re)
       0         0       3  .....       2 b8e02f643373 000000000000 000000000000 (re)
       1         3       3  .....       0 5d9299349fc0 000000000000 000000000000 (re)
       2         6       3  .....       1 2661d26c6496 000000000000 000000000000 (re)
  
  210
     rev    offset  length  ..... linkrev nodeid       p1           p2 (re)
       0         0       3  .....       2 b8e02f643373 000000000000 000000000000 (re)
       1         3       3  .....       1 5d9299349fc0 000000000000 000000000000 (re)
       2         6       3  .....       0 2661d26c6496 000000000000 000000000000 (re)
  
  manifest-file
     rev    offset  length  ..... linkrev nodeid       p1           p2 (re)
       0         0       3  .....       3 b8e02f643373 000000000000 000000000000 (re)
       1         3       3  .....       4 5d9299349fc0 000000000000 000000000000 (re)
  
  $ cd ..
  $ for i in 0 1 2 3 4; do
  >     hg clone -q -U --pull crossed $i
  >     echo "% Trying to strip revision $i"
  >     hg --cwd $i strip $i
  >     echo "% Verifying"
  >     hg --cwd $i verify
  >     echo
  > done
  % Trying to strip revision 0
  saved backup bundle to $TESTTMP/0/.hg/strip-backup/*-backup.hg (glob)
  % Verifying
  checking changesets
  checking manifests
  crosschecking files in changesets and manifests
  checking files
  7 files, 4 changesets, 15 total revisions
  
  % Trying to strip revision 1
  saved backup bundle to $TESTTMP/1/.hg/strip-backup/*-backup.hg (glob)
  % Verifying
  checking changesets
  checking manifests
  crosschecking files in changesets and manifests
  checking files
  7 files, 4 changesets, 14 total revisions
  
  % Trying to strip revision 2
  saved backup bundle to $TESTTMP/2/.hg/strip-backup/*-backup.hg (glob)
  % Verifying
  checking changesets
  checking manifests
  crosschecking files in changesets and manifests
  checking files
  7 files, 4 changesets, 14 total revisions
  
  % Trying to strip revision 3
  saved backup bundle to $TESTTMP/3/.hg/strip-backup/*-backup.hg (glob)
  % Verifying
  checking changesets
  checking manifests
  crosschecking files in changesets and manifests
  checking files
  7 files, 4 changesets, 19 total revisions
  
  % Trying to strip revision 4
  saved backup bundle to $TESTTMP/4/.hg/strip-backup/*-backup.hg (glob)
  % Verifying
  checking changesets
  checking manifests
  crosschecking files in changesets and manifests
  checking files
  7 files, 4 changesets, 19 total revisions