PNG  IHDRX cHRMz&u0`:pQ<bKGD pHYsodtIME MeqIDATxw]Wug^Qd˶ 6`!N:!@xI~)%7%@Bh&`lnjVF29gΨ4E$|>cɚ{gk= %,a KX%,a KX%,a KX%,a KX%,a KX%,a KX%, b` ǟzeאfp]<!SJmɤY޲ڿ,%c ~ع9VH.!Ͳz&QynֺTkRR.BLHi٪:l;@(!MԴ=žI,:o&N'Kù\vRmJ雵֫AWic H@" !: Cé||]k-Ha oݜ:y F())u]aG7*JV@J415p=sZH!=!DRʯvɱh~V\}v/GKY$n]"X"}t@ xS76^[bw4dsce)2dU0 CkMa-U5tvLƀ~mlMwfGE/-]7XAƟ`׮g ewxwC4\[~7@O-Q( a*XGƒ{ ՟}$_y3tĐƤatgvێi|K=uVyrŲlLӪuܿzwk$m87k( `múcE)"@rK( z4$D; 2kW=Xb$V[Ru819קR~qloѱDyįݎ*mxw]y5e4K@ЃI0A D@"BDk_)N\8͜9dz"fK0zɿvM /.:2O{ Nb=M=7>??Zuo32 DLD@D| &+֎C #B8ַ`bOb $D#ͮҪtx]%`ES`Ru[=¾!@Od37LJ0!OIR4m]GZRJu$‡c=%~s@6SKy?CeIh:[vR@Lh | (BhAMy=݃  G"'wzn޺~8ԽSh ~T*A:xR[ܹ?X[uKL_=fDȊ؂p0}7=D$Ekq!/t.*2ʼnDbŞ}DijYaȲ(""6HA;:LzxQ‘(SQQ}*PL*fc\s `/d'QXW, e`#kPGZuŞuO{{wm[&NBTiiI0bukcA9<4@SӊH*؎4U/'2U5.(9JuDfrޱtycU%j(:RUbArLֺN)udA':uGQN"-"Is.*+k@ `Ojs@yU/ H:l;@yyTn}_yw!VkRJ4P)~y#)r,D =ě"Q]ci'%HI4ZL0"MJy 8A{ aN<8D"1#IJi >XjX֔#@>-{vN!8tRݻ^)N_╗FJEk]CT՟ YP:_|H1@ CBk]yKYp|og?*dGvzنzӴzjֺNkC~AbZƷ`.H)=!QͷVTT(| u78y֮}|[8-Vjp%2JPk[}ԉaH8Wpqhwr:vWª<}l77_~{s۴V+RCģ%WRZ\AqHifɤL36: #F:p]Bq/z{0CU6ݳEv_^k7'>sq*+kH%a`0ԣisqにtү04gVgW΂iJiS'3w.w}l6MC2uԯ|>JF5`fV5m`Y**Db1FKNttu]4ccsQNnex/87+}xaUW9y>ͯ骵G{䩓Գ3+vU}~jJ.NFRD7<aJDB1#ҳgSb,+CS?/ VG J?|?,2#M9}B)MiE+G`-wo߫V`fio(}S^4e~V4bHOYb"b#E)dda:'?}׮4繏`{7Z"uny-?ǹ;0MKx{:_pÚmFמ:F " .LFQLG)Q8qN q¯¯3wOvxDb\. BKD9_NN &L:4D{mm o^tֽ:q!ƥ}K+<"m78N< ywsard5+вz~mnG)=}lYݧNj'QJS{S :UYS-952?&O-:W}(!6Mk4+>A>j+i|<<|;ر^߉=HE|V#F)Emm#}/"y GII웻Jі94+v뾧xu~5C95~ūH>c@덉pʃ1/4-A2G%7>m;–Y,cyyaln" ?ƻ!ʪ<{~h~i y.zZB̃/,雋SiC/JFMmBH&&FAbϓO^tubbb_hZ{_QZ-sύodFgO(6]TJA˯#`۶ɟ( %$&+V'~hiYy>922 Wp74Zkq+Ovn錄c>8~GqܲcWꂎz@"1A.}T)uiW4="jJ2W7mU/N0gcqܗOO}?9/wìXžΏ0 >֩(V^Rh32!Hj5`;O28؇2#ݕf3 ?sJd8NJ@7O0 b־?lldщ̡&|9C.8RTWwxWy46ah嘦mh٤&l zCy!PY?: CJyв]dm4ǜҐR޻RլhX{FƯanшQI@x' ao(kUUuxW_Ñ줮[w8 FRJ(8˼)_mQ _!RJhm=!cVmm ?sFOnll6Qk}alY}; "baӌ~M0w,Ggw2W:G/k2%R,_=u`WU R.9T"v,<\Ik޽/2110Ӿxc0gyC&Ny޽JҢrV6N ``یeA16"J³+Rj*;BϜkZPJaÍ<Jyw:NP8/D$ 011z֊Ⱳ3ι֘k1V_"h!JPIΣ'ɜ* aEAd:ݺ>y<}Lp&PlRfTb1]o .2EW\ͮ]38؋rTJsǏP@芎sF\> P^+dYJLbJ C-xϐn> ι$nj,;Ǖa FU *择|h ~izť3ᤓ`K'-f tL7JK+vf2)V'-sFuB4i+m+@My=O҈0"|Yxoj,3]:cо3 $#uŘ%Y"y죯LebqtҢVzq¼X)~>4L׶m~[1_k?kxֺQ`\ |ٛY4Ѯr!)N9{56(iNq}O()Em]=F&u?$HypWUeB\k]JɩSع9 Zqg4ZĊo oMcjZBU]B\TUd34ݝ~:7ڶSUsB0Z3srx 7`:5xcx !qZA!;%͚7&P H<WL!džOb5kF)xor^aujƍ7 Ǡ8/p^(L>ὴ-B,{ۇWzֺ^k]3\EE@7>lYBȝR.oHnXO/}sB|.i@ɥDB4tcm,@ӣgdtJ!lH$_vN166L__'Z)y&kH;:,Y7=J 9cG) V\hjiE;gya~%ks_nC~Er er)muuMg2;֫R)Md) ,¶ 2-wr#F7<-BBn~_(o=KO㭇[Xv eN_SMgSҐ BS헃D%g_N:/pe -wkG*9yYSZS.9cREL !k}<4_Xs#FmҶ:7R$i,fi!~' # !6/S6y@kZkZcX)%5V4P]VGYq%H1!;e1MV<!ϐHO021Dp= HMs~~a)ަu7G^];git!Frl]H/L$=AeUvZE4P\.,xi {-~p?2b#amXAHq)MWǾI_r`S Hz&|{ +ʖ_= (YS(_g0a03M`I&'9vl?MM+m~}*xT۲(fY*V4x@29s{DaY"toGNTO+xCAO~4Ϳ;p`Ѫ:>Ҵ7K 3}+0 387x\)a"/E>qpWB=1 ¨"MP(\xp߫́A3+J] n[ʼnӼaTbZUWb={~2ooKױӰp(CS\S筐R*JغV&&"FA}J>G֐p1ٸbk7 ŘH$JoN <8s^yk_[;gy-;߉DV{c B yce% aJhDȶ 2IdйIB/^n0tNtџdcKj4϶v~- CBcgqx9= PJ) dMsjpYB] GD4RDWX +h{y`,3ꊕ$`zj*N^TP4L:Iz9~6s) Ga:?y*J~?OrMwP\](21sZUD ?ܟQ5Q%ggW6QdO+\@ ̪X'GxN @'4=ˋ+*VwN ne_|(/BDfj5(Dq<*tNt1х!MV.C0 32b#?n0pzj#!38}޴o1KovCJ`8ŗ_"]] rDUy޲@ Ȗ-;xџ'^Y`zEd?0„ DAL18IS]VGq\4o !swV7ˣι%4FѮ~}6)OgS[~Q vcYbL!wG3 7띸*E Pql8=jT\꘿I(z<[6OrR8ºC~ډ]=rNl[g|v TMTղb-o}OrP^Q]<98S¤!k)G(Vkwyqyr޽Nv`N/e p/~NAOk \I:G6]4+K;j$R:Mi #*[AȚT,ʰ,;N{HZTGMoּy) ]%dHء9Պ䠬|<45,\=[bƟ8QXeB3- &dҩ^{>/86bXmZ]]yޚN[(WAHL$YAgDKp=5GHjU&99v簪C0vygln*P)9^͞}lMuiH!̍#DoRBn9l@ xA/_v=ȺT{7Yt2N"4!YN`ae >Q<XMydEB`VU}u]嫇.%e^ánE87Mu\t`cP=AD/G)sI"@MP;)]%fH9'FNsj1pVhY&9=0pfuJ&gޤx+k:!r˭wkl03׼Ku C &ѓYt{.O.zҏ z}/tf_wEp2gvX)GN#I ݭ߽v/ .& и(ZF{e"=V!{zW`, ]+LGz"(UJp|j( #V4, 8B 0 9OkRrlɱl94)'VH9=9W|>PS['G(*I1==C<5"Pg+x'K5EMd؞Af8lG ?D FtoB[je?{k3zQ vZ;%Ɠ,]E>KZ+T/ EJxOZ1i #T<@ I}q9/t'zi(EMqw`mYkU6;[t4DPeckeM;H}_g pMww}k6#H㶏+b8雡Sxp)&C $@'b,fPߑt$RbJ'vznuS ~8='72_`{q纶|Q)Xk}cPz9p7O:'|G~8wx(a 0QCko|0ASD>Ip=4Q, d|F8RcU"/KM opKle M3#i0c%<7׿p&pZq[TR"BpqauIp$ 8~Ĩ!8Սx\ւdT>>Z40ks7 z2IQ}ItԀ<-%S⍤};zIb$I 5K}Q͙D8UguWE$Jh )cu4N tZl+[]M4k8֦Zeq֮M7uIqG 1==tLtR,ƜSrHYt&QP윯Lg' I,3@P'}'R˪e/%-Auv·ñ\> vDJzlӾNv5:|K/Jb6KI9)Zh*ZAi`?S {aiVDԲuy5W7pWeQJk֤#5&V<̺@/GH?^τZL|IJNvI:'P=Ϛt"¨=cud S Q.Ki0 !cJy;LJR;G{BJy޺[^8fK6)=yʊ+(k|&xQ2`L?Ȓ2@Mf 0C`6-%pKpm')c$׻K5[J*U[/#hH!6acB JA _|uMvDyk y)6OPYjœ50VT K}cǻP[ $:]4MEA.y)|B)cf-A?(e|lɉ#P9V)[9t.EiQPDѠ3ϴ;E:+Օ t ȥ~|_N2,ZJLt4! %ա]u {+=p.GhNcŞQI?Nd'yeh n7zi1DB)1S | S#ًZs2|Ɛy$F SxeX{7Vl.Src3E℃Q>b6G ўYCmtկ~=K0f(=LrAS GN'ɹ9<\!a`)֕y[uՍ[09` 9 +57ts6}b4{oqd+J5fa/,97J#6yν99mRWxJyѡyu_TJc`~W>l^q#Ts#2"nD1%fS)FU w{ܯ R{ ˎ󅃏џDsZSQS;LV;7 Od1&1n$ N /.q3~eNɪ]E#oM~}v֯FڦwyZ=<<>Xo稯lfMFV6p02|*=tV!c~]fa5Y^Q_WN|Vs 0ҘދU97OI'N2'8N֭fgg-}V%y]U4 峧p*91#9U kCac_AFңĪy뚇Y_AiuYyTTYЗ-(!JFLt›17uTozc. S;7A&&<ԋ5y;Ro+:' *eYJkWR[@F %SHWP 72k4 qLd'J "zB6{AC0ƁA6U.'F3:Ȅ(9ΜL;D]m8ڥ9}dU "v!;*13Rg^fJyShyy5auA?ɩGHRjo^]׽S)Fm\toy 4WQS@mE#%5ʈfFYDX ~D5Ϡ9tE9So_aU4?Ѽm%&c{n>.KW1Tlb}:j uGi(JgcYj0qn+>) %\!4{LaJso d||u//P_y7iRJ߬nHOy) l+@$($VFIQ9%EeKʈU. ia&FY̒mZ=)+qqoQn >L!qCiDB;Y<%} OgBxB!ØuG)WG9y(Ą{_yesuZmZZey'Wg#C~1Cev@0D $a@˲(.._GimA:uyw֬%;@!JkQVM_Ow:P.s\)ot- ˹"`B,e CRtaEUP<0'}r3[>?G8xU~Nqu;Wm8\RIkբ^5@k+5(By'L&'gBJ3ݶ!/㮻w҅ yqPWUg<e"Qy*167΃sJ\oz]T*UQ<\FԎ`HaNmڜ6DysCask8wP8y9``GJ9lF\G g's Nn͵MLN֪u$| /|7=]O)6s !ĴAKh]q_ap $HH'\1jB^s\|- W1:=6lJBqjY^LsPk""`]w)󭃈,(HC ?䔨Y$Sʣ{4Z+0NvQkhol6C.婧/u]FwiVjZka&%6\F*Ny#8O,22+|Db~d ~Çwc N:FuuCe&oZ(l;@ee-+Wn`44AMK➝2BRՈt7g*1gph9N) *"TF*R(#'88pm=}X]u[i7bEc|\~EMn}P瘊J)K.0i1M6=7'_\kaZ(Th{K*GJyytw"IO-PWJk)..axӝ47"89Cc7ĐBiZx 7m!fy|ϿF9CbȩV 9V-՛^pV̌ɄS#Bv4-@]Vxt-Z, &ֺ*diؠ2^VXbs֔Ìl.jQ]Y[47gj=幽ex)A0ip׳ W2[ᎇhuE^~q흙L} #-b۸oFJ_QP3r6jr+"nfzRJTUqoaۍ /$d8Mx'ݓ= OՃ| )$2mcM*cЙj}f };n YG w0Ia!1Q.oYfr]DyISaP}"dIӗթO67jqR ҊƐƈaɤGG|h;t]䗖oSv|iZqX)oalv;۩meEJ\!8=$4QU4Xo&VEĊ YS^E#d,yX_> ۘ-e\ "Wa6uLĜZi`aD9.% w~mB(02G[6y.773a7 /=o7D)$Z 66 $bY^\CuP. (x'"J60׿Y:Oi;F{w佩b+\Yi`TDWa~|VH)8q/=9!g߆2Y)?ND)%?Ǐ`k/sn:;O299yB=a[Ng 3˲N}vLNy;*?x?~L&=xyӴ~}q{qE*IQ^^ͧvü{Huu=R|>JyUlZV, B~/YF!Y\u_ݼF{_C)LD]m {H 0ihhadd nUkf3oٺCvE\)QJi+֥@tDJkB$1!Đr0XQ|q?d2) Ӣ_}qv-< FŊ߫%roppVBwü~JidY4:}L6M7f٬F "?71<2#?Jyy4뷢<_a7_=Q E=S1И/9{+93֮E{ǂw{))?maÆm(uLE#lïZ  ~d];+]h j?!|$F}*"4(v'8s<ŏUkm7^7no1w2ؗ}TrͿEk>p'8OB7d7R(A 9.*Mi^ͳ; eeUwS+C)uO@ =Sy]` }l8^ZzRXj[^iUɺ$tj))<sbDJfg=Pk_{xaKo1:-uyG0M ԃ\0Lvuy'ȱc2Ji AdyVgVh!{]/&}}ċJ#%d !+87<;qN޼Nفl|1N:8ya  8}k¾+-$4FiZYÔXk*I&'@iI99)HSh4+2G:tGhS^繿 Kتm0 вDk}֚+QT4;sC}rՅE,8CX-e~>G&'9xpW,%Fh,Ry56Y–hW-(v_,? ; qrBk4-V7HQ;ˇ^Gv1JVV%,ik;D_W!))+BoS4QsTM;gt+ndS-~:11Sgv!0qRVh!"Ȋ(̦Yl.]PQWgٳE'`%W1{ndΗBk|Ž7ʒR~,lnoa&:ü$ 3<a[CBݮwt"o\ePJ=Hz"_c^Z.#ˆ*x z̝grY]tdkP*:97YľXyBkD4N.C_[;F9`8& !AMO c `@BA& Ost\-\NX+Xp < !bj3C&QL+*&kAQ=04}cC!9~820G'PC9xa!w&bo_1 Sw"ܱ V )Yl3+ס2KoXOx]"`^WOy :3GO0g;%Yv㐫(R/r (s } u B &FeYZh0y> =2<Ϟc/ -u= c&׭,.0"g"7 6T!vl#sc>{u/Oh Bᾈ)۴74]x7 gMӒ"d]U)}" v4co[ ɡs 5Gg=XR14?5A}D "b{0$L .\4y{_fe:kVS\\O]c^W52LSBDM! C3Dhr̦RtArx4&agaN3Cf<Ԉp4~ B'"1@.b_/xQ} _߃҉/gٓ2Qkqp0շpZ2fԫYz< 4L.Cyυι1t@鎫Fe sYfsF}^ V}N<_`p)alٶ "(XEAVZ<)2},:Ir*#m_YӼ R%a||EƼIJ,,+f"96r/}0jE/)s)cjW#w'Sʯ5<66lj$a~3Kʛy 2:cZ:Yh))+a߭K::N,Q F'qB]={.]h85C9cr=}*rk?vwV렵ٸW Rs%}rNAkDv|uFLBkWY YkX מ|)1!$#3%y?pF<@<Rr0}: }\J [5FRxY<9"SQdE(Q*Qʻ)q1E0B_O24[U'],lOb ]~WjHޏTQ5Syu wq)xnw8~)c 쫬gٲߠ H% k5dƝk> kEj,0% b"vi2Wس_CuK)K{n|>t{P1򨾜j>'kEkƗBg*H%'_aY6Bn!TL&ɌOb{c`'d^{t\i^[uɐ[}q0lM˕G:‚4kb祔c^:?bpg… +37stH:0}en6x˟%/<]BL&* 5&fK9Mq)/iyqtA%kUe[ڛKN]Ě^,"`/ s[EQQm?|XJ߅92m]G.E΃ח U*Cn.j_)Tѧj̿30ڇ!A0=͜ar I3$C^-9#|pk!)?7.x9 @OO;WƝZBFU keZ75F6Tc6"ZȚs2y/1 ʵ:u4xa`C>6Rb/Yм)^=+~uRd`/|_8xbB0?Ft||Z\##|K 0>>zxv8۴吅q 8ĥ)"6>~\8:qM}#͚'ĉ#p\׶ l#bA?)|g g9|8jP(cr,BwV (WliVxxᡁ@0Okn;ɥh$_ckCgriv}>=wGzβ KkBɛ[˪ !J)h&k2%07δt}!d<9;I&0wV/ v 0<H}L&8ob%Hi|޶o&h1L|u֦y~󛱢8fٲUsւ)0oiFx2}X[zVYr_;N(w]_4B@OanC?gĦx>мgx>ΛToZoOMp>40>V Oy V9iq!4 LN,ˢu{jsz]|"R޻&'ƚ{53ўFu(<٪9:΋]B;)B>1::8;~)Yt|0(pw2N%&X,URBK)3\zz&}ax4;ǟ(tLNg{N|Ǽ\G#C9g$^\}p?556]/RP.90 k,U8/u776s ʪ_01چ|\N 0VV*3H鴃J7iI!wG_^ypl}r*jɤSR 5QN@ iZ#1ٰy;_\3\BQQ x:WJv츟ٯ$"@6 S#qe딇(/P( Dy~TOϻ<4:-+F`0||;Xl-"uw$Цi󼕝mKʩorz"mϺ$F:~E'ҐvD\y?Rr8_He@ e~O,T.(ފR*cY^m|cVR[8 JҡSm!ΆԨb)RHG{?MpqrmN>߶Y)\p,d#xۆWY*,l6]v0h15M˙MS8+EdI='LBJIH7_9{Caз*Lq,dt >+~ّeʏ?xԕ4bBAŚjﵫ!'\Ը$WNvKO}ӽmSşذqsOy?\[,d@'73'j%kOe`1.g2"e =YIzS2|zŐƄa\U,dP;jhhhaxǶ?КZ՚.q SE+XrbOu%\GتX(H,N^~]JyEZQKceTQ]VGYqnah;y$cQahT&QPZ*iZ8UQQM.qo/T\7X"u?Mttl2Xq(IoW{R^ ux*SYJ! 4S.Jy~ BROS[V|žKNɛP(L6V^|cR7i7nZW1Fd@ Ara{詑|(T*dN]Ko?s=@ |_EvF]׍kR)eBJc" MUUbY6`~V޴dJKß&~'d3i WWWWWW
Current Directory: /usr/lib64/python2.7/site-packages/mercurial
Viewing File: /usr/lib64/python2.7/site-packages/mercurial/obsolete.pyc
� Hq�Qc@sdZddlZddlZddlZddlZddlmZejZej Z dZ e Z dZdZdZeje�Zeje�ZdZd �Zd �Zd �Zd efd ��YZdefd��YZe d�Zd�ZdZd�Zd�Zd�Z d�Z!d�Z"d�Z#d�Z$dd�Z%d�Z&dd�Z(d�Z)iZ*d�Z+d�Z,d �Z-e+d!�d"��Z.e+d#�d$��Z/e+d%�d&��Z0e+d'�d(��Z1e+d)�d*��Z2e+d+�d,��Z3ddd-�Z4dS(.s� Obsolete markers handling An obsolete marker maps an old changeset to a list of new changesets. If the list of new changesets is empty, the old changeset is said to be "killed". Otherwise, the old changeset is being "replaced" by the new changesets. Obsolete markers can be used to record and distribute changeset graph transformations performed by history rewriting operations, and help building new tools to reconciliate conflicting rewriting actions. To facilitate conflicts resolution, markers include various annotations besides old and news changeset identifiers, such as creation date or author name. The old obsoleted changeset is called "precursor" and possible replacements are called "successors". Markers that used changeset X as a precursors are called "successor markers of X" because they hold information about the successors of X. Markers that use changeset Y as a successors are call "precursor markers of Y" because they hold information about the precursors of Y. Examples: - When changeset A is replacement by a changeset A', one marker is stored: (A, (A')) - When changesets A and B are folded into a new changeset C two markers are stored: (A, (C,)) and (B, (C,)) - When changeset A is simply "pruned" from the graph, a marker in create: (A, ()) - When changeset A is split into B and C, a single marker are used: (A, (C, C)) We use a single marker to distinct the "split" case from the "divergence" case. If two independents operation rewrite the same changeset A in to A' and A'' when have an error case: divergent rewriting. We can detect it because two markers will be created independently: (A, (B,)) and (A, (C,)) Format ------ Markers are stored in an append-only file stored in '.hg/store/obsstore'. The file starts with a version header: - 1 unsigned byte: version number, starting at zero. The header is followed by the markers. Each marker is made of: - 1 unsigned byte: number of new changesets "R", could be zero. - 1 unsigned 32-bits integer: metadata size "M" in bytes. - 1 byte: a bit field. It is reserved for flags used in obsolete markers common operations, to avoid repeated decoding of metadata entries. - 20 bytes: obsoleted changeset identifier. - N*20 bytes: new changesets identifiers. - M bytes: metadata as a sequence of nul-terminated strings. Each string contains a key and a value, separated by a color ':', without additional encoding. Keys cannot contain '' or ':' and values cannot contain ''. i����N(t_iis>BIB20st20sic cs`d}td|||d!�d}|d7}|tkrVtjtd�|��nt|�}x�|t|kr[|||t!}|t7}tt|�\}}}}d} |r�t|} |||| !}tt ||�} || 7}n||||!} t| �|kr=tjtd�|t| �f��n||7}|| || fVqeWdS(s(Read and enumerate markers from raw datais>Bis+parsing obsolete marker: unknown version %rsIparsing obsolete marker: metadata is too short, %d bytes expected, got %dN(( t_unpackt _fmversiontutiltAbortRtlent_fmfsizet_fmfixedt _fnodesizet_fmnode( tdatatofft diskversiontltcurtnbsuctmdsizetflagstpretsucststmetadata((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt _readmarkers�s.        cCs�x\|j�D]N\}}d|ks1d|kr@td��nd|kr td��q q Wdjgt|�D]}d|||f^qr�S(smReturn encoded metadata string to string mapping. Assume no ':' in key and no '' in both key and value.t:ts*':' and '' are forbidden in metadata key's$':' are forbidden in metadata value's%s:%s(t iteritemst ValueErrortjointsorted(tmetatkeytvaluetk((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt encodemeta�s  cCsLi}x?|jd�D].}|r|jd�\}}|||<qqW|S(s8Return string to string dictionary from encoded version.RR(tsplit(R tdRRR ((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt decodemeta�s tmarkercBs;eZdZd�Zd�Zd�Zd�Zd�ZRS(sWrap obsolete marker raw datacCs||_||_d|_dS(N(t_repot_datatNonet _decodedmeta(tselftrepoR ((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt__init__�s  cCs |jdS(s#Precursor changeset node identifieri(R((R+((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pytprecnode�scCs |jdS(s-List of successor changesets node identifiersi(R((R+((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt succnodes�scCs/|jdkr(t|jd�|_n|jS(sDecoded metadata dictionaryiN(R*R)R%R((R+((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyR�scCs7|j�djd�}t|d�t|d�fS(s#Creation date as (unixtime, offset)tdatet ii(RR#tfloattint(R+tparts((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyR0�s(t__name__t __module__t__doc__R-R.R/RR0(((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyR&�s     tobsstorecBsVeZdZd�Zd�Zd�Zd dd d�Zd�Zd�Z d�Z RS( s�Store obsolete markers Markers can be accessed with two mappings: - precursors[x] -> set(markers on precursors edges of x) - successors[x] -> set(markers on successors edges of x) cCs\i|_g|_i|_i|_||_|jd�}|rX|jt|��ndS(NR8(tcachest_allt precursorst successorstsopenerttryreadt_loadR(R+R=R ((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyR-�s     cCs t|j�S(N(titerR:(R+((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt__iter__�scCs t|j�S(N(tboolR:(R+((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt __nonzero__�sicCs�|dkri}nd|kr8dtj�|d<nt|�dkrYt|��nx/|D]'}t|�dkr`t|��q`q`Wt|�t|�t|�t|�f}|j ||g�dS(s�obsolete: add a new obsolete marker * ensuring it is hashable * check mandatory metadata * encode metadata R0s%d %diN( R)RtmakedateRRtstrttupleR3R"tadd(R+t transactiontprectsuccstflagRtsuccR&((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pytcreate�s    *cCs�tstjd��ng|D]}||jkr|^q}|r�|jdd�}z]|jdt�|j�}|jd|�x*t ||dk�D]}|j |�q�WWd|j �X|j |�|j j�nt|�S(spAdd new markers to the store Take care of filtering duplicate. Return the number of new marker.s,obsolete feature is not enabled on this repoR8tabiN(t_enabledRRR:R=tseekt _SEEK_ENDttellRGt_encodemarkerstwritetcloseR?R9tclearR(R+RHtmarkerstmtnewtftoffsettbytes((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyRGs(   cCs t|�}|j||�dS(N(RRG(R+RHR RW((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt mergemarkers&s cCs�x}|D]u}|jj|�|d \}}|jj|t��j|�x-|D]%}|jj|t��j|�qSWqWtj|jkr�t j t d���ndS(Nis;bad obsolescence marker detected: invalid successors nullid( R:tappendR<t setdefaulttsetRGR;tnodetnullidRRR(R+RWtmarkRRtsuc((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyR?*s  '(N( R5R6R7R-RARCR)RMRGR]R?(((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyR8�s    ccs7|rtdt�Vnx|D]}t|�VqWdS(Ns>B(t_packRt_encodeonemarker(RWt addheaderR&((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyRS5s cCsb|\}}}}t|�}tt|}|t|�||g}|j|�t||�|S(N(RRR textendRe(R&RRRRRtformatR ((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyRf>s   i�c Cs�|js iSi}g}td}xl|jD]a}t|�}t|�|tkrqg}d}|j|�n|j|�|t|�7}q-WxVtt|��D]B\}}djtdt �g|�} t j | �|d|<q�W|S(sList markers over pushkeyiits>Bsdump%i( R8t _maxpayloadRfRR^t enumeratetreversedRReRtbase85t b85encode( R,tkeysR4t currentlenR&tnextdatat currentparttidxtpartR ((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt listmarkersLs"    cCs�|jd�s-|jjtd�|�dS|rQ|jjtd�|�dStj|�}|j�}zF|jd�}z%|jj ||�|j �dSWd|j �XWd|j �XdS(sPush markers over pushkeytdumpsunknown key: %risunexpected old valuespushkey: obsolete markersiN( t startswithtuitwarnRRnt b85decodetlockRHR8R]RUtrelease(R,RtoldRYR R|ttr((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt pushmarker`s   c Cs�tr�|jr�d|jd�kr�g}|jd�}xCt|dt�D]/}||}|j|jd|d|��qLWg|D]}|s�|^q�r�td�}|jj |�q�ndS(sputility function to push bookmark to a remote Exist mostly to allow overridding for experimentation purposetobsoletet namespacestreverseRjs&failed to push some obsolete markers! N( ROR8tlistkeysRtTrueR^tpushkeyRRyRz(R,tremotetrsltst remotedataRR trtmsg((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pytsyncpushus # cCs�d}tr�|jjd�|jd�}d|kr�|�}xRt|dt�D]>}|jd�rStj ||�}|j j ||�qSqSW|j �q�n|S(sMutility function to pull bookmark to a remote The `gettransaction` is function that return the pull transaction, creating one if necessary. We return the transaction to inform the calling code that a new transaction have been created (when applicable). Exists mostly to allow overridding for experimentation purposes!fetching remote obsolete markers R�tdump0R�RwN( R)RORytdebugR�RR�RxRnR{R8R]tinvalidatevolatilesets(R,R�tgettransactionRt remoteobsRR ((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pytsyncpull�s  ccs&x|jD]}t||�Vq WdS(s*all obsolete markers known in a repositoryN(R8R&(R,t markerdata((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt allmarkers�sccsAx:|jjjj|j�d�D]}t|j|�Vq"WdS(s6obsolete marker marking this changeset as a successorsN((R'R8R;tgetRaR&(tctxR ((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pytprecursormarkers�s(ccsAx:|jjjj|j�d�D]}t|j|�Vq"WdS(s.obsolete marker making this changeset obsoleteN((R'R8R<R�RaR&(R�R ((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pytsuccessormarkers�s(ccs�t|�}t|�}x�|r�|j�}|Vxo|jj|d�D]X}|d|@rbqHnx;|dD]/}||krm|j|�|j|�qmqmWqHWqWdS(s�Yield node for every successor of <nodes>. Some successors may be unknown locally. This is a linear yield unsuited to detecting split changesets.iiN((R`tpopR<R�RG(R8tnodest ignoreflagst remainingtseentcurrentRcRd((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt allsuccessors�s      cs|j�}t|jd|��}|jr�|jj�d}x�t|�|kr�t|�}td�|D��}g|D]}|j�r}|j�^q}}|jt |j|���fd�|D�}t|jd|��}qBWntd�|D��S(sSreturn all nodes in the "foreground" of other node The foreground of a revision is anything reachable using parent -> children or precursor -> sucessor relation. It is very similars to "descendant" but augmented with obsolescence information. Beware that possible obsolescence cycle may result if complexe situation. s%ln::i����css|]}|j�VqdS(N(Ra(t.0tc((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pys <genexpr>�sc3s!|]}|�kr|VqdS(N((R�tn(tnm(s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pys <genexpr>�scss|]}|j�VqdS(N(Ra(R�R�((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pys <genexpr>�s( t unfilteredR`R8t changelogtnodemapRtmutableRatupdateR�(R,R�t foregroundtplenRJR�R�tknown((R�s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyR��s    +cCs�|jj}|g}t|�}|dkr6i}nxC|r{|d}||krk|j|j��q9||kr�||kr�|fg||<qxg||<q9x�t||�D]b}xX|dD]I}||kr�||kr�g||<q|j|�|j|�Pq�q�Wq�Pq�Wg} x�t||�D]�}gg} x�|dD]~}g} xi| D]a} xX||D]L} t | �}x*| D]"}||kr�|j|�q�q�W| j|�qoWq^W| } qKW| j | �q1Wg}g}td�| D�dd�dt �}xR|D]J\}}x;|D]}|j |�r)Pq)q)W|j|�|j|�qW|j �|||<q9W||S(s�Return all set of successors of initial nodes Successors set of changeset A are a group of revision that succeed A. It succeed A as a consistent whole, each revision being only partial replacement. Successors set contains non-obsolete changeset only. In most cases a changeset A have zero (changeset pruned) or a single successors set that contains a single successor (changeset A replaced by A') When changeset is split, it results successors set containing more than a single element. Divergent rewriting will result in multiple successors sets. They are returned as a list of tuples containing all valid successors sets. Final successors unknown locally are considered plain prune (obsoleted without successors). The optional `cache` parameter is a dictionary that may contains precomputed successors sets. It is meant to reuse the computation of previous call to `successorssets` when multiple calls are made at the same time. The cache dictionary is updated in place. The caller is responsible for its live spawn. Code that makes multiple calls to `successorssets` *must* use this cache mechanism or suffer terrible performances.i����icss'|]}|rt|�|fVqdS(N(R`(R�R((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pys <genexpr>�sRcSst|d�S(Ni(R(tx((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt<lambda>�sR�N(R8R<R`R)tremoveR�RR^RGtlistRhR�tissubsetR�(R,t initialnodetcachet succmarkerst toproceedt stackedsetR�RcRdt succssetstmarksst productresulttprefixtsuffixtnewssRuR�tfinalt candidatet setversiont listversiontseenset((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pytsuccessorssets�sd           !              ccsD|jjj}x.|D]&}||�}|dk r|VqqWdS(sgyield revision numbers of known nodes passed in parameters Unknown revisions are silently ignored.N(R�R�R�R)(R,R�ttorevR�trev((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt _knownrevs�s    cs�fd�}|S(sADecorator to register a function as computing the cache for a setcs �tkst�|t�<|S(N(t cachefuncstAssertionError(tfunc(tname(s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt decorator�s ((R�R�((R�s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pytcachefor�scCsV|j�}|jsdS||jjkrHt||�|jj|<n|jj|S(syReturn the set of revision that belong to the <name> set Such access may compute the set and cache it for future use((R�R8R9R�(R,R�((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pytgetrevs�s   cCs&d|jkr"|jjj�ndS(s�Remove all obsolescence related cache from a repo This remove all cache in obsstore is the obsstore already exist on the repo. (We could be smarter here given the exact event that trigger the cache clearing)R8N(t _filecacheR8R9RV(R,((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pytclearobscaches�s R�cCsvt�}|jjj}|jj}xK|jjD]=}||�}|dk r1|||�r1|j |�q1q1W|S(sthe set of obsolete revisionsN( R`R�R�R�t _phasecachetphaseR8R<R)RG(R,tobstgetrevtgetphaseRaR�((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt_computeobsoleteset�s   tunstablecsHt|d���st�S|j}t�fd�|j��D��S(s7the set of non obsolete revisions with obsolete parentsR�c3s!|]}|�kr|VqdS(N((R�R�(R�(s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pys <genexpr>�s(R�R`R�t descendants(R,tcl((R�s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt_computeunstableset�s  t suspendedcs>|jjt|d���t�fd�t|d�D��S(s9the set of obsolete parents with non obsolete descendantsR�c3s!|]}|�kr|VqdS(N((R�R�(R�(s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pys <genexpr>�sR�(R�t ancestorsR�R`(R,((R�s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt_computesuspendedset�stextinctcCst|d�t|d�S(s<the set of obsolete parents without non obsolete descendantsR�R�(R�(R,((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt_computeextinctset�stbumpedcsh|jj��fd�|jd�D�}t|j|dt�}d}t|j|t||���S(s3the set of revs trying to obsolete public revisionsc3s|]}�|�VqdS(N((R�R�(ttonode(s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pys <genexpr>�sspublic()R�s%ld - obsolete() - public()(R�RatrevsR�R8t bumpedfixR`R�(R,t publicnodesR<tquery((R�s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt_computebumpedset�s   t divergentc Cst�}|j}i}x�|jd�D]�}|jj|j�d�}t|�}x�|r�|j�d}||kr�t|||�ng||D]}|r�|^q�} t| �dkr�|j|j ��Pn|j |jj|d��qXWq(W|S(sMthe set of rev that compete to be the final successors of some revision. s(not public()) - obsolete()ii((( R`R8R;R�RaR�R�RRGR�R�( R,R�R8tnewermapR�Rct toprocessRIR�tnewer((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt_computedivergentset�s      #$c Cs/|dkri}nd|kr8dtj�|d<nd|krZ|jj�|d<n|jd�}z�x�|D]�\}}|j�s�tjd|��n|j�}t d�|D��}||kr�tjd|��n|j j |||||�|j j �qsW|j�Wd|j�XdS( s�Add obsolete markers between changesets in a repo <relations> must be an iterable of (<old>, (<new>, ...)) tuple. `old` and `news` are changectx. Trying to obsolete a public changeset will raise an exception. Current user and date are used except if specified otherwise in the metadata attribute. This function operates within a transaction of its own, but does not take any lock on the repo. R0s%i %itusersadd-obsolescence-markers'cannot obsolete immutable changeset: %scss|]}|j�VqdS(N(Ra(R�R((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pys <genexpr>,ss#changeset %s cannot obsolete itselfN(R)RRDRytusernameRHR�RRaRFR8RMtfilteredrevcacheRVRUR}( R,t relationsRKRRRIRtnprectnsucs((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt createmarkerss(         (5R7tstructRRnRati18nRtpackRetunpackRRQtFalseRORRR tcalcsizeRR R�RR"R%tobjectR&R8RSRfRkRvR�R�R�R�R�R�R�R�R)R�R�R�R�R�R�R�R�R�R�R�R�R�(((s8/usr/lib64/python2.7/site-packages/mercurial/obsolete.pyt<module>TsV $    ! [           �