�PNG  IHDR��;���IDATx��ܻn�0���K�� �)(�pA��� ���7�LeG{�� �§㻢|��ذaÆ 6lذaÆ 6lذaÆ 6lom��$^�y���ذag�5bÆ 6lذaÆ 6lذa{���� 6lذaÆ �`����}H�Fkm�,�m����Ӫ���ô�ô!� �x�|'ܢ˟;�E:���9�&ᶒ�}�{�v]�n&�6� �h��_��t�ڠ͵-ҫ���Z;��Z$�.�P���k�ž)�!��o���>}l�eQfJ�T��u і���چ��\��X=8��Rن4`Vw�l�>����n�G�^��i�s��"ms�$�u��i��?w�bs[m�6�K4���O���.�4��%����/����b�C%��t ��M�ז� �-l�G6�mrz2���s�%�9��s@���-�k�9�=���)������k�B5����\��+͂�Zsٲ ��Rn��~G���R���C����� �wIcI��n7jJ���hۛNCS|���j0��8y�iHKֶۛ�k�Ɉ+;Sz������L/��F�*\��Ԕ�#"5��m�2��[S��������=�g��n�a�P�e�ғ�L�� lذaÆ 6l�^k��̱aÆ 6lذaÆ 6lذa;���� �_��ذaÆ 6lذaÆ 6lذaÆ ���R���IEND�B` � � v_c@sddlZddlZddlZddlZddlZddlZddlmZddlmZddl m Z ddl Z ddl Z ddl mZmZddlmZmZddlZddlZddlmZmZddlZddlZd�Zd �Zd �Zd efd ��YZd fd��YZdefd��YZ defd��YZ!defd��YZ"defd��YZ#defd��YZ$d�Z%de&fd��YZ'd�Z(de&fd��YZ)d�Z*e+d kre*�ndS(!i����N(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  tRPMInstalledPackagecBs5eZd�Zd�Zd�Zd�Zd�ZRS(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|j�SWntk ratj d�nXdS(NisRpmdb changed underneath us( RRRt readOnlyTStdbMatchRtnextt StopIterationtErrorstPackageSackError(Rttstmi((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_get_hdrSs  cCsy|jd�r%td||f�n|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    cCs�t�}xY|jD]N\}}}x<�|jj|||�D]"}||kr;|j|�q;q;WqWxW|j|jD]E}x<�|jj|dd�D]"}||kr�|j|�q�q�WqvWt|�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_packages�s   (t__name__t __module__RR*R/R=R@(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRGs   t RPMDBProblemcBs eZdZd�Zd�ZRS(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.pyR�s   cCs8|dkrdSt|j|j�p7t|j|j�S(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.pyRC�s tRPMDBProblemDependencycBseZd�ZRS(cCsa|jdkr,d|jtd�|jfSd|jtd�|jdjtt|j��fS(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.pyRL�stRPMDBProblemDuplicatecBseZd�Zd�ZRS(cKstj||d|�dS(Nt duplicate(RCR(RR;RF((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�scCstd�|j|jfS(Ns%s is a duplicate with %s(RR;RV(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRT�s(RARBRRT(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRU�s tRPMDBProblemObsoletedcBseZd�Zd�ZRS(cKstj||d|�dS(Nt obsoleted(RCR(RR;RF((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�scCstd�|j|jfS(Ns%s is obsoleted by %s(RR;t obsoleter(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRT�s(RARBRRT(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRW�s tRPMDBProblemProvidescBseZd�Zd�ZRS(cKstj||d|�dS(NR1(RCR(RR;RF((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�scCstd�|j|jfS(Ns%%s provides %s but it cannot be found(RR;tprovide(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRT�s(RARBRRT(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRZ�s tRPMDBPackageSackcBs�eZdZiejejejfd6ejejej fd6ej ej ej fd6ej ejejfd6ZeZddWdWdd�Zd�ZeedW�Zd �Zd �Zd �Zd �Zd �Zdd�Zd�Zdd�Zd�Z d�Z!d�Z"d�Z#d�Z$d�Z%d�Z&e'j(Z)dWdWd�Z*dWd�Z+e,e-d��Z.e,d��Z/dWdWe-d�Z0d�Z1d �Z2d!�Z3d"�Z4d#�Z5d$�Z6d%�Z7d&�Z8d'�Z9d(�Z:d)�Z;d*�Z<�d+�Z=d,�Z>d-�Z?d.�Z@d/�ZAd0�ZBd1�ZCd2�ZDd3�ZEed4�ZFd5�ZGd6�ZHd7�ZId8�ZJe-id9�ZKe,d:��ZLe-d;�ZMgd<��ZNdWdWdWdWdWd=�ZOd>�ZPdWd?�ZQd@�ZRdWdWdWdWdWdA�ZSdB�ZTdC�ZUdD�ZVdE�ZWdF�ZXdG�ZYdWdWdWdWdWdH�ZZdI�Z[dJ�Z\dK�Z]e,dL��Z^dWdXdM�Z_dN�Z`dWdYdO�ZadP�ZbdQ�ZcdWdR�ZddS�ZegdT�ZfdU�ZgdV�ZhRS(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|j�s�|d||_n ||_ttd�rtjd�}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.pyR�sN                          cCs�|js<�|jdt�}|dk r<�|j�|_q<�n|js~x6|j�D]%\}}|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    cCs�i|_i|_t�|_i|_t|_t�|_t�|_t�|_ g|_ i|_ i|_ t dk r�t j�niid6id6id6id6|_d|_d|_|j�d|_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,                 cCs�t|_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|j�qqn|jtj"kr�||j |j#j!�||j|j�q�q�Wx�|D]�}|j\}}} } } |j$|| | | |�} | s|j%d|�q�n| d} |j#j&�} | d kr;q�nt'| d�t'| d �}}d | j(j)ks�d | j(j)kr�q�n|| j(j)d <|| j(j)d |jj|�n|S(NR1(RjR�R3(RR�R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytsearchProvides�s cCs|j|d�S(NRM(R�(RR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytsearchRequires�scCs|j|d�S(NR](R�(RR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytsearchObsoletes�scCs|j|d�S(NRS(R�(RR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytsearchConflicts�scCs|jS(N(tpkglist(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt simplePkgList�scCsj|s dS|\}}|jd|d|�}|sGtjd|�ngtj|�D]}|j^qWS(NR�RsNo Package Matching %s(t_searchR&R'R�t newestInListR�(RtnaTupR�R�RtallpkgR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturnNewestByNameArchs cCsB|s dS|jd|�}|s5tjd|�ntj|�S(NR�sNo Package Matching %s(R�R&R'R�R�(RR�tallpkgs((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||�f�q-W|S(Nit?t*t[(R�R�R�(tlenR�t PATTERNS_MAXRtlowerR�R�tcompile_pattern(R�t 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�||dkr�qn||d�r�tS|d|�r�tS|d|�r�tS|d|�r�tS|d|�rtS||d |�rtS|d |d |�rtSqWtS( s<� This is basically parsePackages() but for rpm hdr objects. tepocht0R�is)%(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(RRRRR�R(t repatternsRR�R�trepatR�tqname((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_match_repattern/s:     (   c Cs||j r�|r�g}xz|D]k}|j|g�}|s{|rEPntj|�rXPnd|krhPnd|kr{Pq{n|j|�qW|Sng}|r| rg}xY|D]Q}||jkr�q�n||jkr�|j|j|�q�n|j|�q�W|}|s|Sn|js�|j ||�}xB|j �D]4\} } |j || |�rC|j | | �qCqCW|dk|_n|jj�} |jr�g| D]} | jdkr�| ^q�} n|rxt| || �} |jj| d�|r| d| d|} n| d| d} xG| D]<�} x3|D]+}| j|krB|jj| j�qBqBWq5Wn| S(s�Returns 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 searchNamesR�R�textendRiReRdR�R�R�R�R�RRcR�RnR�RtupdateR3( RtrepoidR�R�RR�tpkgsttpatstrpatsRRt pkgobjlistR;((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturnPackagesRs`         +  !cCs�|jdkr�i}x�|jd�D]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( RwRR�RttRPMTAG_CONFLICTNAMER�R�RRRRSRR�(RR�RRR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt _uncached_returnConflictPackages�s        cCs�tj|jtj�sdS|jd}t|dd�}|jd|�|jdt|��x9t|�D]+}x"|jD]}|jd|�q�WqqW|j �tj |d|�dS(Ns /conflictss.tmptws%s s%u ( R taccessR�tW_OKRtwriteR�tsortedR�tclosetrename(RR�trpmdbvtconflicts_fnametfoR;tvar((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_write_conflicts_new�s  cCs*|jdt�d}|j||�dS(Nt main_onlyi(t simpleVersionRR(RR�R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_write_conflicts�scCs�|jdkr�i}x�|jd�D]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_dataRR�RttRPMTAG_OBSOLETENAMER�R�RRRR]RR�(RR�RRR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt _uncached_returnObsoletePackages�s        cCs�tj|jtj�sdS|jd}t|dd�}|jd|�|jdt|��x9t|�D]+}x"|jD]}|jd|�q�WqqW|j �tj |d|�dS(Ns /obsoletess.tmpR�s%s s%u ( R R�R�R�RR�R�R�R�RR(RR�Rtobsoletes_fnameRR;R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_write_obsoletes_new�s  cCs*|jdt�d}|j||�dS(NRi(RRR(RR�R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_write_obsoletes�scCsxtj|jd�tj|jd�tj|jd�tj|jd�tj|jd�tjd|�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(R�tunlink_fR�R&R'(Rtcaller((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR��s  c CsR|js dSd�}|jd|}t|�\}}|dkrIdS|j�}|jdt�d}| s�||d kr�dSg}y�t||��} xq| dkr| d8} ||�||�||�||�||�f} t| d�|j|j | ��q�W|j�dkr+dSWnt k rM|j |�dSX|S( NcSs|j�d S(Ni����(treadline(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt _read_strsR^Rii����iit( t__cache_rpmdb__RR�RRRRtintR�tsearchPkgTuplet 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�||| | || | �q�q�WqiW|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(R�RRR�(tireposR�trevR;R�tirevstrpsv((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_up_revs�s  R�R�t installedt from_repot@tfrom_repo_revisionN(RHRRR�R�R�R�R�R�R�RQRSRvRJ(RRtgroupsRORtmainRKt main_grpst irepos_grpsR;tydbiR�tgroupR�RL((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�sL            %cCskd}x^|D]V}xM|D]E}t||�}|r|j�j|�dkr|d7}PqqWq W|S(Nii����i(RR�tfind(tfieldst searchstringsRtcounttstfieldtvalue((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_find_search_fields�s  !  cCs�|std�|�}ng}x]|j�D]O\}}|j|||�}|dkr.|j|j||�|f�q.q.W|S(NcSs |j�S(N(R�(R�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt�si(RQR�RaR�R�(RR[R\tloweredRRRR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt"searchPrimaryFieldsMultipleStrings�s &cCs4g}x'|D]}|j|jd|��q W|S(NR�(R�R�(Rtnamest returnListR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�s cCs|j|||||�S(N(R�(RR�R�tvertrelR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�scCsdS(N((Rtarchlist((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt excludeArchs scCsA|j�}g|jdt�D]\}}|j||�^qS(Ntheaders(R"treturnLeafNodesRR�(RR�R(thR)((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRls coss|j�}|j||�}x2|D]*}|ddkr%||j�fVq%q%W~|jro|jj�ndS(sLdbMatch() wrapper generator that yields (header, index) for matches R�s gpg-pubkeyN(R"R#R)RzR(R(RR tkwdsR(R)Rm((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�s   c CsA|dk r||jkrgS|||||f}||jkrQ|j|gSt�}g}|jsx||jkr!|dk r�|jj|g�} | s�|jj|�q�n |j �} xY| D]Q} xHdD]3} || dk r�|| t | | �kr�Pq�q�W|j | �q�W|S|j �} |dk rN|j d|�} n6|dk ro|j d|�} n|j �} t|_t}x�| D]�\}}|j||�} |jj| j�t}xHdD]3} || dk r�|| t | | �kr�Pq�q�W|j | �q�W| r=|dk r=|jj|�n|S( s4List of matching packages, to zero or more of NEVRA.RRhRgR�R�N(sarchsrelsversepoch(sarchsrelsversepoch(RRhRftlocalsRgReRdR�R3R�tgetattrR�R"R�RRR�R�(RR�R�RgRhRR�tlocRR�R�R�R(R)tdoneRR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�!sL     )      )cCs�||jkr|j|St|||�}||j|<|jj|jg�j|�||j|j<|jr�|j dkr�|j d}t j j|�|_ n|S(Ns /Packages(RcRRdR�R�R�RfR�RR{RRuR RpR�(RRR!R�R�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�Xs   cCs�tj|d�}tj|d�}tjt|d��}tjt|d��}|d}|dkrwd}n t|�}tj|�}tj|||||f�S(NR�RtversiontreleaseR�R�(R�t share_dataRRR(RRR�RRgRhR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�es    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  cCs9tjdtdd�g|j�D]\}}|^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_tjdtdd�g}x3|jD](\}}}}}|j||f�q&Wtj|�S(Ns>getNameArchPkgList() will go away in a future version of Yum. Rvi(RwRxRyR�R�Rtunique(RtlstR�RR�RgRh((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytgetNameArchPkgList�s   cCsYtjdtdd�g}x-|jD]"\}}}}}|j|�q&Wtj|�S(Ns:getNamePkgList() will go away in a future version of Yum. Rvi(RwRxRyR�R�RR|(RR}R�RR�RgRh((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytgetNamePkgList�s   c CsTtjdtdd�g|jd|d|d|d|d|�D]}|j^qAS( Ns@returnTuplebyKeyword() will go away in a future version of Yum. RviR�RR�RgRh(RwRxRyR�R�(RR�RR�RgRhR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturnTupleByKeyword�s  c Cs�tjdtdd�|\}}}}}|jd|d|d|d|d|�}t|�d kr{|d }|jgSgSdS( Ns?returnHeaderByTuple() will go away in a future version of Yum. RviR�RR�RgRhi(RwRxRyR�R�R( RtpkgtupleR�R�RR�R�R}titem((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturnHeaderByTuple�s  *  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)RR�N(Nis(none)R(RwRxRyRR�R(RR�R�RR�RsRtR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturnIndexByTuple�s     cCs t�dS(N(tNotImplementedError(RR(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytaddDB�scCs�|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 TupleTypetListTypeR�Ru(R�tflagsRstr_etr_vtr_rtdeptup((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt _genDeptup�s  c Cs�tj|�}|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?R3tyumtdepsolveR�R�Rt formatRequireRLR�RSR�(RR�t providersR=R;trreqtreqR�RgRNtprobtcreqtrestnrestconflicting_poRO((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytcheck_dependenciessJ     4 ccs�d}xvt|j��D]b}|j|kr4qn|jt|j��rRqn|dkrj|}qn||fV|}qWdS(N(RR�R�R�t intersectionR0tprovides_names(Rtignore_providestlastR;((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_iter_two_pkgsBs  c Cs�t|�}g}x�|j|�D]�\}}|j|jkrFq"n|j|�r�||kr�tj|j�r�|jdkr�q"ntj|j�r�|jdkr�q"q�n|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(R0R�R�tverEQRtisMultiLibArchR�RU(RR�R=R�R;((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytcheck_duplicatesPs !! cCs�g}g}x6t|j��D]"}|js4qn|j|�qWxMt|j��D]9}x0|j|�D]}|jt|d|��qnWqXW|S(s@ Checks for any packages which are obsoleted by other packages. RY(R�R�R]R�t obsoletedByRW(Rt obsoletersR=R;tobspo((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytcheck_obsoletedcs !cCs�g}xut|j��D]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[(R�R�R1R?R�RZ(RR=R;tprovtupR�R�Rs((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytcheck_providesps N(NNN(NNN(iRARBRKRttRPMTAG_REQUIRENAMEtRPMTAG_REQUIREVERSIONtRPMTAG_REQUIREFLAGStRPMTAG_PROVIDENAMEtRPMTAG_PROVIDEVERSIONtRPMTAG_PROVIDEFLAGSR�tRPMTAG_CONFLICTVERSIONtRPMTAG_CONFLICTFLAGSR tRPMTAG_OBSOLETEVERSIONtRPMTAG_OBSOLETEFLAGSR�RRRRR�tpropertyR�R�R�RoR"R�R�R�R�R�R�R�R�R�R�R�RtcontainsRPR�R�t staticmethodRR�R�R�R�RR R RRR�RRR R!R"R#R$R(R�R*R/R;R>R%R�RBR&RHRJRRaRdR�R�RjRlR�R�R�R�RzR{R~RR�R�R�R�R�R?R�R2R�R�R�R�R�R�R�(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR\�s�     1   W             #N        $       < (  & C    #7    7          /   cCs|jdd�jdd�S(NR^Rt~(treplace(Rp((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt _sanitize|sR}cBsJeZdZddd�Zd�Zd�Zdddd�Zd�ZRS(sQclass for access to the additional data not able to be stored in the rpmdbs/var/lib/yum/yumdbcCs�tj�|_||j_||j_t|j_i|_tj j |jj�s�y t |jj�t |j_Wq�t tfk r�}q�Xn*tj|jjtj�r�t |j_niid6|_dS(Ntattr(R�t GenericHolderR�R`RaRtwritablet _packagesR RpRDRRRRIR�R�t yumdb_cache(RR`RaR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�s    cCs`d|jj}tj|�}x:|D]2}tjj|�jd�d}||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(R�R�R�R�R,R�tstat_fRRR�R�R�R�R�RterrnotreadRt _validators( RR�R<�R�tkeyRRR`tvalid((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_readSs:         cCs�t|�}|j|�}||jkr7|j|=n|j|�tjj|�r�ytj|�Wq�tt fk r�t d||f�q�XndS(sremove the attribute files!Cannot delete attribute %s on %s N( R�R�R�R�R RpRDtunlinkRRIR,(RR�R<�((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|jd�s"|j||�ntj|||�dS(NR(R+R�tobjectt __setattr__(RR�R`((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�scCs3|jd�s|j|�ntj||�dS(NR(R+R�Rt __delattr__(RR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�scCs|j|�}|dk S(N(R�R(RR�R�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt __contains__�sccs�x|jD] }|Vq Wxktj|jd�D]S}|t|j�d}||jkrbq0n| r~|jd�r~q0n|Vq0WdS(Ns/*is.tmp(R�R�R�R�R�(Rt show_hiddenR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt__iter__�s cCsVx'|jdt�D]}|j|�qWytj|j�Wntk rQnXdS(NR(RRR�R trmdirR�RI(RR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytclean�s  cCs,y|j|�}Wntk r'|SX|S(sretrieve an add'l data obj(R�R,(RR�tdefaultR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR��s  N(RARBR0R�R�R�RRR�R�R�R�R�R�R�R/RRRRRRR�(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR��s.       & *      cCs,td�}x|j�D] }|GHqWdS(NR^(R\R�(tsacktp((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRU�s t__main__(,RtR�RwR�R tos.pathtrpmUtilsRRtrpmUtils.transactionRR�R&tpackagesRRt packageSackRRtfnmatchtretyum.i18nRRR�t yum.depsolveR�RRRRRCRLRURWRZR\R�RR}R�R�RURA(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytsN             E  ������ F �