discovery: port _postprocessobsolete() changes from evolve, add tests
Let's make this function obsolescence-aware as well. Now we check that
revisions are not obsolete first, and only then check that they are going to be
common after exchange.
The tests make sure that rewriting changesets doesn't confuse head computation.
They rely on experimental.single-head-per-branch feature to show that remote
correctly sees the expected result (i.e. either aborts the push or allows it to
succeed). They are ported from evolve as well.
Differential Revision: https://phab.mercurial-scm.org/D12098
# setup config and various utility to test new heads checks on push
cat >> $HGRCPATH <<EOF
[command-templates]
# simpler log output
log ="{node|short} ({phase}): {desc}\n"
[phases]
# non publishing server
publish=False
[extensions]
# we need to strip some changeset for some test cases
strip=
[experimental]
# enable evolution
evolution=all
[alias]
# fix date used to create obsolete markers.
debugobsolete=debugobsolete -d '0 0'
EOF
mkcommit() {
echo "$1" > "$1"
hg add "$1"
hg ci -m "$1"
}
getid() {
hg log --hidden --template '{node}\n' --rev "$1"
}
setuprepos() {
echo creating basic server and client repo
hg init server
cd server
mkcommit root
hg phase --public .
mkcommit A0
cd ..
hg clone server client
if [ "$1" = "single-head" ]; then
echo >> "server/.hg/hgrc" "[experimental]"
echo >> "server/.hg/hgrc" "# enforce a single name per branch"
echo >> "server/.hg/hgrc" "single-head-per-branch = yes"
fi
}