Foreach s.file in RESYNC {
if (l = key_init(s.file in Repository) {
clean || abort
add l->sfile to backup list
}
}
flush
bk sfio -o < backuplist > BitKeeper/tmp/backup.sfio
foreach s.file in backup list {
rm_sfile(s.file)
}
foreach file in RESYNC {
copy to Repository
add to applied list
}
if bk check fails
foreach file in applied list {
rm_sfile($file)
}
sfio -i < BitKeeper/tmp/backup.sfio
bk -r check -a
if this exits 0, then remove the backup.sfio
else {
tell them that it is there and how to apply it
}
} else {
blow away RESYNC tree
}
rm_sfile(s.file) {
unlink(s.file)
if emptydir(SCCS) {
unlink(SCCS)
try unlink parent.
etc.
}
}