view tests/test-pull-pull-corruption2.t @ 16101:20ad8f0512a2 stable

mq: restore _branchtags() fast path (issue3223) Since a5917346c72e, mq saves the nodeid of the first applied patch to cache/branchheads, which breaks the optimized cache handling introduced in fbf8320f25c8. The problem is the revision being committed is appended to mqrepo.applied after the commit succeeds, which means mqrepo._branchtags() performs a regular update and write the first applied patch to the branch cache. One solution is to set a context variable _committingpatch on the mqrepo while it is committing a patch and to take it in account when deciding to fast-path mqrepo._branchtags(). Not really elegant but it works. The changes to test-mq-caches.t reverse changes introduced by a5917346c72e. The cache should not have been updated with mq records. The changes to test-keyword.t are indirectly caused by a5917346c72e. Reported and analyzed by Yuya Nishihara <yuya@tcha.org> Notes: - qpush still makes a slow path _branchtags() call when checking heads. Maybe this can be optimized. - be careful when merging this patch in default as secretcommit() was renamed newcommit() right after the end of the code freeze.
author Patrick Mezard <patrick@mezard.eu>
date Tue, 07 Feb 2012 18:47:16 +0100
parents 2f8740c639e4
children
line wrap: on
line source

Corrupt an hg repo with two pulls.
create one repo with a long history

  $ hg init source1
  $ cd source1
  $ touch foo
  $ hg add foo
  $ for i in 1 2 3 4 5 6 7 8 9 10; do
  >     echo $i >> foo
  >     hg ci -m $i
  > done
  $ cd ..

create a third repo to pull both other repos into it

  $ hg init version2
  $ hg -R version2 pull source1 &
  $ sleep 1
  pulling from source1
  requesting all changes
  adding changesets
  adding manifests
  adding file changes
  added 10 changesets with 10 changes to 1 files
  (run 'hg update' to get a working copy)
  $ hg clone --pull -U version2 corrupted
  requesting all changes
  adding changesets
  adding manifests
  adding file changes
  added 10 changesets with 10 changes to 1 files
  $ wait
  $ hg -R corrupted verify
  checking changesets
  checking manifests
  crosschecking files in changesets and manifests
  checking files
  1 files, 10 changesets, 10 total revisions
  $ hg -R version2 verify
  checking changesets
  checking manifests
  crosschecking files in changesets and manifests
  checking files
  1 files, 10 changesets, 10 total revisions