stablerange: introduce a basic-mergepoint method
This method use the new 'mergepoint' based stable sorting. It is expected to be
eventually better than branch point to stable range: more stable, easier to
cache, etc. Having a basic implementation will allow use to validate more
advanced implementation.
============================================Testingobsolescencemarkerspush:CasesC.4============================================Mercurialpushesobsolescencesmarkersrelevanttothe"pushed-set",thesetofallchangesetsthatrequestedtobe"in sync"afterthepush(eveniftheyarealreadyonbothside).Thistestbelongstoaseriesoftestscheckingsuchsetisproperlycomputedandapplied.Thisdoesnottests"obsmarkers"discoverycapabilities.CategoryC:advancedcaseTestCase4:multiplesuccessors,oneisprunedC.4multiplesuccessors,oneispruned======================================..(AsimilarishsituationcanappendswithsplitmarkersseetheZsection)....{{{..A..B○⇢ø⇠⊗C.. \|/..●O..}}}....Markerexistfrom:....*`Aø⇠○B`..*`Aø⇠○C`..*C(prune)....Commandrun:....*hgpush-rO....Expectedexchange:....*`Aø⇠○C`..*C(prune)....Expectedexclude:....*`Aø⇠○B`Setup-----$.$TESTDIR/testlib/exchange-obsmarker-util.shImplementedasthenon-splitversion$setupreposC.4creatingtestrepofortestcaseC.4-pulldest-main-pushdestcdinto`main`andproceedwithenvsetup$cdmain$mkcommitA$hgupdate-q0$mkcommitBcreatednewhead$hgupdate-q0$mkcommitCcreatednewhead$hgdebugobsolete--hidden`getid'desc(A)'``getid'desc(B)'`obsoleted1changesets$hgdebugobsolete--hidden`getid'desc(A)'``getid'desc(C)'`$hgprune-qd'0 0'.$hglog-G--hiddenx7f7f229b13a6(draft):C||o35b183996678(draft):B|/|xf5bc6836db60(draft):A|/@a9bdc8b26820(public):O$inspect_obsmarkersobsstorecontent================f5bc6836db60e308a17ba08bf050154ba9c4fad735b1839966785d5703a01607229eea932db42f870(*){'user':'test'}(glob)f5bc6836db60e308a17ba08bf050154ba9c4fad77f7f229b13a629a5b20581c6cb723f4e2ca54bed0(*){'user':'test'}(glob)7f7f229b13a629a5b20581c6cb723f4e2ca54bed0{a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04}(*){'ef1':'*','user':'test'}(glob)obshashtree===========a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04172c7e3f43e9982efc74a27d34bd7a54cc158b57f5bc6836db60e308a17ba08bf050154ba9c4fad7c195f40b705423f406e537d1c64f6bc131a8021435b1839966785d5703a01607229eea932db42f8776197cf2f9c1dcf5baa6cc3f4057980055353c037f7f229b13a629a5b20581c6cb723f4e2ca54bede0a3b65709a8a1938e6c6cfc49a45253849e31a2obshashrange============revnodeindexsizedepthobshash235b1839966780228d1b3b767a40235b183996678112916e804c50de0a9bdc8b26820011172c7e3f43e9$cd..$cd..ActualTest-----------$dotestC.4O##RunningtestcaseC.4 # testing echange of "O" (a9bdc8b26820) ## initial state # obstore: main7f7f229b13a629a5b20581c6cb723f4e2ca54bed0{a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04}(*){'ef1':'*','user':'test'}(glob)f5bc6836db60e308a17ba08bf050154ba9c4fad735b1839966785d5703a01607229eea932db42f870(*){'user':'test'}(glob)f5bc6836db60e308a17ba08bf050154ba9c4fad77f7f229b13a629a5b20581c6cb723f4e2ca54bed0(*){'user':'test'}(glob) # obstore: pushdest # obstore: pulldest ## pushing "O" from main to pushdestpushingtopushdestsearchingforchangesnochangesfoundremote:2newobsolescencemarkers##postpushstate#obstore:main7f7f229b13a629a5b20581c6cb723f4e2ca54bed0{a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04}(*){'ef1':'*','user':'test'}(glob)f5bc6836db60e308a17ba08bf050154ba9c4fad735b1839966785d5703a01607229eea932db42f870(*){'user':'test'}(glob)f5bc6836db60e308a17ba08bf050154ba9c4fad77f7f229b13a629a5b20581c6cb723f4e2ca54bed0(*){'user':'test'}(glob) # obstore: pushdest7f7f229b13a629a5b20581c6cb723f4e2ca54bed0{a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04}(*){'ef1':'*','user':'test'}(glob)f5bc6836db60e308a17ba08bf050154ba9c4fad77f7f229b13a629a5b20581c6cb723f4e2ca54bed0(*){'user':'test'}(glob) # obstore: pulldest ## pulling "a9bdc8b26820" from main into pulldestpullingfrommainnochangesfound2newobsolescencemarkers##postpullstate#obstore:main7f7f229b13a629a5b20581c6cb723f4e2ca54bed0{a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04}(*){'ef1':'*','user':'test'}(glob)f5bc6836db60e308a17ba08bf050154ba9c4fad735b1839966785d5703a01607229eea932db42f870(*){'user':'test'}(glob)f5bc6836db60e308a17ba08bf050154ba9c4fad77f7f229b13a629a5b20581c6cb723f4e2ca54bed0(*){'user':'test'}(glob) # obstore: pushdest7f7f229b13a629a5b20581c6cb723f4e2ca54bed0{a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04}(*){'ef1':'*','user':'test'}(glob)f5bc6836db60e308a17ba08bf050154ba9c4fad77f7f229b13a629a5b20581c6cb723f4e2ca54bed0(*){'user':'test'}(glob) # obstore: pulldest7f7f229b13a629a5b20581c6cb723f4e2ca54bed0{a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04}(*){'ef1':'*','user':'test'}(glob)f5bc6836db60e308a17ba08bf050154ba9c4fad77f7f229b13a629a5b20581c6cb723f4e2ca54bed0(*){'user':'test'}(glob)