stablesort: introduce a mergepoint based method focused on head
The things we needs for stable range is head centric. So we simplify the issue
by focussing on head.
====================================Testingheadcheckingcode:CaseA-4====================================Mercurialchecksfortheintroductionofnewheadsonpush.Evolutioncomesintoplaytodetectifexistingbranchesontheserverarebeingreplacedbysomeofthenewonewepush.Thiscaseispartofaseriesoftestscheckingthisbehavior.CategoryA:simplecaseinvolvingabranchbeingsuperceededbyanother.TestCase4:Newchangesetaschildrenofthesuccessor..old-state:....*1-changesetbranch....new-state:....*2-changesetbranch,firstisasuccessor,butheadisnew....expected-result:....*pushallowed....graph-summary:....◔B..|..Aø⇠◔A'.. |/.. ● $ . $TESTDIR/testlib/push-checkheads-util.shTest setup---------- $ mkdir A4 $ cd A4 $ setuprepos creating basic server and client repo updating to branch default 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd client $ hg up 0 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ mkcommit A1 created new head $ hg debugobsolete `getid "desc(A0)" ` `getid "desc(A1)"` obsoleted 1 changesets $ mkcommit B0 $ hg log -G --hidden @ f40ded968333 (draft): B0 | o f6082bc4ffef (draft): A1 | | x 8aaa48160adc (draft): A0 |/ o 1e4be0697311 (public): rootActual testing-------------- $ hg push pushing to $TESTTMP/A4/server (glob) searching for changes adding changesets adding manifests adding file changes added 2 changesets with 2 changes to 2 files (+1 heads) 1 new obsolescence markers obsoleted 1 changesets $ cd ../../