v_c@sddlZddlZddlZddlZddlZddlZddlmZddlmZddl m Z ddl Z ddl Z ddl mZmZddlmZmZddlZddlZddlmZmZddlZddlZdZd Zd Zd efd YZd fdYZdefdYZ defdYZ!defdYZ"defdYZ#defdYZ$dZ%de&fdYZ'dZ(de&fdYZ)dZ*e+d kre*ndS(!iN(t miscutils(tarch(tinitReadOnlyTransaction(tYumInstalledPackaget parsePackages(tPackageSackBasetPackageSackVersion(t to_unicodet_cGs4tjd}zt|}Wdtj|X|S(sk Annoying people like to set umask's for root, which screws everything up for user readable stuff. iN(tostumasktopen(targstoumasktret((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_open_no_umask(s cGs7tjd}ztj|}Wdtj|X|S(sk Annoying people like to set umask's for root, which screws everything up for user readable stuff. iN(R R tmakedirs(R R R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_makedirs_no_umask3s cGs7yt|}Wntk r,}d|fSX|dfS(s1 IOError wrapper BS for open, stupid exceptions. N(R tIOErrortNone(R Rte((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_iopen>s  tRPMInstalledPackagecBs5eZdZdZdZdZdZRS(cCsGt|_tj||d|j||_||_t|_|`dS(Ntyumdb( tTruet_has_hdrRt__init__RtidxtrpmdbtFalsethdr(tselftrpmhdrtindexR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRIs     cCsf|jr|jS|jj}|jd|j}y|jSWntk ratj dnXdS(NisRpmdb changed underneath us( RRRt readOnlyTStdbMatchRtnextt StopIterationtErrorstPackageSackError(Rttstmi((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_get_hdrSs  cCsy|jdr%td||fn|dkr@|j}n|j|_}t|_|dkru||}n|S(NRs%s has no attribute %sR(t startswithtAttributeErrorR*RRR(Rtvarnametval((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt __getattr___s    cCst}xY|jD]N\}}}x<|jj|||D]"}||kr;|j|q;q;WqWxW|j|jD]E}x<|jj|ddD]"}||kr|j|qqWqvWt|S(s4return list of installed pkgs requiring this packageN(NNN( tsettprovidesRt getRequirestaddtfilelisttdirlistRtlist(Rtpkgsettreqntreqftreqevrtpkgtfn((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytrequiring_packagesss   cCsot}xY|jD]N\}}}x<|jj|||D]"}||kr;|j|q;q;WqWt|S(N(R0tstrong_requiresRt getProvidesR3R6(RR7R8R9R:R;((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytrequired_packagess   (t__name__t __module__RR*R/R=R@(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRGs   t RPMDBProblemcBs eZdZdZdZRS(sJ Represents a problem in the rpmdb, from the check_*() functions. cKs;||_||_x"|D]}t||||qWdS(N(R;tproblemtsetattr(RR;RDtkwargstkwarg((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRs   cCs8|dkrdSt|j|jp7t|j|jS(Ni(RtcmpR;RD(Rtother((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt__cmp__s (RARBt__doc__RRJ(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRCs tRPMDBProblemDependencycBseZdZRS(cCsa|jdkr,d|jtd|jfSd|jtd|jdjtt|jfS(Ntrequiress%s %s %sshas missing requires ofs %s %s %s: %sshas installed conflictss, ( RDR;Rtmissingtfoundtjointmaptstrt conflicts(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt__str__s  (RARBRT(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRLstRPMDBProblemDuplicatecBseZdZdZRS(cKstj||d|dS(Nt duplicate(RCR(RR;RF((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRscCstd|j|jfS(Ns%s is a duplicate with %s(RR;RV(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRTs(RARBRRT(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRUs tRPMDBProblemObsoletedcBseZdZdZRS(cKstj||d|dS(Nt obsoleted(RCR(RR;RF((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRscCstd|j|jfS(Ns%s is obsoleted by %s(RR;t obsoleter(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRTs(RARBRRT(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRWs tRPMDBProblemProvidescBseZdZdZRS(cKstj||d|dS(NR1(RCR(RR;RF((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRscCstd|j|jfS(Ns%%s provides %s but it cannot be found(RR;tprovide(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRTs(RARBRRT(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRZs tRPMDBPackageSackcBseZdZiejejejfd6ejejej fd6ej ej ej fd6ej ejejfd6ZeZddWdWddZdZeedWZd Zd Zd Zd Zd ZddZdZddZdZ dZ!dZ"dZ#dZ$dZ%dZ&e'j(Z)dWdWdZ*dWdZ+e,e-dZ.e,dZ/dWdWe-dZ0dZ1d Z2d!Z3d"Z4d#Z5d$Z6d%Z7d&Z8d'Z9d(Z:d)Z;d*Z<d+Z=d,Z>d-Z?d.Z@d/ZAd0ZBd1ZCd2ZDd3ZEed4ZFd5ZGd6ZHd7ZId8ZJe-id9ZKe,d:ZLe-d;ZMgd<ZNdWdWdWdWdWd=ZOd>ZPdWd?ZQd@ZRdWdWdWdWdWdAZSdBZTdCZUdDZVdEZWdFZXdGZYdWdWdWdWdWdHZZdIZ[dJZ\dKZ]e,dLZ^dWdXdMZ_dNZ`dWdYdOZadPZbdQZcdWdRZddSZegdTZfdUZgdVZhRS(Zs* Represent rpmdb as a packagesack RMR1RSt obsoletest/s /var/lib/yumcCs||_i|_i|_t|_i|_t|_t|_t|_ t|_ g|_ i|_ i|_ t|_|dkr|d}n|j|tjj|j|js|d||_n ||_ttdrtjd}nd}tjj|d||_d|_d|_i|_d|_||_t|_d|_ iid6id6id6id 6|_!tjj|jd }tjj|d }t"d |d ||_#dS(Ns/rpmdb-indexesR^t expandMacros%_dbpaths /var/lib/rpmR1RMRSR]s/yumdbs/versiontdb_patht version_path($troott_idx2pkgt _name2pkgR0t_pkgnames_loadedt_tup2pkgRt_completely_loadedt_pkgname_failst_pkgmatch_failst_provmatch_failst_simple_pkgtup_listt_get_pro_cachet_get_req_cachet_loaded_gpg_keysRt setCacheDirR tpathtnormpathR+t _persistdirthasattrtrpmR_t _rpmdbpatht_have_cached_rpmdbv_datat_cached_conflicts_datat_trans_cache_storeR(t releasevert auto_closet_cached_rpmdb_mtimet_cachetRPMDBAdditionalDataR(RRbRytcachedirt persistdirtdbpatht addldb_pathRa((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRsN                          cCs|js<|jdt}|dk r<|j|_q<n|js~x6|jD]%\}}|jj|j|qRWn|jS(sTGetter for the pkglist property. Returns a list of package tuples. t load_packagesN(RktpreloadPackageChecksumsRRtkeyst _get_packagestappendt _hdr2pkgTuple(Rt csumpkgtupsRR)((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt _get_pkglists    cCsi|_i|_t|_i|_t|_t|_t|_t|_ g|_ i|_ i|_ t dk rt jniid6id6id6id6|_d|_d|_|jd|_dS(s Drop all cached data, this is a big perf. hit if we need to load the data back in again. Also note that if we ever call this while a transaction is ongoing we'll have multiple copies of packages which is _bad_. R1RMRSR]N(RcRdR0ReRfRRgRiRhRjRkRlRmtmiscRt unshare_dataR|RvRwttransactionResetR{(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytdropCachedDatas,                 cCst|_t|_t|_g|_i|_i|_td k rUtj niid6id6id6id6|_ d |_ d |_ |j|jd}tjj||_d}g}x|D]}|jj|j||j|j|jtjkrq|jj|j|j||jrq|j|j}||j |j!||j|jqqn|jtj"kr||j |j#j!||j|jqqWx|D]}|j\}}} } } |j$|| | | |} | s|j%d|qn| d} |j#j&} | d kr;qnt'| dt'| d }}d | j(j)ksd | j(j)krqn|| j(j)d <|| j(j)d |jj|n|S(NR1(RjRR3(RRR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytsearchProvidess cCs|j|dS(NRM(R(RR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytsearchRequiresscCs|j|dS(NR](R(RR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytsearchObsoletesscCs|j|dS(NRS(R(RR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytsearchConflictsscCs|jS(N(tpkglist(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt simplePkgListscCsj|s dS|\}}|jd|d|}|sGtjd|ngtj|D]}|j^qWS(NRRsNo Package Matching %s(t_searchR&R'Rt newestInListR(RtnaTupRRRtallpkgR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturnNewestByNameArchs cCsB|s dS|jd|}|s5tjd|ntj|S(NRsNo Package Matching %s(RR&R'RR(RRtallpkgs((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturnNewestByNames cCs| st|tjkr dSg}xm|D]e}|s?q-n|d}|dkr^d}n|rs|j}n|j|tj||fq-W|S(Nit?t*t[(RRR(tlenRt PATTERNS_MAXRtlowerRRtcompile_pattern(Rt ignore_caseRtpattqpat((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_compile_patternss    #cCs?|d krtSx(|D] \}}|d}|d krBd}n t|}|dd}|rq|j}n|d k r||kr||dkrqn||drtS|d|rtS|d|rtS|d|rtS|d|rtS||d |rtS|d |d |rtSqWtS( s< This is basically parsePackages() but for rpm hdr objects. tepocht0Ris)%(name)s-%(version)s-%(release)s.%(arch)ss%(name)s.%(arch)ss%(name)s-%(version)ss %(name)s-%(version)s-%(release)ss*:%(name)s-%(version)s-%(release)s.%(arch)ss %(name)s-s!:%(version)s-%(release)s.%(arch)sN(RRRRRR(t repatternsRRRtrepatRtqname((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_match_repattern/s:     (   c Cs||j r|rg}xz|D]k}|j|g}|s{|rEPntj|rXPnd|krhPnd|kr{Pq{n|j|qW|Sng}|r| rg}xY|D]Q}||jkrqn||jkr|j|j|qn|j|qW|}|s|Sn|js|j ||}xB|j D]4\} } |j || |rC|j | | qCqCW|dk|_n|jj} |jrg| D]} | jdkr| ^q} n|rxt| || } |jj| d|r| d| d|} n| d| d} xG| D]<} x3|D]+}| j|krB|jj| jqBqBWq5Wn| S(sReturns a list of packages. Note that the packages are always filtered to those matching the patterns/case. repoid is ignored, and is just here for compatibility with non-rpmdb sacks. t-t.s gpg-pubkeyiiiN(Rgt searchNamesRRtextendRiReRdRRRRRRRcRRnRRtupdateR3( RtrepoidRRRRtpkgsttpatstrpatsRRt pkgobjlistR;((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturnPackagesRs`         +  !cCs|jdkri}x|jdD]u\}}|tjsDq%n|j||}|||j<|jrrq%n||_t |_|j t |_|`q%W|j |_n|jS(s Load the packages which have conflicts from the rpmdb, newer versions of rpm have an index here so this is as fast as cached (we test rpm version at cache write time). t conflictnameN( RwRRRttRPMTAG_CONFLICTNAMERRRRRRSRR(RRRRR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt _uncached_returnConflictPackagess        cCstj|jtjsdS|jd}t|dd}|jd||jdt|x9t|D]+}x"|jD]}|jd|qWqqW|j tj |d|dS(Ns /conflictss.tmptws%s s%u ( R taccessRtW_OKRtwriteRtsortedRtclosetrename(RRtrpmdbvtconflicts_fnametfoR;tvar((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_write_conflicts_news  cCs*|jdtd}|j||dS(Nt main_onlyi(t simpleVersionRR(RRR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_write_conflictsscCs|jdkri}x|jdD]u\}}|tjsDq%n|j||}|||j<|jrrq%n||_t |_|j t |_|`q%W|j |_n|jS(s Load the packages which have obsoletes from the rpmdb, this is needed because newer rpm's have obsoletes imply conflicts. t obsoletenameN( t_cached_obsoletes_dataRRRttRPMTAG_OBSOLETENAMERRRRRR]RR(RRRRR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt _uncached_returnObsoletePackagess        cCstj|jtjsdS|jd}t|dd}|jd||jdt|x9t|D]+}x"|jD]}|jd|qWqqW|j tj |d|dS(Ns /obsoletess.tmpRs%s s%u ( R RRRRRRRRRR(RRRtobsoletes_fnameRR;R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_write_obsoletes_news  cCs*|jdtd}|j||dS(NRi(RRR(RRR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_write_obsoletesscCsxtj|jdtj|jdtj|jdtj|jdtj|jdtjd|dS(s This shouldn't be called, but people are hitting weird stuff so we want to deal with it so it doesn't stay broken "forever". s/versions /conflictss /obsoletess/file-requiress/pkgtups-checksumssRpmdb checksum is invalid: %sN(Rtunlink_fRR&R'(Rtcaller((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRs  c CsR|js dSd}|jd|}t|\}}|dkrIdS|j}|jdtd}| s||d krdSg}yt||} xq| dkr| d8} ||||||||||f} t| d|j|j | qW|jdkr+dSWnt k rM|j |dSX|S( NcSs|jd S(Ni(treadline(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt _read_strsR^Riiiit( t__cache_rpmdb__RRRRRRtintRtsearchPkgTuplet ValueErrorR( RtfnameRt full_fnameRRtfrpmdbvRRt pkgtups_numR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt _read_pkglists4     !  cCs|jd|_|jS(NRS(RRw(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_read_conflicts3scCs|jr||jd|D]6} | j || kr||| | || | qqWqiW|j dkr|j |n|r||||gS||gS( s5 Return a simple version for all installed packages. cSso|j|i}|jdt}|j|||dk rk|j|t}|j||ndS(N(RRRR(tireposRtrevR;Rtirevstrpsv((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_up_revss  RRt installedt from_repot@tfrom_repo_revisionN(RHRRRRRRRRRRQRSRvRJ(RRtgroupsRORtmainRKt main_grpst irepos_grpsR;tydbiRtgroupRRL((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRsL            %cCskd}x^|D]V}xM|D]E}t||}|r|jj|dkr|d7}PqqWq W|S(Niii(RRtfind(tfieldst searchstringsRtcounttstfieldtvalue((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_find_search_fieldss  !  cCs|std|}ng}x]|jD]O\}}|j|||}|dkr.|j|j|||fq.q.W|S(NcSs |jS(N(R(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytsi(RQRRaRR(RR[R\tloweredRRRR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt"searchPrimaryFieldsMultipleStringss &cCs4g}x'|D]}|j|jd|q W|S(NR(RR(Rtnamest returnListR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRs cCs|j|||||S(N(R(RRRtvertrelR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRscCsdS(N((Rtarchlist((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt excludeArchs scCsA|j}g|jdtD]\}}|j||^qS(Ntheaders(R"treturnLeafNodesRR(RRR(thR)((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRls coss|j}|j||}x2|D]*}|ddkr%||jfVq%q%W~|jro|jjndS(sLdbMatch() wrapper generator that yields (header, index) for matches Rs gpg-pubkeyN(R"R#R)RzR(R(RR tkwdsR(R)Rm((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRs   c CsA|dk r||jkrgS|||||f}||jkrQ|j|gSt}g}|jsx||jkr!|dk r|jj|g} | s|jj|qn |j } xY| D]Q} xHdD]3} || dk r|| t | | krPqqW|j | qW|S|j } |dk rN|j d|} n6|dk ro|j d|} n|j } t|_t}x| D]\}}|j||} |jj| jt}xHdD]3} || dk r|| t | | krPqqW|j | qW| r=|dk r=|jj|n|S( s4List of matching packages, to zero or more of NEVRA.RRhRgRRN(sarchsrelsversepoch(sarchsrelsversepoch(RRhRftlocalsRgReRdRR3RtgetattrRR"RRRRR(RRRRgRhRRtlocRRRRR(R)tdoneRR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR!sL     )      )cCs||jkr|j|St|||}||j|<|jj|jgj|||j|j<|jr|j dkr|j d}t j j||_ n|S(Ns /Packages(RcRRdRRRRfRRR{RRuR RpR(RRR!RR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRXs   cCstj|d}tj|d}tjt|d}tjt|d}|d}|dkrwd}n t|}tj|}tj|||||fS(NRRtversiontreleaseRR(Rt share_dataRRR(RRRRRgRhR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRes    cCstjdtdd|jS(NscgetPkgList() will go away in a future version of Yum. Please access this via the pkglist attribute.t stackleveli(twarningstwarntDeprecationWarningR(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt getPkgListts  cCs9tjdtddg|jD]\}}|^q#S(Ns6getHdrList() will go away in a future version of Yum. Rvi(RwRxRyR(RRR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt getHdrList{s  cCs_tjdtddg}x3|jD](\}}}}}|j||fq&Wtj|S(Ns>getNameArchPkgList() will go away in a future version of Yum. Rvi(RwRxRyRRRtunique(RtlstRRRRgRh((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytgetNameArchPkgLists   cCsYtjdtddg}x-|jD]"\}}}}}|j|q&Wtj|S(Ns:getNamePkgList() will go away in a future version of Yum. Rvi(RwRxRyRRRR|(RR}RRRRgRh((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytgetNamePkgLists   c CsTtjdtddg|jd|d|d|d|d|D]}|j^qAS( Ns@returnTuplebyKeyword() will go away in a future version of Yum. RviRRRRgRh(RwRxRyRR(RRRRRgRhR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturnTupleByKeywords  c Cstjdtdd|\}}}}}|jd|d|d|d|d|}t|d kr{|d }|jgSgSdS( Ns?returnHeaderByTuple() will go away in a future version of Yum. RviRRRRgRhi(RwRxRyRRR( RtpkgtupleRRRRRR}titem((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturnHeaderByTuples  *  cCsotjdtdd|\}}}}}|d kr@d}ng|j|||||D]}|j^q\S( s?returns a list of header indexes based on the pkgtuple provideds>returnIndexbyTuple() will go away in a future version of Yum. Rviis(none)RRN(Nis(none)R(RwRxRyRRR(RRRRRRsRtR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturnIndexByTuples     cCs tdS(N(tNotImplementedError(RR(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytaddDBscCs|dkrd}nt|tjkrEtj|\}}}n>t|tjtjfkru|\}}}nd}}}|tj |tj |tj |tj |ff}tj |S(s2 Given random stuff, generate a usable dep tuple. iN( Rttypettypest StringTypeRtstringToVersiont TupleTypetListTypeRRu(RtflagsRstr_etr_vtr_rtdeptup((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt _genDeptups  c Cstj|}|j|||}||jkr>|j|S|dd}|j|}i}xk|D]c}|ddkr|dkr|ddfg|||j|S|dd}|j|}i}xk|D]c}|ddkr|dkr|ddfg||R+R?R3tyumtdepsolveRRRt formatRequireRLRRSR(RRt providersR=R;trreqtreqRRgRNtprobtcreqtrestnrestconflicting_poRO((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytcheck_dependenciessJ     4 ccsd}xvt|jD]b}|j|kr4qn|jt|jrRqn|dkrj|}qn||fV|}qWdS(N(RRRRt intersectionR0tprovides_names(Rtignore_providestlastR;((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_iter_two_pkgsBs  c Cst|}g}x|j|D]\}}|j|jkrFq"n|j|r||krtj|jr|jdkrq"ntj|jr|jdkrq"qn|jt|d|q"W|S(s Checks for any "duplicate packages" (those with multiple versions installed), we ignore any packages with a provide in the passed provide list (this is how installonlyworks, so we do the same). tnoarchRV(R0RRtverEQRtisMultiLibArchRRU(RRR=RR;((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytcheck_duplicatesPs !! cCsg}g}x6t|jD]"}|js4qn|j|qWxMt|jD]9}x0|j|D]}|jt|d|qnWqXW|S(s@ Checks for any packages which are obsoleted by other packages. RY(RRR]Rt obsoletedByRW(Rt obsoletersR=R;tobspo((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytcheck_obsoletedcs !cCsg}xut|jD]a}xX|jD]M}|\}}}||j|||kr)|jt|d|Pq)q)WqW|S(sq For each package, check that a provides search for it's name (and everything it provides) finds it. R[(RRR1R?RRZ(RR=R;tprovtupRRRs((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytcheck_providesps N(NNN(NNN(iRARBRKRttRPMTAG_REQUIRENAMEtRPMTAG_REQUIREVERSIONtRPMTAG_REQUIREFLAGStRPMTAG_PROVIDENAMEtRPMTAG_PROVIDEVERSIONtRPMTAG_PROVIDEFLAGSRtRPMTAG_CONFLICTVERSIONtRPMTAG_CONFLICTFLAGSR tRPMTAG_OBSOLETEVERSIONtRPMTAG_OBSOLETEFLAGSRRRRRRtpropertyRRRRoR"RRRRRRRRRRRRtcontainsRPRRt staticmethodRRRRRRR R RRRRRR R!R"R#R$R(RR*R/R;R>R%RRBR&RHRJRRaRdRRRjRlRRRRRzR{R~RRRRRRR?RR2RRRRRRR(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR\s     1   W             #N        $       < (  & C    #7    7          /   cCs|jddjddS(NR^Rt~(treplace(Rp((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt _sanitize|sR}cBsJeZdZdddZdZdZddddZdZRS(sQclass for access to the additional data not able to be stored in the rpmdbs/var/lib/yum/yumdbcCstj|_||j_||j_t|j_i|_tj j |jjsy t |jjt |j_Wqt tfk r}qXn*tj|jjtjrt |j_niid6|_dS(Ntattr(Rt GenericHolderRR`RaRtwritablet _packagesR RpRDRRRRIRRt yumdb_cache(RR`RaR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRs    cCs`d|jj}tj|}x:|D]2}tjj|jdd}||j||j}n|dkr]||jkr]dS||jdkr|jd|d}|dk r|dk r|j|jf|j|jfkr|jd|dj|||j|s#Invalid value of attribute %s on %s(RRRRR,Rtstat_fRRRRRRRRterrnotreadRt _validators( RRR<RtkeyRRR`tvalid((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_readSs:         cCst|}|j|}||jkr7|j|=n|j|tjj|rytj|Wqtt fk rt d||fqXndS(sremove the attribute files!Cannot delete attribute %s on %s N( RRRRR RpRDtunlinkRRIR,(RRR<((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_delete}s   cCs |j|S(N(R(RR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR/scCs9|jds"|j||ntj|||dS(NR(R+Rtobjectt __setattr__(RRR`((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRscCs3|jds|j|ntj||dS(NR(R+RRt __delattr__(RR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRscCs|j|}|dk S(N(RR(RRR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt __contains__sccsx|jD] }|Vq Wxktj|jdD]S}|t|jd}||jkrbq0n| r~|jdr~q0n|Vq0WdS(Ns/*is.tmp(RRRRR(Rt show_hiddenR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt__iter__s cCsVx'|jdtD]}|j|qWytj|jWntk rQnXdS(NR(RRRR trmdirRRI(RR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytcleans  cCs,y|j|}Wntk r'|SX|S(sretrieve an add'l data obj(RR,(RRtdefaultR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRs  N(RARBR0RRRRRRRRRRRRR/RRRRRRR(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRs.       & *      cCs,td}x|jD] }|GHqWdS(NR^(R\R(tsacktp((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRUs t__main__(,RtRRwRR tos.pathtrpmUtilsRRtrpmUtils.transactionRRR&tpackagesRRt packageSackRRtfnmatchtretyum.i18nRRRt yum.depsolveRRRRRRCRLRURWRZR\RRR}RRRURA(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytsN             E   F