v_c@sdZddlTddlmZmZddlmZddlmZddl Z ddl Z ddl Z ddl Z defdYZ d fd YZd efd YZd efdYZdfdYZdS(sK Classes and functions for manipulating a transaction to be passed to rpm. i(t*(t PackageSacktPackageSackVersion(tYumInstalledPackage(tYumAvailablePackageSqliteNtGetProvReqOnlyPackageSackcBsAeZedZdZdZdZdZdZRS(cCstj|||_dS(N(Rt__init__t_need_index_files(tselft need_files((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyR(s cCsWxP|jdtD]<}x3|j|dtD]}|j|j||q/WqWdS(Nt primary_only(treturnFileTypestTruetreturnFileEntriest_addToDictAsListt filenames(Rtobjtftypetfile((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt!__addPackageToIndex_primary_files,scCsKxD|jD]6}x-|j|D]}|j|j||q#Wq WdS(N(R R RR(RRRR((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt__addPackageToIndex_files0scCsx?|jdD].\}}\}}}|j|j||qWx?|jdD].\}}\}}}|j|j||qRW|jr|j|n |j|dS(Ntprovidestrequires(t returnPrcoRRRRt3_GetProvReqOnlyPackageSack__addPackageToIndex_filest;_GetProvReqOnlyPackageSack__addPackageToIndex_primary_files(RRtntfltetvtr((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt_addPackageToIndex4s(( cCs=x6|jD]+}x"|j|D]}|j|qWq WdS(N(t pkgsByRepoR(RtrepoidR((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt__buildFileIndexes>scCsU|j rEtj| rEt|_|jrEi|_|jqEntj||S(N( Rtmisctre_primary_filenameR t indexesBuiltRt,_GetProvReqOnlyPackageSack__buildFileIndexesRt searchFiles(Rtname((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyR'Bs    ( t__name__t __module__tFalseRRRRR&R'(((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyR's     tTransactionDatac BseZdZdZdZdZdZdZedddd d d d d Z dZ d/d/dZ d/dZ dZdZedZd/d/d/d/d/dZd/d/d/d/d/dZdZdZdZdZdZdZdZeedZdZdZd Zd/d!Zd"Z d#Z!d$Z"d%Z#d/d&Z$d/d0d'Z%d/d1d(Z&d/d2d)Z'd/d3d*Z(d/d4d+Z)d/d5d,Z*d-Z+d.Z,RS(6sDData Structure designed to hold information on a yum Transaction SetcCs]g|_g|_g|_d|_i|_i|_t|_d|_t |_ g|_ d|_ t j |_t j |_i|_d|_d|_d|_d|_t|_t|_g|_g|_g|_g|_g|_g|_g|_ g|_!g|_"g|_#g|_$g|_%g|_&g|_'d|_(d|_)dS(Nt/i(*tflagstvsflagstprobFilterFlagstroottpkgdictt _namedicttsett_unresolvedMemberstdebugR+tchangedtinstallonlypkgst state_counterttimet tm_createdt tm_changedt conditionalstNonetrpmdbt_pkgSackt _pkgSackCtortpkgSackPackagesRt localSackRt_inSackt instgroupst removedgroupstinstenvironmentstremovedenvironmentstremovedt installedtupdatedt obsoletedt depremovedt depinstalledt depupdatedt reinstalledt downgradedtfailedt_future_rpmdbvt_check_future_rpmdbv(R((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRMsH                                 cCs+t|_|jd7_tj|_dS(Ni(R R7R9R:R<(R((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt_changedws cCs t|jS(N(tlenR2(R((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt__len__|scCs9t|jdr%|jjSt|jSdS(Nt__iter__(thasattrt getMembersRXtiter(R((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRXscCs>|jdk r|jS|jdk r7|j|_n|jS(N(R@R>RA(R((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt _getPkgSacks tfgetcCs |jS(N(R\(R((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pytstfsetcCst|d|S(NR@(tsetattr(Rtvalue((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyR^stfdelcCst|ddS(NR@(R`R>(R((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyR^stdocsPackage sack objectcCs|jr|GHndS(N(R6(Rtmsg((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt debugprints cstfd|j|S(Ncs |jkS(N(t output_state(tp(t output_states(s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyR^s(tfilterRZ(RtpkgtupRh((Rhs7/usr/lib/python2.7/site-packages/yum/transactioninfo.pytgetMembersWithStatescCsfg}|dkr<xM|jjD]}|j|q"Wn&||jkrb|j|j|n|S(stakes an optional package tuple and returns all transaction members matching, no pkgtup means it returns all transaction membersN(R>R2t itervaluestextend(RRjt returnlisttmembers((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRZs cCstt|jS(N(tlisttsortedR5(R((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pytgetUnresolvedMembersscCs|jj|dS(N(R5tdiscard(Rttxmbr((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pytmarkAsResolvedscCsL|s!t|t|jkrH|jj|jj|jtStS(N(RVR5tcleartupdateRZR R+(Rthard((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt resetResolveds ! c Cs|jd|d|d|d|d|}t|s:d Sg}x|D]}|j|jqGWd|krqdSd|krdS|dSd S( sareturns the mode of the first match from the transaction set, otherwise, returns NoneR(tarchtepochtvertreltutiiN(t matchNaevrRVR>tappendtts_state( RR(RzR{R|R}ttxmbrststatesRt((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pytgetModes*    c Cs|dkr|j}nJ|jj|g}|dkre|dkre|dkre|dkre|Sg}x|D]}|j\} } } } } |dk r|| krqrn|dk r|| krqrn|dk r|| krqrn|dk r|| krqrn|j|qrW|S(s4returns the list of packages matching the args aboveN(R>RZR3tgetRjR(RR(RzR{R|R}RtresultRtRtaRRR((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRs$ 0 c Cs||j|}|sY|jdd}t|dkrY|j|d|d}qYn|sWg}|jdk r|jjd|g}n| r|jdk r|jjd|g}n|s|jjd|g}nxs|D]h}|j|j |j xF|j j D]5\}}||kr|j |||j |treturnPackagestpkgSackR?RmRZRjR=t iteritemstremove( RtpatternRtnatpkgstpkgtreqtcpkgsRt((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pytdeselects,     cCs&|jdko%t|jttf S(NR~R(R~R(Rt isinstancetpoRR(Rttxmember((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt_isLocalPackagescs?|jjkrtS|j}tfd|r;tStS(stakes a packageObject, returns 1 or 0 depending on if the package should/can be installed multiple times with different vers like kernels and kernel modules, for examplecs |jkS(N(R8(tprov(R(s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyR^s(R(R8R tprovides_namesRiR+(RRR((Rs7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt_allowedMultipleInstallss  cCsx$|jD]}|j||jq W|j|jkrLg|j|jRftTS_INSTALL_STATESthave_fastReturnFileEntriesR=R?tcontainstinstall_methodtsetAsDepR5tadd(RRtoldpotmemberRt condtxmbr((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRs6   cCs)||jkr'|jd|fdSx|j|D]}d|j_|j|rl|jj|jn$t|jt r|j d8_ n|j dk r|j t kr|j j|jn|j|jj||jj|q5W|j|=|j|ds|j|d=n|jdS(s%remove a package from the transactionsPackage: %s not in tsNii(R2ReR>RtstateRRCt delPackageRRRBRDRfRR3R(RR5RRU(RRjRt((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRCs"  cCs3||jkr/t|j|dkr/dSndS(s tells if the pkg is in the classii(R2RV(RRj((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pytexistsXscCsF|j|rBx0|jd|D]}|jtkr"tSq"WntS(s,true if the pkgtup is marked to be obsoletedRj(RRZRft TS_OBSOLETEDR R+(RRjRt((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt isObsoleted`s  cCsg|_g|_g|_g|_g|_g|_g|_g|_g|_g|_ g|_ g|_ g|_ g|_ x|jD]}|jtkr|jr|j j|q|jj|q|jttfkr|r |jr |j j|qn|r.|jr.|j j|qn|jrpx6|jD](}||jkrA|jj|qAqAWn|jrx6|jD](}||jkr|jj|qqWn|jr|jdkr|j j|q|jj|q|jtkr|r|jrqnx3|jD](}||jkr|jj|qqWx3|jD](}||jkrT|jj|qTqTW|jr|jj|q|jj|q|jtkr|jj|q|jtkr|jj|q|jtkr|j j|qqW|jj|jj|jj|jj|j j|j j|jj|jj|jj|jj|jj|j j|j j|j jdS(sreturns lists of transaction Member objects based on mode: updated, installed, erased, obsoleted, depupdated, depinstalled deperasedtuserN( RERFRGRHRIRJRKRLRMRNRORPRQRRRZRft TS_UPDATEtisDepRt TS_INSTALLtTS_TRUEINSTALLt reinstallt downgradestgroupst environmentstreasontTS_ERASEt downgraded_byRt TS_OBSOLETINGt TS_FAILEDtsort(Rtinclude_reinstalltinclude_downgradeRttgtevg((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt makelistsis                               cCs|j|r|j|St|}t|_t|_t|j_d|_ |j j d|jrst |_ n|j||j||S(sadds a package as an install but in mode 'u' to the ts takes a packages object and returns a TransactionMember ObjectR~R(RtaddTrueInstalltTransactionMembert TS_AVAILABLEt current_stateRRfRRRR?RR RtfindObsoletedByThisMemberR(RRRt((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt addInstalls         cCsht|}t|_t|_t|j_d|_|j j d|jrWt |_ n|j ||S(sfadds a package as an install takes a packages object and returns a TransactionMember ObjectRR(RRRRRfRRRRR?RR RR(RRRt((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRs       cCsDt|}t|_t|_t|j_d|_|j||S(sfadds a package as an erasure takes a packages object and returns a TransactionMember ObjectR( RRRRRfRRRR(RRRt((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pytaddErases      cCs|j|r|j|St|}t|_t|_t|j_d|_ |r~|j j |df|j j |n|j ||j||S(seadds a package as an update takes a packages object and returns a TransactionMember ObjectR~R(RRRRRRRfRRRt relatedtoRRRR(RRRRt((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt addUpdates        cCs|j|}|jj|df|jj||j|}|s^|j|jdSd|jkr|jj |_ n|jj|df|j j|||fS(sqadds a package as an downgrade takes a packages object and returns a pair of TransactionMember Objectst downgradedbyRRN( RRRRRRRjR>t yumdb_infoRR(RRRtitxmbrtatxmbr((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt addDowngrade scCst|}t|_t|_t|j_d|_|jj |df|j j |d|j krz|j j |_ n|j ||S(sxadds a package as being updated by another pkg takes a packages object and returns a TransactionMember Objecttudt updatedbyR(RRRt TS_UPDATEDRfRRRRRt updated_byRRR(RRt updating_poRt((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRs      cCst|}t|_t|_t|j_d|_|jj |df|j j ||j j d|jr}t |_n|j||S(sxadds a package as an obsolete over another pkg takes a packages object and returns a TransactionMember ObjectR~t obsoletesR(RRRRRfRRRRRRR?RR RR(RRRRt((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt addObsoleting1s       cCst|}t|_t|_t|j_d|_|jj |df|j j |d|j krz|j j |_ n|j |x[|j|jtgD]A}||jkrqn|jj |df|jj |qW|S(szadds a package as being obsoleted by another pkg takes a packages object and returns a TransactionMember Objecttodt obsoletedbyRR(RRRRRfRRRRRt obsoleted_byRRRRkRjRR(RRt obsoleting_poRttotxmbr((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt addObsoletedCs"      cCs||_||_||_dS(N(R?R@RA(RR?Rt pkgSackCtor((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt setDatabases\s  cCsi}|jsn|jdkrux|jj|||jD].\}}|j|jtr@||| list of matching provides } searches in packages to be installedN( RBRDR>Rt getProvidesRRkRjRRwRC(RR(tflagtversionRRthits((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pytgetNewProvidesas ++cCs[i}xN|jj|||jD].\}}|j|jts%||| list of matching provides } searches in packages already installed and not going to be removed(R?RRRkRjtTS_REMOVE_STATES(RR(RRRRR((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pytgetOldProvidesqs +cCs5|j|||}|j|j||||S(s5return dict { packages -> list of matching provides }(RRwR(RR(RRR((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRzscCsi}|jsn|jdkrux|jj|||jD].\}}|j|jtr@||| list of matching provides } searches in packages to be installedN( RBRDR>Rt getRequiresRRkRjRRwRC(RR(RRRRR((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pytgetNewRequiress ++cCs[i}xN|jj|||jD].\}}|j|jts%||| list of matching provides } searches in packages already installed and not going to be removed(R?RRRkRjR(RR(RRRRR((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pytgetOldRequiress +cCs5|j|||}|j|j||||S(s5return dict { packages -> list of matching provides }(RRwR(RR(RRR((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRsc Cs|jdk r4|j\}}||jkr4|Sn|jj}i}xI|jdtD]5}|jr|j||jj R9R?RRkRRRRjRtpreloadPackageChecksumsRRqR!t returnIdSumRwRRRRt transactionCachePackageChecksums( RtsctretRt_reinstalled_pkgtupsRttmaintpkg_checksum_tupsRtcsumtydbi((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pytfutureRpmDBVersions@     cCs{xt|jjD]f}x]|jjd|D]F}|j|jgr)|j||jt|_t|j_q)q)Wq WdS(s>addObsoleted() pkgs for anything that this txmbr will obsoleteR(N( Rtobsoletes_namesR?t searchNevrat obsoletedByRRRfR(RRttobs_nR((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRs  N(NNN(NNN(NNN(NNN(NNN(NNN(-R)R*t__doc__RRURWRXR\tpropertyRReR>RkRZRrRuR+RyRRRRRRRRRRRRRRRRRRRRRRRRRRR(((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyR,KsV *             $  &   \           4tConditionalTransactionDatacBseZdZdZRS(s<A transaction data implementing conditional package additioncCs$tjdtjtj|dS(NsCConditionalTransactionData will go away in a future version of Yum.(twarningstwarntErrorstYumFutureDeprecationWarningR,R(R((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRs  (R)R*RR(((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRstSortableTransactionDatacBsDeZdZdZdZdZdZdZdZRS(s@A transaction data implementing topological sort on it's memberscCs,g|_g|_g|_tj|dS(N(t_sortedtpathtloopsR,R(R((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRs   cCs|jj|jt|_xk|jD]`}|jd|jd}|jtkrg|j|jn|jt kr&|j |q&q&Wt |_|j j d|jdS(NRji(RRR(tTX_GREYt sortColourt depends_onRZRjt_doLooptTX_WHITEt_visittTX_BLACKRtinsert(RRtRtvertex((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyR s  cCsY|jj||j|jj|jd}t|dkrU|jj|ndS(Nii(RRtindexRVR(RR(tloop((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyR s cCs&t|_tj||g|_dS(N(R RR,RR(RR((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRs cCstj||g|_dS(N(R,RR(RRj((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyR scCsl|jr|jSg|_x<|jD].}|jtkr&g|_|j|q&q&W|jj|jS(N(RRZRR RR treverse(RRt((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyR s    ( R)R*RRR R RRR(((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRs   RcBs\eZdZdZd edZdZdZdZ dZ dZ dZ RS( sVClass to describe a Transaction Member (a pkg to be installed/ updated/erased).cCsE||_d|_d|_d|_d|_d|_d|_g|_g|_ g|_ g|_ g|_ g|_ g|_g|_t|_g|_g|_d|_ddddddd g|_x3|jD](}t|j|}t|||qW|jd krA|jjd |jjd |jjd ndS(NiRRjR!R(RzR{RtreleaseRJt from_repot releasevert changed_by(RR>RRRfRRtprocessRR RRRRRRR+RRRtrepopkgt_poattrtgetattrR`R!RR(RRtattrtval((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRs8                    cCsE|sd|_n|rA|jj|df|jj|ndS(slsets the transaction member as a dependency and maps the dep into the relationship list attributeit dependsonN(RRRR (RRtrelonly((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRBs  cCsg}x4|jD])}|d|kr,qn|j|qW||_g}x0|jD]%}||krnqVn|j|qVW||_dS(slsets the transaction member as a dependency and maps the dep into the relationship list attributeiN(RRR (RRtnreltotdatatndepon((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt removeDepLs  cCst|j|jS(N(tcmpR(Rtother((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt__cmp__^scCs tj|S(N(tobjectt__hash__(R((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyR'ascCs,d|j|j|j|j|j|jfS(Ns%s.%s %s:%s-%s - %s(R(RzR{RRR(R((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt__str__dscCs)d|jjt|tt|fS(Ns<%s : %s (%s)>(t __class__R)tstrthextid(R((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt__repr__hsc CsNd|j|j|j|j|j|jfd|jjjd|j d|j dt |j d|j dt |jg}|jr|dg7}xj|jD]_\}}d }t|trd }n|d |j|j|j|j|j||fg7}qW|d g7}nxd ddddddgD]}t||}|r.|d|g7}x^|D]V}d }t|trd }n|d|j|j|j|j|j|fg7}qaW|d g7}q.q.W|jr|ddj|jg7}n|jr!|ddj|jg7}n|jrA|d|jg7}ndj|S(Nsmbr: %s,%s,%s,%s,%s %s s repo: %s s ts_state: %s s output_state: %s s isDep: %s s reason: %s s reinstall: %s s relatedto:RRs %s,%s,%s,%s,%s@%s:%ss R RRRRRRs %s:s %s,%s,%s,%s,%s@%ss groups: %s t s environments: %s s repopkg: %s t(R(RzR{RRRRtrepoR,RRftboolRRRRRRRRtjoinRR(RRdRR}t pkgorigintlsttthislist((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyt_dumpksN              N( R)R*RRR>R+RR"R%R'R(R-R6(((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyRs $     (Rt constantst packageSackRRtpackagesRt sqlitesackRRRR#R:RR,RRR(((s7/usr/lib/python2.7/site-packages/yum/transactioninfo.pyts     $3