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/__init__.pyc

[c8@sdZddkZddkZddkZddkZdZddkZddkZddkZddk	Z	ddk
Z
ddkZddkZddk
ZddkZddkZddkZeiiaeiiZddkZddklZlZddkZddkZddkZddklZlZlZl Z ddk!l"Z"ddk#Zddk$Z$ddk%Z%ddk&l'Z'ddk(Z(ddk)l*Z*l+Z+ddk,Z,ddk-Z-dd	k.l/Z/l0Z0dd
k1l2Z2ddk3l4Z4l5Z5l6Z6ddk7Z7ddk8Z8ddk9Z9ddk:Z:ddk;Z;ddk<Zddk=Z=e=i>dei?dd
k@lAZAlBZBddk@lCZClDZDlEZEddk@lFZFddkGTddkHlIZIlJZJddklKZKlLZLlMZMddkNZNddkOZOddkPlQZPddk.lRZRdZSeTgZUeSiVdD]ZWeUeXeWq=[UZYeRiZi[deS7_[dd dYZ\dd!dYZ]dd"dYZ^de7i_fdYZ`dS(#s
The Yum RPM software updater.
iNc	CsbttdpdSy>tg}tiD]}|t|q)~}||jSWndSXdS(s Check if rpm is at least the current vertup. Can return False/True/None
        as rpm hasn't had version info for a long time. t__version_info__N(thasattrtrpmtNonettupleRtint(tvertupt_[1]tnumtvi((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_rpm_ver_atleasts0(tParsingErrortConfigParser(tarchDifferencetcanCoinstalltArchStoragetisMultiLibArch(t
compareEVR(tRepoStorage(tConfigPreProcessort
varReplace(t
URLGrabbertURLGrabError(t
format_number(tpackagesNewestByNametpackagesNewestByNameArchtListPackageSacktignore(t
parsePackagestcomparePoEVR(tYumAvailablePackagetYumLocalPackagetYumInstalledPackage(t
YumUrlPackage(t*(tRPMTransactiontSimpleCliCallBack(t
to_unicodetto_strt
exception2msg(tproxy(tdefault_grabbers3.2.29t.s yum/t_YumPreBaseConfcBseZdZdZRS(sThis is the configuration interface for the YumBase configuration.
       So if you want to change if plugins are on/off, or debuglevel/etc.
       you tweak it here, and when yb.conf does it's thing ... it happens. cCsd|_d|_t|_tif|_d|_d|_	d|_
d|_d|_d|_
d|_d|_d|_d|_d|_dS(Ns/etc/yum/yum.conft/(tfntroottTruetinit_pluginstpluginst	TYPE_COREtplugin_typesRt	optparsert
debuglevelt
errorleveltdisabled_pluginstenabled_pluginstsyslog_identtsyslog_facilityt
syslog_devicetarcht
releasevertuuid(tself((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt__init__ns													(t__name__t
__module__t__doc__R@(((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR+ist_YumPreRepoConfcBseZdZdZRS(sThis is the configuration interface for the repos configuration.
       So if you want to change callbacks etc. you tweak it here, and when
       yb.repos does it's thing ... it happens. cCsUd|_d|_d|_d|_d|_d|_d|_d|_d|_	dS(N(
Rtprogressbartcallbacktfailure_callbacktinterrupt_callbacktconfirm_functgpg_import_functgpgca_import_functcachedirtcache(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR@s								(RARBRCR@(((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRDst_YumCostExcludecBs eZdZdZdZRS(sW This excludes packages that are in repos. of lower cost than the passed
        repo. cCs"t||_t||_dS(N(tweakreftrepot_repos(R?RPtrepos((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR@scCsQxJ|iiD]9}|i|iijoPn||iijotSqWtS(N(RQtlistEnabledtcostRPtsackt_pkgtup2pkgsR/tFalse(R?tpkgtupRP((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt__contains__s	(RARBRCR@RY(((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRNs	tYumBasec	BseZdZdZdZdZdZddZddee	i
feeed	Zd
Z
eeddZd
ZeedZdZdZdZeeeeeedZdZdZdZdZedZeedZdZeedZeedZdZdZ dZ!dZ"d Z#d!Z$d"Z%d#Z&e'd$d%d&d'd(d)d*d+Z(e'd$d,d&d-d(d.d*d/Z)e'd$d0d&d1d(d2d*d3Z*e'd$d4d&d5d(d6d*d7Z+e'd$d8d&d9d(d:d*d;Z,e'd$d<d(d=d*d>Z-e'd$d?d&d@d(dAd*dBZ.e'd$dCd&dDd(dEd*dFZ/e'd$dGd&dHd(dId*dJZ0e'd$dKd&dLd(dMd*dNZ1dOZ2dPZ3edQZ4edRZ5dSZ6dTZ7dUZ8dVZ9dWZ:dXZ;dYZ<dZZ=d[Z>d\Z?d]Z@eeeegd^ZAeeeegd_ZBd`ZCeedaZDdbZEedcZFddZGeHdeZIedfZJdgdhdiZKdjZLdkZMdlZNeedmZOdnZPdoZQdpZRdqZSdrZTdsZUdtZVduZWdvZXdwZYdxZZdyZ[dzeeed{Z\d|Z]eeeed}Z^d~Z_edZ`eedZadeedZbdZcdZdgedZeedZfedZgdZhdZidZjdZkdZledZmeeedZndZodZpdZqdZrdZsdZtdZudZvdZwedZxdZydZzdZ{eeedZ|edZ}eedZ~edZedZedZdZedZedZdZdZdZeedZddZeedZeedZedZedZdZeeedZdZdZdZedZedZdZgedZeeeddZdZdZdZeedZeedZdZRS(sThis is a primary structure and base class. It houses the objects and
       methods needed to perform most things in yum. It is almost an abstract
       class in that you will need to add your own class above it for most
       real use.cCstii|d|_d|_d|_d|_d|_d|_	d|_
d|_d|_d|_
g|_tid|_tid|_t|_t||_h|_|ig|_d|_t|_t|_t|_ t!|_"g|_#d|_$dS(Nsyum.YumBasesyum.verbose.YumBasei(%tdepsolvetDepsolveR@Rt_conft_tsInfot_rpmdbt_upt_compst_historyt_pkgSackt	_lockfilet_tagst
_ts_save_filetskipped_packagestloggingt	getLoggertloggertverbose_loggerRWt_override_sigchecksRRQtrepo_setoptstdisablePluginst
localPackagestmediagrabberRR<R+tpreconfRDtprerepoconftsettrun_with_package_namest_cleanupt	exit_code(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR@s4													
			cCs=|i|i|ix|iD]
}|q(WdS(N(tcloset
closeRpmDBtdoUnlockRu(R?tcb((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt__del__s



cCs@|idj	o|iin|io|iindS(N(RbRthistoryRwRQ(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRws
cCs
tiS(s/Factory method returning TransactionData object(ttransactioninfotTransactionData(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_transactionDataFactorysicCst|i_||i_dS(sndo a default setup for all the normal/necessary yum components,
           really just a shorthand for testingN(RWRqR0tconfRM(R?RM((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdoGenericSetupss/etc/yum/yum.confR,cCstitdtiddt|doX||i_||i_||i_	||i_
||i_||i_||i_
n|iS(Ns9doConfigSetup() will go away in a future version of Yum.
t
stackleveliRq(twarningstwarnt_tErrorstYumFutureDeprecationWarningRRqR-R.R0R3R4R5R6R(R?R-R.R0R3R4R5R6((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
doConfigSetupscKs |otidn|io|iSti}|o=x:dD].}||jot|i|||qDqDWn|ii}|ii}|ii}|ii	}|ii
}|ii}	|ii}
|ii
}|ii}|ii}
|ii}|ii}|ii}|ii}|ii}|o|ii|n
|ii}|djotii|o
d}nti||}||_|ii|_|o
||_n|iotii a!n|	djo
|	|_n|
djo
|
|_n|
djo
|
|_n|djo
||_n|djo
||_n|d
jo6|i#d
jo
d}qtii$d
|i%}n|djo
||_n|i&|i|i|i|i|i|o0|i'o&|i(|||i)|i*||nti+||_|`x$|i,i-D]}|i.i/|q;W|i'i0d|i,i1|_1ti2|i,_3tii4d|i,i5|i1i6dd|i1i6ddf|i,_7|i8|i,i3|i,i9|i:i;dti||i'i0d|iS(s
        Parse and load Yum's configuration files and call hooks initialise
        plugins and logging. Uses self.preconf for pre-configuration,
        configuration. s2Use .preconf instead of passing args to _getConfigR-R.R0R3R4R5R6R7R8s/etc/yum/yum.confs
/etc/yum.confR,t
postconfigs%s/repos/%s/%s/tbasearchs	$basearchR=s$releaseversConfig time: %0.3ftinit(	sfnsrootsinit_pluginssplugin_typess	optparsers
debuglevels
errorlevelsdisabled_pluginssenabled_pluginsN(<RRR]ttimetsetattrRqR-R.R0R3R4R5R6R7R8R9R:R;R=R<R>t
setup_archt	canonarchtostpathtexiststconfigtreadStartupConfigRt
gaftonmodetyumti18nt
dummy_wrapperRRtinstallroott
_getsysvertdistroverpkgtdoLoggingSetupR1t
doPluginSetupt
pluginpathtpluginconfpathtreadMainConfigRthistory_record_packagesRttaddtruntyumvartgeteuidtuidtnormpatht
persistdirtgett_repos_persistdirtdoFileLogSetuptlogfileRktdebug(R?tkwargstconf_sttargR-R.R0R3R4R5R6R7R8R9R:R;R=R<R>tstartupconftpkgname((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
_getConfigs

#!
	

















"s/dev/logcCsti|||||dS(s
        Perform logging related setup.

        @param debuglevel: Debug logging level to use.
        @param errorlevel: Error logging level to use.
        N(t
logginglevelsR(R?R5R6R9R:R;((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRos	cCsti|||idS(N(Rt
setFileLogRu(R?RR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR|scCs|d	joti|d}nt|d|ii}t}y|i|Wn-tj
o!}t	|}t
i|nXxd|iD]V}|d
joqnd	}	xW|D]O}
|
t
ijoqn|
t
ijoqn|
djoqn|
}	PqW|	o-|iid||	|i|	fqny|i||}Wn4t
it
ifj
o}|ii|qn#X||_||_|ii|_xt|iD]}ti|pqnti|i|ovxs|i|iD]]}
t ||
p'd}|ii||i|
fnt!||
t"|i||
qWqqW|i|ijo|xy|i|iiD]`}
t ||
p'd}|ii||i|
fnt!||
t"|i|i|
qWn|o||oqn|i#ox|i$|i%|i&fD]h}|pq:nti'|ti(p>d}|i)o!|ii||i|fnt*|_+q:q:Wny|i,i-|Wqt
ij
o}|ii|qXqWd	S(s-read in repositories from a config .repo fileitvarstmaint	installeds-_.:s!Bad id for repo: %s, byte = %s %ds-Repo %s did not have a %s attr. before setopts2Repo %s forced skip_if_unavailable=True due to: %sN(smains	installed(.RRtstatRRRRtreadfpRtstrRtConfigErrortsectionststringt
ascii_letterstdigitsRjtwarningtfindtreadRepoConfigt	RepoErrortrepo_config_agetrepofileRtbase_persistdirtsortedRmtmisctre_globtfnmatchtidtitemsRRtgetattrtssl_check_cert_permissionst	sslcacertt
sslclientcerttsslclientkeytaccesstR_OKtenabledR/tskip_if_unavailableRQR(R?trepofntrepo_agetvalidatet
confpp_objtparsertetmsgtsectiontbadtbytetthisrepotitoptR-((s0/usr/lib/python2.6/site-packages/yum/__init__.pytgetReposFromConfigFiles
	


		!,!+
	
!cCs<|ii}|i|ii|x|iiD]}tii|iid|o|iid|}ntii	|}tii
|oxttid|D]}ti
|tip&|iitdt|qnti|d}||jo
|}n|i|d|qWq/q/WdS(s5read in repositories from config main and .repo filesR,s	%s/*.repos!Skipping unreadable repository %siRN(Rtconfig_file_ageRtconfig_file_pathtreposdirRRRRRtisdirRtglobRRRjRRtreprR(R?RRRtthisrepo_age((s0/usr/lib/python2.6/site-packages/yum/__init__.pytgetReposFromConfigs"
!

cCsti|}y|i|||iWn7tj
o+}td||f}ti|nX|ip'||_|i	i
td|nt|i|_t|dd|_
|ii|_|ii|ii||_|S(sParse an INI file section for a repository.

        @param parser: ConfParser or similar to read INI file values from.
        @param section: INI file section to read.
        @return: YumRepository instance.
        s'Repository %r: Error parsing config: %ss8Repository %r is missing name in configuration, using idt
_old_cachedirt(tyumRepot
YumRepositorytpopulateRt
ValueErrorRRRtnameRjterrorR%Rtold_base_cache_dirRLtbasecachedirRtupdatetcfg(R?RRRPRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs 
		cCsti|_dS(sDisable yum plugins
        N(R1tDummyYumPlugins(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCsTt|itiottdnti||||||||_dS(sInitialise and enable yum plugins. 

        Note: _getConfig() will initialise plugins if instructed to. Only
        call this method directly if not calling _getConfig() or calling
        doConfigSetup(init_plugins=False).

        @param optparser: The OptionParser instance for this run (optional)
        @param plugin_types: A sequence specifying the types of plugins to load.
            This should be a sequence containing one or more of the
            yum.plugins.TYPE_...  constants. If None (the default), all plugins
            will be loaded.
        @param searchpath: A list of directories to look in for plugins. A
            default will be used if no value is specified.
        @param confpath: A list of directories to look in for plugin
            configuration files. A default will be used if no value is
            specified.
        @param disabled_plugins: Plugins to be disabled    
        @param enabled_plugins: Plugins to be enabled
        splugins already initialisedN(t
isinstanceR1t
YumPluginstRuntimeErrorR(R?R4R3t
searchpathtconfpathR7R8((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRscCs)titdtidd|iS(Ns8doRpmDBSetup() will go away in a future version of Yum.
Ri(RRRRRt	_getRpmDB(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdoRpmDBSetup7scCs|idjoti}|iititdti	d|i
id|i
idd|i
i
|_|iidti|n|iS(s@sets up a holder object for important information from the rpmdbsReading Local RPMDBR.R=Rsrpmdb time: %0.3fN(R_RRRktlogRtDEBUG_4RtrpmsacktRPMDBPackageSackRRRRR(R?trpmdb_st((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR=s
"cCs^|idj	od|i_|iind|_d|_d|_d|_d|_dS(s>closes down the instances of the rpmdb we have wangling aroundN(R_RttstdropCachedDatat_tsR^R`tcomps(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRxJs				cCs|`d|_dS(N(RR(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt	_deleteTsUscCs/titdtidd|i|tS(Ns7doRepoSetup() will go away in a future version of Yum.
Ri(RRRRRt	_getReposR/(R?R((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdoRepoSetupYscCsWt|do|i|int|do|i}|`|ii|i|i|i_|ii|i	|ii
|i|i|i_|i
|i_
|i|i_|idj	o|ii|in|idj	o|ii|iqn|o>ti}|ii||iidti|n|iS(sB For each enabled repository set up the basics of the repository. Rrsrepo time: %0.3fN(RRRRrRRtsetProgressBarRERFtsetFailureCallbackRGtsetInterruptCallbackRHRIRJRKRLRtsetCacheDirRMtsetCacheRRQtdoSetupRkR(R?RRRrtrepo_st((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR_s,	"cCs|`t||_dS(N(RQR(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt	_delReposscCs5titdtidd|id|d|S(Ns7doSackSetup() will go away in a future version of Yum.
RitarchlistR(RRRRRt	_getSacks(R?RR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdoSackSetupscCs|idj	o|djo|iS|djo
d}n|ii|}|iitdti}|p|ii	}nh}x|D]}d||<qW|ii
i||iid||ii
p|ii
S|ii
|_|i
|ii||djo|ii}nx(|D] }|i||i
|qBW|iid|ii|i|iidti||iS(szpopulates the package sacks for information from our repositories,
           takes optional archlist for archs to includeRsSetting up Package Sacksitwhichtexcludespkgsack time: %0.3fN(RcRRRt	findReposRkRRRR<RtgetPackageSacktsetCompatArchstpopulateSacktexcludePackagestexcludeArchsRStincludePackagesR1RtbuildIndexestcostExcludePackages(R?RRRRtsack_sttarchdictR<RP((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs>






cCsqd|_xa|iiiD]M}t|do|iqtitdtdt	i
ddqWdS(szreset the package sacks back to zero - making sure to nuke the ones
           in the repo objects, too - where it matterst
_resetSacks2repo object for repo %s lacks a _resetSack method
s%therefore this repo cannot be reset.
RiN(RRcRRtvaluesRR%RRRRR(R?RP((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt	_delSackss	
cCs)titdtidd|iS(Ns9doUpdateSetup() will go away in a future version of Yum.
Ri(RRRRRt_getUpdates(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
doUpdateSetupscCsJ|io|iS|iitdti}tii|ii	|i
i	|_|iidjod|i_nt
|do|ii|i_|`nW|iioIti}|i
idt|i_|iidti|n|ii|i_|ii|i_|ii|i_|ii|i_|ii|i_|ii|i_ti}|ii|iidti||iio;ti}|ii|iidti|nti}|ii |iid	ti||iid
ti||iS(snsetups up the update object in the base class and fills out the
           updates, obsoletes and others listssBuilding updates objectiit_up_obs_hacktnewestsup:Obs Init time: %0.3fsup:simple updates time: %0.3fsup:obs time: %0.3fsup:condense time: %0.3fsupdates time: %0.3f(!R`RkRRRtrpmUtilstupdatestUpdatestrpmdbt
simplePkgListtpkgSackRR5RR*trawobsoletest	obsoletestreturnObsoletesR/R<Rtmyarchtmultilibt_is_multilibRt	_archlisttcompatarchest_multilib_compat_archest	exactarcht
exactarchlistt	doUpdatestdoObsoletestcondenseUpdates(R?tup_sttobs_inittup_pr_sttobs_stt
cond_up_st((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR(s@
*

"


"
cCs2titdtiddd|_|iS(Ns8doGroupSetup() will go away in a future version of Yum.
Ri(RRRRRRR	t
_getGroups(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdoGroupSetup
s	cCsO|djo5|io'x$|iiD]}t|_q'WqBn||_dS(N(RRQtlistGroupsEnabledRWtgroups_addedRa(R?tvalRP((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
_setGroupss

c		Cs@|io|iSti}|iititdg}|ix|ii	D]}}|i
o|i|qWn|ipt
id|ny|i}Wnt
ij
o	}qWX|i|qWW|ii}tid||_x|D]}|i
oqn|iititd||i}|oti|dd|i}ny|ii|WnMt
it
ifj
o5}td|t|f}|ii|qXt|_
qW|ii djot
itd	n|ii!|i"i#|ii$d
ti||iS(screate the groups object that will store the comps metadata
           finds the repos with groups, gets their comps data and merge it
           into the group objectsGetting group metadatasRepository '%s' not yet setuptoverwrite_groupss%Adding group file from repository: %ss
groups.xmltcacheds1Failed to add groups file for repository: %s - %sis%No Groups Available in any repositorysgroup time: %0.3f(%RaRRkRRRRR1RRRGRHtappendtreadyRRtgetGroupLocationtRepoMDErrorRRKR	tCompst	getGroupsRtrepo_gen_decompressRMRtGroupsErrortCompsExceptionRRjtcriticalR/t
compscounttcompileR/R0R(	R?tgroup_sttreposWithGroupsRPtgroupremoteRt	overwritet	groupfileR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyREsT






c	Cs]ti}|iititd|idjoti	i
|_x|iiD]}d|i
ijoqZn|iititd|yD|id}ti|dd|i}|ii|i|WqZtitifj
o5}td|t|f}|ii|qZXqZWn|iidti||iS(	sT create the tags object used to search/report from the pkgtags 
            metadatasGetting pkgtags metadatatpkgtagssAdding tags from repository: %sspkgtags.sqliteRLs.Failed to add Pkg Tags for repository: %s - %sstags time: %0.3fN(RRkRRRRReRRt	pkgtag_dbtPackageTagsRRRStrepoXMLt	fileTypest
retrieveMDRRSRMRRRRtPkgTagsErrorRRjRVR(R?ttag_stRPttag_mdt
tag_sqliteRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_getTagsZs,
	cCs_|idjoH|iid}tiid|iid|d|iid|_n|iS(seauto create the history object that to access/append the transaction
           history information. s/historyR.tdb_pathR=N(	RbRRRRR|t
YumHistoryRR(R?tpdb_path((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_getHistory|stfgetcCs
|iS((R(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt<lambda>stfsetcCst|d|S(RQ(R(R?tvalue((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnstfdelcCs
|iS((R(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnstdocs0Repo Storage object - object of yum repositoriescCs
|iS((R(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCst|d|S(Rc(R(R?Rp((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCs
|iS((R'(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnss3Package sack object - object of yum package objectscCs
|iS((R(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCst|d|S(R](R(R?Rp((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCst|ddS(R]N(RR(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnssYum Config ObjectcCs
|iS((R(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCst|d|S(R_(R(R?Rp((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCst|ddS(R_N(RR(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnssRpmSack objectcCs
|iS((t
_getTsInfo(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCs
|i|S((t
_setTsInfo(R?Rp((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCs
|iS((t
_delTsInfo(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnss"Transaction Set information objectcCs
|iS((t_getActionTs(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCs
|iS((R
(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnssTransactionSet objectcCs
|iS((R((R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCst|d|S(R`(R(R?Rp((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCst|ddS(R`N(RR(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnssUpdates ObjectcCs
|iS((RE(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCs
|i|S((RJ(R?Rp((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCst|ddS(RaN(RR(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnssYum Component/groups objectcCs
|iS((Rl(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCst|d|S(Rb(R(R?Rp((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCst|ddS(RbN(RR(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnssYum History ObjectcCs
|iS((Rh(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCst|d|S(Re(R(R?Rp((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscCst|ddS(ReN(RR(R?((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnssYum Package Tags ObjectcCst}|io_x\|iiD]G}||iijo(d|ii|joq qgt}q t}q Wn|o9td}|ii	t
i||iiddndS(sconvenience function to populate the repos with the filelist metadata
           it also is simply to only emit a log if anything actually gets populatedt	filelistss)Importing additional filelist informationtmdtypeN(
RWR1RRRSRUtaddedR/RRkRRtINFO_2R(R?t	necessaryRPR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdoSackFilelistPopulates

cCs}|iiddodSd	\}}t|do%|iid|iid}}n|td|||fdS(
s^ Output a message that the tool requires the yum-utils package,
            if not installed. Rs	yum-utilsNRttermtboldtnormals5The program %s%s%s is found in the yum-utils package.(RR(R/tcontainsRR}tMODER(R?tfunctprogthibegthiend((s0/usr/lib/python2.6/site-packages/yum/__init__.pytyumUtilsMsgs%cCst|_|o\tid|iioCtd}|ii||i	|iidt
idn|ii
dt
i
}|i\}}|i|iio*|iititd|ind}|djo)|iioti|ii}nd|i_|i||\}}|ii
dd	|d
||iio=|i|dj\}}|i||dt\}}n|iidj	o|ii i!n|dj|_g}|djo3|ii"o&|i#i$o|ii%dt&}nh}xi|D]a}	|i'|	i(oq*n|	i)|jo|	i(g||	i)<q*n||	i)i*|	i(q*Wg}
g}x|D]}t+||djoUxR|ii,|gD]7}
|ii%|
i-t.oqn||i*|
qWn||d
}x|||dD]l}|i/|oq1ntd}|p%tdh|d6}||}n|i*|||fq1WqW|od}t|_|}nt0t1g}g}|djo8|iio+t2|ii}|ii%d|}nh}x|D]}	|dj	o|	i-|jon@|dj	o|	i)|d
joq)n|	i)|joq)n|	i)|jog||	i)<n||	i)i*|	i-q)Wx|ii,|i3D]}|dj	o0|i)|d
jo|||d
joqn|i)|joqn|i-||i)jo||i)=qqWx|i3D]}|dj	o-||d
jo|||d
joqtnxp|ii4d|D]Y}	|	i)|joqn|	i-||i)joqn|	i5t&jo||i)=qqWqtW|oGd}g}x+t6|D]}|i*td|qKWt|_n|djo|i7dt8n|ii9dt
i
|||fS(sgo through the packages in the transaction set, find them in the
           packageSack or rpmdb, and pack up the ts accordinglyt
yumlibpathsvThere are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them.syum-complete-transactionit
preresolves*--> Finding unneeded leftover dependenciesitpostresolvetrescodetrestringit
clear_skippedis%Protected multilib versions: %s != %ss Multilib version problems found. This often means that the root
cause is something else and multilib version checking is just
pointing out that there is a problem. Eg.:

  1. You have an upgrade for %(name)s which is missing some
     dependency that another package requires. Yum is trying to
     solve this by installing an older version of %(name)s of the
     different architecture. If you exclude the bad architecture
     yum will tell you what the root cause is (which package
     requires what). You can try redoing the upgrade with
     --exclude %(name)s.otherarch ... this should give you an error
     message showing the root cause of the problem.

  2. You have multiple architectures of %(name)s installed, but
     yum can only see an upgrade for one of those arcitectures.
     If you don't want/need both architectures anymore then you
     can remove the one with the missing update and everything
     will work.

  3. You have duplicate versions of %(name)s installed already.
     You can use "yum check" to get yum show these errors.

...you can also use --setopt=protected_multilib=false to remove
this checking, however this is almost never the correct thing to
do as something else is very likely to go wrong (often causing
much more problems).

Rs)Trying to remove "%s", which is protectedtautosDepsolve time: %0.3fN(:RWt_depsolving_failedRtfind_unfinished_transactionsRRRRjRVRRtsleepR1RtresolveDepst_limit_installonly_pkgstclean_requirements_on_removeRkRRRzt_remove_old_depsRtprotected_packagestget_running_kernel_pkgtupR/t
readOnlyTSRt
_doSkipBrokenttsInfotchangedRcR1Rtprotected_multilibR<R6tgetMembersWithStatetTS_INSTALL_STATEStallowedMultipleInstallstpoRRMtlentsearchNamesRXtTS_REMOVE_STATEStverEQtTS_OBSOLETEDtTS_ERASERstkeyst
matchNaevrtoutput_stateRtsave_tsR/R(R?tunfinished_transactions_checkRtds_stRRtkern_pkgtupttxmbrstversttxmbrtfinet	xrestringRtpkgtfirsttothertbigmsgtprotect_statest	protectedtbad_togotipkg((s0/usr/lib/python2.6/site-packages/yum/__init__.pytbuildTransactions	


"'
	
!!



cCs|iioq|djod|o
g|_nti}|i||\}}|i|iidti|n||fS(s! do skip broken if it is enabled isSkip-Broken time: %0.3f(Rtskip_brokenRgRt_skipPackagesWithProblemst_printTransactionRkR(R?RRRtsb_st((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs

"c
sfd}fdd}t}t|}d}xtidjo|djor|d7}iid_iid||djoiidPni	i
}ti}	t}
xTiD]I\}}}
ii|i
p||||
q||||
qWxf|
D]^}i|}xF|D]>}|i||jo|idjo|qkqkWqOW|
pC|d7}|d	joPqiid
iidtnitdt\}}ti}|	|tjoC|d7}|d	joPqiid
iidtnd}|djoMiidiidtiii\}}qKqKW|djoiid|iitdg}|D]
}||q"~}|ix@|D]8}tdt||iif}ii|qIWii|niidd|fS||fS(s= Remove the packages with depsolve errors and depsolve again cs-|pdSi||||dS(N(t_getPackagesToRemove(RtdepTreettoRemove(R?t_remove_from_sack(s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_removescsi|}xz|D]r}|idjo[|joNiidt|ii|ii|ii	|qqWdS(NRs.SKIPBROKEN: removing %s from pkgSack & updates(
t_getPackagesToRemoveAllArchtrepoidRkRRR1t
delPackagetupRXR(RtpkgsR(tremoved_from_sackR?(s0/usr/lib/python2.6/site-packages/yum/__init__.pyRsiis1SKIPBROKEN: ########### Round %i ################isSKIPBROKEN: Too many loops RisESKIPBROKEN: resetting already resolved packages (no packages to skip)thardtskipping_brokensISKIPBROKEN: resetting already resolved packages (transaction not changed)s0SKIPBROKEN: sanity check the current transactionsSKIPBROKEN: took %i rounds s1
Packages skipped because of dependency problems:s    %s from %ss$Skip-broken could not solve problemsN(RsRtpo_with_problemsR/ttransactionResetRtinstalledFileRequiresRkRRt
_buildDepTreeRRRXt_skipFromTransactionRRt
resetResolvedR/Rt_checkMissingObsoletedt_checkUpdatedLeftoverstinfoRtsortRRPRRgtextend(R?RRRtcountt
skipped_pot
orig_restringtloopingRtstartTsRRtwpoterrtskippedtskiptendTsRtptskipped_listR((R?RRs0/usr/lib/python2.6/site-packages/yum/__init__.pyRs		#

	

	









!
"
cCsx|iidttgD]}x`|iD]U}|ii|ip9|ii||i	}|i
id||i	fq,q,Wx^|iD]S}|ii|ip7|i
id|i	|f|ii
|i	iqqWqWdS(s 
        If multiple packages is obsoleting the same package
        then the TS_OBSOLETED can get removed from the transaction
        so we must make sure that they, exist and else create them
        s+SKIPBROKEN: Added missing obsoleted %s (%s)s*SKIPBROKEN: Remove extra obsoleted %s (%s)N(RRRt
TS_OBSOLETINGRR3RRXtaddObsoletedRRkRtobsoleted_bytremove(R?RRtobs((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs
%
cCsx|iidtgD]g}x^|iD]S}|ii|ip7|iid|i	|f|ii
|i	iq)q)WqWdS(s 
        If multiple packages is updated the same package
        and this package get removed because of an dep issue
        then make sure that all the TS_UPDATED get removed.
        s(SKIPBROKEN: Remove extra updated %s (%s)N(RRRt
TS_UPDATEDt
updated_byRRXRkRRR(R?RR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs
c
Csg}|iios|i\}}}}}xe|iiD]F}|||||f}|ii|||||}	|i|	q8Wn|i||S(s, get all compatible arch packages in pkgSack(R<R6RXRR1tsearchNevraRRM(
R?RRtntaRtvtrRXtmatched((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR)s


cCsg}|i\}}}}}x|iiD]t}|||||f}|ii|oFxC|ii|D]+}	|	i}
|i|
}|i|qlWq+q+W|S(N(	RXR<RRRt
getMembersRt_removePoFromTransactionR(R?RRRRRRRRXRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR;s
	cCsrg}|ii|ioR|iidt||ii|i|idjp|i|qnn|S(Ns(SKIPBROKEN: removing %s from transactionR(	RRRXRkRRRRRM(R?RR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRHscCsNh}xA|iD]6}x-|iD]"}|i|gi|iq WqW|S(s& create a dictionary with po and deps (Rt
depends_ont
setdefaultRMR(R?RRtdep((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRQs

$cCs@x9|iD]+\}}|GHx|D]}dG|GHq%Wq
WdS(Ns	(t	iteritems(R?ttreeRtlR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
_printDepTreeZs
cCshdt6dt6dt6dt6dt6dt6dt6dt6}|ii	t
id	t|i
xt|i
D]}d
||i|if}|ii	t
i|xItt|iD]2\}}d||f}|ii	t
i|qWqqW|ii	t
idd
ddS(NRtinstallttrueinstallteraset	obsoletedt
obsoletingt	availabletupdateds/SKIPBROKEN: Current Transaction : %i member(s) sSKIPBROKEN:  %-11s : %s s%SKIPBROKEN:                   %s : %ss
SKIPBROKEN:%si<t=(t	TS_UPDATEt
TS_INSTALLtTS_TRUEINSTALLRRRtTS_AVAILABLERRkRRtDEBUG_2RRRRRRst	relatedto(R?tstateRRRtrel((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR`s$

#cCs|i|x|ii|iD]{}x8|i|iD]&}|i||i|||q:Wx7|iD],\}}|i||i|||qnWq#W|i|||dS(s2
        get the (related) pos to remove.
        N(RRRRXR-R3t_getDepsToRemoveR(R?RtdeptreeRRRtrelativetrelation((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRts



cCsx|i|gD]n}xE|ii|iD].}x%|i|iD]}|i|qFWq/W|i||i|||qWdS(N(RRRRXR-R3RR	(R?RR
RRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR	s
csNdjo|iin|djoddg}n|djo"tdfd}n|otdnt|tgttfjot|}nt|g}td|D}d}g}|itdohtd	d
6tdd6}	x|iiD]}
|
i	i
|joq3n|
idjoGt}x,|
i
D]!}|i
|jot}PqsqsW|oq3qn|i|
q3Wn|itdott|ii}
x_|ii|
D]G}
|
i	i
|joqn|
ii
|joqn|i|
qWn|itdo_x\|iiD]G}
|
i	i
|joqon|
ii
|joqon|i|
qoWn|itdoExB|iiD]-}
|
i	i
|joqn|i|
qWn|t|xt|D]}
|
q6W|S(Ntdependenciest
duplicatessF** Found %d pre-existing rpmdb problem(s), 'yum check' output follows:cs|p|S(((tproblems(Rtout(s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnss&Warning: RPMDB altered outside of yum.cssx|]}|iVqWdS(N(RX(t.0R((s0/usr/lib/python2.6/site-packages/yum/__init__.pys	<genexpr>s	itallsmissing requirestrequiressinstalled conflictt	conflictsRtprovides(sallR
(sallR(salls	obsoleted(sallsprovides(RRjRRttypeRstintersectionR/tcheck_dependenciesRRXtproblemR/RRWRMRtinstallonlypkgstcheck_duplicatest	duplicatetcheck_obsoletedt	obsoletertcheck_providesRR(R?RRtchkcmdtheadertignore_pkgstignore_pkgtupstrctprobstprob2uitprobtfoundtrestiopkgs((RRs0/usr/lib/python2.6/site-packages/yum/__init__.pyt_rpmdb_warn_checks_excsx


(
	
c	Cs\y|i|||||SWn8tij
o)}|iitdt|gSXdS(Ns Yum checks failed: %s(R+RtYumBaseErrorRkRRR'(R?RRR R!R"R((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_rpmdb_warn_checkss
cCstidd|iidx6|iiD]%}|io|iidPq0q0W|i	i
p|iiti
o|ii}nt|i}|iid|}|iidtd}|ii}|dj	o
|i}ng}|djp
||joa|iidt}	g}
|	D]}|
|iq6~
}|dj	}
|id|
d	|}nd}t|d
o |iodi|i}n1t|do |i odi|i }n|ii}|ii!||t|i|i"|||i#t|d
o|i$n|iid|ii%||i&dj	oat'|i&di(}|ii)d|yt*i+|i&Wqt,t-fj
o	}qXnd|_&|i	i.o@t*i/d}|o&yt*i/|Wq"d}q"Xq&n|ii|i0d}|i	i.oyt*i/|WqjqjXnt1i2}d|_3|djont4|djo)t5d}|i6i7|d|_3n|i	i
oq|iiti
oZg}|D]}|t8t9|q~}|iid|ii:|dd|n|i;i<t5dx"|D]}|i;i<|dqgWt=i>dt5dd||i	i?o%|iiti
o|i@nxzd D]r}t||o\tA||}yt1iB|WqOt,t-fj
o#}|i;i<t5d|qOXqqW|iiti
p
|i3o|iiCn|iiDt|i|iid|iiti
p7d}t|do
|iE}n|iF||n|S(!s6takes an rpm callback object, performs the transactiont#_accept_script_stop_start_callbackst1tpretranssyum-metadata-parsertpatternst	main_onlyiRR"targst tcmdst_shell_history_writethistorybeginRtsaved_txRsIWarning: scriptlet or other non-fatal errors occurred during transaction.it
historyenditerrorssTransaction couldn't start:RsCould not run transaction.t	ts_all_fnt
ts_done_fns$Failed to remove transaction file %st	posttranstverify_txmbrN(R;R<(GRtaddMacroR1RRRRSt_xml2sqlite_localRtRRthistory_recordRtisTsFlagSettRPMTRANS_FLAG_TESTRtfutureRpmDBVersiontlistR/treturnPackagest
simpleVersionR/R|tlastRtend_rpmdbversionRRRR-RR3tjoinR5tbegRgt_store_config_in_historyR6ttransactionResultVersionRftopentreadtwrite_addon_dataRtunlinktIOErrortOSErrort
reset_nicetniceRFRt
GenericHoldertreturn_codeRRRkRR%R&tendRjRVRtYumRPMTransErrort	keepcachetcleanUsedHeadersPackagesRtunlink_fRtdropCachedDataPostTransactionR>tverifyTransaction(R?RzRPtfrpmdbvtusing_pkgs_patst
using_pkgstrpmdbvtlastdbvtrpmdb_problemsRRRR"toutput_warntcmdlinet
savetx_msgRtoniceR:tresultobjectt	errstringt_[2]txtherrorsRR-tvTcb((s0/usr/lib/python2.6/site-packages/yum/__init__.pytrunTransactions
	

$

		

	

$-	'

c	sfd}ti}|iidd}x|iD]}|itjor|iid|ip<|i	i
td|it|_|||}q;n|||}|i
|i}|i}|i|i_|i|i_|iid|i_t|do&|iodi|i|i_n7t|d	o&|iodi|i|i_n|i}	|	dj	o0t|	d|i_t|	d
|i_nt |t!oiy[t"i#|i$}
tt%|
i&}tt%|
i'}||i_(||i_)Wq2q2Xn|i*dj	o|i*|i_+nt|i,do`|i,i-}
|
o)|
i.dj	ot|
i.|i_(n|
ot|
i/|i_)qnt0i1}|i2p|i3p
|i4o|i2o|i2d}n"|i3o|i3d}n|}d|ijo|ii5|i_5n|dj	ot||i_6qn$|dj	ot||i_5n|ii7o|i8i9|qq;q;Wx|iD]}|itjoq|it:jo|iid|io_|ii;d
|idtp<|i	i
td|it|_|||}qqsn|||}|ii<i=d|i}|i>q|||}|i?i@tAiBd|iqW|iid|iiCdtDd}|ii7o^|iEiFtGiHoGd}|dj	o
|iI}n|iid|i8iJ||n|iiK|i?iLdti|dS(snchecks that the transaction did what we expected it to do. Also 
           propagates our external yumdb infocs,dj	o|d7}||n|S(Ni(R(RR(ttxmbr_cb(s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_call_txmbr_cbps

tpreverifytransiRs+%s was supposed to be installed but is not!R=R3R4R5iRatinstalled_byRXt
output_statess)%s was supposed to be removed but is not!sWhat is this? %stpostverifytransR2iR9sVerifyTransaction time: %0.3fN(MRR1RRRRR/RRRjRVRt	TS_FAILEDtgetInstalledPackageObjectRXRt
yumdb_infot	from_repotreasonRRR=RR3RJtcommand_lineR5treturnIdSumRRt
checksum_typet
checksum_dataRRRRtlocalPkgRtst_ctimetst_mtimetfrom_repo_revisiontfrom_repo_timestamptxattr_origin_urlt
origin_urlRPRatrevisiont	timestampRtgetloginuidR-t
downgradest	reinstallRst
changed_byRAR|t
sync_alldbRRtyumdbtget_packagetcleanRkRRRRGR/RRBRRCRWRXRR(R?RiRpRqtvt_stRRRtrpotcsumtsttlp_ctimetlp_mtimetmdtloginuidtopot
yumdb_itemRbtret((Rps0/usr/lib/python2.6/site-packages/yum/__init__.pyR^as
		







	!$


c		Csh}x3|iiD]"}|i|igi|qWt|djodSt}d}g}xyt|D]k}|oGxD||D]4}t||i}|i	i
|i|d|qWn|i||t
}qsWdS(s Create an excluder for repos. with higher cost. Eg.
            repo-A:cost=1 repo-B:cost=2 ... here we setup an excluder on repo-B
            that looks for pkgs in repo-B.iNsyum.costexcludessexclude.pkgtup.in(RRRSRRTRMRRWRRNRUtaddPackageExcluderRRR/(	R?tcostsRtdonetexidtoreposRTRPtyce((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR"s& 
cCsd|iijodS|p4d|iijodS|ii}d}d}n;|i|iijodS|i}|i}d|}d}xA|D]9}|d7}d||f}|ii||d	|qWdS(
sremoves packages from packageSacks based on global exclude lists,
           command line excludes and per-repository excludes, takes optional 
           repo object to use.RNRsyum.excludepkgssyum.excludepkgs.iis%s.%us
exclude.match(Rtdisable_excludesRRRtgetExcludePkgListR1R(R?RPtexcludelistRtexid_begRtmatchR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs&
	

cCs|i}t|djodSd}|ii|i|dd}xD|D]<}|d7}dd|f}|ii|i|d|qPWd	}|ii|i|d
dS(szremoves packages from packageSacks based on list of packages, to include.
           takes repoid as a mandatory argument.iNsyum.includepkgs.1smark.washedis%s.%usyum.includepkgs.2s
wash.matchsyum.includepkgs.3sexclude.marked(tgetIncludePkgListRR1RR(R?RPtincludelistRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR s
 c
Cs|iidjo4|iiodS|ii}tii|}n
|ii}|d|}tii|}t	ti
}xl|i||dpUyt|d}WnFt
tfj
o4}td||f}titi|nXyt|i}Wn tj
o|i|qX|ti
joPnyti|dWnbtj
oV}|dtijo|i|qtd|}titi||qXtd||f}tid||qW||_dS(	sAperform the yum locking, raise yum-based exceptions, not OSErrorsiNR,iRsCould not open lock %s: %ss#Unable to check if PID %s is actives4Existing lock %s: another copy is running as pid %s.(RRRMRLRRtbasenameRRRtgetpidt_lockRNRRRSRRt	LockErrorterrnotEPERMRtreadlineRt_unlocktkilltESRCHRd(R?tlockfileR.tmypidtfdRRtoldpid((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdoLock*s@
cCst|dodS|iidjo
d}n|dj	o|ii}|d|}n|idjodS|i}|i|d|_dS(sdo the unlock for yumRqNiR,(RRRRRRdR(R?RR.((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRyYs

	
RicCstii|}yTtii|pti|ddnti|titiBtiB|}Wngt	j
o[}|i
t
ijp>td|t
|f}ti|i
|t|ndSXti||ti|dSdS(Ntmodeis Could not create lock at %s: %s ii(RRtdirnameRtmakedirsRNtO_EXCLtO_CREATtO_WRONLYRSRtEEXISTRRRRRtwriteRw(R?tfilenametcontentsRtlockdirRRterrmsg((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRts*"
cCsti|dS(N(RR\(R?R((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRsc	Cs@t}t|tijo
|i}n||ijo
||_n|ip
t}n6t	|i
i|}|i|ijo
t}n|ot
i|d}t|i}||jo9|iio+|i|iiot
i|qn|o)td|ii}td|q<tSntS(sverifies the package is what we expect it to be
           raiseError  = defaults to 0 - if 1 then will raise
           a URLGrabError if the file does not check out.
           otherwise it returns false for a failure, true for successis\Package does not match intended download. Suggestion: run yum --enablerepo=%s clean metadatai(RWRttypestInstanceTypeRRt	localpathtverifyLocalPkgR/RR/RRXRRtlongtsizeRPRMt
startswithRLRQRRR(	R?tfoRt
raiseErrortfailedtylptcursizettotsizeR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt	verifyPkgs*




cCspyti||}Wn-tij
o}tdtdnX||jotdtdndS(sHVerify the checksum of the file versus the 
           provided checksumisCould not perform checksumisPackage does not match checksumi(RtchecksumRt	MiscErrorRR(R?RtchecksumTypeRtfilesumR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytverifyChecksums
csd}hfd}|ii|iidd|t|idt}t}g}d}	xk|D]c}
t|
do|
idjoqon|
i	}t
ii|or|i
||
tp8|
iio't}||
td	|
iiq)q-|iitd
|
fqon|od|
i}|
idt
i7_yt
i||
iWntj
onX|
i|
in|i|
|	|
i7}	|iip|ooSqoW|o%|ii|i|in|i |tt!i"do't#|d
jot!i"i$|	nt%i%}
d}d}t&}x|D]}
|
i	}|d
7}t
ii|o|i
||
to[|iitd
|
f|	|
i8}	tt!i"dot!i"i$|	|qqqqnt
ii'||
ijot
i(|qBn|i
|
d
fhf}t
i)|
ii*}|i+|i,t-|
ijoF||
td|
ii*t.|i+|i,t.|
ifqqny5|d
jo1|o)|	|
ijot
ii/|
i0}n)d|t#|t
ii/|
i0f}|
ii1|
d|d|d|
ii2dj}||
i7}tt!i"dot!i"i$|	|ntoM|
i3|jo=|i4|
\}}|djo|ii5d|qn|i6|
i3Wn+t7i8j
o}||
t9|qqX||
_|
jo|
=qqqqWtt!i"dot!i"i$dn|dj	oo|||	|
n|o|x|D]m}
|
ii;ddd}|
jot<i=|
in|
jot
i|
i|n||
_qWn|iidd|dtt!i>dot!i>i?n|o2o*|ii@tdtAiB|iCnS(NcSs|i}|i}|djo|djot||S|djodS|djodS||jodS||jodSdS(Niii(t
getDiscNumRtcmp(tapotbpoRtb((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt	mediasorts



csi|gi|dS(N(RRM(RR(R:(s0/usr/lib/python2.6/site-packages/yum/__init__.pytadderrorstpredownloadtpkglisttdownloadonlyitpkgtypetlocals4package fails checksum but caching is enabled for %ssusing local copy of %ss.%d.tmpttext_meter_total_sizeisKInsufficient space in download directory %s
    * free   %s
    * needed %ss(%s/%s): %st	checkfuncttextRMtnones%sR*itpostdownloadR:treset_curl_objs(exiting because --downloadonly specified(DR|RwR1RRRRWRRRRRRRRPRMR/RRRkRRRtrenameRSR|tbasepathRMRRRRxRyRt
urlgrabbertprogressRRRRstgetsizeRQtstatvfstpkgdirtf_bavailtf_bsizeRRRtrelativepatht
getPackagethttp_cachingRtsigCheckPkgRRRRR'RtrsplitRR\tgrabberRRtsystexitRv(R?RRFtcallback_totalRRRtrepo_cachedtremote_pkgstremote_sizeRRtrpmfiletbeg_downloadRt
local_sizet
done_reposRtdirstatRtmylocaltresultRR((R:s0/usr/lib/python2.6/site-packages/yum/__init__.pytdownloadPkgss	
 
	


	


	

 	%

	


cCst|tijo
|i}nyti|}|d}Wn@titfj
o+|otdt	dqdSnXt
|}|i|ijo"|otddqdSndS(s/check the header out via it's naevr, internallyiisHeader is not complete.s'Header does not match intended downloadi(RRRRRtreadHeaderListFromFileRt
IndexErrorRRR RX(R?RRRthlistthdrtyip((s0/usr/lib/python2.6/site-packages/yum/__init__.pytverifyHeaderqs
	c

Cst|do|idjodSh}|i}|ii|i}tii|oRy|i	||dd}Wn"t
j
o}ti|qX||_
dSn+|iiotitd|i
n|io|ii|inyjtii|ipti|in|i	|dfhf}|i|d|d|id	j}Wn_tij
oP}|}	yti|Wn!tj
o}ti|	qXti|	nX||_
dSdS(
swdownload a header from a package object.
           output based on callback, raise yum.Errors.YumBaseError on problemsRRNRisKHeader not in local cache and caching-only mode enabled. Cannot download %sRRMR(RRtlocalHdrRRtgetRepoRRRRR
RRR\thdrpathRRMRRRt
dsCallbacktdownloadHeaderRthdrdirRt	getHeaderRRS(
R?RR:RRPRRRR
tsaved_repo_error((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs@ 	

	c
Cs|iot}d}n`t|do&|idjo|ii}d}n*|ii|i}|i	}|i
}|o'|ii}t
ii||i}tii|i}|djod}d}	q|djo+|o
d}nd}td|}	q|djod}td|}	q|d	jo1|o
d}nd}d}td
|}	q|djod}td|}	qn
d}d}	||	fS(
s
        Take a package object and attempt to verify GPG signature if required

        Returns (result, error_string) where result is:
            - 0 - GPG signature verifies ok or verification is not required.
            - 1 - GPG verification failed but installation of the right GPG key
                  might help.
            - 2 - Fatal GPG verification error, give up.
        iRRRiis"Public key for %s is not installedsProblem opening package %sis Public key for %s is not trustedisPackage %s is not signed(RlRWRRRtlocalpkg_gpgcheckRRRRtgpgchecktgpgkeyR/RR,t	miscutilstcheckSigRRRRR(
R?Rtcheckt	hasgpgkeyRPRt	sigresulttlocalfnRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRsH


 
	







c
Csg}x|iD]}|iitjoqn|iidjoqn|ii|iijoqn|ii|ii}t}x,|iD]!}|idot	}PqqW|o|i
|iigq|ii|i
|ii
|iigqWx|D]}tii|pqnyti|Wn1tj
o%}|iitd|qqX|iititd|qWdS(NRsfile:sCannot remove %ss
%s removed(RRRRRRRRWtbaseurlRR/RRRRRRRRR\RSRjRRRkRRR(R?tfilelistRRPRtuR-R((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR[s>

	
)cCsdg}|i|ddS(NRRR!(t_cleanFiles(R?texts((s0/usr/lib/python2.6/site-packages/yum/__init__.pytcleanHeaders	s	cCsdg}|i|ddS(NRRtpackage(R(R?R ((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
cleanPackages	s	cCs"dddg}|i|ddS(Ntsqlites
sqlite.bz2ssqlite-journalRL(R(R?R ((s0/usr/lib/python2.6/site-packages/yum/__init__.pytcleanSqlite	scCs(dddddg}|i|ddS(Nsxml.gztxmltcachecookiesmirrorlist.txttascRLtmetadata(R(R?R ((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
cleanMetadata#	scCsddg}|i|ddS(NR'smirrorlist.txtRLR)(R(R?R ((s0/usr/lib/python2.6/site-packages/yum/__init__.pytcleanExpireCache(	scCsR|iid}tii|p
g}nti|dg}|id|S(Ns/rpmdb-indexes/RR/(RRRRRRtgetFileListt_cleanFilelist(R?RLR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
cleanRpmDB,	s

cCsg}xv|D]n}xe|iiD]T}t||}tii|o,tii|oti|||}q#q#Wq
W|i	||S(N(
RRRSRRRRRRR,R-(R?R tpathattrtfiletypeRtextRPR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR4	s&!c	Csd}x|D]z}yti|Wn4tj
o(}|iitd||q
q
X|iiti	td|||d7}q
Wtd||f}d|gfS(NisCannot remove %s file %ss%s file %s removedis%d %s files removed(
RR\RSRjRVRRkRRR(R?R0RtremovedtitemRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR-=	sRc*Cs|djo|ii}ntid|}g}g}g}g}	g}
g}g}g}
g}|}|djoh}h}x|iid|d|D]b}|||i<|oqn|i|i	f}||jp|i
||o|||<qqW|i}|o|iid|d|}n?y|ii
d|d|}Wntij
o
g}nXx|D]}|o2|i|jo|i|q.|i|q}|i|i	f}|i|jo|i|q}||jp|i
||o|i|q}|	i|q}Wn|djo,x|iiD]\}}}}}|iid|d|d|d	|d
|}t|djo8|
i|d|iititd
|dqSt|djo|
i|dqS|iititd|||||qSW|o-t|
|d|\}}}||}
q@n|djo|iid|d|}n|djoN|o|iid|d|}n?y|ii
d|d|}Wntij
o
g}nXx1|D]}|o8|iid|o|i|q|i|q|ii|id|i	}|ot|dtd} n|p|i
| o|i|q|i| o|i|q|	i|qWnK|djor|iid|d|}t |}x|iid|d|D]'}|i|jo|i|qFqFWn|djod|i_!x|ii"D]\}!}"|!\}}}}}|iid|d|d	|d
|d|}#|i#|"}$t|#djo'|iititd
|#dnt|#djo,|i|#d|i|#d|$fqqW|ot||d|\}}}||}t |}%g}&x;|D]3\}}$||%joqn|&i||$fqW|&}n|pft$|}t |}'g}&x;|D]3\}}$||'joq.n|&i||$fq.W|&}q@n|djot%i%}(|(|ii&d})|o|iid|d|}n?y|ii
d|d|}Wntij
o
g}nXx9|D]-}t'|i(|)jo|
i|qqWn||_)||_*||_+|	|_,|
|_-||_!||_.|
|_&||_/|S(sBgenerates lists of packages, un-reduced, based on pkgnarrow optiontiterRR1tignore_caseR-RR<tepochtverRiis,More than one identical match in sack for %ss*Nothing matches %s.%s %s:%s-%s from updatet	casematchRRRtreversetextrasR3trecentiQN(0RRtshowdupesfromreposRRVR/RFRXRR<tverGTR&R1treturnNewestByNameArchRtPackageSackErrorRMRtgetUpdatesListRRRkRRtDEBUG_1RRRRR/RR0RsR3tgetObsoletesTuplesRwRRR;RtfiletimeRRtreinstall_availablet
old_availableR-tobsoletesTuplesR:(*R?t	pkgnarrowR1tshowdupsR5tyghRRRDRER-R3RFR;R:tictdinsttndinstRtkeytavailRRRRRRtmatchest
exactmatchRt	unmatchedtipkgstlatestRXtinstTupRtinstpotmatched_obsoletestnobsoletesTuplestfilttnowtrecentlimit((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdoPackageListsL	s<


!

!
	 





	
-	






									cCsh}x|D]}h||<|i}|i||}xq|D]i}|\}}}	|idoqAng}
x*|i|||	D]}|
i|qW|
||<qAWq
W|S(s
        Return the dependencies for a given package object list, as well
        possible solutions for those dependencies.
           
        Returns the deps as a dict of dicts::
            packageobject = [reqs] = [list of satisfying pkgs]
        srpmlib((RRRtwhatProvidesRM(R?RtresultsRtreqst
pkgresultstreqRtfRt
satisfiersR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytfindDeps
s$	
	

c"#s g}x'D]}|iti||q
Wh}	g}
g}ghd}hxX|D]P}
|i|
i|
i|
|
i<i|
||d8}qaWx3|iiiD]}|
i|i	||qWfd}||
|	|o9|i
i	dt}
|i||
|	~
nh}|o|i
}
x|
D]}d}g}g}xx|
|D]l\}}|t|7}|i||i|||jog||<n||i||fqWqpW~
n|	iogxd|	iD]R}xI|D]A\}}}||jog||<n||i||fq5Wq(Wnh}	x|D]}g}g}x2||D]&\}}|i||i|qWti|}ti|}t|}||	jog|	|<n|	|i|||fqWtid}|ofd}nh}xtt|	D]}xt|	|d|D]|\}} }!|o |i|if|joqn|o|| |!fVn||!fV|pd||i|if<qqWq{WdS(sGenerator method to lighten memory load for some searches.
           This is the preferred search function to use. Setting keys to True
           will use the search keys that matched in the sorting, and return
           the search keys in the results. iic	sx|D]\}}t}g}||jog||<nxyD]q}xhD]`}tt||}|o>|ii|djo"|i||i|qQqQWqDWt|djo||i|||fqqWdS(Nii(RsR%RtlowerRRMRR(	ttmprestsorted_listsRRttmpkeyst	tmpvalueststfieldRp(trcl2ctfieldstreal_crit_lower(s0/usr/lib/python2.6/site-packages/yum/__init__.pytresults2sorted_listsN
s 	
#
tloweredcsMtfd|dDdit|dt|d|dfS(c3sx|]}|VqWdS(N((Rty(tcritweights(s0/usr/lib/python2.6/site-packages/yum/__init__.pys	<genexpr>
s	itii(tsumRJRR(Rl(Rq(s0/usr/lib/python2.6/site-packages/yum/__init__.pyRn
sRMN(RMt
RPM_TO_SQLITERRdRR1tsacksR&Rt"searchPrimaryFieldsMultipleStringsR/R/RxtsearchPackageTagsRRtuniquetoperatort
itemgettertreversedRRR<("R?RltcriteriaRHRt
searchtagstsearchrpmdbt
sql_fieldsRaRfRet	real_critt
critweightRiRURntresults_by_pkgRRt	matchkeyst
tagresultsRttaglistR3tkRttotkeysttotvalst	sort_functyieldedRIRtkstvs((RmRqRlRks0/usr/lib/python2.6/site-packages/yum/__init__.pytsearchGenerator/
s

	






#

!c	Csh}x|D]}|i}|ii|}xy|iD]k\}}|iid|}|pq>n|d}||jog||<n||i||fq>Wq
W|S(NRi(RdR^tsearch_tagsRR1RRM(	R?R|R]tcR)RRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRw
s


cCstitdtiddh}|i||}xX|D]P\}}|o|||n||jog||<n||i|q>W|S(sSearch specified fields for matches to criteria
           optional callback specified to print out results
           as you go. Callback is a simple function of:
           callback(po, matched values list). It will 
           just return a dict of dict[po]=matched values listsosearchPackages() will go away in a future version of Yum.                      Use searchGenerator() instead. 
Ri(RRRRRRR(R?RlR|RFROt	match_genRtmatched_strings((s0/usr/lib/python2.6/site-packages/yum/__init__.pytsearchPackages
s	
cCsd}h}xo|D]g}t|}||\}}|pt}	|i|}
nt}	|ii|t}
|iiti	t
dt|
x|
D]}|iitit
d|g}|	o|i
|n|o|o|i
|n|om|of|iitit
dxG|i|i|iD]*}
ti|
|o|i
|
qFqFWn|iitit
dx|iD]{\}}\}}}ti|||||ff}|	p;ti||pti||o|i
|qqqWt|djoI|o4|o|o||||qk|||n|||<qqWqWddd	g}d	g}x|D]}||\}}|p|i|}
t}	x|
D]}g}t
d
t|}|i
|t|djoA|o,|o||||qP|||n|||<qqWqt}	|i}
|o
|}n|}titi|}x|
D]}g}g}xe|D]]}t||}|djoqnt|tijo|i|q|i
|qWx/|D]'}|i |o|i
|q,q,Wt|djo&|o|||n|||<qqWqW|S(NcSsHti|pt}|id}nt}ti|}||fS(NR,(RRRWRR/tre_filename(Rtisglobt	canBeFile((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt	_arg_data
ssSearching %d packagesssearching package %sssearching in file entriesssearching in provides entriesiRtdirnamestprovides_namessProvides-match: %s(!R%R/treturnPackagesByDepRWR1t	searchAllRkRRRARRRRMtdirlistRt	ghostlistRRRtprco_tuple_to_stringtreturnInstalledPackagesByDepR/treRXt	translateRRRRtListTypeRR(R?R3RFtcallback_has_matchforRRORRRt
usedDepStringtwhereRRhtthisfiletp_nametp_flagtp_etp_vtp_rtprovRttaglist_provonlyRtarg_taglistt	arg_regext
searchlistttagttagdataR3((s0/usr/lib/python2.6/site-packages/yum/__init__.pytsearchPackageProvides
s	



!&	
	

cCsg}g}|iidjotitdn|djo|ii}n#|iidi|d|}x|D]z}|i	o7|o|i
o|i|qq|i|q{|o|i
o|i|qq{|i|q{Wt|t|fS(sreturns two lists of groups, installed groups and available groups
           optional 'uservisible' bool to tell it whether or not to return
           only groups marked as uservisibleis3No group data available for configured repositoriest,tcase_sensitiveN(
R	RWRRTRRtgroupst
return_groupsRJRtuser_visibleRMR(R?tuservisibleR1R5RRtgrpstgrp((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdoGroupListsIs(




c	Csg}|ii|}|ptitd|nx}|D]u}t|_|i}xZ|iD]O}|id|dt}|i	|x!|D]}|i
i|iqWqbWq@W|S(s1mark all the packages in this group to be removedsNo Group named %s existsRtsilence_warnings(
R	RRRTRR/ttoremovetpackagesRRRRMtgroupid(	R?tgrpidttxmbrs_usedtthesegroupst	thisgroupRRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytgroupRemoveks 		

cCs.|ii|}|ptitd|nx|D]}t|_|i}x|iD]}x|iD]}|i	i
|jo|i	itjoy|i
i|Wn;tj
o/|iititd|i	|qlnXt|i
djo|ii|i	iqqlqlWq\Wq:WdS(s3unmark any packages in the group from being removedsNo Group named %s existss%package %s was not marked in group %siN(R	RRRTRRWRRRRRRRRRRRkRRRARRX(R?RRRRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
groupUnremoves*		

&c
Cs7|ii|ptitd|ng}|ii|}|ptitd|n|ii}|o
|}nx|D]}|ioqnt	|_g}d|jo|i
|ind|jo|i
|ind|jo|i
|i
nt|}	x|D]}
|iititd|
|iy|id|
}Wn1tij
o"}|iitd|
q&X|i
|x!|D]}
|
ii|iqWq&W|ii}|d
j	o
|}nd}|ox|iiD]\}}|i|oy|id|}Wntij
o
qn)X||iijog|ii|<n|i
|x;|D]3}
|
ii|i|ii|i|
i qWqn|i!i"d|}|o|i#i$or|ii%d	jo[g}|i#i&}|id
x/|D]'}
|
i#|jo|i|
q9q9W|}qrnt'|}|t|7}||iijog|ii|<n|ii|i
|qqWnt||	joD|i(i)td|i|o|i(i)td|q/qqW|S(s\mark all the packages in the group to be installed
           returns a list of transaction members it added to the transaction 
           set
           Optionally take:
           group_package_types=List - overrides self.conf.group_package_types
           enable_group_conditionals=Bool - overrides self.conf.enable_group_conditionals
        sNo Group named %s existst	mandatorytdefaulttoptionalsAdding package %s from group %sRs-No package named %s available to be installeditbesttnoarchs-Warning: Group %s does not have any packages.sDGroup %s does have %u conditional packages, which may get installed.N(*R	t	has_groupRRTRRRtgroup_package_typestselectedR/Rtmandatory_packagestdefault_packagestoptional_packagesRRkRRRRRtInstallErrorRRRMtenable_group_conditionalsRtconditional_packagesRtisPackageInstalledRtconditionalsRR1RR<R6tmultilib_policytlegit_multi_archesRRjRV(R?RRRRRt
package_typesRRt
old_txmbrsRRRRtgroup_conditionalstcount_cond_testtcondreqtcondtuseR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytselectGroups	

	








#%c		Cs|ii|ptitd|n|ii|}|ptitd|nx8|D]0}t|_x|iD]}|i	i
dt}x|D]}|i
i|joqn|pVy|ii|Wqtj
o/|iititd|i
|qqXn|pt|idjoS|i	i|i
ix:|i	ii|igD]}|i	i|iqnWqqWqWqgWdS(s Without the force option set, this removes packages from being
            installed that were added as part of installing one of the
            group(s). If the force option is set, then all installing packages
            in the group(s) are force removed from the transaction. sNo Group named %s existss%package %s was not marked in group %siN(R	RRRTRRRWRRRRRRRRRRRRkRRRARRXRR(	R?RtforceRRRRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
deselectGroups8	
cCsx&|iD]}|i|jo|Sq
W|ii|}t|djo,|odStitdt	|nt|djo|d}n|d}|S(sretrieves a packageObject from a pkgtuple - if we need
           to pick and choose which one is best we better call out
           to some method from here to pick the best pkgobj if there are
           more than one response - right now it's more rudimentary.is2Package tuple %s could not be found in packagesackiN(
RoRXR1tsearchPkgTupleRRRtDepErrorRR(R?RXt
allow_missingRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytgetPackageObject"s
	 
cCsS|ii|}t|djo titdt|n|d}|S(s Returns a YumInstalledPackage object for the pkgtup specified, or
            raises an exception. You should use this instead of
            searchPkgTuple() if you are assuming there is a value. is,Package tuple %s could not be found in rpmdb(R/RRRt
RpmDBErrorRR(R?RXRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRw?s
 
cCs|iid}tii|odStiid|ii}|i	t
it
iB|i
dd}|i}~~|djodStii|}tii|pti|nt|d}|i~dSdS(	sbchecks for the presence of gpg keys in the rpmdb
           returns 0 if no keys returns 1 if keyss/.gpgkeyschecked.yumiR.Rs
gpg-pubkeyitwN(RRLRRRR,ttransactiontinitReadOnlyTransactionRtpushVSFlagsRt_RPMVSF_NOSIGNATURESt_RPMVSF_NODIGESTStdbMatchRRRRNRw(R?tgpgkeyscheckedtmytstidxRtmydirR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytgpgKeyCheckLs$

cCs|pgSt|tijo|\}}}n|}d}d}|ddjom|i}t|djoJ|\}}}|tjo tit	dt
|nt|}qn|djo|ii|S|ii
|||iS(s~Pass in a generic [build]require string and this function will 
           pass back the packages it finds providing that dep.iR,isInvalid version flag from: %sN(RRt	TupleTypeRtsplitRtSYMBOLFLAGSRR,RRR1tsearchProvidestgetProvidesR(R?t	depstringtdepnametdepflagstdepvert	dep_splitt
flagsymbol((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRgs"
 
cCs|}t|tijot|}ny|i|}Wn,tij
otitd|nXt|}|i	|i
d|}|djotitd|n|S(sPass in a generic [build]require string and this function will 
           pass back the best(or first) package it finds providing that dep.sNo Package found for %sR`N(RRtStringTypesRRRR,RRt_bestPackageFromListR>R(R?RRjRtpsR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytreturnPackageByDeps	
cCs|pgSt|tijo|\}}}n|}d}d}|ddjom|i}t|djoJ|\}}}|tjo tit	dt
|nt|}qn|djo|ii|S|ii
|||iS(sPass in a generic [build]require string and this function will 
           pass back the installed packages it finds providing that dep.iR,isInvalid version flag from: %sN(RRRRRRRRR,RRR/RRR(R?RRRRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs"
 
cCs[t|djodSt|djo	|dS|i|ddd|}|ddS(stake list of package objects and return the best package object.
           If the list is empty, return None. 
           
           Note: this is not aware of multilib so make sure you're only
           passing it packages of a single arch group.

           :param pkglist: the list of packages to return the best
             packages from
           :param req: the requirement from the user
           :return: a list of the best packages from *pkglist*
        iitreqpoR`N(RRt_compare_providers(R?RR`tbestlist((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs	cCs2g}|ii|}g}g}g}	xw|D]o}
|
i|joq1q1|
idjo|	i|
q1td|
io|i|
q1|i|
q1W|i|d|}|i|d|}|i|	d|}
|o+|o$|o|i|ijo
d}n|
djo4|o|i|n|o|i|q.n|op|i||
gd|}|idjo|i|
q.|o|i|n|o|i|q.nb|oM|i||
gd|}|idjo|i|
q.|i|n|i|
|S(sTakes a list of packages, returns the best packages.
           This function is multilib aware so that it will not compare
           multilib to singlelib packagesRR<R`N(R<t
get_arch_listRMRRRR(R?RR<tsingle_nameR`t
returnlisttcompatArchListtmultiLibt	singleLibRRtmultitsingletnoR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytbestPackagesFromListsN(


csid
j	oiiig}niipd
Stdpdti}t	i
igg}ii
dt|_iidti||_niiig}i|jo|i}g}x6|D].}ti|dp|i|qqW|o
|}nt|djoH|d}g}	|D]&}
|d|
djo|	|
q_q_~	}nt|djoYd}|i||d}g}|D]!}
|||
p||
qq~}nt|djo/dfd}
|i|
nx5|D]-}
i|
d	t}|d
j	o|SqGWd
Sd
S(s Given a package return the package it's obsoleted by and so
            we should install instead. Or None if there isn't one. R*R+sObs Init time: %0.3fiicSsI|\}}}}}|\}}}	}
}t|||f|	|
|fS(N(R(RlRptn1ta1te1tv1tr1tn2ta2te2tv2tr2((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt	_sort_ver<
scSs>t||}|pdSt||}|pdS||S(Ni(R
(tcarchRRtres1tres2((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_sort_arch_iF
sc
sg|\}}}}}|\}}}	}
}i||}|o|Sii||}|S(N(R<tbestarch(
RlRpRRRRRRRRRRR(RR?R(s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
_sort_archN
sRN(R`RRtcheckForObsoleteRXRR3RRR,R-R.R1R4R/R2RkRR*RR<RMRRR(R?RtthispkgobsdictRARRtoobsoletingtopkgtupRRRXRRkRR((RRR?s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_pkg2obspkg
sT
	



-	

(	
	cCs|}t}xto~||}|djo
|odS|djo|S||}|djo|St}||}||jodSqWdS(s Generic comp. sci. test for looping, walk the list with two pointers
            moving one twice as fast as the other. If they are ever == you have
            a loop. If loop we return None, if no loop the last element. N(RWR/R(R?tnodet	next_functslowRtnext((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
_test_loop^
s 


cCs|ddjpt|d}g}t}x?|ii|D]+}t}|i|i}|i|qAW|pti	t
d|n|S(sD Do groupinstall via. leading @ on the cmd line, for install/update.it@is!Warning: Group %s does not exist.(tAssertionErrorRWR	RR/RRRRtGroupInstallErrorR(R?tpatterntgroup_stringt	tx_returnR(tgroupR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_at_groupinstallp
s
cCs|ddjpt|d}g}y|i|}Wn2tiij
o |iitd|nX|i||S(s; Do groupremove via. leading @ on the cmd line, for remove.iR*isNo group named %s exists(	R+RRRRTRjRVRR(R?R-R.R/R((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_at_groupremove
s

cCs|ddjpt|d}|ii|}|ptitd|nt}x|D]}|i|iqeW|i	i
|S(s8 Do downgrade of a group via. leading @ on the cmd line.iR*isNo Group named %s exists(R+R	RRRTRRsRRR1R(R?R-RRtpkgnamesR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_at_groupdowngrade
s
	cCsb|ddjpt|d}|o)|ddjo|d}|i|S|ii|S(s5 Remove things from the transaction, like kickstart. it-iR*(R+RRtdeselect(R?R-tpat((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_minus_deselect
s

ccs|iipdSt|tpUxq|iid|iD]4\}}|i|jo|i|}|Vq;q;Wn x|i	|D]}|VqWdS(s; Return the pkgs. that are obsoleted by the po we pass in. NR(
RR3RRRtgetObsoletersTuplesRRXRwt_find_obsoletees_direct(R?Rtobstuptinst_tupt
installed_pkgR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_find_obsoletees
s
ccsTxM|iD]B}x9|iid|D]"}|i|go	|Vq&q&Wq
WdS(s< Return the pkgs. that are obsoleted by the po we pass in. This works
            directly on the package data, for two reasons:
            1. Consulting .up. has a slow setup for small/fast ops.
            2. We need this work even if obsoletes are turned off, because rpm
               will be doing it for us. RN(tobsoletes_namesR/RtobsoletedBy(R?Rtobs_nR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR:
s
cGs?x8|D]0}||iijo|iii|qqWdS(sB Add all of the passed flags to the tsInfo.probFilterFlags array. N(RtprobFilterFlagsRM(R?tflagstflag((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_add_prob_flags
scKs>	g}t}|oGt|tpt|to|i|qtitdny|ptitdnd|joq|do'|dddjo|i|dS|do'|dddjo|i	|dSt
}|dg}|iid|dt}|i
||p|d}|iitd	|y|i|}Wn;tiij
o)}|iitd
t|qX|o0ti|o|i|dt
d|}n|o|i
|qqEnQ|i|}	|iid
|	d
d|	dd|	dd|	dd|	d}|o|iio|p|	do|iidjoh}
g}g}|ii}
|
idxI|D]A}|i|
jod|
|i <|i|q|i|qWx/|D]'}|i |
jo|i|qqW|}q6q:nt!|}h}xF|D]>}|i |jo|g||i <qS||i i|qSWg}x*|i"D]}|i
|i|qW|}n|pd|jo&|i#id|dgdt}nd
|jo|i#id
|d
}nd|jo!|i#id
|dd}nto.x+|D]}|ii$td|qrWn|ogStitdng}xv|D]n}|i%i&d|i'ob|i%i(|i't)oE|ii*t+i,td||i
|i%i-d|i'qqIn|i#i.|i go<|i'|i/i0jo&|i1d|}|i
|qnd#}|ii3o|i4||i5}n|d#j	od#}|i#id
|i }|i6|dd}|o|d}n|o |ii$td||qd|joA|i7|dp)|ii$td|i |i qqn|ii$td |i |i ||i
|i8d|qn|i#i9d|o=|i%i(|i't:p |ii$td!|qq,n|i;|pt
}xS|i#id
|i d|iD]0}t}|i%i(|i't:ot
}PqdqdW|p?|ii$td"||i1d|}|i
|qqnxm|i#id
|i d|iD]J}|i<|o4|i=t>i?t>i@t>iA|i%iB|i'PqqWx\|i#id
|i D]B}|iC|o,tD|i|io|i=t>iEPqkqkWtF|iG|}|oJxf|D];}|i%iH||}|i%iI|||i|qWq|i%iJ|}|i|qW|S($stry to mark for install the item specified. Uses provided package 
           object, if available. If not it uses the kwargs and gets the best
           packages from the keyword options provided 
           returns the list of txmbr of the items it installs
           
           s0Package Object was not a package object instancesNothing specified to installR-iR5R*R1R5s3Checking for virtual provide or file-provide for %ssNo Match for argument: %sRR`RR6R<R7tversionRtreleaseRRiRXs&Package %s installed and not availables"No package(s) available to installs)Package: %s  - already in transaction setRtlimits8Package %s is obsoleted by %s which is already installedtprovides_forsWPackage %s is obsoleted by %s, but obsoleting package does not provide for requirementss;Package %s is obsoleted by %s, trying to install %s insteads/Package %s already installed and latest versions;Package matching %s already installed. Checking for update.N(KRWRRRRMRRRR8R1R/R1RFRRkRRRR,RjRVR%RRRt_nevra_kwarg_parseRR<R6RRRRRR&R/RRRRXRRRRRARRRt
updating_dictRRR3R)R$R@RIRRRRRRERtRPMPROB_FILTER_REPLACEPKGtRPMPROB_FILTER_REPLACENEWFILEStRPMPROB_FILTER_REPLACEOLDFILESRR=RtRPMPROB_FILTER_OLDPACKAGERER:t
addObsoletingRt
addInstall(R?RRRtwas_patterntpatstmypkgsRRt
nevra_dicttpkgs_by_nameRt	not_addedRRt	pkgbynametlstR/Rtobsoleting_pkgtalready_obsR(Rtobs_pkgst	obsoleteeR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR
s< 
  
	

%









!!



"	
"
	'	cCst|id}t|id}g}x|i|D]}|ii|}x|D]{}xr||D]f}	|id|	pM|i|if}
x3|ii	|
D]}|i
|id|qWPqpqpWq_Wq@W|S(s Check for any difference in the provides of the old and new update
            that is needed by the transaction. If so we "update" those pkgs
            too, to the latest version. RR(Rst
returnPrcot
differenceRtgetRequirestinPrcoRangeRR<R1R>RR(R?topkgtnpkgtoprovstnprovsR/RR^RR`tnaTup((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_check_new_update_providess"c
Cst}x|ii|tgD]}d}x|iD]|}|i|o|d7}q5xU|ii|iD]>}|ii|i	i|i
|i	|}	|i|	qoWq5W|o
t}q|ii|i	iqW|S(s We return True if there is a newer package already in the
            transaction. If there is an older one, we remove it (and update any
            deps. that aren't satisfied by the newer pkg) and return False so
            we'll update to this newer pkg. ii(
RWRRRRtverLERRXRRRgRR/(
R?RXt
available_pkgR/R(RRRtntxmbrttxs((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_newer_update_in_transs$
	
cCsa|ii||}|o|i|nd|ijo |iidjo
d|_n|S(NRzR(Rt	addUpdatetsetAsDepRxRz(R?trequiringPotupkgRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
_add_up_txmbrs#
c%Ksg}|o|o|iititd|ii}|iio|ii	dd}ng}x|D]\}}	|i
|dt}
|
djoqtn|i
|
|i}|dj	o
|}
n|i|	}|ii|
|}
|ii||
|o|
i|n|i|
qtWx|D]\}}|iid|o$|iititd|q<|i
|dt}|djoq<n|i|id|q<W|Sg}g}|o2|idjo|i|q|i|nd	|jo|d	o'|d	d
djo|i|d	S|d	o'|d	d
djo|i|d	S|d	}|p|iid
|g}n|iid
|g}|o|og}y-|o|i|}n|i|}Wn5t i!i"j
o#}|i#i$td|nX|o|i|ql|i|ny7|o
g}n#|d	g}|ii%d
|}Wnt!i&j
o
g}nX|i||o,|o$|i#i$tdt'|qn|i(|}|ii)d|dd|dd|dd|dd|d}|p|ii)d|dd|dd|dd|dd|d}t*|djo(|i+||}t,d|}q|p&|i#i-td|i.|qn|iiotx|D]}|ii/i0|i1g}g}xD|D]<}|i
|dt}
|
djoqMn|i|
qMWx-t2|D]}
|i|i3d|
qWqWx|D]}x|i4|D]}|i1}|ii||}
|o|
i|n|i|
|ii|o$|iititd|q|ii||}
|i|
qWqWnx|D]}x{|ii5i0|i1gD]^}|i
|dt}|djoqn|ii|i1o'|iititd|i1q|i1|ii6d|i7jo~x|i4|D]f}|ii8||}
|o|
i|n|ii|||ii|||i|
qSWq|ii9|i1t:o|ii;|i1n|i<|||}
|i|
qWqWxq|D]i}|i
||i}
|
dj	o?|iititd||i|id|
q"nx|ii=i0|i1gD]} |ii| o$|iititd| q|i>| ||o$|iititd| q|i| }!|ii9| t:o|ii;| n|i<|||!}
|i|
qW|ii)d|i7d|i?}"|"o$|i@|otA|"d}"nx|"D]}#|ii|#i1o'|iititd|#i1q	|i>|#i1||o'|iititd|#i1q	|#iB|o&|i<|||#}
|i|
q	q	Wq"Wxu|D]m}
xd|ii)d|
i7D]J}$|$|
iCjo4|iD|
iE|$o|iiF|$|
iEq
q
q
Wq
W|S(sutry to mark for update the item(s) specified. 
            po is a package object - if that is there, mark it for update,
            if possible
            else use **kwargs to match the package needing update
            if nothing is specified at all then attempt to update everything
            
            returns the list of txmbr of the items it marked for updatesUpdating EverythingR+iRRXs>Not Updating Package that is already obsoleted: %s.%s %s:%s-%sRRR-iR5R*R1s%ssNo Match for argument: %sRR6R<R7RFRRGcSs|dS(i((Rl((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnYss!No package matched to upgrade: %ss,Package is already obsoleted: %s.%s %s:%s-%ss*Not Updating Package that is obsoleted: %ss<Not Updating Package that is already updated: %s.%s %s:%s-%siN(GRkRRRRRtgetUpdatesTuplesRR3RBRR/RR)R$RwRRPRRnRMtisObsoletedRRRR8R1R/RFR1RRRRR,RjRVR>R?R%RJRRRtmapRt_ui_nevra_dicttobsoleted_dictRRXRRR>tupdatesdicttgetObsoletesListRRmRRRRqRKRlR<RRtverLTR-t_does_this_updateRt
addUpdated(%R?RRot	update_toRR/R-R3RRRZttopkgR=Rtnewtoldtinstpkgst	availpkgsRt
depmatchesRtmRSRUtobs_tupsR\RXRit
obsoleted_pkgRtupdatingR]Rtupdated_pkgtpot_updatedRti_pkg((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRsf
	




  



(*
	

!	
$
"



	!

&cKs2|o|otidng}g}|o
|g}nd|joN|do'|dddjo|i|dS|do'|dddjo|i|dS|ii|dg\}}}|i||i||og}|d}	y|i|	}Wn5tii	j
o#}|i
itd|nX|p0t
|	}	|i
itdt
|	q|i|q;n|i|}
|iid|
dd	|
d	d
|
d
d|
dd
|
d}t|djo=|idtp&|i
itd|i|
q;n|ii}ti|}x|D]}|iio1|i|jo!|i
itd|q`n|ii|ioQxN|ii|iD]3}
|i
itd|
|ii |
iqWn|ii!|}
|i"|
q`W|S(stry to find and mark for remove the specified package(s) -
            if po is specified then that package object (if it is installed) 
            will be marked for removal.
            if no po then look at kwargs, if neither then raise an exceptionsNothing specified to removeR-iR5R*s%ssNo Match for argument: %sRR6R<R7RFRRGRs No package matched to remove: %ssSkipping the running kernel: %ss Removing %s from the transaction(#RtRemoveErrorR8R2R/tmatchPackageNamesRRRR,RjRVRR%RJRRRRWRRuRRRRRRXRRRRRRtaddEraseRM(R?RRR/RRRRRRRURRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs`

  "


$*cCs+g}g}g}g}|py1t|d|iid|dtii}Wn0tij
o!|ii	t
d||SX|iit
it
d|i|n|iddjo|ii	t
d||S|i|iijo$|ii	t
d	||i|S|iioN|i|ii|i}|o%|ii	t
d
||d|Sn|iid|i}	t|	djo9|o!|iit
d
|i|S|i|nxs|	D]k}
|i|
oh|
i|iijo;|i|
ijo|i||
fqX|i|qI|i||
fq|i|
o|i|
ijo^t|ipt|
io>|o&|iit
d|i|iq|i|qI|i|q|i |o>|o&|iit
d|i|iqI|i|q|i|qW|g}|D]}||dq[~}
|i!||
o|ii"t
d||SxY|D]Q}|iit
it
d|i|i#i||i$|i%d|qWxh|D]`\}}|iit
it
d|i||i#i||i&d|}|i$|q
Wx0|D](}|iit
it
d|iquWx|D]{}|i'ioh|io]xZ|i(|i'D]B}|i)i*||i'|ii||i)i+|i'|qWqqW|S(sE
        handles installs/updates of rpms provided on the filesystem in a
        local dir (ie: not from a repo)

        Return the added transaction members.

        @param pkg: a path to an rpm file on disk.
        @param po: A YumLocalPackage
        @param updateonly: Whether or not true installs are valid.
        RturltuasCannot open: %s. Skipping.sExamining %s: %st
payloadformattdrpms+Cannot localinstall deltarpm: %s. Skipping.sGCannot add package %s to transaction. Not a compatible architecture: %ssBCannot install package %s. It is obsoleted by installed package %siRsRPackage %s not installed, cannot update it. Run yum install to install it instead.sUPackage %s.%s not installed, cannot update it. Run yum install to install it instead.sExcluding %ssMarking %s to be installedRsMarking %s as an update to %ss&%s: does not update installed package.(,R!R/RR)toptst
user_agentRRRjRVRRkRRRzRRR<RRR3R@tsearchObsoletesRRRRRMR=R<RRRt_is_local_excludeRRoRRRRR>RRRP(R?RRt
updateonlyR/tinstallpkgst
updatepkgst
donothingpkgst
obsoleterstinstalledByKeyR=RRlt
check_pkgstoldpoRRtobs_pkg((s0/usr/lib/python2.6/site-packages/yum/__init__.pytinstallLocal.s
 	&&)"cCs|py1t|d|iid|dtii}Wn0tij
o!|ii	t
d|gSX|iit
it
d|i|n|i|iijo$|ii	t
d||igS|i||go|iit
d|gS|id|S(	s
        handles reinstall of rpms provided on the filesystem in a
        local dir (ie: not from a repo)

        Return the added transaction members.

        @param pkg: a path to an rpm file on disk.
        @param po: A YumLocalPackage
        RRRsCannot open file: %s. Skipping.sExamining %s: %ssGCannot add package %s to transaction. Not a compatible architecture: %ssExcluding %sR(R!R/RR)RRRRRjRVRRkRRRzRR<RRRR(R?RR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytreinstallLocals cKs|itititig}|o |i|id|in|i|i||pti	t
dnt|}g}g}g}x|D]}|ii
}	t|i_
t|to|id|}
n|id|i}
|	|i_
t|
djoM|ii|i|i||it|i|i|iqn|i|
qW|o4|o,tit
ddi|d|n|i||S(sfSetup the problem filters to allow a reinstall to work, then
           pass everything off to installRXs2Problem in reinstall: no package matched to removeRis6Problem in reinstall: no package %s matched to installs, tfailed_pkgs(RERRLRMRNRRRXRtReinstallRemoveErrorRRRR3RWRRRRRMRRtReinstallInstallErrorRJ(R?RRttx_mbrsttemplentnew_membersRRR3told_conf_obstmembers((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs@
 
,
cCs|py1t|d|iid|dtii}Wn0tij
o!|ii	t
d|gSX|iit
it
d|i|n|i|iijo$|ii	t
d||igS|i||go|iit
d|gS|id|S(	s
        handles downgrades of rpms provided on the filesystem in a
        local dir (ie: not from a repo)

        Return the added transaction members.

        @param pkg: a path to an rpm file on disk.
        @param po: A YumLocalPackage
        RRRsCannot open file: %s. Skipping.sExamining %s: %ssGCannot add package %s to transaction. Not a compatible architecture: %ssExcluding %sR(R!R/RR)RRRRRjRVRRkRRRzRR<RRRt	downgrade(R?RR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdowngradeLocals cCsd|iijpd|iijotSg}t|iidjo2t||iidd\}}}||}n||jotStS(s0returns True if the local pkg should be excludedRRiR8i(RRRWRRRR/(R?RRttoexcRPRRQ((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs$
cKs|o|otidnt}|o
|g}nrd|jo|do'|dddjo|i|dS|do2|dddjo|i|d}t}q|iid|dgdt}|px|d}|ii	t
d|y|i|}WqWtii
j
o)}|iit
d	t|qWXqnQ|i|}|iid
|d
d|dd|dd
|dd|d}|pg}d|jo&|iid|dgdt}nd
|jo|iid
|d
}n|ogStit
dnt}	g}
x|D]}|i|oc|i|if|	jo*t
d|}|iiti|n|	i|i|ifqMn|
i|qMW|
}t}
x|D]}|
i|iqW|iit|
}h}h}xt|D]}|i|jp|i ||ido|g||i<n4|i!||ido||ii|n|||i|if<q8Wh}xt|D]}|i|if}d}||jo||}n`|i|joOxL||iD]9}t#|i|ip|}|i|if}Pq4q4Wn|djo]||	jo<|o4|i|jo$t
d|}|ii|n|	i|qn|i$|oE||	jo$t
d|}|ii|n|	i|qn|	i||i%|jo|i&||i%oqn|||i%<qWg}xl|D]d}|i%|joqn|i'i(||i%|}|pqn|i)t*i+|i,|qW|S(s Try to downgrade a package. Works like:
            % yum shell <<EOL
            remove  abcd
            install abcd-<old-version>
            run
            EOL sNothing specified to downgradeR-iR5R*R1R5s3Checking for virtual provide or file-provide for %ssNo Match for argument: %sRR6R<R7RFRRGs$No package(s) available to downgrades1Package %s is allowed multiple installs, skippings"No Match for available package: %ss%Only Upgrade available on package: %sN(-RtDowngradeErrorRWR8R4R/R1RFRkRRRRR,RjRVR%RJRR/RsRRR<RRRzRRMRRERR=RRRtverGERXRhRtaddDowngradeRERROR(R?RRtdoing_group_pkgstapkgsRRRURt
warned_nasttapkgsRRt
apkg_namesRRtlatest_installed_natlatest_installed_ntdowngrade_apkgstnatlipkgttlipkgR/RR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR,s

  
	
-






		








cCs|d}|d}|d}|d}|d}|o%|o|od|||f}n\|o|od||f}n:|o|od||f}n|o
|}nd	}|o|od||fS|o	d
|S|o|SdS(NRR6RFRGR<s%s:%s-%ss%s-%ss%s:%sRs*-%ss	<unknown>((RURRRRRtevr((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRus*





	cCsh}d|joP|d\}}}}}||d<||d<||d<||d<||d<|S|id|d<|id|d<|id|d<|id|d<|ddjo|id|d<n|id|d<|ddjo|id|d<n|S(	NRXRR6R<RFRGR7R(RR(R?Rt
returndictRRRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRJs&





cCs|ii}t|i_t}xE|iD]:}|idjo$|id|io
t}qbq(q(Wx~|iD]s}|idjo]y$|id|io
t}nWqt	i
ij
o |ii
td|qXqpqpWx^|iD]S}|idjo=|id|io
t}qD|ii
td|qqWxE|iD]:}|idjo$|id|io
t}qqRqRWxE|iD]:}|id
jo$|id|io
t}qqqW||i_|S(s[ Given a valid historical transaction object, try and repeat
            that transaction. t	ReinstallRXt	DowngradesFailed to downgrade: %stUpdatesFailed to upgrade: %stInstallsTrue-Installt
ObsoletingtErase(RsTrue-InstallR(RR3RWt
trans_dataRRRXR/RRRRRjRVRRRR(R?RRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pythistory_redosD

&

!

cCs|ii}t|i_t}xE|iD]:}|idjo$|id|io
t}qbq(q(Wx~|iD]s}|idjo]y$|id|io
t}nWqt	i
ij
o |ii
td|qXqpqpWx^|iD]S}|idjo=|id|io
t}qD|ii
td|qqWxb|iD]W}|idjoA|ii|ioqRn|id|io
t}qqRqRWxE|iD]:}|id
jo$|id|io
t}qqqWxE|iD]:}|idjo$|id|io
t}q9qqWxE|iD]:}|idjo$|id|io
t}qqGqGW||i_|S(sY Given a valid historical transaction object, try and undo
            that transaction. RRXtUpdatedsFailed to downgrade: %st
DowngradedsFailed to upgrade: %sRsDep-InstallRsTrue-Installt	ObsoletedR(sDep-InstallsInstallsTrue-Install(RR3RWRRRRXR/RRRRRjRVRRRRRR(R?RRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pythistory_undos\

&

!



cCst}td|}|iiti|ybti|}|djohdd6}d}n|i	}|i
d}ti||}	Wn@ti
ij
o.}
titdtt|
nXd}t}|o|o|io|i|d|iyBti|d}|i	}|i
d	}ti||}Wn!ti
ij
o}
d}nX|otti|ti|	|ip&titd
||i
fqtd}|iiti|t}qnyti|	dt}
Wn@tj
o4}
titd
|tt|
fnXg}x|
D]}h}xCdD];}||jotitd|n||||<qlWti|di|d<||d<t||d<|i |qYW|S(s
        Retrieve a key file
        @param keyurl: url to the key to retrieve
        Returns a list of dicts with all the keyinfo
        sRetrieving key from %si'RHs
global/gpgkeys/gpgkeysGPG key retrieval failed: RFs.ascs
/gpgkeysigs>GPG key signature on key %s does not match CA Key for repo: %ss,GPG key signature verified against CA Key(s)tmultiplesInvalid GPG Key from %s: %stkeyidRtuseridtfingerprinttraw_keys2GPG key parsing failed: key does not have value %sthexkeyidt	valid_sigthas_sigN(Rs	timestampsuseridRR(!RWRRkRRRzRtto_utf8Rt_default_graboptsRRturlreadRRRR,R%RtgpgcakeytgetCAKeyForRepoRIturlopentvalid_detached_sigtStringIOtgpgcadirR/t
getgpgkeyinfoRt
keyIdToRPMVertuppertboolRM(R?tkeyurlRPtgetSigt
key_installedRRRRtrawkeyRtsigfileRt	keys_infoRtkeyinfotthiskeyR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_retrievePublicKeyCsj




	&!

tGPGc
Csd}|ido|td}|ii|}|oSt|d}td||dt|d||i|i	ddf}qn|djo:td||dt|d|i	ddf}n|i
id	|dS(
Nsfile:isBImporting %s key 0x%s:
 Userid : %s
 Package: %s (%s)
 From   : %sRRsfile://Rs0Importing %s key 0x%s:
 Userid: "%s"
 From  : %ss%s(RRRR/tsearchFilesRRR%tui_from_repotreplaceRjRV(R?RRtkeytypeRtfnameR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_getKeyImportMessages		
	cCs|ii|i}|i}t}t}x|D]}|i||}	x|	D]}
|ii}ti	||
d|
ddjo+|i
itd||
dfqPn|i
o |
do|
do
t}n|i|
|t}|iio
t}n|iio
t}nw|oJ|h|d6|
d	d	6|
dd6|d
6|
dd6|
dd6}n&|o|||
d	|
d}n|p
t}qPn|ii}|iti|
d}
|
djotitd
|
n|i
itdt}qPWq1W|o|otitdn|ptitd|in|i|\}
}|
djo&|i
itdti|ndS(s
        Retrieve a key for a package. If needed, prompt for if the key should
        be imported using askcb.
        
        @param po: Package object to retrieve the key of.
        @param askcb: Callback function to use for asking for permission to
                      import a key. This is verification, but also "choice".
                      Takes arguments of the po, the userid for the key, and
                      the keyid.
        @param fullaskcb: Callback function to use for asking for permission to
                          import a key. This is verification, but also "choice".
                          Differs from askcb in that it gets passed a
                          dictionary so that we can expand the values passed.
        RRis)GPG key at %s (0x%s) is already installedRRRRRRRRsKey import failed (code %d)sKey imported successfullysDidn't install any keyssThe GPG keys listed for the "%s" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.s+Import of key(s) didn't help, wrong key(s)?N(RRRRRRWRR/RRtkeyInstalledRjRRRR/RRtassumenot	assumeyestpgpImportPubkeyt
procgpgkeyRR,RR(R?Rtaskcbt	fullaskcbRPtkeyurlsRtuser_cb_failRRRRR$RR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytgetKeyForPackagesd	$ 





	
cCsDt}t}x|D]}|i||d|}	x|	D]}
tt|
ddd!iti|jo1|iit	d||
dft
}q9n|o|id}d}g}
y(t|d	i
}|id
}
Wnttfj
onXt|
d|
jo
t
}q\n1d}|io |
do|
d
o
t
}n|p|i|
||t}|iio
t}ni|iio
t
}nR|oJ|h|d6|
dd6|
dd6|d6|
dd6|
dd6}n|p
t
}q9qnti|
d|
dd|}|ptit	dn|iit	dt
}|ox|oq|
d|
jo\t|d}y-|i|
dd
|i|iWqttfj
oqXqq9q9WqW|o!|otit	d|n|ptit	d|indS(sL
        Retrieve a key for a repository If needed, prompt for if the key should
        be imported using callback
        
        @param repo: Repository object to retrieve the key of.
        @param destdir: destination of the gpg pub ring
        @param keyurl_list: list of urls for gpg keys
        @param is_cakey: bool - are we pulling in a ca key or not
        @param callback: Callback function to use for asking for permission to
                         import a key. This is verification, but also "choice".
                         Takes a dictionary of key info.
        RRiis(GPG key at %s (0x%s) is already importedRs/imported_cakeystCARs
RRRRPRRRRRtgpgdirsKey import failedsKey imported successfullyRs#Didn't install any keys for repo %ssThe GPG keys listed for the "%s" repository are already installed but they are not correct.
Check that the correct key URLs are configured for this repository.N(RWRthexRRRtreturn_keyids_from_pubringRjRRR/RRNRORRRRSRRRRRRtimport_key_to_pubringRR,RtflushRwR(R?RPtdestdirtkeyurl_listtis_cakeyRFRRRRRtikfRtcakeystcakeys_dR$Rtikfo((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_getAnyKeyForReposz3
 




 
	cCs)|i||i|idtd|dS(sV
        Retrieve a key for a repository If needed, prompt for if the key should
        be imported using callback
        
        @param repo: Repository object to retrieve the key of.
        @param callback: Callback function to use for asking for verification
                          of a key. Takes a dictionary of key info.
        RRFN(RRRRW(R?RPRF((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
getKeyForRepoWs	cCs)|i||i|idtd|dS(sV
        Retrieve a key for a repository If needed, prompt for if the key should
        be imported using callback
        
        @param repo: Repository object to retrieve the key of.
        @param callback: Callback function to use for asking for verification
                          of a key. Takes a dictionary of key info.
        RRFN(RRRR/(R?RPRF((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRbs
cCsd}|iidjodSg}|ii}ti|\}}t|ii}h}x|ii	D]}|i
djoqsn|ioqsnt|ig|i
i}	|	i|pqsn|i|jod||i<qs||icd7<qsWx|D]}
|iid|
}||}t|||
}||iijoqn||ii}
xc|D][}|i|if||fjoqn|
djoPn|i||f|
d8}
qWqWx6|D].\}}|ii|}|ii|qWdS(	s Limit packages based on conf.installonly_limit, if any of the
            packages being installed have a provide in conf.installonlypkgs.
            New in 3.2.24: Obey yumdb_info.installonly data. cSsg}g}g}xt|D]}d|ijo|i|qn|iidjoqnto|i|qn|iidjo|i|q|iidjo|i|q|i|qW|||S(sa Allow the admin to specify some overrides fo installonly pkgs.
                using the yumdb. tinstallonlytkeepsremove-firstsremove-last(RRxRMRR/(Rtret_begtret_midtret_endR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_sort_and_filter_installonlyss&


iNRRRi(RR(Rtinstallonly_limitR/RRt"get_running_kernel_version_releaseRsRRRtts_stateRRRRRRRRFRGRMRR(R?R
RRtcur_kernel_vtcur_kernel_rtinstall_only_namesR(Rtpo_namesRRttotaltnumleftRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnsP	

cCs|pti}n|iti|i|}|djo$|iti|i||n|iti|i	|d||iti
|i|d|dS(s
        Process the current Transaction
        - Download Packages
        - Check GPG Signatures.
        - Run Test RPM Transaction
        - Run RPM Transaction
        
        callback.event method is called at start/end of each process.
        
        @param callback: callback object (must have an event method)
        @param rpmTestDisplay: Name of display class to use in RPM Test Transaction 
        @param rpmDisplay: Name of display class to use in RPM Transaction 
        tdisplayN(t	callbackstProcessTransNoOutputCallbackteventtPT_DOWNLOADt_downloadPackagesRtPT_GPGCHECKt_checkSignaturest
PT_TEST_TRANSt_doTestTransactiontPT_TRANSACTIONt_doTransaction(R?RFtrpmTestDisplayt
rpmDisplayR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytprocessTransactions
c	Cstdtd|ii}t|djodS|iti|y|i	|}Wn(t
j
otit
dgnXt|djokt
dg}xI|D]A}ti||}x%|D]}|id||fqWqWti|n|S(s/ Download the need packages in the Transaction cSs|iS((R(Rl((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnscSs
|idjS(RR(RR(R
(R((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRnsis!Unable to find a suitable mirror.s3Errors were encountered while downloading packages.s%s: %sN(RttfilterRRRRRRtPT_DOWNLOAD_PKGSRRRR,RRRxRMtYumDownloadError(R?RFtdlpkgsR%terrstrRMR:R((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs&cCsnxg|D]_}|i|\}}|djoqq|djo|i||iqti|qWdS(s/ The the signatures of the downloaded packages ii(RRt_askForGPGKeyImportRtYumGPGCheckError(R?RRFRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs

cCstS(su 
        Ask for GPGKeyImport 
        This need to be overloaded in a subclass to make GPG Key import work
        (RW(R?RRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR(scCs|iio|iititd|i}|ot}x+|D]#}|i	doqInt
}qIW|o,tdg}|i|ti
|ntdg}|i||itd|iiti
|qnh}x'dgD]}t|i|||<qWt|dt}	|o
||	_n|`|i|i}
d
|_|idd	|ii|	d
|}~	t|d	jo;td}x|D]}
|d|
7}qWti|n|`|
|_d
S(s Do the RPM test transaction sRunning rpm_check_debugsrpmlib(s'ERROR You need to update rpm to handle:s'ERROR with rpm_check_debug vs depsolve:sPlease report this error at %stdiskspacecheckttesttkeepoldiRsTest Transaction Errors: s  %s
N(Rtrpm_check_debugRkRRRzRt_run_rpm_check_debugR/RRWRRtYumRPMCheckErrorRMtbugtracker_urlRR#RRtinitActionTsRRt
populateTsR+RtYumTestTransactionError(R?RFRtmsgstrpmlib_onlyRtretmsgsttsConftfeaturettestcbtdscbttserrorsRjtdescr((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRsT







		cCsn|i|idd|ii|iit|dt}|o
||_n|id|dS(s do the RPM Transaction R,iRRzN(	R1R2RRtorderR#R$RRo(R?RFRRz((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRHs



cCsog}|i}d|_|idd|iix*|iiD]}|it|qEW||_|S(NR+i(RRR2RRRRMR&(R?R]R:R'((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR.Us		
	c
Ksti|}||_|ii|_|idt}|o\g}|o<x?|D]-}|o |it	||ii
qTqTWn|}||_n|o-|ot	||ii
}n||_n|i
d|iit|_d|_|ii|_|ii|_|ii|_|ii|_x?|iD]1}	t||	pqAnt||	||	qAW|ii||ii|i|S(sadd and enable a repo with just a baseurl/mirrorlist and repoid
           requires repoid and at least one of baseurl and mirrorlist
           additional optional kwargs are:
           variable_convert=bool (defaults to true)
           and any other attribute settable to the normal repo setup
           ex: metadata_expire, enable_groups, gpgcheck, cachedir, etc
           returns the repo object it addedtvariable_convertRMi(RRRRRLRRR/RMRRRt
mirrorlisttsetupRMtenablegroupstmetadata_expireRt
repo_gpgcheckRRRRRRRRt
enableRepoR(
R?RtbaseurlsR?Rtnewrepotvar_converttreplacedRRM((s0/usr/lib/python2.6/site-packages/yum/__init__.pytadd_enable_repoes@
	(

		
s/$basearch/$releasevercCs+|otidjotS|djotid}n|djo
d}nyti||}WnAttfj
o/}|i	i
tdt|d}nX|djot
S|t||ii7}t|do||i_n|ii||ii|_||i_tS(sW Set a new cache dir, using misc.getCacheDir() and var. replace
            on suffix. itTMPDIRs/var/tmpsCould not set cachedir: %sRrN(RRR/RtgetenvRtgetCacheDirRRRSRjRVRRRWRRRRRrRLRRRR(R?RttmpdirtreusetsuffixRLR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs(


 
cCs|i|ijotS|i|otS|i|iijotStii|i|iotS|i|otStS(sreturns True if pkg1 can update pkg2, False if not. 
           This only checks if it can be an update it does not check if
           it is obsoleting or anything else.(	RRWRhR<RR,RRR/(R?tpkg1tpkg2((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRzscCsm|iid|iid}x1|iiD] }||i7}|d7}q2W|iid|dS(Nsconfig-mainRs
sconfig-repos(R|RPRtdumpRRRS(R?tmyreposRP((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRLscCs|iidd||S(s2 Callback to call a plugin hook for pkg.verify(). tverify_package(R1R(R?RT((s0/usr/lib/python2.6/site-packages/yum/__init__.pytverify_plugins_cbsc

CsF|iio;|o|iitddStitdn|pGdtid}t	i
ddd|\}}ti|d}nt
|d}||_d	|iid
td}|d	|ii7}|iidjo|d7}na|d	t|ii7}x@|iiD]/}|d
|it|i|iif7}q0W|d	t|ii7}x'|iiD]}||i7}qWy|i||i Wnzt!t"fj
oh}	d|_|o*|iitd|t#|	fqBtitd|t#|	fnXdS(s9saves out a transaction to .yumtx file to be loaded laters>Dependencies not solved. Will not save unresolved transaction.Nsyum_save_tx-%ss%Y-%m-%d-%H-%MROs.yumtxtprefixRs%s
R2is0
s	%s:%s:%s
s&Could not save transaction file %s: %s($Rt_unresolvedMembersRjRVRRR,RtstrftimettempfiletmkstempRtfdopenRNRfR/RGR/Rt
getTsFlagsRcRRRRRSRRURaRRt_dumpRRwRRRSR(
R?RRRVRRaRRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs>
	-
	*cCs2yt|di}Wn@ttfj
o.}titd|t|fnX|d*jo|i	i
}n|d*jo|i	i}n|ddjo3|ddjo|dd!}q|dd	!}n|di}|t|i
id
tdjo`td}|o*|td7}|iit|qp|td
7}ti|nyt|di}Wn6ttfj
o$}td}ti|nX|ii|t|di}	g}
d|	}x1|d|!D]"}|
i|iidqWt||i}
|d}d}t}d*}x||D]}|i}|ido|oF|ii|||iijo|o|iii|qnt}|iddiid\}}t|i}t |iid}yc|t!jo|i"|}n@|t#jo|i$|}n td|}ti|Wndtij
oU}t}tdt||f}|pti|q#|ii|q'X|d7}t%i&|}||_'qjn|i}|idd\}}|i(}|d+joX|ii)}|djot*||tq^|djot*||tq^n|djo t*||t|inv|djo|i+i,|idnL|d,jox;|iidD]}|id$\}}yQ|d%jo"|i"t |id}n|i$t |id}WnJtij
o;}td&t||f}|ii|t}q6Xt-||}|i|t*|||q6Wn<|d'jox+|idD]}|id\}}|id$\}}yQ|d%jo"|i"t |id}n|i$t |id}WnJtij
o;}td&t||f}|ii|t}q@Xt-||}|i||ft*|||q@Wnt*|||i|o
t}qjqjW|ii|||iijo|iii|n|
|jo
t}n|oZtd(}|o$|td)7}|ii|q%|td
7}ti|n|ii.S(-s&loads a transaction from a .yumtx fileRs/Could not access/read saved transaction %s : %sis
saved_tx:
ishistory addon-info
iiiR2s0rpmdb ver mismatched saved transaction version, s ignoring, as requested.s
 aborting.s+cannot find tsflags or tsflags not integer.iit:smbr:R4Rs(Found txmbr in unknown current state: %ss$Could not find txmbr: %s in state %stisDepRtfalsettrueRRRRt
downgraded_byRR-R3RR*Rs(Could not find txmbr: %s from origin: %sRsCTransaction members, relations are missing or ts has been modified,s- ignoring, as requested. You must redepsolve!N(R_s	reinstall(s
updated_bysobsoleted_byRbs
downgradessupdatess	obsoletess
depends_on(/RNt	readlinesRRRSRR,RRRRtloadts_ignorerpmtloadts_ignoremissingtstripR/RGR/RjRVRRRRtsetFlagsRMRRWtrstripRRRRWRRRRwRRR}tTransactionMembert
current_statetlstripRdRRRRR(R?Rt	ignorerpmt
ignoremissingtdataRtrpmvRttsflagstnumreposRRtrindexRtnumpkgstpkgstarttpkgcounttpkgprobtcurpkgRt
missinganyRXRjRRRtpkgspectorigintcurlistR3R((s0/usr/lib/python2.6/site-packages/yum/__init__.pytload_tss*


&
 
(


	



 


""


""

cCs!t}t}g}|iidtD]}||iq,~}x|D]}x|iD]}|iidddjoq_n||joq_nt}x@|i	D]2}	|	|joqn|	|jot
}PqqWxD|iD]9\}
}}|ii|
||i
ot
}PqqWxB|i|iD]0}
|ii|
dd	i
ot
}Pq=q=W|p}d|i|ifGH|id|}xS|D]G}|id||i|jo|i|in|i|qWq_q_WqLW|iitidt|dS(
stake the set of pkgs being removed and remove any pkgs which are:
           1. not required anymore
           2. marked as a 'dep' in the 'reason' in the yumdb. RtRzRRs6---> Marking %s to be removed - no longer needed by %sRs+Found and removing %s unneeded dependenciesN(NNN(RsRRRRtrequired_packagesRxRRWtrequiring_packagesR/RtgetNewRequiresRRRRRRRnRMRRkRRRzR(R?tfound_leavestcheckedRtttbeingremovedRtrequiredtstill_neededt	requiringtprovntprovftprovevrR-RR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRsN		3




	
		(RARBRCR@R{RwRRR/R1R2RRRRRRRRRnRRRRxR
RRWRRRRR'R)R(RFRJRERhRltpropertyRRR1RR/RRRR	R|R^R|RRRRRRRRRRRRRR	R+R-RoR^R"RR tYUM_PID_FILERRyRRRRRR
RRR[R!R#R%R*R+R.RR-R[RcRRwRRRRRRRRRwRRRRRRR$R)R1R2R4R8R>R:RERRgRlRqRRRRRRRRtstaticmethodRuRJRRRRRRRRRR"RRR(RRR.RIRRzRLRURR|R(((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRZs|	#					u	^						
		#	:			0				=	"																																
	n				
								C	|		/		+			.	;	%											!}	u"		b&	
		!		!@	F				
							
F , 			%	4MWZ	U 			5
	4				)((((aRCRtos.pathRRR
RRRRRRRhtlogging.configRyRYtyum.i18nRRRtP_RRRRRtrpmUtils.updatesR,t
rpmUtils.archR
RRRtrpmUtils.miscutilsRtrpmUtils.transactionR	R_RRRRRRRR}Rturlgrabber.grabberRRturlgrabber.progressRtpackageSackRRRR[R1RRRtyum.historyRtsimplefilterRRRRRRR R!t	constantstyum.rpmtransR#R$R%R&R'RRROR(R)t__version__RRRRRRRRR+RDRNR\RZ(((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt<module>sz	"
6
y~or5J={Eeu磝QkᯘG{?+]ן?wM3X^歌>{7پK>on\jyR g/=fOroNVv~Y+NGuÝHWyw[eQʨSb>>}Gmx[o[<{Ϯ_qF vMIENDB`