^c,ddlZddlZddlmZddlmZmZddlmZdZ dZ dZ d Z d Z d Zejd Zd ZdZdZdS)N)_)hexshort)errorcBjj}fd|dDfd}d}||d|d\}|sd}||d|d\}}|st |ddkrLt |ddkr3|d|dkr!t jtd t jtd t|fzi}tj g}g} |r| } || gkrd| | || D]C} | d kr;| |vr||  | (| g|| <| | D|| t | } fd | D} | dks| sfd | Dd|fS| dz}d}d }t}| D]O} | |vr*||| g1|| p| g}d|| <t |}| |z }t#||}||kr| vr |}| }||krn||kr.| vr*||| gg}|| gD]H}||r)t%t|||z||<3| |I|r=|d}|D] }||gz||< | ||||<Q|J|}|g| |fS)afind the next node (if any) for testing during a bisect search. returns a (nodes, number, good) tuple. 'nodes' is the final result of the bisect if 'number' is 0. Otherwise 'number' indicates the remaining possible candidates for the search and 'nodes' contains the next bisect target. 'good' is True if bisect is searching for a first good changeset, False if searching for a first bad one. c:h|]}|Srev.0n changelogs 3/usr/lib/python3/dist-packages/mercurial/hbisect.py zbisect..%s% 5 5 5IMM!   5 5 5skipctfd|D}tjd}d|||D]}g||<|||dfS||fS)Nc:g|]}|Sr r r s r z2bisect..buildancestors..(s%4441immA&&444rcdS)Nr r rrz0bisect..buildancestors..)sDrs(%ln::%d) - (::%ln))min collections defaultdictrevs)badgoodbadrev ancestorsr rrepos rbuildancestorszbisect..buildancestors's444444455+LL99 993T64HH  CIcNN V  $4< y  rFbadgoodTrs+starting revisions are not directly relateds)inconsistent state, %d:%s is good and badc(g|]}|v|k |Sr r )rcr skips rrzbisect..Vs&LLLq1D==qF{{{{{rc:g|]}|Sr node)rr(rs rrzbisect..Xs%777q""777rrN) unfilteredr parentrevsr,lenrAbortrrrdequepopleftappendsortsetupdategetrlistpop)r"state clparentsr#rr!rchildrenvisit candidatesr prevtot unskippedperfectbest_revbest_lenpoisonaxyvalue unvisitedr(first best_noder rr)s` @@@rbisectrNsc ??  DI$I 5 5 5 5eGn 5 5 5D!!!!!! D&uV}eGnEEFI J*N5>5=II .. C   f  ! # #E'N##q((f w//+a NOOPP Pk : ; ;uSzz" #   H  vh ' 'EJ  +mmoo S>R     c " " "! # + +2::x'' --c2222*- T***  +OO j//CLLLLLJLLLI axxyx7777J777DAAQhGHH UUF%!%! &== MM(,,sB// 0 0 0  cN #se # FF !GAq  8  4HH w;;3d?? MM(,,sB// 0 0 0  c2&& $ $A| $#C ! q(8$9$9:: !   ####  !MM!$$E ' ' A3w ! HHUOOO Ie     x((I Kd ##rc2||d}t|dkrc|r |d}n|d}td|Dt|z}|dkr!|d|dSdS)Nrrr$r%c6h|]}|Sr r+)ris rrzextendrange..s ---16688---r)parentsr0r6ancestor)r"r;nodesrrRsidenums r extendrangerWs58n$$&&G 7||a  "=DD>D--W---D 9:: !881:&&wqz22 2 4rc`ggggd}|jdD]}|dd\}}||}||vr$t jtd|z||||S)N)currentr%r$r bisect.stater&sunknown bisect kind %s) vfs tryreadlinessplitr.lookuprr1rr4)r"r;lkindr,s r load_staterasb"r B BE X " "? 3 3!!ssV\\^^ d  ''-- u  +a 9::TABB B d 4    Lrc @|ddd}|5t|D]4}||D])}|d|t |fz*5|ddddS#1swxYwYdS)NrZwT) atomictemps%s %s )r[wlocksortedwriterclose)r"r;fr`r,s r save_staterjs $488A 5MM 8 8Dd  8 8 dCII%667777 8  sABBBcr|jdr|jddSdS)z+remove any bisect state from the repositoryrZN)r[existsunlink)r"s r resetstaterns< x'') ((((())rc|dr |drdS|ds!tjtdtjtd)z`check we have both 'good' and 'bad' to define a range Raise StateError exception otherwise.r%r$Ts'cannot bisect (no known good revisions)s&cannot bisect (no known bad revisions))r StateErrorr)r;s r checkstaterqsa W~%-t >Mq!KLLMMMq!JKKLLLrc#vK dV|g|d<t||dS#|g|d<t||wxYw)NrY)rj)r"r;r,s r restore_staterss[  !Fj4"Fj4s 8ct|}|dvr2t|jj||Sd}|d}t |dkrd}d}nd}d}d }d |||fz}d ||fz} d } d } d| | |fz} |dkr||S|dkr||S|dkr|| S|dkr|| S|dkr||S|dkr||Stjtd)a Return a list of revision(s) that match the given status: - ``good``, ``bad``, ``skip``: csets explicitly marked as good/bad/skip - ``goods``, ``bads`` : csets topologically good/bad - ``range`` : csets taking part in the bisection - ``pruned`` : csets that are goods, bads or skipped - ``untested`` : csets whose fate is yet unknown - ``ignored`` : csets ignored due to DAG topology - ``current`` : the cset currently being bisected )r%r$rrYs9( bisect(bad)::bisect(good) | bisect(good)::bisect(bad) )sbisect(good)::bisect(bad)rsbisect(good)::s ::bisect(bad)s::bisect(good)s bisect(bad)::s bisect(skip)s( (%s) | (%s) | (%s) )s( (%s) - (%s) )s::bisect(bad) - ::bisect(good)s::bisect(good) - ::bisect(bad)s( ( (%s) | (%s) ) - (%s) )srangespruneduntestedignoredgoodsbadssinvalid bisect state) ramapr.rr rr0r ParseErrorr) r"statusr;range_tgoodsbadsskipspruneduntestedibaigaignoreds rr8r8s t  E 7774??$$.2E&MBBBM YY3 4 4 r77a<<%E#DD&E#D *eT5-AA&7 0//3U2CC X  99U## # y 99V$$ $ { " "99X&& & z ! !99W%% % x  99U## # w  99T?? ""1%<#=#=>> >rc,|j|}|t|dvrtdS|t|dvrtdS|t|dvrtdS|t|dvs|t|dvrtdS|t|dvrtdS|t|dvrtd S|t|d vrtd SdS) Nr%r$rsskippedrurYrvrwsgood (implicit)rxsbad (implicit))rr r8r)r"r,r s rlabelrs! .  T " "C c$    zz c$yy c$    }} c$ $$$$s4/D/D(D(D~~ c$ ####}} c$!!!!#$$$ c$    "### 4rc|}t|dkr|r#|tdn"|td|||dt ||||}|%|td|zng|r#|tdn"|td|D]}||||dS)NrsThe first good revision is: sThe first bad revision is: rsNot all ancestors of this changeset have been checked. Use bisect --extend to continue the bisection from the common ancestor, %s. sCDue to skipped revisions, the first good revision could be any of: sBDue to skipped revisions, the first bad revision could be any of: )r.r0rgrshowrWrh)uir"r; displayerrTr extendnoders r printresultr-si ??  D 5zzQ  9 HHQ788 9 9 9 9 HHQ677 8 8 8tE!H~&&& ueT::  ! HHB        HH8     HH7     $ $A NN47 # # # # OOr)r contextlibi18nrr,rrrrNrWrarjrnrqcontextmanagerrsr8rrr rrrs(r$r$r$j   ))) M M M    A?A?A?H>%%%%%r