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/lib/python2.7/site-packages/yum
Viewing File: /usr/lib/python2.7/site-packages/yum/history.pyc
� � v_c@sddlZddlZddlZddlZddlZddlmZddlmZm Z m Z ddl j Z ddl Zddl TddlmZmZmZddlmZmZddlmZdZid e6d e6d e6d e6d e6de6de6Z i ed 6ed 6ed 6ed 6ed 6ed6ed6ed6ed6ed6ed6Z!e"e#d�Z$dfd��YZ%defd��YZ&de&fd��YZ'dfd��YZ(dfd��YZ)de)fd ��YZ*d!fd"��YZ+d#Z,dS($i����N(tproxy(tsqlitet executeSQLt sql_esc_glob(t*(tYumInstalledPackagetYumAvailablePackaget PackageObject(t to_unicodetto_utf8(t getBaseArchs/var/lib/yum/historytUpdatetUpdatedtErasetInstalls True-Installt Obsoletedt Obsoletings Dep-Installt Reinstallt Downgradet DowngradedcCsF|d krg}ndddddddg}t}x*|D]"}tjj|�r=t}Pq=q=Wt}|s�dg}t}nt|�|kr�g}n|r�t |�}n�g}t}xL|D]D}tj |�r�|j |df�t}q�|j |d f�q�W| r0| r0|r0|||tfS|}|||tfS( svSetup need_full and patterns for _yieldSQLDataList, also see if we can get away with just using searchNames(). tnamet sql_nameArchtsql_nameVerRelArcht sql_nameVertsql_nameVerRelt sql_envrat sql_nevratglobt=N( tNonetFalsetyumtmisctre_full_search_neededtTruet PATTERNS_MAXtPATTERNS_INDEXED_MAXtlenRtre_globtappend(tpatternst ignore_casetfieldst need_fulltpattpat_maxttmpt need_glob((s//usr/lib/python2.7/site-packages/yum/history.pyt_setupHistorySearchSQL>s:          t_YumHistPackageYumDBc BsYeZdZd�Zedddddddd g�Zd �Zd �Zd d �Z RS(s9 Class to pretend to be yumdb_info for history packages. cCs ||_dS(N(t_pkg(tselftpkg((s//usr/lib/python2.7/site-packages/yum/history.pyt__init__hst command_linet from_repotfrom_repo_revisiontfrom_repo_timestampt installed_byt changed_bytreasont releasevercCs�|j}|jd�r.td||f�n||jkrStd||f�n|jj||�}tr�|dkr�td||f�n|dkr�dSt|�p�d}t |||�|S(s0 Load yumdb attributes from the history sqlite. t_s%s has no yum attribute %stN( R2t startswithtAttributeErrort_valid_yumdb_keyst_historyt_load_yumdb_keyRRtstrtsetattr(R3tattrR4tval((s//usr/lib/python2.7/site-packages/yum/history.pyt __getattr__ps  cCs|j|�}|dk S(N(tgetR(R3RGtx((s//usr/lib/python2.7/site-packages/yum/history.pyt __contains__�scCs,yt||�}Wntk r'|SX|S(sretrieve an add'l data obj(tgetattrRA(R3RGtdefaulttres((s//usr/lib/python2.7/site-packages/yum/history.pyRJ�s  N( t__name__t __module__t__doc__R5tsetRBRIRLRRJ(((s//usr/lib/python2.7/site-packages/yum/history.pyR1es   tYumHistoryPackagec BseeZddd�Zeddddddddd d g �Zd �Zd �Zed d��Z RS(c Cs�||_||_||_||_||_|j|j|j|j|jf|_|dkrlg|_n,|jd�}|d|ddfg|_d|_ ||_ t |�|_ dS(Nt:iis <history>( RtversiontreleasetepochtarchtpkgtupRt _checksumstsplittrepoidRCR1t yumdb_info( R3RRYRXRVRWtchecksumthistorytchk((s//usr/lib/python2.7/site-packages/yum/history.pyR5�s          t buildtimet buildhosttlicensetpackagertsizet sourcerpmturltvendort committert committimecCs�|jd�r%td||f�n||jkrJtd||f�n|jj||�}tr�|dkr�td||f�n|dkr�dSt|�p�d}t|||�|S(s0 Load rpmdb attributes from the history sqlite. R>s%s has no attribute %sR?N( R@RAt_valid_rpmdb_keysRCt_load_rpmdb_keyRRRERF(R3RGRH((s//usr/lib/python2.7/site-packages/yum/history.pyRI�s cCs�d|jkr}|jjd}|jjdk rkd|jkrk|jj|jjkrkd|jj}nd|jj|S|jS(s This reports the repo the package is from, we integrate YUMDB info. for RPM packages so a package from "fedora" that is installed has a ui_from_repo of "@fedora". Note that, esp. with the --releasever option, "fedora" or "rawhide" isn't authoritative. So we also check against the current releasever and if it is different we also print the YUMDB releasever. This means that installing from F12 fedora, while running F12, would report as "@fedora/13". R7R?R=t/t@N(R^RCR=RR7R](R3tend((s//usr/lib/python2.7/site-packages/yum/history.pyt _ui_from_repo�s  tfgetcCs |j�S(N(Rq(R3((s//usr/lib/python2.7/site-packages/yum/history.pyt<lambda>�sN( RPRQRR5RSRlRIRqtpropertyt ui_from_repo(((s//usr/lib/python2.7/site-packages/yum/history.pyRT�s     tYumHistoryPackageStatecBseZddd�ZRS(c Cs8tj||||||||�d|_||_dS(N(RTR5Rtdonetstate( R3RRYRXRVRWRxR_R`((s//usr/lib/python2.7/site-packages/yum/history.pyR5�s  N(RPRQRR5(((s//usr/lib/python2.7/site-packages/yum/history.pyRv�stYumHistoryRpmdbProblemcBsDeZdZd�Zd�Zd�Zd�Zedd��ZRS(sZ Class representing an rpmdb problem that existed at the time of the transaction. cCs7t|�|_||_||_||_d|_dS(N(tweakrefRCtrpidtproblemttextRt _loaded_P(R3R`R{R|R}((s//usr/lib/python2.7/site-packages/yum/history.pyR5�s    cCsI|dkrdSt|j|j�}|r0| St|j|j�}|S(Ni(RtcmpR|R{(R3tothertret((s//usr/lib/python2.7/site-packages/yum/history.pyt__cmp__�s cCs t|j�S(N(thashR{(R3((s//usr/lib/python2.7/site-packages/yum/history.pyt__hash__�scCs7|jdkr0t|jj|j��|_n|jS(N(R~RtsortedRCt_old_prob_pkgsR{(R3((s//usr/lib/python2.7/site-packages/yum/history.pyt _getProbPkgs�s!RrcCs |j�S(N(R�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyRs�s( RPRQRRR5R�R�R�Rttpackages(((s//usr/lib/python2.7/site-packages/yum/history.pyRy�s    tYumHistoryTransactioncBs�eZdZd�Zd�Zd�Zd�Zd�Zedd��Z edd��Z edd ��Z d �Z edd ��Z d �Zedd ��Zd�Zd�Zedd��Zedd��ZRS(s# Holder for a history transaction. cCs�t|�|_|d|_|d|_|d|_|d|_|d|_|d|_|d|_d|_ d|_ d|_ d|_ t|_d|_d|_d|_d|_d|_dS(Niiiiiii(RzRCttidt beg_timestamptbeg_rpmdbversiont end_timestamptend_rpmdbversiontloginuidt return_codeRt _loaded_TWt _loaded_TDt _loaded_TSt _loaded_PROBRt_have_loaded_CMDt _loaded_CMDt _loaded_ERt _loaded_OTtaltered_lt_rpmdbtaltered_gt_rpmdb(R3R`trow((s//usr/lib/python2.7/site-packages/yum/history.pyR5s$                cCsi|dkrdSt|j|j�}|r0| St|j|j�}|rO|St|j|j�}| S(Ni(RRR�R�R�(R3R�R�((s//usr/lib/python2.7/site-packages/yum/history.pyR�s cCs7|jdkr0t|jj|j��|_n|jS(N(R�RR�RCt_old_with_pkgsR�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyt _getTransWith)s!cCs7|jdkr0t|jj|j��|_n|jS(N(R�RR�RCt_old_data_pkgsR�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyt _getTransData-s!cCs7|jdkr0t|jj|j��|_n|jS(N(R�RR�RCt_old_skip_pkgsR�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyt _getTransSkip1s!RrcCs |j�S(N(R�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyRs6scCs |j�S(N(R�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyRs7scCs |j�S(N(R�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyRs8scCs7|jdkr0t|jj|j��|_n|jS(N(R�RR�RCt _old_problemsR�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyt _getProblems:s!cCs |j�S(N(R�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyRs?scCs4|js-t|_|jj|j�|_n|jS(N(R�R"RCt _old_cmdlineR�R�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyt _getCmdlineAs  cCs |j�S(N(R�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyRsGscCs1|jdkr*|jj|j�|_n|jS(N(R�RRCt _load_errorsR�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyt _getErrorsIscCs1|jdkr*|jj|j�|_n|jS(N(R�RRCt _load_outputR�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyt _getOutputMscCs |j�S(N(R�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyRsRscCs |j�S(N(R�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyRsSs(RPRQRRR5R�R�R�R�Rtt trans_witht trans_datat trans_skipR�trpmdb_problemsR�tcmdlineR�R�terrorstoutput(((s//usr/lib/python2.7/site-packages/yum/history.pyR�s"        tYumMergedHistoryTransactioncBs�eZd�Zd�Zedd��Zd�Zedd��Zd�Zedd��Z d�Z e dd ��Z e d ��Ze d ��Ze d ��Zd �Zd�Zd�Zd�Zd�Zd�Zd�ZRS(cCs�t|jg�|_|g|_|j|_|j|_|j|_|j|_d|_ d|_ g|_ d|_ t |_d|_d|_d|_d|_d|_dS(N(RSR�t _merged_tidst _merged_objsR�R�R�R�RR�R�R�R�RR�R�R�R�R�R�(R3tobj((s//usr/lib/python2.7/site-packages/yum/history.pyR5Vs               cCs t|j�S(N(R�R�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyt _getAllTidsqsRrcCs |j�S(N(R�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyRssscCsCtd�|jD��}t|�dkr9t|�dSt|�S(Ncss|]}|jVqdS(N(R�(t.0R�((s//usr/lib/python2.7/site-packages/yum/history.pys <genexpr>vsii(RSR�R%tlistR�(R3R�((s//usr/lib/python2.7/site-packages/yum/history.pyt _getLoginUIDsuscCs |j�S(N(R�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyRszscCsatd�|jD��}t|�dkr;d|kr;dSd|krW|jd�nt|�S(Ncss|]}|jVqdS(N(R�(R�R�((s//usr/lib/python2.7/site-packages/yum/history.pys <genexpr>}sii(RSR�R%tremoveR�(R3t ret_codes((s//usr/lib/python2.7/site-packages/yum/history.pyt_getReturnCodes|s  cCs |j�S(N(R�(R3((s//usr/lib/python2.7/site-packages/yum/history.pyRs�scCssg}t�}xW|jD]L}xC|jD]8}|j|krDq)n|j|j�|j|�q)WqWt|�S(N(RSR�R�RZtaddR'R�(R3R�tfiltR�R4((s//usr/lib/python2.7/site-packages/yum/history.pyR��s cCs1|dkr|j}n|jt|j�|fS(s6 Take a pkg and return the key for it's state lookup. N(RRxRR RY(R4Rx((s//usr/lib/python2.7/site-packages/yum/history.pyt_p2sk�s  cCsMi}i}x4|D],}tj|�}|||j<|||<qW||fS(N(R�R�RZ(tpkgst pkgtup2pkgt pkgstate2pkgR4tkey((s//usr/lib/python2.7/site-packages/yum/history.pyt _list2dict�s  c Cs�t|j|j|j|j|j|d|j�}|j|_|j|_t |j t krjt |_ nt |j tkr�t|_ n|S(NR`(RvRRYRXRVRWRCR[Rwt _sttxt2stcodeRxtTS_INSTALL_STATESR"tstate_installedtTS_REMOVE_STATESR(R4Rxtnpkg((s//usr/lib/python2.7/site-packages/yum/history.pyt_conv_pkg_state�s     cCsBt|�td�kr*tj|�}n||kr:dS||S(Nii(ii(ttypeR�R�R(tskR�((s//usr/lib/python2.7/site-packages/yum/history.pyt_get_pkg�s  cCsh|j||�}|dkr"dS||j|�=|j||�}|||j<|||j|�<dS(N(R�RR�R�RZ(R3R�tnstateR�R�txpkg((s//usr/lib/python2.7/site-packages/yum/history.pyt _move_pkg�s  c sP��fd�}��fd�}���fd�}���fd�}���fd�����fd����fd�}i�i�x��jD]�}�j|j�\��x t�j��D] }|\}} } | dkr�q�n�|} x9dD].} |�j| | ��} | dk r Pq q Wq�trGq�| | kr|| d�| d kr�|| d�q�q�| | kr�|| d�| d kr�|| d�q�q��| �| d kr�|| d�q�q�Wt�j��j �j��}x�|D]�}|�ks |�kr-q n�|} �|} trJq | j dkrx| j dkr��| �q�q | j dkr�d}| j |ks�t �q | j dkrUtr�q�| j dkr�|| | �q�| j dkr|| | �|�j| d�| j �q�| j dkr�|| | �|�j| d�| j �q�q | j dkr trmq�| j dkr��| �q�| j dkr�|| | �|�j| d�| j �|�j| d�| j �q�| j dkr�|�j| d��}|dkr.|�j| d��}n|dkrX| j d krOq n| }n|�j| d��}|dkr�|�j| d��}n|dkr�|�j| d ��}n|dkr�q n|| | �||kr9d}d | j |j fkrd }n|| kr,|||�n�|�q�||kr�d}d}d | j |j fkrrd }n|| kr�|||�n|||�q�d}d}d | j |j fkr�d }n|| kr�|||�n|||�q�q q Wx�D]}�|�|<qWx�D]}�|�|<q$Wq�Wt �j ��S(Ncs�j|��S(N(R�(R�(t fpkgstate2pkgR3(s//usr/lib/python2.7/site-packages/yum/history.pyt _get_pkg_f�scs�j|��S(N(R�(R�(t npkgstate2pkgR3(s//usr/lib/python2.7/site-packages/yum/history.pyt _get_pkg_n�scs�j||���dS(N(R�(R�R�(R�t fpkgtup2pkgR3(s//usr/lib/python2.7/site-packages/yum/history.pyt _move_pkg_f�scs�j||���dS(N(R�(R�R�(R�t npkgtup2pkgR3(s//usr/lib/python2.7/site-packages/yum/history.pyt _move_pkg_n�scs3�|j=�j|�}|�kr/�|=ndS(N(RZR�(R4R�(R�R�R3(s//usr/lib/python2.7/site-packages/yum/history.pyt_del1_n�s  cs3�|j=�j|�}|�kr/�|=ndS(N(RZR�(R4R�(R�R�R3(s//usr/lib/python2.7/site-packages/yum/history.pyt_del1_f�s  cs0|j|jkst��|��|�dS(N(RZtAssertionError(tfpkgR�(R�R�(s//usr/lib/python2.7/site-packages/yum/history.pyt_del2�s RR Rs True-Installs Dep-InstallRRRR R R(RR (Rs True-Installs Dep-InstallR(RR RRR (RR (Rs True-Installs Dep-InstallR(Rs True-Installs Dep-Install(R R(RR R(R R(RR (R�R�R�R�tkeysR�RRRSt intersectionRxR�R�tvalues(R3R�R�R�R�R�R�R�RRYRxR�txstateR�tsametupsRZt good_statestxfpkgtxnpkgtnfstatetnnstateRK((R�R�R�R�R�R�R3s//usr/lib/python2.7/site-packages/yum/history.pyR��s�            !      "                    cCsHt�}x2|jD]'}x|jD]}|j|�q#WqWt|�S(N(RSR�R�R�R�(R3tprobsR�tprob((s//usr/lib/python2.7/site-packages/yum/history.pyR�ds  cCsfg}xO|jD]D}|js%qn|rD|d|jkrDqn|j|j�qW|sbdS|S(Ni����(R�R�R'R(R3tcmdlinesR�((s//usr/lib/python2.7/site-packages/yum/history.pyR�ks cCs.g}x!|jD]}|j|j�qW|S(N(R�textendR�(R3R�R�((s//usr/lib/python2.7/site-packages/yum/history.pyR�wscCs.g}x!|jD]}|j|j�qW|S(N(R�R�R�(R3R�R�((s//usr/lib/python2.7/site-packages/yum/history.pyR�|scCs�|j|jkrdS|jj|j�|jj|�|jjdt�|j|jkry|j|_|j|_n|j |j kr�|j |_ |j |_ ndS(Ntreverse( R�R�R�R�R'tsortR"R�R�R�R�(R3R�((s//usr/lib/python2.7/site-packages/yum/history.pytmerge�s  N(RPRQR5R�RtR�R�R�R�R�R�t staticmethodRR�R�R�R�R�R�R�R�R�R�R�(((s//usr/lib/python2.7/site-packages/yum/history.pyR�Us(        �   t YumHistorycBs?eZdZded@d�Zd�Zd�Zd�Zd�Z d�Z d@e d�Z e d �Z e d �Zed �Ze d �Zed ��Zd�Zd�Zd�Zd�Zd�Zd�Zggd@d�Zd�Zd�Zd�Zd�Zd@d�Zd�Z d@d�Z!d�Z"d�Z#d�Z$d�Z%d �Z&d!�Z'gd@ed"�Z(e d#�Z)d$�Z*d%�Z+d&�Z,d'�Z-d(�Z.d)�Z/d*�Z0d+�Z1d,�Z2d-�Z3d.�Z4d/�Z5e d0�Z6d1d2d3d4gZ7d5�Z8d6d7d8d9d:d;d<d=gZ9d>�Z:d?�Z;RS(As, API for accessing the history sqlite data. Rnc Cs�d|_tjj�|_tjj|�j |�sYtjj|d|�|j_ ntjjd|�|j_ t |j_ t |j_||_d|_tjj|jj �s�ytj|jj �Wnttfk r�}dSXt |j_ n*tj|jj tj�r$t |j_ ntjd|jj �}x�tt|��D]�}tjj|�}|td�td� !}|jdd�}t|�dkr�qPnytt|�Wntk r�qPnXd|d |d |d f|_ ||_PqPW|jdkr&|j!�s&dSn|jj d|j |j_"tjj|jj"�s�ytj|jj"�Wq�ttfk r�}dSXn*tj|jj"tj�r�t |j_ ndS( NRns%s/history-*-*-*.sqliteshistory-s.sqlitet-iis%s-%s-%siii(#Rt_connRR t GenericHoldertconftostpathtnormpathR@tdb_pathRtwritableR"treadableR=t_db_filetexiststmakedirstIOErrortOSErrortaccesstW_OKRtreversedR�tbasenameR%R\tmaptintt ValueErrort_db_datet_create_db_filet addon_path( R3trootR�R=tetDBstdtfnametpieces((s//usr/lib/python2.7/site-packages/yum/history.pyR5�sT #     "  cCs|j�dS(N(tclose(R3((s//usr/lib/python2.7/site-packages/yum/history.pyt__del__�scCs�|jdkr~|jjsdSytj|j�|_Wn*tjtjfk rdt |j_dSXt |jj �d�n|jj �S(NsPRAGMA locking_mode = EXCLUSIVE( R�RR�R�RtconnectR�tOperationalErrort DatabaseErrorRRtcursor(R3((s//usr/lib/python2.7/site-packages/yum/history.pyt _get_cursor�s  cCs |jj�S(N(R�tcommit(R3((s//usr/lib/python2.7/site-packages/yum/history.pyt_commit�scCs |jj�S(N(R�trollback(R3((s//usr/lib/python2.7/site-packages/yum/history.pyt _rollback�scCs,|jdk r(|jj�d|_ndS(N(R�RR(R3((s//usr/lib/python2.7/site-packages/yum/history.pyR�s c Cs?|j�}t|d|�xd|D]\\}}|dkrK|dkrK|S|dkr]q#n|dkroq#n||kr#|Sq#W|s�dS|\}}} } } t|�t|�t| �t| �t| �f\}}} } } |dk rt|d||| | | |f�} n!t|d||| | | f�} |jS(Ns�SELECT pkgtupid, checksum FROM pkgtups WHERE name=? AND arch=? AND epoch=? AND version=? AND release=?s�INSERT INTO pkgtups (name, arch, epoch, version, release, checksum) VALUES (?, ?, ?, ?, ?, ?)s�INSERT INTO pkgtups (name, arch, epoch, version, release) VALUES (?, ?, ?, ?, ?)(RRRRt lastrowid( R3RZR_tcreatetcurt sql_pkgtupidt sql_checksumtntaR tvtrRO((s//usr/lib/python2.7/site-packages/yum/history.pyt _pkgtup2pid�s0     0 cCsU|j�}|dk r?dt|d�t|d�f}n|j|j||�S(Ns%s:%sii(t returnIdSumRRER#RZ(R3tpoRtcsum((s//usr/lib/python2.7/site-packages/yum/history.pyt _apkg2pids  'cCsVd}|j}d|kr@d|kr@d|j|jf}n|j|j||�S(Nt checksum_typet checksum_datas%s:%s(RR^R(R)R#RZ(R3R%RR&tyumdb((s//usr/lib/python2.7/site-packages/yum/history.pyt _ipkg2pids  cCs|j||�S(N(R'(R3R%R((s//usr/lib/python2.7/site-packages/yum/history.pyt _hpkg2pidscCsst|t�r|j||�St|t�r>|j||�St|t�r]|j||�S|j|jd|�S(N( t isinstanceRR+RR'RTR,R#RZR(R3R%R((s//usr/lib/python2.7/site-packages/yum/history.pytpkg2pid"scCs�d}|jttfkrB|jr-d}qB|jrBd}qBn|jtkrf|jrfd}qfn|dkr�tj |j�}|dkr�|j r�d}q�n|S(NRRRRs Dep-Install( Rt output_statet TS_INSTALLtTS_TRUEINSTALLt reinstallt downgradestTS_ERASEt downgraded_byt _stcode2sttxtRJtisDep(ttxmbrRx((s//usr/lib/python2.7/site-packages/yum/history.pyt txmbr2state+s        cCs>|j�}|dkrdSt|d|j|f�}|jS(NskINSERT INTO trans_with_pkgs (tid, pkgtupid) VALUES (?, ?)(RRRt_tidR(R3tpidRRO((s//usr/lib/python2.7/site-packages/yum/history.pyttrans_with_pid<s   cCsK|j�}|dks%|j� r)dSt|d|j|f�}|jS(NskINSERT INTO trans_skip_pkgs (tid, pkgtupid) VALUES (?, ?)(RRt_update_db_file_2RR:R(R3R;RRO((s//usr/lib/python2.7/site-packages/yum/history.pyttrans_skip_pidFs  cCss|dk st�t|d� s.|dkr2dS|j�}|dkrNdSt|d|j||f�}|jS(NR:suINSERT INTO trans_data_pkgs (tid, pkgtupid, state) VALUES (?, ?, ?)(RR�thasattrRRR:R(R3R;RxRRO((s//usr/lib/python2.7/site-packages/yum/history.pyttrans_data_pid_begQs  cCskt|d� s|dkr dS|j�}|dkr<dSt|dd|j||f�}|j�dS(NR:s�UPDATE trans_data_pkgs SET done = ? WHERE tid = ? AND pkgtupid = ? AND state = ? tTRUE(R?RRRR:R(R3R;RxRRO((s//usr/lib/python2.7/site-packages/yum/history.pyttrans_data_pid_end]s  c Cs_t|d�sdS|j�}|dks8|j� r<dSt|j��}t|d|j|j|f�}|j }|s�|Si}|j }|||j <|jdkr�x!|j D]}|||j <q�Wn|jdkr�|j ||j j <nxb|j�D]T}|j|�}|j |j j kr6d} nd} t|d||| f�}qW|S(NR:swINSERT INTO trans_rpmdb_problems (tid, problem, msg) VALUES (?, ?, ?)t conflictst duplicatesRAtFALSEs}INSERT INTO trans_prob_pkgs (rpid, pkgtupid, main) VALUES (?, ?, ?)(R?RRR=Rt__str__RR:R|RR4RZRCt duplicateR�R.( R3R|RtuproblemROR{R�R4R;tmain((s//usr/lib/python2.7/site-packages/yum/history.pyt_trans_rpmdb_problemks:       cCsdt|d�sdS|j�}|dks8|j� r<dSt|d|jt|�f�}|jS(NR:shINSERT INTO trans_cmdline (tid, cmdline) VALUES (?, ?)(R?RRR=RR:RR(R3R�RRO((s//usr/lib/python2.7/site-packages/yum/history.pyt_trans_cmdline�s cCs<|j�}|dkrdSt|dttj��t|�tjj�f�}|j |_ x*|D]"} |j | �} |j | �qeWx?|D]7} |j | j�} |j| �} |j| | �q�Wx*|D]"} |j | �} |j| �q�Wx|D]} |j| �qW|r.|j|�n|j�dS(Ns�INSERT INTO trans_beg (timestamp, rpmdb_version, loginuid) VALUES (?, ?, ?)(RRRRttimeRERR t getloginuidRR:R+R<R.R%R9R@R>RJRKR(R3t rpmdb_versiont using_pkgsttxmbrst skip_packagesR�R�RROR4R;R8RxR|((s//usr/lib/python2.7/site-packages/yum/history.pytbeg�s.        cCs`|j�}|dkrdSx3|D]+}t|�}t|d|j|f�q#W|j�dS(NsJINSERT INTO trans_error (tid, msg) VALUES (?, ?)(RRRRR:R(R3R�Rterror((s//usr/lib/python2.7/site-packages/yum/history.pyt _log_errors�s    cCs�|dkst|d� r dS|j�}|dkr<dSx9|j�D]+}t|�}t|d|j|f�qIW|j�dS(s6 Note that data can be either a real pkg. ... or not. R:NsSINSERT INTO trans_script_stdout (tid, line) VALUES (?, ?)(RR?Rt splitlinesRRR:R(R3tdatatmsgRRS((s//usr/lib/python2.7/site-packages/yum/history.pytlog_scriptlet_output�s   cCsK|j�}t|d|f�g}x|D]}|j|d�q,W|S(NsfSELECT msg FROM trans_error WHERE tid = ? ORDER BY mid ASCi(RRR'(R3R�RR�R�((s//usr/lib/python2.7/site-packages/yum/history.pyR��s   cCsK|j�}t|d|f�g}x|D]}|j|d�q,W|S(NsoSELECT line FROM trans_script_stdout WHERE tid = ? ORDER BY lid ASCi(RRR'(R3R�RR�R�((s//usr/lib/python2.7/site-packages/yum/history.pyR��s   cCs�|s| st�t|d�s&dS|j�}|dkrBdSt|d|jttj��t|�|f�}|j �|s�t|dd|jf�|j �n|dk r�|j |�n|`dS(NR:s�INSERT INTO trans_end (tid, timestamp, rpmdb_version, return_code) VALUES (?, ?, ?, ?)sKUPDATE trans_data_pkgs SET done = ? WHERE tid = ?RA( R�R?RRRR:RRLRERRT(R3RNR�R�RRO((s//usr/lib/python2.7/site-packages/yum/history.pyRp�s$       cCst|d�stS|stS|s'tS|jjdt|j�}|jjr�tjj |� r�ytj |dd�Wq�t t fk r�}tSXn|j dd�}|d|}y:t|d�}|jt|��|j�|j�Wnt t fk r}tSXtS(s�append data to an arbitrary-named file in the history addon_path/transaction id location, returns True if write succeeded, False if notR:Rntmodei�R>sw+(R?RR�RRER:R�R�R�R�R�R�R�treplacetopentwriteR tflushRR"(R3tdatanameRVttid_dirR tsafenametdata_fntfo((s//usr/lib/python2.7/site-packages/yum/history.pytwrite_addon_data s, c Cs�|jjdt|�d}tj|d�}g|D]}|j|d�^q8}|s`|S||krpdSt||d�}|j�}|j�|S(NRnRR?R"( R�RRERRZRR[treadR( R3R�titemt hist_and_tidt addon_infotit addon_namesRbRV((s//usr/lib/python2.7/site-packages/yum/history.pytreturn_addon_data6s%   c Cs�|j�}t|d|f�g}xT|D]L}t|d|d|d|d|d|dd|�}|j|�q,W|S( Ns�SELECT name, arch, epoch, version, release, checksum FROM trans_with_pkgs JOIN pkgtups USING(pkgtupid) WHERE tid = ? ORDER BY name ASC, epoch ASCiiiiiiR`(RRRTR'(R3R�RR�R�R�((s//usr/lib/python2.7/site-packages/yum/history.pyR�Fs   0 c Cs�|j�}t|d|f�g}x�|D]�}t|d|d|d|d|d|d|dd |�}|d d k|_d|_t|jtkr�t |_nt|jt kr�t |_n|j |�q,W|S( Ns SELECT name, arch, epoch, version, release, checksum, done, state FROM trans_data_pkgs JOIN pkgtups USING(pkgtupid) WHERE tid = ? ORDER BY name ASC, epoch ASC, state DESCiiiiiiiR`iRA( RRRvRwRR�R�RxR�R"R�RR'(R3R�RR�R�R�((s//usr/lib/python2.7/site-packages/yum/history.pyR�Ss   &   c Cs�|j�}|dks%|j� r)gSt|d|f�g}xT|D]L}t|d|d|d|d|d|dd|�}|j|�qIW|S( Ns�SELECT name, arch, epoch, version, release, checksum FROM trans_skip_pkgs JOIN pkgtups USING(pkgtupid) WHERE tid = ? ORDER BY name ASC, epoch ASCiiiiiiR`(RRR=RRTR'(R3R�RR�R�R�((s//usr/lib/python2.7/site-packages/yum/history.pyR�gs   0 c Cs�|j�}|dks%|j� r)gSt|d|f�g}xg|D]_}t|d|d|d|d|d|dd|�}|d d k|_|j|�qIW|S( Ns�SELECT name, arch, epoch, version, release, checksum, main FROM trans_prob_pkgs JOIN pkgtups USING(pkgtupid) WHERE rpid = ? ORDER BY name ASC, epoch ASCiiiiiiR`iRA(RRR=RRTRIR'(R3R{RR�R�R�((s//usr/lib/python2.7/site-packages/yum/history.pyR�vs   0 cCs�|j�}|dks%|j� r)gSt|d|f�g}x<|D]4}t||d|d|d�}|j|�qIW|S(Ns�SELECT rpid, problem, msg FROM trans_rpmdb_problems WHERE tid = ? ORDER BY problem ASC, rpid ASCiii(RRR=RRyR'(R3R�RR�R�R�((s//usr/lib/python2.7/site-packages/yum/history.pyR��s   !cCs\|j�}|dks%|j� r)dSt|d|f�g}x|D] }|dSWdS(Ns[SELECT cmdline FROM trans_cmdline WHERE tid = ?i(RRR=R(R3R�RR�R�((s//usr/lib/python2.7/site-packages/yum/history.pyR��s    cCs�|j�}|d krgSd}|s1d}nd }|r�t|�tjjkr�tt|��}}|ddjdgt|��7}n|d7}|d k r�|dt |�7}nt |||�g}i}xo|D]g} |rt|�tjjkr| d|krq�qnt || �} | || d<|j | �q�Wd }|j �}t|�tjjkr�t ||�n4|ddjdgt|��7}t |||�xc|D][} | d|kr�q�n| d || d_| d || d_| d || d_q�Wd } x�t|�D]�} | j} d } | d k ra| j} n| d ks�| d ks�| jd | jkr�n3| | kr�t| _t| _nt| _t| _| } q4W|S(s� Return a list of the last transactions, note that this includes partial transactions (ones without an end transaction). s]SELECT tid, trans_beg.timestamp AS beg_ts, trans_beg.rpmdb_version AS beg_rv, trans_end.timestamp AS end_ts, trans_end.rpmdb_version AS end_rv, loginuid, return_code FROM trans_beg JOIN trans_end USING(tid)sSELECT tid, trans_beg.timestamp AS beg_ts, trans_beg.rpmdb_version AS beg_rv, NULL, NULL, loginuid, NULL FROM trans_begs WHERE tid IN (%s)s, t?s ORDER BY tid DESCs LIMIT is�SELECT tid, trans_end.timestamp AS end_ts, trans_end.rpmdb_version AS end_rv, return_code FROM trans_endiiiN(RRR%Rt constantsR$R�RStjoinRERR�R'R�R�R�R�RR�R�R"R�R�R(R3ttidstlimittcomplete_transactions_onlyRtsqltparamsR�ttid2objR�R�tlastcur_rvtlas_rv((s//usr/lib/python2.7/site-packages/yum/history.pytold�sd   '     $    .      cCs?|jgd|�}|sdSt|�dks7t�|dS(si This is the last full transaction. So any incomplete transactions do not count, by default. iiN(RwRR%R�(R3RpR�((s//usr/lib/python2.7/site-packages/yum/history.pytlast�s cCs�|j�}|dks%|j� r)dS|j|dt�}|dkrNdSdi|d6}t||||f�x|D] }|dSWdS(NRs\SELECT %(db)sdb_val FROM pkg_%(db)sdb WHERE pkgtupid=? and %(db)sdb_key=? tdbi(RRt_update_db_file_3R.RR(R3R4RyRGRR;RqR�((s//usr/lib/python2.7/site-packages/yum/history.pyt_load_anydb_key�s    cCs|j|d|�S(Ntrpm(R{(R3R4RG((s//usr/lib/python2.7/site-packages/yum/history.pyRmscCs|j|d|�S(NR(R{(R3R4RG((s//usr/lib/python2.7/site-packages/yum/history.pyRDscCs�|j�}|dks%|j� r)dS|j|dt�}|dkrNdSdi|d6}t||||t|�f�|jS(NRshINSERT INTO pkg_%(db)sdb (pkgtupid, %(db)sdb_key, %(db)sdb_val) VALUES (?, ?, ?)Ry(RRRzR.RRRR(R3R4RyRGRHRR;Rq((s//usr/lib/python2.7/site-packages/yum/history.pyt_save_anydb_keys  cCs|j|d||�S(NR|(R}(R3R4RGRH((s//usr/lib/python2.7/site-packages/yum/history.pyt_save_rpmdb_key"scCs|j|d||�S(NR(R}(R3R4RGRH((s//usr/lib/python2.7/site-packages/yum/history.pyt_save_yumdb_key$scCsXxQtjD]F}t||d�}|dkr4q n|j|d||�s tSq WtS(se Save all the data for rpmdb for this installed pkg, assumes there is no data currently. R|N(RTRlRMRR}RR"(R3tipkgRGRH((s//usr/lib/python2.7/site-packages/yum/history.pyt _save_rpmdb's cCsXxQtjD]F}|jj|�}|dkr4q n|j|d||�s tSq WtS(se Save all the data for yumdb for this installed pkg, assumes there is no data currently. RN(R1RBR^RJRR}RR"(R3R�RGRH((s//usr/lib/python2.7/site-packages/yum/history.pyt _save_yumdb2s cCsv|j�}|dks%|j� r)tS|j|dt�}|dkrNtSdi|d6}t|||f�tS(s= Delete all the data for rpmdb/yumdb for this installed pkg. Rs)DELETE FROM pkg_%(db)sdb WHERE pkgtupid=?RyN(RRRzRR.RR"(R3R4RyRR;Rq((s//usr/lib/python2.7/site-packages/yum/history.pyt _wipe_anydb=s  cCsb|j|d�stS|j|d�oC|j|�oC|j|�sT|j�tS|j�tS(s< Sync. all the data for rpmdb/yumdb for this installed pkg. R|R(R�RR�R�RRR"(R3R�((s//usr/lib/python2.7/site-packages/yum/history.pyt sync_alldbLs  c Cs�idd6dd6dd6dd6dd6dd6}|j�}|dksU|j� rYtSddddddf}xM|D]E\}}}t|d||f�x|D]}|d||<q�WqxW|S(s& Some stats about packages in the DB. itnevractnevratnevrtnatrpmdbR*sCOUNT(*)tpkgtupssCOUNT(DISTINCT(name || arch))s4COUNT(DISTINCT(name||version||epoch||release||arch))s.COUNT(DISTINCT(name||version||epoch||release))sCOUNT(DISTINCT(pkgtupid))t pkg_rpmdbt pkg_yumdbsSELECT %s FROM %sN(R�sCOUNT(*)R�(R�sCOUNT(DISTINCT(name || arch))R�(R�s4COUNT(DISTINCT(name||version||epoch||release||arch))R�(R�s.COUNT(DISTINCT(name||version||epoch||release))R�(R�sCOUNT(DISTINCT(pkgtupid))R�(syumdbsCOUNT(DISTINCT(pkgtupid))R�(RRRzRR(R3R�RRVR�tbsqltesqlR�((s//usr/lib/python2.7/site-packages/yum/history.pyt _pkg_statsYs,     c cs�|j�}t}g}g}xi|D]a\}} xR|D]J} |r^|jd| | f�n|jd| | f�|j|�q8Wq%W|s�t�|dj|�7}t|||�x|D] } | Vq�WdS(s2Yields all the package data for the given params. s %s LIKE ?%ss%s %s ?s OR N(Rt_FULL_PARSE_QUERY_BEGR'R�RmR( R3R(R*R)Rtqsqltpat_sqlstpat_datatpatterntresttfieldRK((s//usr/lib/python2.7/site-packages/yum/history.pyt_yieldSQLDataListvs    cCs-|j�}|d krt�Sg|D]'}tjdd|�jdd�^q&}t||�}|\}}}} g} t�} |r�x�|j|||�D]} | j| d�q�Wn�t } |s�t } nx{t j j || �D]d}t||�}|\}}}} |st�x.|j|||�D]} | j| d�q1Wq�Wd}|ddjdgt| ��7}t| �}t�}t|�t jj kr�t|d �x2|D]*} | d |kr�|j| d�q�q�W|S|s�|St|||�x|D]} |j| d�qW|S( s{ Search for history transactions which contain specified packages al. la. "yum list". Returns transaction ids. s \[[^]]+\]Rkt[t!is2SELECT tid FROM trans_data_pkgs WHERE pkgtupid IN s(%s)t,s(SELECT tid,pkgtupid FROM trans_data_pkgsiN(RRRStretsubRZR0R�R�R#R$RR t seq_max_splitR�RmR%R�RlR(R3R(R)RRKRVR+t npatternsR*tnamesR�t pkgtupidsR�R-tnpsRqRrRn((s//usr/lib/python2.7/site-packages/yum/history.pytsearch�sJ   1   $     s� CREATE TABLE pkg_rpmdb ( pkgtupid INTEGER NOT NULL REFERENCES pkgtups, rpmdb_key TEXT NOT NULL, rpmdb_val TEXT NOT NULL); sA CREATE INDEX i_pkgkey_rpmdb ON pkg_rpmdb (pkgtupid, rpmdb_key); s� CREATE TABLE pkg_yumdb ( pkgtupid INTEGER NOT NULL REFERENCES pkgtups, yumdb_key TEXT NOT NULL, yumdb_val TEXT NOT NULL); sA CREATE INDEX i_pkgkey_yumdb ON pkg_yumdb (pkgtupid, yumdb_key); cCs�|j�stSt|d�r&|jS|j�}|dkrBtSt|d�x:|D]}PqVWx|jD]}|j|�qkW|j �t |_t S(s3 Update to version 3 of history, rpmdb/yumdb data. t_cached_updated_3sPRAGMA table_info(pkg_yumdb)N( R=RR?R�RRRt _update_ops_3texecuteRR"(R3Rtobtop((s//usr/lib/python2.7/site-packages/yum/history.pyRz�s       s� CREATE TABLE trans_skip_pkgs ( tid INTEGER NOT NULL REFERENCES trans_beg, pkgtupid INTEGER NOT NULL REFERENCES pkgtups); sk CREATE TABLE trans_cmdline ( tid INTEGER NOT NULL REFERENCES trans_beg, cmdline TEXT NOT NULL); s� CREATE TABLE trans_rpmdb_problems ( rpid INTEGER PRIMARY KEY, tid INTEGER NOT NULL REFERENCES trans_beg, problem TEXT NOT NULL, msg TEXT NOT NULL); s� CREATE TABLE trans_prob_pkgs ( rpid INTEGER NOT NULL REFERENCES trans_rpmdb_problems, pkgtupid INTEGER NOT NULL REFERENCES pkgtups, main BOOL NOT NULL DEFAULT FALSE); s' CREATE VIEW vtrans_data_pkgs AS SELECT tid,name,epoch,version,release,arch,pkgtupid, state,done, name || '-' || epoch || ':' || version || '-' || release || '.' || arch AS nevra FROM trans_data_pkgs JOIN pkgtups USING(pkgtupid) ORDER BY name; s CREATE VIEW vtrans_with_pkgs AS SELECT tid,name,epoch,version,release,arch,pkgtupid, name || '-' || epoch || ':' || version || '-' || release || '.' || arch AS nevra FROM trans_with_pkgs JOIN pkgtups USING(pkgtupid) ORDER BY name; s CREATE VIEW vtrans_skip_pkgs AS SELECT tid,name,epoch,version,release,arch,pkgtupid, name || '-' || epoch || ':' || version || '-' || release || '.' || arch AS nevra FROM trans_skip_pkgs JOIN pkgtups USING(pkgtupid) ORDER BY name; s� CREATE VIEW vtrans_prob_pkgs2 AS SELECT tid,rpid,name,epoch,version,release,arch,pkgtups.pkgtupid, main,problem,msg, name || '-' || epoch || ':' || version || '-' || release || '.' || arch AS nevra FROM (SELECT * FROM trans_prob_pkgs,trans_rpmdb_problems WHERE trans_prob_pkgs.rpid=trans_rpmdb_problems.rpid) JOIN pkgtups USING(pkgtupid) ORDER BY name; cCs�|jjstSt|d�r&|jS|j�}|dkrBtSt|d�x:|D]}PqVWx|jD]}|j |�qkW|j �t |_t S(s; Update to version 2 of history, includes trans_skip_pkgs. t_cached_updated_2s"PRAGMA table_info(trans_skip_pkgs)N( R�R�RR?R�RRRt _update_ops_2R�RR"(R3RR�R�((s//usr/lib/python2.7/site-packages/yum/history.pyR=/s       cCsytjd�|_d|jjd|jdf}|j|kr�tj||d�tjj |d�r�tj|d|d�q�n||_|jj s�t Stjj |j�s�tj |jtj d�}tj|�n|j�}d d d d d dddg}x|D]}|j|�qWx|jD]}|j|�q3Wx|jD]}|j|�qTW|j�tS(s6 Create a new history DB file, populating tables etc. s%Y-%m-%ds %s/%s-%s.%sR`Rs.olds-journals -journal.oldi�s� CREATE TABLE trans_beg ( tid INTEGER PRIMARY KEY, timestamp INTEGER NOT NULL, rpmdb_version TEXT NOT NULL, loginuid INTEGER); s� CREATE TABLE trans_end ( tid INTEGER PRIMARY KEY REFERENCES trans_beg, timestamp INTEGER NOT NULL, rpmdb_version TEXT NOT NULL, return_code INTEGER NOT NULL); s� CREATE TABLE trans_with_pkgs ( tid INTEGER NOT NULL REFERENCES trans_beg, pkgtupid INTEGER NOT NULL REFERENCES pkgtups); s� CREATE TABLE trans_error ( mid INTEGER PRIMARY KEY, tid INTEGER NOT NULL REFERENCES trans_beg, msg TEXT NOT NULL); s� CREATE TABLE trans_script_stdout ( lid INTEGER PRIMARY KEY, tid INTEGER NOT NULL REFERENCES trans_beg, line TEXT NOT NULL); s� CREATE TABLE trans_data_pkgs ( tid INTEGER NOT NULL REFERENCES trans_beg, pkgtupid INTEGER NOT NULL REFERENCES pkgtups, done BOOL NOT NULL DEFAULT FALSE, state TEXT NOT NULL); s� CREATE TABLE pkgtups ( pkgtupid INTEGER PRIMARY KEY, name TEXT NOT NULL, arch TEXT NOT NULL, epoch TEXT NOT NULL, version TEXT NOT NULL, release TEXT NOT NULL, checksum TEXT); sO CREATE INDEX i_pkgtup_naevr ON pkgtups (name, arch, epoch, version, release); (RLtstrftimeRR�R�R�R�trenameR�R�R�RR[tO_CREATRRR�R�R�RR"(R3R�RbRtopsR�((s//usr/lib/python2.7/site-packages/yum/history.pyRIs@        N(<RPRQRRt _history_dirRR5RRRRRR"R#R'R+RR,R.R�R9R<R>R@RBRJRKRRRTRXR�R�RpRcRjR�R�R�R�R�R�RwRxR{RmRDR}R~RR�R�R�R�R�R�R�R�RzR�R=R(((s//usr/lib/python2.7/site-packages/yum/history.pyR��s�<     !      * !   )      Q          @     s� SELECT pkgtupid,name,epoch,version,release,arch, name || "." || arch AS sql_nameArch, name || "-" || version || "-" || release || "." || arch AS sql_nameVerRelArch, name || "-" || version AS sql_nameVer, name || "-" || version || "-" || release AS sql_nameVerRel, epoch || ":" || name || "-" || version || "-" || release || "." || arch AS sql_envra, name || "-" || epoch || ":" || version || "-" || release || "." || arch AS sql_nevra FROM pkgtups WHERE (-RLR�tos.pathRR�RzRtsqlutilsRRRtyum.miscR t yum.constantsRt yum.packagesRRRtyum.i18nRR t rpmUtils.archR R�t TS_UPDATEt TS_UPDATEDR4R0R1t TS_OBSOLETEDt TS_OBSOLETINGR6R�RRR0R1RTRvRyR�R�R�R�(((s//usr/lib/python2.7/site-packages/yum/history.pyt<module>sX         '0D  S�?����