checkheads: take future obsoleted heads into account
If we push some successors they will likely create a new head on
remote. However as the obsoleted head will disappear after the push we
are not really increasing the number of heads.
There is several case which will lead to extra being actually pushed. But this
first changeset aims to be simple. See the inline comment for details.
Without this change, you need to push --force every time you want to
push a newer version which is very error prone.
The remote side still display +n heads on unbundle because it does not have the
obsolete marker at unbundle time.
$ hg init a
$ cd a
$ hg diff inexistent1 inexistent2
inexistent1: * (glob)
inexistent2: * (glob)
$ echo bar > foo
$ hg add foo
$ hg ci -m 'add foo'
$ echo foobar > foo
$ hg ci -m 'change foo'
$ hg --quiet diff -r 0 -r 1
--- a/foo Thu Jan 01 00:00:00 1970 +0000
+++ b/foo Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +1,1 @@
-bar
+foobar
$ hg diff -r 0 -r 1
diff -r a99fb63adac3 -r 9b8568d3af2f foo
--- a/foo Thu Jan 01 00:00:00 1970 +0000
+++ b/foo Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +1,1 @@
-bar
+foobar
$ hg --verbose diff -r 0 -r 1
diff -r a99fb63adac3 -r 9b8568d3af2f foo
--- a/foo Thu Jan 01 00:00:00 1970 +0000
+++ b/foo Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +1,1 @@
-bar
+foobar
$ hg --debug diff -r 0 -r 1
diff -r a99fb63adac3f31816a22f665bc3b7a7655b30f4 -r 9b8568d3af2f1749445eef03aede868a6f39f210 foo
--- a/foo Thu Jan 01 00:00:00 1970 +0000
+++ b/foo Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +1,1 @@
-bar
+foobar
$ cd ..