view tests/test-strip-cross.t @ 27784:432242f41d9f

obsolete: make _computeobsoleteset much faster This patch makes _computeobsoleteset much faster by looping over the draft and secrets as opposed to looping over the successors. This works because "number of draft and secret" is typically way smaller(<100) than the number of successor in the repo (~90k in my checkout of core mercurial as of today). And also because it is very fast to compute "not public()". I timed the code with the following setup: """ from mercurial import hg, ui, obsolete ui = ui.ui() repo = hg.repository(ui, "~/hg") l = repo.obsstore.successors # This caches the result """ With about 90k successors. k=obsolete._computeobsoleteset(repo) before this patch: 10 loops, best of 3: 33.9 ms per loop k=obsolete._computeobsoleteset(repo) after this patch: 10000 loops, best of 3: 83.3 µs per loop
author Laurent Charignon <lc2817@columbia.edu>
date Wed, 13 Jan 2016 21:52:26 -0800
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