tests/test-pull-pull-corruption
author Vadim Gelfer <vadim.gelfer@gmail.com>
Wed, 19 Apr 2006 08:33:46 -0700
changeset 2089 cb99c711c59f
parent 1785 81ca1a9bd061
permissions -rwxr-xr-x
make appendfile simpler so it does not break with revlogng on windows. it used to cache open files. this made revlogng break because it wants to rename files when splitting .i into .i/.d, but cannot rename or unlink open files on windows. new code is bit slower, but safe on linux and windows. proper fix for too many open/close of changelog/manifest belongs in different place. can get 10% speed improvement back.

#!/bin/sh
#
# 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 one repo with a shorter history
hg clone -r 0 source1 source2
cd source2
echo a >> foo
hg ci -m a
cd ..

# create a third repo to pull both other repos into it
hg init corrupted
cd corrupted
# use a hook to make the second pull start while the first one is still running
echo '[hooks]' >> .hg/hgrc
echo 'prechangegroup = sleep 5' >> .hg/hgrc

# start a pull...
hg pull ../source1 &

# ... and start another pull before the first one has finished
sleep 1
hg pull ../source2 2>/dev/null

# see the result
wait
hg verify