mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 00:45:18 +03:00
c1e6537e5f
Uses a transaction instance from the local repository to journal the truncation of revlog files, such that if a strip only partially completes, hg recover will be able to finish the truncate of all the files. The potential unbundling of changes that have been backed up to be restored later will, in case of an error, have to be unbundled manually. The difference is that it will be possible to recover the repository state so the unbundle can actually succeed.
37 lines
851 B
Bash
Executable File
37 lines
851 B
Bash
Executable File
#!/bin/sh
|
|
|
|
echo "[extensions]" >> $HGRCPATH
|
|
echo "mq=">> $HGRCPATH
|
|
|
|
teststrip() {
|
|
hg -q up -C $1
|
|
echo % before update $1, strip $2
|
|
hg parents
|
|
chmod -$3 $4
|
|
hg strip $2 2>&1 | sed 's/\(saving bundle to \).*/\1/' | sed 's/Permission denied.*\.hg\/store\/\(.*\)/Permission denied \.hg\/store\/\1/'
|
|
echo % after update $1, strip $2
|
|
chmod +$3 $4
|
|
hg verify
|
|
echo % journal contents
|
|
cat .hg/store/journal | sed 's/\.i[^\n]*/\.i/'
|
|
ls .hg/store/journal >/dev/null 2>&1 && hg recover
|
|
ls .hg/strip-backup/* >/dev/null 2>&1 && hg unbundle -q .hg/strip-backup/*
|
|
rm -rf .hg/strip-backup
|
|
}
|
|
|
|
hg init test
|
|
cd test
|
|
|
|
echo a > a
|
|
hg -q ci -m "a" -A
|
|
|
|
echo b > b
|
|
hg -q ci -m "b" -A
|
|
|
|
echo c > c
|
|
hg -q ci -m "c" -A
|
|
|
|
teststrip 0 1 w .hg/store/data/b.i
|
|
teststrip 0 1 r .hg/store/data/b.i
|
|
teststrip 0 1 w .hg/store/00changelog.i
|