MINI MINI MANI MO

Path : /usr/lib/python2.7/site-packages/yum/
File Upload :
Current File : //usr/lib/python2.7/site-packages/yum/rpmsack.pyc


[c@sddlZddlZddlZddlZddlZddlZddlmZddlmZddl	m
Z
ddlZddlZddl
mZmZddlmZmZddlZddlZddlmZmZddlZddlZdZd	Zd
ZdefdYZd
fdYZdefdYZ defdYZ!defdYZ"defdYZ#defdYZ$dZ%de&fdYZ'de&fdYZ(dZ)e*dkre)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(RtIOErrortNone(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(	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_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
ejejfd6ej
ejejfd6ZeZddWdWddZdZeedWZd	Zd
ZdZd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^texpandMacros%_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_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.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(RtcsumpkgtupsRR)((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<qWdS(
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[ssdCDPT(pkg checksums): %siit
checksum_typet
checksum_dataN(*RRgR0RiRjRkRlRmRRRR|RvRwRRuR	RptgetmtimeR{RetdiscardtnameRdtoutput_statet	constantstTS_INSTALL_STATESRhRt	reinstallRftpkgtupRcRtTS_REMOVE_STATEStpotsearchNevrat_deal_with_bad_rpmdbcachetreturnIdSumRRt
yumdb_infot_read_cached_data(Rttxmbrst
rpmdbfnameRtprecachettxmbrtipotntaRtvtrR;tcsumtTtD((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytdropCachedDataPostTransaction8sd					

		

	

	
	
!cCstjj|j|js5|jd||_n
d||_t|dr|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.pyRos
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.pytbuildIndexessterrorcCsdS(N((Rtfailure((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt
_checkIndexesscCsdS(N((Rtobj((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt
delPackagestlikec
Csi}|jdd}|jd|tj|fg}x9|D]1\}}|j||}|j|j|q?W|j|}	x!|	D]}|j|j|qW|jS(NR1itpatterns(	t	DEP_TABLERRttRPMMIRE_GLOBt_makePackageObjectt
setdefaulttpkgidtsearchFilestvalues(
RRt
query_typetresultttagR)RRR;tfileresults((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt	searchAlls!
cCsji}tjj|}xE|jd|D]1\}}|j||}|j|j|q+W|jS(s;search the filelists in the rpms for anything matching namet	basenames(R	RpRqRRRRR(RRRRRR;((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRscCsq|j|j|}|dk	r&|Stj|\}}\}}}t}	tj|ret}	ni}|j|d}
x|j	|
tj
|D]h\}}|j||}
|	s|
j||||||ffr|
||
j
<qq|
||
j
<qW|dkrP|ddkrP|j|}x|D]}|||j
<q6Wn|j}||j||<|S(NiR1R^(R|tgetRRtstring_to_prco_tupleRtre_globRRRtto_utf8Rt	checkPrcoRRR(RRtprcotypeRRtfRRRtglobRRRRRR;((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt
searchPrcos,!	($
cCsB||jkrgS|j|d}|s>|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(Rtignore_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(RgtsearchNamesRRtextendRiReRdRRRRRRRcRRnRRtupdateR3(
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
cCsR|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_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(RRRRR	(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(RRRtdata((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.pyRrscCsa|j}|jdd}g}x6|D].}t|_|j|j||jq+W|S(s/ Return packages of the gpg-pubkeys ... hacky. Rs
gpg-pubkey(R"R#RRnRRtinstance(RR(R)RR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturnGPGPubkeyPackagesys
	#cCsXd}|jstt|jd\}}|dkrAd
S|jdtd}|j}|sz||d kr~dSi}i}yt||}x|dkrP|d8}||||||||||f}	t|	dt||}
x?|
dkrL|
d8}
||}|j	|	gj
|qWqWt||}
x|
dkr|
d8}
||}t||}xt|dkr|d8}||||||||||f}	t|	d|j	|gj
|	qWqfW|jdkr+dSWntk
rM|jd	d
SX||fS(NcSs|jd S(Ni(R(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRss/file-requiresRiiiiRs
file requires(NN(NN(NN(NN(
RtAssertionErrorRRRRRRRRRRR(RRRRRRtiFRtiFPRRt	files_numR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_read_file_requiressP	
!
!

!!

cCs|jr:|j\}}|dk	r:|t|fSni}t}t}x|jD]}x|jD]\}}}	|jdsqon|j|jgj	|||kro|j
|||	}
|j||
s|j|qqoqoWq_Wt}x!|jD]}|j
|qWi}
x=|D]5}g|j
|D]}|j^qN}||
|<q8W|||
f}|jr|jdtd}|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/RR0RRMR+RRRR?R3t
itervaluesRRRR%(RR,R-tinstalledFileRequirestinstalledUnresolvedFileRequirestresolvedR;RtflagtevrtdeptfileRequirestfnamestinstalledFileProvidersRtpkgtupsRR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytfileRequiresDatas<			
	
%		cCs=|js
dS|s|rdS|||f}||jd<dS(Ns
file-requires(RRx(RR1R2tinstalledFileProvidestproblemsR'((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyttransactionCacheFileRequiress		cCstj|jtjsdS|\}}}|r5dSt|jdd}|jd||jdt|xt|D]w}x|D]}|jd|qWt||}	|jdt|	x%t|	D]}
|jd|
qWqW|jdt|xt|D]w}
|jd|
t||
}|jdt|x6t|D](}x|D]}|jd|qwWqjWqW|j	tj
|jd|jddS(Ns/file-requires.tmpRs%s
s%u
s/file-requires(R	RRRRRRRR0RR(RtrpmdbversionR'R1R2R<RRRt	filenamesRR:((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR%s4


c	Csd|js
dSd}t|jd\}}|dkr?dS|jdtd}|j}|sx||d kr|dSi}yt||}x|dkr5|d8}||||||||||f}	t|	d||}
||}|
d	kr"d||	<q|
|f||	<qW|jd
krLdSWntk
rn|j	ddSX|sy|Sx|D]}	||	dkrqn|	\}}
}}}|j
|||||
}|s|j	d|||||
fqn|d}||	\}
}d
|jjksd|jjkr<qn|
|jjd
<||jjd<qWdS(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|jd S(Ni(R(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR&ss/pkgtups-checksumsRiiiiRRs
pkg checksumsspkg checksums: %s-%s:%s-%s.%sRR(
RRRRRRRRRRRRR(RRRRRRRRRRRRRRRRR;((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRs\		
!



	
cCs|js
dS||jd<dS(Nspkgtups-checksums(RRx(Rtpkg_checksum_tups((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt transactionCachePackageChecksums`s	cCstj|jtjsdS|}t|jdd}|jd||jdt|xst|D]e\}}x|D]}|jd|qW|dkrd}nx|D]}|jd|qWqmW|j	tj
|jd|jddS(Ns/pkgtups-checksums.tmpRs%s
s%u
Rs/pkgtups-checksums(RR(R	RRRRRRRRRR(RR?R'RARRtTDR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR&fs 
	

cCs|jdk	r|jS|js#dS|jd}|jd}tjj|rtjj|rtjj|}tjj|}||krt	|\}}|dkrdS|j
d }||_qn|jS(s. Return the cached string of the main rpmdbv. s/versions	/PackagesiN(RvRRRRuR	RptexistsRRR(RtrpmdbvfnameRtnmtimetomtimeRRR((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stjj|j
rdSyt
|j
Wqttfk
r}dSXnt|dd}|j|j|jd|jtj|d|dS(Ns	/Packagess/versions.tmpRs
(RRRvRR{RRuR	RpRDRRRRRRtOSErrorRRRR(RRRR{RERR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_put_cached_simpleVersion_mains0	



c
Csd}|r;|r;|j}|dk	r;|igSnt}i}i}i}xvt|jD]b}	|	j}
d}d|
krd|
kr|
j|
jf}n|j|	|x^|D]V}|	j	||kr||krt||<i||<n||j|	|qqW|r(qind}
d}d|	jkrtd|	jj
}
d|	jkrt|	jj}qtn|||
||	|x>|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_grpstirepos_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.pyt<lambda>si(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excludeArchsscCsA|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|jd}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||<qhn|jd|}	|	rh|	||<qhqhW||j|<|S(ssearches the rpmdb for what provides the arguments
           returns a list of pkg objects of providing packages, possibly emptyiiiR^R1N(NNN(RRuRRlRRt
matchingPrcos(
RRRRsRRRRRthits((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR?s 

cCs)g|j|||D]}|j^qS(N(R?R(RRRRsR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytwhatProvidessc
Cstj|}|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(RRuRRmRRR(
RRRRsRRRRRR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR2s 

cCs)g|j|||D]}|j^qS(N(R2R(RRRRsR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytwhatRequiresscCski}xRtjD]D}x;tj|D]*}x!|j|D]}d||<q?Wq)WqWt|jS(sqreturns a list of yum installed package objects which own a file
           that are currently running or in use.i(Rtreturn_running_pidstget_open_filesRRR(RRtpidR<R;((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytreturn_running_packagessc	Cs!|dkr|j}nt}g}xt|D]}x|jD]}|djdrfqGn||krxqGn|\}}}|j|||r|j|qGntj	j
j||}tj
|||}	t|dd|	}
|j|
qGWx|jD]	}|djdr+qn|\}}}|j|||}i}
xV|D]N}|jd|jdkr|jd|jdkrq\n|||
|<q\W|
}|sqntj	j
j||}tj
|||}t|dd|d|}
|j|
qWq7W|S(	s& Checks for any missing dependencies. itrpmlibRMRNiRSRON(RRR0RR>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]RtobsoletedByRW(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	RpRDRRRRIRRtyumdb_cache(RR`RaR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRs	cCs`d|jj}tj|}x:|D]2}tjj|jdd}||j|<q&WdS(Ns%s/*/*/Ri(RR`RR	RptbasenametsplitR(RtglbtpkgdirstdR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_load_all_package_pathss

c	Csu||jkr|j|S|\}}}}}t|}d|jj|d|||||f}||j|<|S(Ns%s/%s/%s-%s-%s-%s-%si(RRRR`(	RRRRRRRRtthisdir((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt
_get_dir_names
cCsd|r!|j|j|j}n*|rB|rB|j||}n	tdt|j|d|jS(s<Return an RPMDBAdditionalDataPackage Object for this packages1Pass something to RPMDBAdditionalData.get_packageR(RRRRtRPMDBAdditionalDataPackageRR(RRRRR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pytget_packages	cCsdS(spopulate 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_rpmdbs	N(	RARBRKRRRRRR(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyR}s		
RcBseZedddddddddd	g
Zid
d6ZddZddZd
ZdZ	dZ
dZdZdZ
dZdZdZdZedZdZddZRS(Rtreasontinstalled_byt
changed_byRQRStfrom_repo_timestampRytgroup_membertcommand_linecCstj|dkS(N(Rtvalidate_repoidR(R((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRbscCs(||_||_i|_||_dS(N(t_conft_mydirRt_yumdb_cache(RRtpkgdirR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyRs			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|gf|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. NiRii(	RRRtst_nlinkt_auto_hardlink_attrstst_devtst_inoR3R0(RRR`R<tinfotnlinkstsinfo((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_auto_caches&
$
#cCs||jkr|j|}||jdkrt|jd|dj||jd|dst|jd|=qtn|j|=ndS(s( Remove old values from the link cache. RiN(RR(RR<tovalue((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_unlink_yumdb_caches
cCs|jdkrtS|j|||jdkr7tS|jd|dsRty^t|jd|dj}tj|dt	j
||dt	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(). Ris.tmpN(RRRRR+titerR$RRR	tlinkRR3R(RR<R`tlfn((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_link_yumdb_cache
s 
!
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|js%t|jnt|}||jkrM|j|=n|j|}|jdrt	d||fn|dkrt
j|jj
n|j||rdSt
j|dt|dd}y|j|Wn,ttfk
r}t	d||fnX|j|j~tj|d||j|||dS(Ns.tmpsCannot set attribute %s on %sRRR(s
checksum_types
checksum_data(R	RpRDRRRRRtendswithR,RRRRaRRRRIRtflushRRR(RRR`R<RR((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_write's.


c	Cst|}||jkr&|j|S|j|}|jdrZtd||fntj|dt}|dkrtd||fn|j	dkr|j
dk	r|j|jf}||j
kr|j
||j
||||j|Snt|\}}|dkr$d|jS|j}|j~||jkr~|j|}||s~td||fq~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(RRRRR,Rtstat_fRRRRRRRRterrnotreadRt_validators(	RRR<RtkeyRRR`tvalid((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt_readMs:

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_deletews

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(Rtshow_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(RARBR0RRRRRRRRRRRR/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&tpackagesRRtpackageSackRRtfnmatchtretyum.i18nRRRtyum.depsolveRRRRRRCRLRURWRZR\RRR}RRURA(((s//usr/lib/python2.7/site-packages/yum/rpmsack.pyt<module>sL				E
		F	

OHA YOOOO