Mercurial > hg
view tests/test-clone-pull-corruption.t @ 18316:f36375576ed5
filecache: create an entry in _filecache when __set__ is called for a missing one
Preserve the invariant that if P is a filecached property on X then
P in X.__dict__ => P in X._filecache.
Previously, it was possible for a filecached property to become out of sync
with the filesystem if it was set before getting it first, since the initial
filecacheentry was created in __get__.
Old behaviour:
repo.prop = x
repo.invalidate() # prop has no entry in _filecache, it's not removed
# from __dict__
repo.prop # returns x like before without checking with the
# filesystem
New:
repo.prop = x # an empty entry is created in _filecache
repo.invalidate() # prop is removed from __dict__
repo.prop # recreates prop
author | Idan Kamara <idankk86@gmail.com> |
---|---|
date | Mon, 17 Dec 2012 15:25:45 +0200 |
parents | d2fe9aaedcaf |
children | b2c1ff96c1e1 |
line wrap: on
line source
Corrupt an hg repo with a pull started during an aborted commit Create two repos, so that one of them can pull from the other one. $ hg init source $ cd source $ touch foo $ hg add foo $ hg ci -m 'add foo' $ hg clone . ../corrupted updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo >> foo $ hg ci -m 'change foo' Add a hook to wait 5 seconds and then abort the commit $ cd ../corrupted $ echo "[hooks]" >> .hg/hgrc $ echo "pretxncommit = sh -c 'sleep 5; exit 1'" >> .hg/hgrc start a commit... $ touch bar $ hg add bar $ hg ci -m 'add bar' & ... and start a pull while the commit is still running $ sleep 1 $ hg pull ../source 2>/dev/null pulling from ../source transaction abort! rollback completed abort: pretxncommit hook exited with status 1 searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files (run 'hg update' to get a working copy) see what happened $ wait $ hg verify checking changesets checking manifests crosschecking files in changesets and manifests checking files 1 files, 2 changesets, 2 total revisions $ cd ..