[c@sddkZddkZddkZddkZddkZddklZddklZl Z l Z ddk i Z ddk Zddk TddklZlZlZddklZlZddklZdZhd e6d e6d e6d e6d e6de6de6Z h ed 6ed 6ed 6ed 6ed 6ed6ed6ed6ed6ed6ed6Z!e"e#dZ$dfdYZ%defdYZ&de&fdYZ'dfdYZ(dfdYZ)de)fd YZ*d!fd"YZ+d#Z,dS($iN(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 DowngradedcCsV|d jo g}ndddddddg}t}x,|D]$}tii|o t}Pq?q?Wt}|pdg}t}nt||jo g}n|ot |}ng}t}xN|D]F}ti |o|i |dft}q|i |d fqW| o | o|o|||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.6/site-packages/yum/history.pyt_setupHistorySearchSQL>s>         t_YumHistPackageYumDBc BsYeZdZdZedddddddd gZd 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.6/site-packages/yum/history.pyt__init__hst command_linet from_repotfrom_repo_revisiontfrom_repo_timestampt installed_byt changed_bytreasont releasevercCs|i}|idotd||fn||ijotd||fn|ii||}to$|djotd||fn|djodSt|pd}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.6/site-packages/yum/history.pyt __getattr__ps  cCs|i|}|dj S(N(tgetR(R3RGtx((s//usr/lib/python2.6/site-packages/yum/history.pyt __contains__scCs.yt||}Wntj o|SX|S(sretrieve an add'l data obj(tgetattrRA(R3RGtdefaulttres((s//usr/lib/python2.6/site-packages/yum/history.pyRJs N( t__name__t __module__t__doc__R5tsetRBRIRLRRJ(((s//usr/lib/python2.6/site-packages/yum/history.pyR1es   tYumHistoryPackagec BseeZdddZeddddddddd d g Zd Zd Zed dZ RS(c Cs||_||_||_||_||_|i|i|i|i|if|_|djo g|_n-|id}|d|ddfg|_d|_ ||_ t ||_ dS(Nt:iis ( RtversiontreleasetepochtarchtpkgtupRt _checksumstsplittrepoidRCR1t yumdb_info( R3RRYRXRVRWtchecksumthistorytchk((s//usr/lib/python2.6/site-packages/yum/history.pyR5s          t buildtimet buildhosttlicensetpackagertsizet sourcerpmturltvendort committert committimecCs|idotd||fn||ijotd||fn|ii||}to$|djotd||fn|djodSt|pd}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.6/site-packages/yum/history.pyRIs cCsd|ijos|iid}|iidj o=d|ijo-|ii|iijod|ii}nd|ii|S|iS(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 authoritive. 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.6/site-packages/yum/history.pyt _ui_from_repos  tfgetcCs |iS((Rq(R3((s//usr/lib/python2.6/site-packages/yum/history.pytsN( RPRQRR5RSRlRIRqtpropertyt ui_from_repo(((s//usr/lib/python2.6/site-packages/yum/history.pyRTs     tYumHistoryPackageStatecBseZdddZRS(c Cs8ti||||||||d|_||_dS(N(RTR5Rtdonetstate( R3RRYRXRVRWRxR_R`((s//usr/lib/python2.6/site-packages/yum/history.pyR5s  N(RPRQRR5(((s//usr/lib/python2.6/site-packages/yum/history.pyRvstYumHistoryRpmdbProblemcBs;eZdZdZdZdZeddZRS(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.6/site-packages/yum/history.pyR5s    cCsM|djodSt|i|i}|o| St|i|i}|S(Ni(RtcmpR|R{(R3tothertret((s//usr/lib/python2.6/site-packages/yum/history.pyt__cmp__s cCs9|idjo"t|ii|i|_n|iS(N(R~RtsortedRCt_old_prob_pkgsR{(R3((s//usr/lib/python2.6/site-packages/yum/history.pyt _getProbPkgss"RrcCs |iS((R(R3((s//usr/lib/python2.6/site-packages/yum/history.pyRss(RPRQRRR5RRRttpackages(((s//usr/lib/python2.6/site-packages/yum/history.pyRys   tYumHistoryTransactioncBseZdZdZdZdZdZdZeddZ eddZ edd Z d Z edd Z d Zedd ZdZdZeddZeddZRS(s# Holder for a history transaction. cCst||_|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.6/site-packages/yum/history.pyR5s$                cCso|djodSt|i|i}|o| St|i|i}|o|St|i|i}| S(Ni(RRRRR(R3RR((s//usr/lib/python2.6/site-packages/yum/history.pyRs cCs9|idjo"t|ii|i|_n|iS(N(RRRRCt_old_with_pkgsR(R3((s//usr/lib/python2.6/site-packages/yum/history.pyt _getTransWith&s"cCs9|idjo"t|ii|i|_n|iS(N(RRRRCt_old_data_pkgsR(R3((s//usr/lib/python2.6/site-packages/yum/history.pyt _getTransData*s"cCs9|idjo"t|ii|i|_n|iS(N(RRRRCt_old_skip_pkgsR(R3((s//usr/lib/python2.6/site-packages/yum/history.pyt _getTransSkip.s"RrcCs |iS((R(R3((s//usr/lib/python2.6/site-packages/yum/history.pyRs3scCs |iS((R(R3((s//usr/lib/python2.6/site-packages/yum/history.pyRs4scCs |iS((R(R3((s//usr/lib/python2.6/site-packages/yum/history.pyRs5scCs9|idjo"t|ii|i|_n|iS(N(RRRRCt _old_problemsR(R3((s//usr/lib/python2.6/site-packages/yum/history.pyt _getProblems7s"cCs |iS((R(R3((s//usr/lib/python2.6/site-packages/yum/history.pyRs<scCs6|ip%t|_|ii|i|_n|iS(N(RR"RCt _old_cmdlineRR(R3((s//usr/lib/python2.6/site-packages/yum/history.pyt _getCmdline>s  cCs |iS((R(R3((s//usr/lib/python2.6/site-packages/yum/history.pyRsDscCs3|idjo|ii|i|_n|iS(N(RRRCt _load_errorsR(R3((s//usr/lib/python2.6/site-packages/yum/history.pyt _getErrorsFscCs3|idjo|ii|i|_n|iS(N(RRRCt _load_outputR(R3((s//usr/lib/python2.6/site-packages/yum/history.pyt _getOutputJscCs |iS((R(R3((s//usr/lib/python2.6/site-packages/yum/history.pyRsOscCs |iS((R(R3((s//usr/lib/python2.6/site-packages/yum/history.pyRsPs(RPRQRRR5RRRRRtt trans_witht trans_datat trans_skipRtrpmdb_problemsRtcmdlineRRterrorstoutput(((s//usr/lib/python2.6/site-packages/yum/history.pyRs"        tYumMergedHistoryTransactioncBseZdZdZeddZdZeddZdZeddZ dZ e dd Z e d Ze d Ze d Zd ZdZdZdZdZdZdZRS(cCst|ig|_|g|_|i|_|i|_|i|_|i|_d|_ d|_ g|_ d|_ t |_d|_d|_d|_d|_d|_dS(N(RSRt _merged_tidst _merged_objsRRRRRRRRRRRRRRRR(R3tobj((s//usr/lib/python2.6/site-packages/yum/history.pyR5Ss               cCs t|iS(N(RR(R3((s//usr/lib/python2.6/site-packages/yum/history.pyt _getAllTidsnsRrcCs |iS((R(R3((s//usr/lib/python2.6/site-packages/yum/history.pyRspscCsEtd|iD}t|djot|dSt|S(Ncssx|]}|iVqWdS(N(R(t.0R((s//usr/lib/python2.6/site-packages/yum/history.pys ss ii(RSRR%tlistR(R3R((s//usr/lib/python2.6/site-packages/yum/history.pyt _getLoginUIDsrscCs |iS((R(R3((s//usr/lib/python2.6/site-packages/yum/history.pyRswscCsftd|iD}t|djod|jodSd|jo|idnt|S(Ncssx|]}|iVqWdS(N(R(RR((s//usr/lib/python2.6/site-packages/yum/history.pys zs ii(RSRR%tremoveR(R3t ret_codes((s//usr/lib/python2.6/site-packages/yum/history.pyt_getReturnCodesys   cCs |iS((R(R3((s//usr/lib/python2.6/site-packages/yum/history.pyRsscCsug}t}xY|iD]N}xE|iD]:}|i|joq)n|i|i|i|q)WqWt|S(N(RSRRRZtaddR'R(R3RtfiltRR4((s//usr/lib/python2.6/site-packages/yum/history.pyRs   cCs3|djo |i}n|it|i|fS(s6 Take a pkg and return the key for it's state lookup. N(RRxRR RY(R4Rx((s//usr/lib/python2.6/site-packages/yum/history.pyt_p2sks  cCsMh}h}x4|D],}ti|}|||i<|||Z:d?Z;RS(As, API for accessing the history sqlite data. Rnc Csd|_tii|_tii|i |p$tii|d||i_ ntiid||i_ t |i_ t |i_||_d|_tii|ii pFyti|ii Wnttfj o }dSXt |i_ n-ti|ii tiot |i_ ntid|ii }xtt|D]}tii|}|tdtd !}|idd}t|djoqXnytt|Wntj o qXnXd|d |d |d f|_ ||_PqXW|idjo|i!pdSn|ii d|i |i_"tii|ii"p:yti|ii"Wqttfj o }dSXn-ti|ii"tiot |i_ ndS( NRns%s/history-*-*-*.sqliteshistory-s.sqlitet-iis%s-%s-%siii(#Rt_connRR t GenericHoldertconftostpathtnormpathR@tdb_pathRtwritableR"treadableR=t_db_filetexiststmakedirstIOErrortOSErrortaccesstW_OKRtreversedRtbasenameR%R\tmaptintt ValueErrort_db_datet_create_db_filet addon_path( R3trootRR=tetDBstdtfnametpieces((s//usr/lib/python2.6/site-packages/yum/history.pyR5sV $    "    cCs|idS(N(tclose(R3((s//usr/lib/python2.6/site-packages/yum/history.pyt__del__scCs|idjot|iipdSyti|i|_Wn,titifj ot |i_dSXt |ii dn|ii S(NsPRAGMA locking_mode = EXCLUSIVE( RRRRRtconnectRtOperationalErrort DatabaseErrorRRtcursor(R3((s//usr/lib/python2.6/site-packages/yum/history.pyt _get_cursors  cCs |iiS(N(Rtcommit(R3((s//usr/lib/python2.6/site-packages/yum/history.pyt_commitscCs |iiS(N(Rtrollback(R3((s//usr/lib/python2.6/site-packages/yum/history.pyt _rollbackscCs.|idj o|iid|_ndS(N(RRR (R3((s//usr/lib/python2.6/site-packages/yum/history.pyR s c CsL|i}t|d|xm|D]e\}}|djo|djo|S|djoq#n|djoq#n||jo|Sq#W|pdS|\}}} } } t|t|t| t| t| f\}}} } } |dj o(t|d||| | | |f} n"t|d||| | | f} |iS(NsSELECT pkgtupid, checksum FROM pkgtups WHERE name=? AND arch=? AND epoch=? AND version=? AND release=?sINSERT INTO pkgtups (name, arch, epoch, version, release, checksum) VALUES (?, ?, ?, ?, ?, ?)sINSERT INTO pkgtups (name, arch, epoch, version, release) VALUES (?, ?, ?, ?, ?)(RRRRt lastrowid( R3RZR_tcreatetcurt sql_pkgtupidt sql_checksumtntaRtvtrRO((s//usr/lib/python2.6/site-packages/yum/history.pyt _pkgtup2pids2       0 cCsW|i}|dj o(dt|dt|df}n|i|i||S(Ns%s:%sii(t returnIdSumRRER!RZ(R3tpoRtcsum((s//usr/lib/python2.6/site-packages/yum/history.pyt _apkg2pids  (cCsYd}|i}d|jo'd|jod|i|if}n|i|i||S(Nt checksum_typet checksum_datas%s:%s(RR^R&R'R!RZ(R3R#RR$tyumdb((s//usr/lib/python2.6/site-packages/yum/history.pyt _ipkg2pids  cCs|i||S(N(R%(R3R#R((s//usr/lib/python2.6/site-packages/yum/history.pyt _hpkg2pidscCsyt|to|i||St|to|i||St|to|i||S|i|id|S(N( t isinstanceRR)RR%RTR*R!RZR(R3R#R((s//usr/lib/python2.6/site-packages/yum/history.pytpkg2pidscCsd}|ittfjo,|io d}qH|io d}qHn|itjo|io d}qpn|djo7ti |i}|djo|i o d}qn|S(NRRRRs Dep-Install( Rt output_statet TS_INSTALLtTS_TRUEINSTALLt reinstallt downgradestTS_ERASEt downgraded_byt _stcode2sttxtRJtisDep(ttxmbrRx((s//usr/lib/python2.6/site-packages/yum/history.pyt txmbr2state's     cCs@|i}|djodSt|d|i|f}|iS(NskINSERT INTO trans_with_pkgs (tid, pkgtupid) VALUES (?, ?)(RRRt_tidR(R3tpidRRO((s//usr/lib/python2.6/site-packages/yum/history.pyttrans_with_pid8s   cCsN|i}|djp|i odSt|d|i|f}|iS(NskINSERT INTO trans_skip_pkgs (tid, pkgtupid) VALUES (?, ?)(RRt_update_db_file_2RR8R(R3R9RRO((s//usr/lib/python2.6/site-packages/yum/history.pyttrans_skip_pidBs  cCsz|dj ptt|d p |djodS|i}|djodSt|d|i||f}|iS(NR8suINSERT INTO trans_data_pkgs (tid, pkgtupid, state) VALUES (?, ?, ?)(RRthasattrRRR8R(R3R9RxRRO((s//usr/lib/python2.6/site-packages/yum/history.pyttrans_data_pid_begMs  cCspt|d p |djodS|i}|djodSt|dd|i||f}|idS(NR8sUPDATE trans_data_pkgs SET done = ? WHERE tid = ? AND pkgtupid = ? AND state = ? tTRUE(R=RRRR8R(R3R9RxRRO((s//usr/lib/python2.6/site-packages/yum/history.pyttrans_data_pid_endYs  c Cslt|dpdS|i}|djp|i odSt|i}t|d|i|i|f}|i }|p|Sh}|i }|||i <|idjo%x"|i D]}|||i          cCsit|dpdS|i}|djp|i odSt|d|it|f}|iS(NR8shINSERT INTO trans_cmdline (tid, cmdline) VALUES (?, ?)(R=RRR;RR8RR(R3RRRO((s//usr/lib/python2.6/site-packages/yum/history.pyt_trans_cmdlines c Cs@|i}|djodSt|dttit|tiif}|i |_ x*|D]"} |i | } |i | qgWx?|D]7} |i | i} |i| } |i| | qWx*|D]"} |i | } |i| qWx|D]} |i| qW|o|i|n|idS(NsINSERT INTO trans_beg (timestamp, rpmdb_version, loginuid) VALUES (?, ?, ?)(RRRRttimeRERR t getloginuidRR8R)R:R,R#R7R>R<RHRIR(R3t rpmdb_versiont using_pkgsttxmbrst skip_packagesRRRROR4R9R6RxR|((s//usr/lib/python2.6/site-packages/yum/history.pytbegs6    cCsb|i}|djodSx3|D]+}t|}t|d|i|fq%W|idS(NsJINSERT INTO trans_error (tid, msg) VALUES (?, ?)(RRRRR8R(R3RRterror((s//usr/lib/python2.6/site-packages/yum/history.pyt _log_errorss   cCs|djpt|d odS|i}|djodSx9|iD]+}t|}t|d|i|fqNW|idS(s6 Note that data can be either a real pkg. ... or not. R8NsSINSERT INTO trans_script_stdout (tid, line) VALUES (?, ?)(RR=Rt splitlinesRRR8R(R3tdatatmsgRRQ((s//usr/lib/python2.6/site-packages/yum/history.pytlog_scriptlet_outputs    cCsK|i}t|d|fg}x|D]}|i|dq,W|S(NsfSELECT msg FROM trans_error WHERE tid = ? ORDER BY mid ASCi(RRR'(R3RRRR((s//usr/lib/python2.6/site-packages/yum/history.pyRs  cCsK|i}t|d|fg}x|D]}|i|dq,W|S(NsoSELECT line FROM trans_script_stdout WHERE tid = ? ORDER BY lid ASCi(RRR'(R3RRRR((s//usr/lib/python2.6/site-packages/yum/history.pyRs  cCs|p| ptt|dpdS|i}|djodSt|d|ittit||f}|i |p't|dd|if|i n|dj o|i |n|`dS(NR8sINSERT INTO trans_end (tid, timestamp, rpmdb_version, return_code) VALUES (?, ?, ?, ?)sKUPDATE trans_data_pkgs SET done = ? WHERE tid = ?R?( RR=RRRR8RRJRERRR(R3RLRRRRO((s//usr/lib/python2.6/site-packages/yum/history.pyRps$      c Cs"t|dptS|ptS|ptS|iidt|i}|iioNtii | o:yti |ddWqt t fj o }tSXn|i dd}|d|}y:t|d}|it||i|iWnt t fj o }tSXtS(sappend data to an arbitrary-named file in the history addon_path/transaction id location, returns True if write succeeded, False if notR8RntmodeiR>sw+(R=RRRRER8RRRRRRRtreplacetopentwriteR tflushR R"(R3tdatanameRTttid_dirRtsafenametdata_fntfo((s//usr/lib/python2.6/site-packages/yum/history.pytwrite_addon_data s,!  c Cs|iidt|d}ti|d}g}|D]}||i|dq<~}|p|S||jodSt||d}|i} |i| S(NRnRR?R ( RRRERRXRRYtreadR ( R3Rtitemt hist_and_tidt addon_infot_[1]tit addon_namesR`RT((s//usr/lib/python2.6/site-packages/yum/history.pytreturn_addon_data2s-   c Cs|i}t|d|fg}xT|D]L}t|d|d|d|d|d|dd|}|i|q,W|S( NsSELECT name, arch, epoch, version, release, checksum FROM trans_with_pkgs JOIN pkgtups USING(pkgtupid) WHERE tid = ? ORDER BY name ASC, epoch ASCiiiiiiR`(RRRTR'(R3RRRRR((s//usr/lib/python2.6/site-packages/yum/history.pyRBs  0 c Cs|i}t|d|fg}x|D]}t|d|d|d|d|d|d|dd |}|d d j|_d|_t|itjo t |_nt|it jo t |_n|i |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`iR?( RRRvRwRRRRxRR"RRR'(R3RRRRR((s//usr/lib/python2.6/site-packages/yum/history.pyROs   &   c Cs|i}|djp|i ogSt|d|fg}xT|D]L}t|d|d|d|d|d|dd|}|i|qLW|S( NsSELECT name, arch, epoch, version, release, checksum FROM trans_skip_pkgs JOIN pkgtups USING(pkgtupid) WHERE tid = ? ORDER BY name ASC, epoch ASCiiiiiiR`(RRR;RRTR'(R3RRRRR((s//usr/lib/python2.6/site-packages/yum/history.pyRcs  0 c Cs|i}|djp|i ogSt|d|fg}xg|D]_}t|d|d|d|d|d|dd|}|d d j|_|i|qLW|S( NsSELECT name, arch, epoch, version, release, checksum, main FROM trans_prob_pkgs JOIN pkgtups USING(pkgtupid) WHERE rpid = ? ORDER BY name ASC, epoch ASCiiiiiiR`iR?(RRR;RRTRGR'(R3R{RRRR((s//usr/lib/python2.6/site-packages/yum/history.pyRrs  0 cCs|i}|djp|i ogSt|d|fg}x<|D]4}t||d|d|d}|i|qLW|S(NsSELECT rpid, problem, msg FROM trans_rpmdb_problems WHERE tid = ? ORDER BY problem ASC, rpid ASCiii(RRR;RRyR'(R3RRRRR((s//usr/lib/python2.6/site-packages/yum/history.pyRs  !cCs_|i}|djp|i odSt|d|fg}x|D] }|dSWdS(Ns[SELECT cmdline FROM trans_cmdline WHERE tid = ?i(RRR;R(R3RRRR((s//usr/lib/python2.6/site-packages/yum/history.pyRs   cCs|i}|d jogSd}|p d}nd }|oWt|tiijo>tt|}}|ddidgt|7}n|d7}|d j o|dt |7}nt |||g}h}xt|D]l} |o5t|tiijo| d|joqq-nt || } | || d<|i | qWd }|i }t|tiijot ||n5|ddidgt|7}t |||xe|D]]} | d|joqn| d || d_| d || d_| d || d_qWd } xt|D]} | i} d } | d j o | i} n| d jp$| d jp| id | ijon6| | jot| _t| _nt| _t| _| } qFW|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 isSELECT tid, trans_end.timestamp AS end_ts, trans_end.rpmdb_version AS end_rv, return_code FROM trans_endiiiN(RRR%Rt constantsR$RRStjoinRERRR'RRRRRRRR"RRR(R3ttidstlimittcomplete_transactions_onlyRtsqltparamsRttid2objRRtlastcur_rvtlas_rv((s//usr/lib/python2.6/site-packages/yum/history.pytoldsj    (     $    1      cCsC|igd|}|pdSt|djpt|dS(si This is the last full transaction. So any incomplete transactions do not count, by default. iiN(RvRR%R(R3RoR((s//usr/lib/python2.6/site-packages/yum/history.pytlasts cCs|i}|djp|i odS|i|dt}|djodSdh|d6}t||||fx|D] }|dSWdS(NRs\SELECT %(db)sdb_val FROM pkg_%(db)sdb WHERE pkgtupid=? and %(db)sdb_key=? tdbi(RRt_update_db_file_3R,RR(R3R4RxRGRR9RpR((s//usr/lib/python2.6/site-packages/yum/history.pyt_load_anydb_keys   cCs|i|d|S(Ntrpm(Rz(R3R4RG((s//usr/lib/python2.6/site-packages/yum/history.pyRm scCs|i|d|S(NR(Rz(R3R4RG((s//usr/lib/python2.6/site-packages/yum/history.pyRD scCs|i}|djp|i odS|i|dt}|djodSdh|d6}t||||t|f|iS(NRshINSERT INTO pkg_%(db)sdb (pkgtupid, %(db)sdb_key, %(db)sdb_val) VALUES (?, ?, ?)Rx(RRRyR,RRRR(R3R4RxRGRHRR9Rp((s//usr/lib/python2.6/site-packages/yum/history.pyt_save_anydb_keys  cCs|i|d||S(NR{(R|(R3R4RGRH((s//usr/lib/python2.6/site-packages/yum/history.pyt_save_rpmdb_keyscCs|i|d||S(NR(R|(R3R4RGRH((s//usr/lib/python2.6/site-packages/yum/history.pyt_save_yumdb_key scCs\xUtiD]J}t||d}|djoq n|i|d||ptSq 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.6/site-packages/yum/history.pyt _save_rpmdb#s   cCs\xUtiD]J}|ii|}|djoq n|i|d||ptSq WtS(se Save all the data for yumdb for this installed pkg, assumes there is no data currently. RN(R1RBR^RJRR|RR"(R3RRGRH((s//usr/lib/python2.6/site-packages/yum/history.pyt _save_yumdb.s   cCs{|i}|djp|i otS|i|dt}|djotSdh|d6}t|||ftS(s= Delete all the data for rpmdb/yumdb for this installed pkg. Rs)DELETE FROM pkg_%(db)sdb WHERE pkgtupid=?RxN(RRRyRR,RR"(R3R4RxRR9Rp((s//usr/lib/python2.6/site-packages/yum/history.pyt _wipe_anydb9s  cCsh|i|dptS|i|do|i|o |i|p|itS|itS(s< Sync. all the data for rpmdb/yumdb for this installed pkg. R{R(RRRRRRR"(R3R((s//usr/lib/python2.6/site-packages/yum/history.pyt sync_alldbHs  cCshdd6dd6dd6dd6dd6dd6}|i}|djp|i otSddddddf}xM|D]E\}}}t|d||fx|D]}|d||R@RHRIRPRRRVRRRpRaRiRRRRRRRvRwRzRmRDR|R}R~RRRRRRRRRyRR;R(((s//usr/lib/python2.6/site-packages/yum/history.pyRs<     !      * !   )      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 (-RJRtos.pathRRRzRtsqlutilsRRRtyum.miscR t yum.constantsRt yum.packagesRRRtyum.i18nRR t rpmUtils.archR Rt TS_UPDATEt TS_UPDATEDR2R.R/t TS_OBSOLETEDt TS_OBSOLETINGR4RRRR0R1RTRvRyRRRR(((s//usr/lib/python2.6/site-packages/yum/history.pytsX         '0D S?