purge: abort with missing files avoiding problems with name-mangling fs
In a name mangling filesystem (e.g. a case insensitive one)
dirstate.walk() can yield filenames different from the ones
stored in the dirstate. This already confuses the status and
add commands, but with purge this may cause data loss.
To prevent this purge refuses to work if there are missing
files and has a 'force' option if the user knows it is safe.
Even with the force option purge checks if any of the missing
files is still available in the working dir: if so there
may be some problem with the underlying filesystem, so it
unconditionally aborts.
#!/bin/sh
hg init test
cd test
cat >>afile <<EOF
0
EOF
hg add afile
hg commit -m "0.0" -d "1000000 0"
cat >>afile <<EOF
1
EOF
hg commit -m "0.1" -d "1000000 0"
cat >>afile <<EOF
2
EOF
hg commit -m "0.2" -d "1000000 0"
cat >>afile <<EOF
3
EOF
hg commit -m "0.3" -d "1000000 0"
hg update -C 0
cat >>afile <<EOF
1
EOF
hg commit -m "1.1" -d "1000000 0"
cat >>afile <<EOF
2
EOF
hg commit -m "1.2" -d "1000000 0"
cat >fred <<EOF
a line
EOF
cat >>afile <<EOF
3
EOF
hg add fred
hg commit -m "1.3" -d "1000000 0"
hg mv afile adifferentfile
hg commit -m "1.3m" -d "1000000 0"
hg update -C 3
hg mv afile anotherfile
hg commit -m "0.3m" -d "1000000 0"
hg debugindex .hg/store/data/afile.i
hg debugindex .hg/store/data/adifferentfile.i
hg debugindex .hg/store/data/anotherfile.i
hg debugindex .hg/store/data/fred.i
hg debugindex .hg/store/00manifest.i
hg verify
cd ..
for i in 0 1 2 3 4 5 6 7 8; do
mkdir test-"$i"
hg --cwd test-"$i" init
hg -R test bundle -r "$i" test-"$i".hg test-"$i"
cd test-"$i"
hg unbundle ../test-"$i".hg
hg verify
hg tip -q
cd ..
done
cd test-8
hg pull ../test-7
hg verify
hg rollback
cd ..
echo % should fail
hg -R test bundle --base 2 -r tip test-bundle-branch1.hg test-3
hg -R test bundle -r tip test-bundle-branch1.hg
hg -R test bundle --base 2 -r tip test-bundle-branch1.hg
hg -R test bundle --base 2 -r 7 test-bundle-branch2.hg
hg -R test bundle --base 2 test-bundle-all.hg
hg -R test bundle --base 3 -r tip test-bundle-should-fail.hg
# issue76 msg2163
hg -R test bundle --base 3 -r 3 -r 3 test-bundle-cset-3.hg
hg clone test-2 test-9
cd test-9
echo % 2
hg tip -q
hg unbundle ../test-bundle-should-fail.hg
echo % 2
hg tip -q
hg unbundle ../test-bundle-all.hg
echo % 8
hg tip -q
hg verify
hg rollback
echo % 2
hg tip -q
hg unbundle ../test-bundle-branch1.hg
echo % 4
hg tip -q
hg verify
hg rollback
hg unbundle ../test-bundle-branch2.hg
echo % 6
hg tip -q
hg verify
cd ../test
hg merge 7
hg ci -m merge -d "1000000 0"
cd ..
hg -R test bundle --base 2 test-bundle-head.hg
hg clone test-2 test-10
cd test-10
hg unbundle ../test-bundle-head.hg
echo % 9
hg tip -q
hg verify