�
�v_c@sddlZddlZddlZddlZddlZddlZddlmZddlmZddl m
Z
ddlZddlZddl
mZmZddlmZmZddlZddlZddlmZmZddlZddlZd�Zd �Zd
�Zdefd��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(RR
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(RtIOErrortNone(RRte((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( tsettprovidesRtgetRequirestaddtfilelisttdirlistRtlist(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_requiresRtgetProvidesR3R6(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
tRPMDBProblemcBs 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
ejejfd6ej
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^texpandMacros%_dbpaths/var/lib/rpmR1RMRSR]s/yumdbs/versiontdb_pathtversion_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_keysRtsetCacheDirR tpathtnormpathR+t_persistdirthasattrtrpmR_t
_rpmdbpatht_have_cached_rpmdbv_datat_cached_conflicts_datat_trans_cache_storeR(t
releasevert
auto_closet_cached_rpmdb_mtimet_cachetRPMDBAdditionalDataR(RRbRytcachedirt
persistdirtdbpathtaddldb_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(RtcsumpkgtupsRR)((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(RcRdR0ReRfRRgRiRhRjRkRlRmtmiscRtunshare_dataR|RvRwttransactionResetR{(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytdropCachedDatas,
cCs�t|_t�|_t�|_g|_i|_i|_tdk 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&�}
|
dkr;q�nt'|
d�t'|
d �}}d
|j(j)ks�d|j(j)kr�q�n||j(j)d
<||j(j)d<q�WdS(
s� Drop cached data that is assocciated with the given transaction,
this tries to keep as much data as possible and even does a
"preload" on the checksums. This should be called once, when a
transaction is complete. R1RMRSR]s /PackagescSs||kr||=ndS(sZ Make sure we never traceback here, because it screws our yumdb
if we do. N((txty((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt _safe_del[ssdCDPT(pkg checksums): %siit
checksum_typet
checksum_dataN(*RRgR0RiRjRkRlRmR�RR�R|RvRwR�RuR RptgetmtimeR{RetdiscardtnameRdtoutput_statet constantstTS_INSTALL_STATESRhR�t reinstallRftpkgtupRcRtTS_REMOVE_STATEStpotsearchNevrat_deal_with_bad_rpmdbcachetreturnIdSumRRt
yumdb_infot_read_cached_data(Rttxmbrst
rpmdbfnameR�tprecachettxmbrtipotntaRtvtrR;tcsumtTtD((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytdropCachedDataPostTransaction8sd
!cCs�tjj|�j|j�s5|jd||_n
d||_t|d�r|tjj|jd�}||jj_ ndS(s Sets the internal cachedir value for the rpmdb, to be the
"rpmdb-indexes" directory in the persisent yum storage. R^Rs/versionN(
R RpRqR+Rbt _cachedirRsRtconfRa(RR~Ra((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRo�s
cCsL|js!td|j�|_n|jjsEtd|j�|_n|jS(NRb(R(RRbR(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR"�s
cCsdS(N((R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytbuildIndexes�sterrorcCsdS(N((Rtfailure((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt
_checkIndexes�scCsdS(N((Rtobj((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt
delPackage�stlikec
Cs�i}|jdd}|jd|tj|fg�}x9|D]1\}}|j||�}|j|j|�q?W|j|�} x!| D]}|j|j|�q�W|j�S(NR1itpatterns( t DEP_TABLER�RttRPMMIRE_GLOBt_makePackageObjectt
setdefaulttpkgidtsearchFilestvalues(
RR�t
query_typetresultttagR)RRR;tfileresults((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt searchAll�s!
cCsji}tjj|�}xE|jd|�D]1\}}|j||�}|j|j|�q+W|j�S(s;search the filelists in the rpms for anything matching namet basenames(R RpRqR�R�R�R�R�(RR�R�RRR;((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR��scCsq|j|j|�}|dk r&|Stj|�\}}\}}}t} tj|�ret} ni}|j|d}
x�|j |
tj
|��D]h\}}|j||�}
| s�|
j||||||ff�r|
||
j
<qq�|
||
j
<q�W|dkrP|ddkrP|j|�}x|D]}|||j
<q6Wn|j�}||j||<|S(NiR1R^(R|tgetRR�tstring_to_prco_tupleRtre_globRR�R�tto_utf8R�t checkPrcoR�R�R�(RR�tprcotypeR�R�tfRR�R�tglobR�RRR�R�R;((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt
searchPrco�s,! ($
cCsB||jkrgS|j|d�}|s>|jj|�n|S(NR1(RjR�R3(RR�R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytsearchProvides�scCs|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�tnewestInListR�(RtnaTupR�R�RtallpkgR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturnNewestByNameArchscCsB|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.pytreturnNewestByNamescCs�|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�tPATTERNS_MAXRtlowerR�R�tcompile_pattern(R�tignore_caseRtpattqpat((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_compile_patternss
#cCs?|dkrtSx(|D] \}}|d}|dkrBd}nt|�}|dd}|rq|j�}n|dk 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||jr�|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(RgtsearchNamesR�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). tconflictnameN(
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. tobsoletenameN(
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
cCsR|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_fnameRRtfrpmdbvRRtpkgtups_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<ndS(NRS(RRx(RR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt transactionCacheConflictPackages7s cCsD|j�}|dkr@|j�}|jr@|j|�q@n|S(s0 Return a list of packages that have conflicts. N(RRR�RR (RR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturnConflictPackages;s cCs|jr||jd<ndS(NR](RRx(RR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt transactionCacheObsoletePackagesEs cCs|jd�|_|jS(NR](RR(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_read_obsoletesIscCsD|j�}|dkr@|j�}|jr@|j|�q@n|S(s0 Return a list of packages that have obsoletes. N(R#RR
RR(RR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturnObsoletePackagesMs cCs�|jsi|_dSd|jkrE|jd}|j||�nd|jkrt|jd}|j||�nd|jkr�|jd}|j||�nd|jkr�|jd}|j||�ni|_dS(s� We are going to do a transaction, and the parameter will be the
rpmdb version when we finish. The idea being we can update all
our rpmdb caches for that rpmdb version. NRSR]s
file-requiresspkgtups-checksums(RRxRRt_write_file_requirest_write_package_checksums(RRR�tdata((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyttransactionResultVersionWs
cCs
i|_dS(s� We are going to reset the transaction, because the data we've added
already might now be invalid (Eg. skip-broken, or splitting a
transaction). N(Rx(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�rscCsa|j�}|jdd�}g}x6|D].}t|_|j|j||j���q+W|S(s/ Return packages of the gpg-pubkeys ... hacky. R�s
gpg-pubkey(R"R#RRnR�R�tinstance(RR(R)RR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturnGPGPubkeyPackagesys
#cCsXd�}|jst�t|jd�\}}|dkrAd
S|jdt�d}|j�}|sz||d kr~dSi}i}y�t||��}x�|dkrP|d8}||�||�||�||�||�f} t| d�t||��}
x?|
dkrL|
d8}
||�}|j | g�j
|�qWq�Wt||��}
x�|
dkr|
d8}
||�}t||��}xt|dkr|d8}||�||�||�||�||�f} t| d�|j |g�j
| �q�WqfW|j�dkr+dSWntk
rM|jd �d
SX||fS(NcSs|j�d S(Ni����(R(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�ss/file-requiresRii����iiRs
file requires(NN(NN(NN(NN(
RtAssertionErrorRR�RRRRRR�R�RR�(RRRRRRtiFRtiFPRR�t files_numR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_read_file_requires�sP
!
!
!!
cCs�|jr:|j�\}}|dk r:|t�|fSni}t�}t�}x�|j�D]�}x�|jD]�\}}} |jd�s�qon|j|jg�j |�||kro|j
||| �}
|j|�|
s�|j|�q�qoqoWq_Wt�}x!|j�D]}|j
|�qWi}
x=|D]5}g|j
|�D]}|j^qN}||
|<q8W|||
f}|jr�|jdt�d}|j||�n|S(s� Get a cached copy of the fileRequiresData for
depsolving/checkFileRequires, note the giant comment in that
function about how we don't keep this perfect for the providers of
the requires. R^RiN(RR/RR0R�RMR+R�R�R�R?R3t
itervaluesR�RRR%(RR,R-tinstalledFileRequirestinstalledUnresolvedFileRequirestresolvedR;R�tflagtevrtdeptfileRequirestfnamestinstalledFileProvidersRtpkgtupsRR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytfileRequiresData�s<
% cCs=|js
dS|s|rdS|||f}||jd<dS(Ns
file-requires(RRx(RR1R2tinstalledFileProvidestproblemsR'((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyttransactionCacheFileRequires�s cCs�tj|jtj�sdS|\}}}|r5dSt|jdd�}|jd|�|jdt|��x�t|�D]w}x|D]}|jd|�q�Wt||�} |jdt| ��x%t| �D]}
|jd|
�q�Wq�W|jdt|��x�t|�D]w}
|jd|
�t||
�}|jdt|��x6t|�D](}x|D]}|jd|�qwWqjWqW|j �tj
|jd|jd�dS(Ns/file-requires.tmpR�s%s
s%u
s/file-requires(R R�R�R�RR�R�R�R0RR(RtrpmdbversionR'R1R2R<RR�Rt filenamesRR:((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR%�s4
c Csd|js
dSd�}t|jd�\}}|dkr?dS|jdt�d}|j�}|sx||d kr|dSi}y�t||��}x�|dkr5|d8}||�||�||�||�||�f} t| d�||�}
||�}|
d kr"d|| <q�|
|f|| <q�W|j�d
krLdSWntk
rn|j d�dSX|sy|Sx�|D]�} || dkr�q�n| \}}
}}}|j
|||||
�}|s�|j d|||||
f�q�n|d}|| \}
}d
|jjks�d|jjkr<q�n|
|jjd
<||jjd<q�WdS(sI As simpleVersion() et. al. requires it, we "cache" this yumdb data
as part of our rpmdb cache. We cache it with rpmdb data, even
though someone _could_ use yumdb to alter it without changing the
rpmdb ... don't do that.
NOTE: This is also used as a cache of pkgtups in the rpmdb. NcSs|j�d S(Ni����(R(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR&ss/pkgtups-checksumsRii����iiR�Rs
pkg checksumsspkg checksums: %s-%s:%s-%s.%sR�R�(
RRR�RRRRRRR�R�R�R�(RR�RRRRRR�RR�R�R�R�R�R�R�R;((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�s\
!
cCs|js
dS||jd<dS(Nspkgtups-checksums(RRx(Rtpkg_checksum_tups((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt transactionCachePackageChecksums`s cCstj|jtj�sdS|}t|jdd�}|jd|�|jdt|��xst|�D]e\}}x|D]}|jd|�q�W|dkr�d}nx|D]}|jd|�q�WqmW|j �tj
|jd|jd�dS(Ns/pkgtups-checksums.tmpR�s%s
s%u
R�s/pkgtups-checksums(R�R�(R R�R�R�RR�R�R�RRR(RR?R'RARR�tTDR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR&fs
cCs�|jdk r|jS|js#dS|jd}|jd}tjj|�r�tjj|�r�tjj|�}tjj|�}||kr�t |�\}}|dkr�dS|j
�d }||_q�n|jS(s. Return the cached string of the main rpmdbv. s/versions /Packagesi����N(RvRRR�RuR RptexistsR�RR(RtrpmdbvfnameR�tnmtimetomtimeRRR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_get_cached_simpleVersion_mainys
$cCs8t|�|_|jsdS|jdkr/dS|jd}tjj|�sRdStjj |�}|j|krwdS|j
d}tj|j
tj�s�tjj|j
�r�dSyt
|j
�Wq�ttfk
r�}dSXnt|dd�}|j|j�|jd�|j�tj|d|�dS(Ns /Packagess/versions.tmpR�s
(RRRvRR{RRuR RpRDR�R�R�R�RRtOSErrorRR�RR(RRR�R{RERR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_put_cached_simpleVersion_main�s0
c
Csd�}|r;|r;|j�}|dk r;|igSnt�}i}i}i}xvt|j��D]b} | j}
d}d|
kr�d|
kr�|
j|
jf}n|j| |�x^|D]V}| j ||kr�||krt�||<i||<n||j| |�q�q�W|r(qind}
d}d| jkrtd| jj
}
d| jkrt| jj}qtn|||
|| |�x>|D]6}| j ||kr�||||
|| |�q�q�WqiW|jdkr�|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�sR�R�t installedt from_repot@tfrom_repo_revisionN(RHRRR�R�R�R�R�R�R�RQRSRvRJ(RRtgroupsRORtmainRKt main_grpstirepos_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<lambda>�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.pytexcludeArchsscCsA|j�}g|jdt�D]\}}|j||�^qS(Ntheaders(R"treturnLeafNodesRR�(RR�R(thR)((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRlscoss|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(RRtkwdsR(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�|jd}tj
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}nt|�}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
cCsTtjdtdd�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||<qhn|jd|�} | rh| ||<qhqhW||j|<|S(s�searches the rpmdb for what provides the arguments
returns a list of pkg objects of providing packages, possibly emptyiiiR^R1N(NNN(R�RuR�RlR�Rt
matchingPrcos(
RR�R�RsR�R�R�R�R�thits((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR?�s
cCs)g|j|||�D]}|j^qS(N(R?R�(RR�R�RsR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytwhatProvides�sc
Cs�tj|�}|j|||�}||jkr>|j|S|dd}|j|�}i}xk|D]c}|ddkr�|dkr�|ddfg||<qhn|jd|�} | rh| ||<qhqhW||j|<|S(ssearches the rpmdb for what provides the arguments
returns a list of pkgtuples of providing packages, possibly emptyiiiR^RMN(NNN(R�RuR�RmR�RR�(
RR�R�RsR�R�R�R�R�R�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR2�s
cCs)g|j|||�D]}|j^qS(N(R2R�(RR�R�RsR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytwhatRequiresscCski}xRtj�D]D}x;tj|�D]*}x!|j|�D]}d||<q?Wq)WqWt|j��S(sqreturns a list of yum installed package objects which own a file
that are currently running or in use.i(R�treturn_running_pidstget_open_filesR�R�R�(RR�tpidR<R;((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturn_running_packagessc Cs!|dkr|j�}nt�}g}x�t|�D]�}x�|jD]�}|djd�rfqGn||krxqGn|\}}}|j|||�r�|j|�qGntj j
j||�}tj
|||�} t|dd| �}
|j|
�qGWx|jD] }|djd�r+qn|\}}}|j|||�}i}
xV|D]N}|jd|jdkr�|jd|jdkr�q\n|||
|<q\W|
}|s�qntj j
j||�}tj
|||�}t|dd|d|�}
|j|
�qWq7W|S( s& Checks for any missing dependencies. itrpmlibRMRNiRSRON(RR�R0R�R>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�tintersectionR0tprovides_names(Rtignore_providestlastR;((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_iter_two_pkgsBsc 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�tobsoletedByRW(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_providespsN(NNN(NNN(iRARBRKRttRPMTAG_REQUIRENAMEtRPMTAG_REQUIREVERSIONtRPMTAG_REQUIREFLAGStRPMTAG_PROVIDENAMEtRPMTAG_PROVIDEVERSIONtRPMTAG_PROVIDEFLAGSR�tRPMTAG_CONFLICTVERSIONtRPMTAG_CONFLICTFLAGSRtRPMTAG_OBSOLETEVERSIONtRPMTAG_OBSOLETEFLAGSR�RRRRR�tpropertyR�R�R�RoR"R�R�R�R�R�R�R�R�R�R�R�RtcontainsRPR�R�tstaticmethodRR�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�tyumdb_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|<q&WdS(Ns%s/*/*/R�i(R�R`R�R RptbasenametsplitR�(RtglbtpkgdirstdR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_load_all_package_paths�s
c Csu||jkr|j|S|\}}}}}t|�}d|jj|d|||||f}||j|<|S(Ns%s/%s/%s-%s-%s-%s-%si(R�R�R�R`( RR�R�R�R�RR�R�tthisdir((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt
_get_dir_name�s
cCsd|r!|j|j|j�}n*|rB|rB|j||�}n td�t|j|d|j�S(s<Return an RPMDBAdditionalDataPackage Object for this packages1Pass something to RPMDBAdditionalData.get_packageR�(R�R�R�RtRPMDBAdditionalDataPackageR�R�(RR�R�R�R�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytget_package�s cCsdS(s�populate out the dirs and remove all the items no longer in the rpmd
and/or populate various bits to the currently installed versionN((Rtrpmdbobj((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytsync_with_rpmdb�s N( RARBRKRRR�R�R�R�(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR}�s
cCs6|r#|ddkr#|d}ntj|�dkS(NiR^i(R�tvalidate_repoidR(R`((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_validate_from_repo�s
R�cBs�eZedddddddddd g
�Zied6Zdd
�Zdd�Zd�Z d
�Z
d�Zd�Zd�Z
d�Zd�Zd�Zd�Zd�Zed�Zd�Zdd�ZRS(R�treasontinstalled_byt
changed_byRQRStfrom_repo_timestampRytgroup_membertcommand_linecCs(||_||_i|_||_dS(N(t_conft_mydirR�t_yumdb_cache(RR�tpkgdirR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR�s cCsG||j|<|jdkr dSd}|dk r>|j}n|dkr]||jkr]dS||jdkr|jd|d}|dk r�|dk r�|j|jf|j|jfkr�|jd|dj|�||j|<dSn|jd|d|krdSn||t|g�f|jd|<||j|<dS(s� Create caches for the attr. We have a per. object read cache so at
worst we only have to read a single attr once. Then we expand that
with (dev, ino) cache, so hardlink data can be read once for
multiple packages. NiR�ii( R�R�Rtst_nlinkt_auto_hardlink_attrstst_devtst_inoR3R0(RR�R`R<tinfotnlinkstsinfo((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_auto_cache�s&
$
#cCs�||jkr�|j|}||jdkrt|jd|dj|�|jd|dst|jd|=qtn|j|=ndS(s( Remove old values from the link cache. R�iN(R�R�(RR<tovalue((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_unlink_yumdb_caches
cCs�|jdkrtS|j|�||jdkr7tS|jd|dsRt�y^t|jd|d�j�}tj|d�t j
||d�t j|d|�WntSX|jd|dj|�||j|<t
S(sb If we have a matching yumdb cache, link() to it instead of having
to open()+write(). R�is.tmpN(R�RRR�R+titerR$R�RR tlinkRR3R(RR<R`tlfn((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_link_yumdb_caches
!
cCstjj|jd|�S(s* Given an attribute, return the filename. R^(R RpRqR�(RR�((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_attr2fn)scCs_tjj|j�s%t|j�nt|�}||jkrM|j|=n|j|�}|jd�r�t d||f�n|dkr�t
j|jj
�n|j||�r�dSt
j|d�t|dd�}y|j|�Wn,ttfk
r}t d||f�nX|j�|j�~tj|d|�|j|||�dS(Ns.tmpsCannot set attribute %s on %sR�R�R�(s
checksum_types
checksum_data(R RpRDR�RR�R�R�tendswithR,R�RR�RaR�RR�RIRtflushRRR�(RR�R`R<RR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_write-s.
c Cs�t|�}||jkr&|j|S|j|�}|jd�rZtd||f�ntj|dt�}|dkr�td||f�n|j dkr�|j
dk r�|j|jf}||j
kr�|j
||j
|||�|j|Snt|�\}}|dkr$d|jS|j�}|j�~||jkr~|j|}||�s~td||f�q~n|j dkr�|j
dk r�||j
|<n|j
||||�|S(Ns.tmps%s has no attribute %st
ignore_EACCESis<E:%d>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�(Rtshow_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�st__main__(,RtR�RwR�R tos.pathtrpmUtilsRRtrpmUtils.transactionRR�R&tpackagesRRtpackageSackRRtfnmatchtretyum.i18nRRR�tyum.depsolveR�RRRRRCRLRURWRZR\R�RR}R�R�RURA(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt<module>sN E
������ F � |