403Webshell
Server IP : 182.53.201.61  /  Your IP : 216.73.217.175
Web Server : Apache/2.2.15 (Fedora)
System : Linux km10.dyndns.org 2.6.31.5-127.fc12.i686.PAE #1 SMP Sat Nov 7 21:25:57 EST 2009 i686
User : apache ( 48)
PHP Version : 5.3.3
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/lib/python2.6/site-packages/yum/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/python2.6/site-packages/yum/__init__.pyo
7Jc2@sLdZddkZddkZddkZddkZddkZddkZddkZddkZddk	Z	ddk
Z
ddkZ
ddkZddk
Z
ddkZeiiaeiiZddkZddklZlZddkZddkZddkZddklZlZlZddkZddkZddk l!Z!ddk"Z"ddk#l$Z$l%Z%ddk&Z&ddk'Z'ddk(l)Z)l*Z*ddk+l,Z,dd	k-l.Z.l/Z/ddk0Z0ddk1Z1ddk2Z2ddk3Z3ddk4Z4ddk5Zddk6Z6e6i7d
ei8ddk9l:Z:l;Z;l<Z<l=Z=l>Z>ddk?Tdd
k@lAZAlBZBddklCZClDZDddkEZEddkFlGZFddk(lHZHdZIeJgZKeIiLdD]ZMeKeNeMq[KZOeHiPiQdeI7_QdddYZRdddYZSde0iTfdYZUdS(s
The Yum RPM software updater.
iN(tParsingErrortConfigParser(tcanCoinstalltArchStoragetisMultiLibArch(tRepoStorage(tConfigPreProcessort
varReplace(t
URLGrabbertURLGrabError(t
format_number(tpackagesNewestByNameArchtListPackageSacktignore(t
parsePackagestYumAvailablePackagetYumLocalPackagetYumInstalledPackagetcomparePoEVR(t*(tRPMTransactiontSimpleCliCallBack(t
to_unicodetto_str(tproxy(tdefault_grabbers3.2.25t.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|_dS(Ns/etc/yum/yum.conft/s/dev/log(tfntroottTruetinit_pluginstpluginst	TYPE_COREtplugin_typestNonet	optparsert
debuglevelt
errorleveltdisabled_pluginstenabled_pluginstsyslog_identtsyslog_facilityt
syslog_devicetarcht
releasever(tself((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt__init__Zs												(t__name__t
__module__t__doc__R0(((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRUst_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/R6trepos((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR0nscCsQxJ|iiD]9}|i|iijoPn||iijotSqWtS(N(R7tlistEnabledtcostR6tsackt_pkgtup2pkgsRtFalse(R/tpkgtupR6((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt__contains__rs	(R1R2R3R0R?(((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR4js	tYumBasecBskeZdZdZdZdZdZddZddee	i
fdddd	Zd
Z
ddddZd
ZdddZdZdZdZdddddddZdZdZdZdZddZdedZdZdddZdddZdZdZ dZ!dZ"d Z#d!Z$d"Z%e&d#d$d%d&d'd(Z'e&d#d)d%d*d'd+Z(e&d#d,d%d-d'd.Z)e&d#d/d%d0d'd1Z*e&d#d2d%d3d'd4Z+e&d#d5d'd6Z,e&d#d7d%d8d'd9Z-e&d#d:d%d;d'd<Z.e&d#d=d%d>d'd?Z/d@Z0dAZ1edBZ2dCZ3dDZ4dEZ5dFZ6dGZ7dHZ8dIZ9dJZ:dKZ;dLZ<dMZ=dNZ>ddOZ?dPZ@ddQZAdRZBeCdSZDddTZEdUdVdWZFdXZGdYZHdZZIddd[ZJd\ZKd]ZLd^ZMd_ZNd`ZOdaZPdbZQdcZRddZSdeZTdfddedgZUdhZVeediZWddjZXdedkZYddedlZZdmZ[dnZ\gddoZ]dpZ^dqZ_drZ`dsZadtZbduZcdvZddwZededxZfdyZgdzZhd{Zid|Zjd}Zkd~ZldZmddZndZodZpdZqdddZrddZsdedZtddZuddZvddZwdZxddZydZzdZ{dZ|ddZ}dddZ~ddZdZddddZdZdZdZddZddZdZgddZededdZdZRS(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|_g|_t
id|_t
id|_t||_|ig|_d|_t|_t|_t|_dS(Nsyum.YumBasesyum.verbose.YumBase(tdepsolvetDepsolveR0R$t_conft_tsInfot_rpmdbt_upt_compst_historyt_pkgSackt	_lockfiletskipped_packagestloggingt	getLoggertloggertverbose_loggerRR7tdisablePluginst
localPackagestmediagrabberRR-Rtpreconftsettrun_with_package_names(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR0s&									
		cCs"|i|i|idS(N(tcloset
closeRpmDBtdoUnlock(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt__del__s

cCs@|idj	o|iin|io|iindS(N(RHR$thistoryRVR7(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRVs
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(R=RSR tconftcache(R/R_((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdoGenericSetupss/etc/yum/yum.confRcCstitdtiddt|doX||i_||i_||i_	||i_
||i_||i_||i_
n|iS(Ns9doConfigSetup() will go away in a future version of Yum.
t
stackleveliRS(twarningstwarnt_tErrorstYumFutureDeprecationWarningthasattrRSRRR R#R%R&R'R^(R/RRR R#R%R&R'((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
doConfigSetupsc	Ksa|otidn|io|iSti}|o=x:dD].}||jot|i|||qDqDWn|ii}|ii}|ii}|ii	}|ii
}|ii}	|ii}
|ii
}|ii}|ii}
|ii}|ii}|ii}|ii}|o|ii|n
|ii}|djotii|o
d}nti||}||_|ii|_|iotiia n|	djo
|	|_n|
djo
|
|_n|
djo
|
|_n|djo
||_n|djo
||_n|i"|i|i|i|i||o0|i#o&|i$|||i%|i&||nti'||_|`x$|i(i)D]}|i*i+|qW|i#i,d
|i(i-|_-|i.ti/|i(_0|i1|i(i0|i(i2|i3i4dti||i#i,d|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 _getConfigRRR R#R%R&R'R(R)s/etc/yum/yum.confs
/etc/yum.conft
postconfigsConfig time: %0.3ftinit(	sfnsrootsinit_pluginssplugin_typess	optparsers
debuglevels
errorlevelsdisabled_pluginssenabled_pluginsN(5RbRcRCttimetsetattrRSRRR R#R%R&R'R(R)R*R+R,R.R-t
setup_archt	canonarchtostpathtexiststconfigtreadStartupConfigtbasearcht
gaftonmodetyumti18nt
dummy_wrapperRdR$tdoLoggingSetupR!t
doPluginSetupt
pluginpathtpluginconfpathtreadMainConfigR^thistory_record_packagesRUtaddtruntyumvartgetReposFromConfigtgeteuidtuidtdoFileLogSetuptlogfileROtdebug(R/tkwargstconf_sttargRRR R#R%R&R'R(R)R*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
logginglevelsRy(R/R&R'R*R+R,((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRy.s	cCsti||dS(N(Rt
setFileLog(R/RR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR;scCs|djoti|d}nt|d|i}t}y|i|Wn-tj
o!}t|}t	i
|nXxv|iD]h}|djoqnd}	xW|D]O}
|
ti
joqn|
tijoqn|
djoqn|
}	PqW|	o-|iid||	|i|	fqny|i||}Wn4t	it	i
fj
o}|ii|qnX||_||_|o||oqny|ii|Wqt	ij
o}|ii|qXqWdS(	s-read in repositories from a config .repo fileitvarstmaint	installeds-_.:s!Bad id for repo: %s, byte = %s %dN(smains	installed(R$RotstatRRRtreadfpRtstrRetConfigErrortsectionststringt
ascii_letterstdigitsRNtwarningtfindtreadRepoConfigt	RepoErrortrepo_config_agetrepofileR7R(R/trepofntrepo_agetvalidatet
confpp_objtparsertetmsgtsectiontbadtbytetthisrepo((s0/usr/lib/python2.6/site-packages/yum/__init__.pytgetReposFromConfigFile>sR
	


		cCs|ii}|i|ii|x|iiD]}tii|iid|o|iid|}ntii	|oexbt
tid|D]C}ti|d}||jo
|}n|i|d|qWq/q/WdS(s5read in repositories from config main and .repo filesRs	%s/*.repoiRN(
R^tconfig_file_ageRtconfig_file_pathtreposdirRoRpRqtinstallroottisdirtsortedtglobR(R/RRRtthisrepo_age((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRws
!

cCsti|}|i|||i|ip'||_|iitd|nt|i|_|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.
        s8Repository %r is missing name in configuration, using id(tyumRepot
YumRepositorytpopulateR^tnameRNterrorRdRtcachedirtbasecachedirRtupdatetcfg(R/RRR6((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs
		cCsti|_dS(sDisable yum plugins
        N(R!tDummyYumPlugins(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRPscCsTt|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
isinstanceR!t
YumPluginstRuntimeErrorRd(R/R%R#t
searchpathtconfpathR(R)((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRzscCs)titdtidd|iS(Ns8doRpmDBSetup() will go away in a future version of Yum.
Rai(RbRcRdReRft	_getRpmDB(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdoRpmDBSetupscCs||idjoeti}|iititdti	d|i
i|_|iidti|n|iS(s@sets up a holder object for important information from the rpmdbsReading Local RPMDBRsrpmdb time: %0.3fN(
RER$RkROtlogRtDEBUG_4RdtrpmsacktRPMDBPackageSackR^RR(R/trpmdb_st((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs
"cCs^|idj	od|i_|iind|_d|_d|_d|_d|_dS(s>closes down the instances of the rpmdb we have wangling aroundN(RER$ttstdropCachedDatat_tsRDRFtcomps(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRWs				cCs|`d|_dS(N(RR$(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt	_deleteTsscCs/titdtidd|i|tS(Ns7doRepoSetup() will go away in a future version of Yum.
Rai(RbRcRdReRft	_getReposR(R/R((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdoRepoSetupscCsS|i|o>ti}|ii||iidti|n|iS(sB For each enabled repository set up the basics of the repository. srepo time: %0.3f(R^RkR7tdoSetupROR(R/RRtrepo_st((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs"cCs|`t||_dS(N(R7R(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.
RaitarchlistR(RbRcRdReRft	_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 includetenabledsSetting up Package Sacksitwhichtexcludespkgsack time: %0.3fN(RIR$R8t	findReposRORRdRkR-RtgetPackageSacktsetCompatArchstpopulateSacktexcludePackagestexcludeArchsR9tincludePackagesR!RtbuildIndexestcostExcludePackages(R/RRR8tsack_sttarchdictR-R6((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.
RaiN(R$RIR8tvaluesRgRRbRcRdReRf(R/R6((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt	_delSacks<s	
cCs)titdtidd|iS(Ns9doUpdateSetup() will go away in a future version of Yum.
Rai(RbRcRdReRft_getUpdates(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
doUpdateSetupMscCs|io|iS|iitdti}tii|ii	|i
i	|_|iidjod|i_n|ii
oCti}|i
i|i_|iidti|n|ii|i_|ii|i_|ii|i_|ii|i_|ii|i_|ii|i_ti}|ii|iidti||ii
o;ti}|ii|iidti|nti}|ii|iidti||iidti||iS(	snsetups up the update object in the base class and fills out the
           updates, obsoletes and others listssBuilding updates objectiisup:Obs Init time: %0.3fsup:simple updates time: %0.3fsup:obs time: %0.3fsup:condense time: %0.3fsupdates time: %0.3f(RFRORRdRktrpmUtilstupdatestUpdatestrpmdbt
simplePkgListtpkgSackR^R&t	obsoletestreturnObsoletestrawobsoletesR-Rntmyarchtmultilibt_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__.pyRSs:
*
"


"
cCs2titdtiddd|_|iS(Ns8doGroupSetup() will go away in a future version of Yum.
Rai(RbRcRdReRfR$Rt
_getGroups(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdoGroupSetup|s	cCsO|djo5|io'x$|iiD]}t|_q'WqBn||_dS(N(R$R7tlistGroupsEnabledR=tgroups_addedRG(R/tvalR6((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
_setGroupss

c		CsP|io|iSti}|iititdg}|iix|ii	D]}}|i
o|i|q]n|ipt
id|ny|i}Wnt
ij
o	}q]X|i|q]W|ii}tid||_x|D]}|i
oqn|iititd||i}|d
j	o#|idoti|}ny|ii|WnMt
it
ifj
o5}td|t|f}|ii|qXt |_
qW|ii!djot
itdn|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.gzs1Failed to add groups file for repository: %s - %sis%No Groups Available in any repositorysgroup time: %0.3fN(&RGRkRORRRRdR8RRRtappendtreadyReRtgetGroupLocationtRepoMDErrorR^R
RtCompst	getGroupsR$tendswithtgziptopenRtGroupsErrortCompsExceptionRRNtcriticalRt
compscounttcompileRRR(	R/tgroup_sttreposWithGroupsR6tgroupremoteRt	overwritet	groupfileR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRsR







cCs9|idjo"tiid|ii|_n|iS(seauto create the history object that to access/append the transaction
           history information. RN(RHR$RvRZt
YumHistoryR^R(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_getHistorys"tfgetcCs
|iS((R(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt<lambda>stfsetcCst|d|S(R7(Rl(R/tvalue((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!stfdelcCs
|iS((R(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCs
|iS((R(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCst|d|S(RI(Rl(R/R#((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCs
|iS((R(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCs
|iS((R(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCst|d|S(RC(Rl(R/R#((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCst|ddS(RCN(RlR$(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCs
|iS((R(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCst|d|S(RE(Rl(R/R#((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCst|ddS(REN(RlR$(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCs
|iS((t
_getTsInfo(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCs
|i|S((t
_setTsInfo(R/R#((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCs
|iS((t
_delTsInfo(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCs
|iS((t_getActionTs(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCs
|iS((R(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCs
|iS((R(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCst|d|S(RF(Rl(R/R#((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCst|ddS(RFN(RlR$(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCs
|iS((R(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCs
|i|S((R	(R/R#((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCst|ddS(RGN(RlR$(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCs
|iS((R(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCst|d|S(RH(Rl(R/R#((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCst|ddS(RHN(RlR$(R/((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!scCst}|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(
R=RR8R9R;taddedRRdRORRtINFO_2R(R/t	necessaryR6R((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-utilsNtttermtboldtnormals5The program %s%s%s is found in the yum-utils package.(R/R/(RtcontainsRgR0tMODERd(R/tfunctprogthibegthiend((s0/usr/lib/python2.6/site-packages/yum/__init__.pytyumUtilsMsgs%cCs|o\tid|iioCtd}|ii||i|iidti	dn|i
idti}|i\}}|i
d|i_|iiof|djoYg|_ti}|i||\}}|i|iidti|n|i
idd	|d
||iio|i|dj\}}n|iidj	o|iiin|ii|iidti|||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
preresolveisSkip-Broken time: %0.3ftpostresolvetrescodetrestringsDepsolve time: %0.3fN(tmisctfind_unfinished_transactionsR^t
persistdirRdRNRR9RktsleepR!RtresolveDepst_limit_installonly_pkgsR$RRtskip_brokenRKt_skipPackagesWithProblemst_printTransactionRORttsInfotchangedRR(R/tunfinished_transactions_checkRtds_stR=R>tsb_st((s0/usr/lib/python2.6/site-packages/yum/__init__.pytbuildTransactions2
	
"

c	s~fd}fdd}t}t|}d}xXtidjoA|djo4|d7}iitd|ii}ti}	t}
xTiD]I\}}}
ii	|i
p||||
q||||
qWxf|
D]^}i|}xF|D]>}|i||jo|i
djo|q9q9WqW|
pC|d7}|djoPqiidiid	tnit\}}ti}|	|tjoC|d7}|djoPqDiid
iid	tn|djoMiidiid	tiii\}}qKqKW|djoiitd|iitd
g}|D]
}||q~}|ix@|D]8}tdt||iif}ii|qW|_niidd|fS||fS(s= Remove the packages with depsolve errors and depsolve again cs-|pdSi||||dS(N(t_getPackagesToRemove(tpotdepTreettoRemove(R/t_remove_from_sack(s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_remove9scsi|}xz|D]r}|idjo[|joNiidt|ii|ii|ii	|qqWdS(NRs.SKIPBROKEN: removing %s from pkgSack & updates(
t_getPackagesToRemoveAllArchtrepoidRORRRt
delPackagetupR>R(ROtpkgstpkg(tremoved_from_sackR/(s0/usr/lib/python2.6/site-packages/yum/__init__.pyRR@siisSkip-broken round %iRisESKIPBROKEN: resetting already resolved packages (no packages to skip)thardsISKIPBROKEN: resetting already resolved packages (transaction not changed)s0SKIPBROKEN: sanity check the current transactionsSkip-broken took %i rounds s1
Packages skipped because of dependency problems:s    %s from %ss$Skip-broken could not solve problems(RTtlentpo_with_problemsRORRdRGt
_buildDepTreeRHRqR>t_skipFromTransactionRRUt
resetResolvedRRCt_checkMissingObsoletedt_checkUpdatedLeftoverstinfotsortRR6tidRK(R/R=R>RStcountt
skipped_pot
orig_restringtloopingRPtstartTsRQROtwpoterrtskippedtskiptendTst_[1]tptskipped_listR((R/RZRRs0/usr/lib/python2.6/site-packages/yum/__init__.pyRF6sz		#

	









!
"

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(RHtgetMembersWithStateR$t
TS_OBSOLETINGtTS_OBSOLETEDRRqR>taddObsoletedRORORtobsoleted_bytremove(R/ttxmbrRYtobs((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRas
%
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(RHRsR$t
TS_UPDATEDt
updated_byRqR>RORRORx(R/RyRY((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRbs
c
Csg}|iios|i\}}}}}xe|iiD]F}|||||f}|ii|||||}	|i|	q8Wn|i||S(s, get all compatible arch packages in pkgSack(R-RR>RRtsearchNevratextendR(
R/RORXtntaRtvtrR>tmatched((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRTs


cCsg}|i\}}}}}x|iiD]t}|||||f}|ii|oFxC|ii|D]+}	|	i}
|i|
}|i|qlWq+q+W|S(N(	R>R-RRHRqt
getMembersROt_removePoFromTransactionR~(R/RORmRRRRRR>RyRYRn((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(	RHRqR>RORRRxRUR(R/RORn((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRscCsNh}xA|iD]6}x-|iD]"}|i|gi|iq WqW|S(s& create a dictionary with po and deps (RHt
depends_ont
setdefaultRRO(R/RPRytdep((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR^s

$cCs@x9|iD]+\}}|GHx|D]}dG|GHq%Wq
WdS(Ns	(t	iteritems(R/ttreeRYtlRq((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
_printDepTrees
cCshdt6dt6dt6dt6dt6dt6dt6dt6}|ii	t
id	t|i
x|i
D]v}d
||i|if}|ii	t
i|x=|iD]2\}}d||f}|ii	t
i|qWqkWdS(NRtinstallttrueinstallteraset	obsoletedt
obsoletingt	availabletupdateds+TSINFO: Current Transaction : %i member(s) s
  %-11s : %s s                   %s : %s(t	TS_UPDATEt
TS_INSTALLtTS_TRUEINSTALLtTS_ERASERuRttTS_AVAILABLER{RORRtDEBUG_2R\RHtoutput_stateROt	relatedto(R/tstateRyRROtrel((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRGs"

#

cCs|i|xX|ii|iD]A}x8|i|iD]&}|i||i|||q:Wq#W|i|||dS(s2
        get the (related) pos to remove.
        N(RRHRR>RRt_getDepsToRemove(R/ROtdeptreeRQRyRY((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRNs

cCsx|i|gD]n}xE|ii|iD].}x%|i|iD]}|i|qFWq/W|i||i|||qWdS(N(tgetRHRR>RRRR(R/RORRQRRyRY((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs
cCs|iidx6|iiD]%}|io|iidPq q Wt|i}|ii	d|}|ii
dtd}|ii
}|dj	o
|i}n|dj	o-||jo td}|ii|n|iio#|ii||t|in|ii|id}ti}	d|	_|djont|djo)td}|ii|d	|	_nd|iioJg}
|D]}|
tt |q~
}|ii!|d
d|nt"i#||ii$p|i%nxzdD]r}
t&||
o\t'||
}yti(|Wqt)t*fj
o#}|ii+td|qXqqW|ii,|iid|i-|	|	S(s6takes an rpm callback object, performs the transactiontpretranssyum-metadata-parsertpatternst	main_onlyis?Warning: RPMDB has been altered since the last yum transaction.R/sIWarning: scriptlet or other non-fatal errors occurred during transaction.iiterrorst	ts_all_fnt
ts_done_fns$Failed to remove transaction file %st	posttransN(RR(.R!RR8R9t_xml2sqlite_localRURtlistRtreturnPackagest
simpleVersionRRZtlastR$tend_rpmdbversionRdRNRR^thistory_recordtbegRHRtcallbackR?t
GenericHoldertreturn_codeR\RORRRtendRetYumBaseErrort	keepcachetcleanUsedHeadersPackagesRgtgetattrtunlink_ftIOErrortOSErrorRRtverifyTransaction(R/tcbR6tusing_pkgs_patst
using_pkgstrpmdbvtlastdbvt	errstringRtresultobjectRptxtherrorstiRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytrunTransactionsX
	


#	


-
'

cCsJ|iix|iD]}|itjo|iid|ip$|iit	d|iqn|i
|i}|i}|i|i
_|i|i
_|id|i
_t|do&|iodi|i|i
_n|i}|dj	o0t|d|i
_t|d|i
_nt|toiy[ti|i}tt |i!}tt |i"}||i
_#||i
_$WqqXnt|i%dpqn|i%i&}	|	o)|	i'dj	ot|	i'|i
_#n|	ot|	i(|i
_$qq|it)jo|iid|ioG|ii*d	|id
tp$|iit	d|iqqn|ii+i,d|i}
|
i-q|i.i/t0i1d|iqW|i2i3oJd
}|dj	o
|i4}n|i5i6|ii7dt8d|n|iidS(snchecks that the transaction did what we expected it to do. Also 
           propagates our external yumdb infoROs+%s was supposed to be installed but is not!R.tcmdst iitrepoXMLR>t
output_statess)%s was supposed to be removed but is not!sWhat is this? %siRN(9RRRHRtTS_INSTALL_STATESR3RORNRRdtgetInstalledPackageObjectR>RUt
yumdb_infot	from_repotreasonRR.RgRtjointcommand_linetreturnIdSumR$Rt
checksum_typet
checksum_dataRRRoRtlocalPkgtinttst_ctimetst_mtimetfrom_repo_revisiontfrom_repo_timestampR6Rtrevisiont	timestamptTS_REMOVE_STATESRstyumdbtget_packagetcleanRORRRR^RRRZRRR(R/RRyROtrpotcsumtsttlp_ctimetlp_mtimetmdt
yumdb_itemtret((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRUsf

	

!


*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(R8R9RR:RR\R=RR4R;taddPackageExcluderReR~R(	R/tcostsRtdonetexidtoreposR:R6tyce((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs& 
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.tallNRsyum.excludepkgssyum.excludepkgs.iis%s.%us
exclude.match(R^tdisable_excludesRR$RetgetExcludePkgListRR(R/R6texcludelistRUtexid_begRftmatchR((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(tgetIncludePkgListR\RRRe(R/R6tincludelistRRfR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs
 c
Cs|iidjodS|ii}|d|}tii|}tti}x|i||dpt	|d}yt
|i}Wn tj
o|i
|qYX|tijoPnyti|dWn_tj
oS}|dtijo|i
|qptd|}tid||qYXtd||f}tid||qYW||_dS(	sAperform the yum locking, raise yum-based exceptions, not OSErrorsiNRiRs#Unable to check if PID %s is activeis4Existing lock %s: another copy is running as pid %s.(R^RRRoRptnormpathRtgetpidt_lockRRtreadlinet
ValueErrort_unlocktkillRterrnotESRCHRdRet	LockErrorRJ(R/tlockfileRtmypidtfdtoldpidRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdoLocks2cCst|dp|iidjodS|dj	o|ii}|d|}n|idjodS|i}|i|d|_dS(sdo the unlock for yumRSiNR(RgR^RR$RRJR(R/RR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRXs#
	
R/icCstii|}yTtii|pti|ddnti|titiBtiB|}Wnat	j
oU}|i
t
ijp8td|t
|f}ti|i
||ndSXti||ti|dSdS(Ntmodeis Could not create lock at %s: %s ii(RoRptdirnameRqtmakedirsRtO_EXCLtO_CREATtO_WRONLYRRtEEXISTRdRReRtwriteRV(R/tfilenametcontentsRtlockdirRRterrmsg((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR's*
cCsti|dS(N(R?R(R/R((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR8scCs0t}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|otdtdq,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 successiis(Package does not match intended download(R=ttypettypestInstanceTypeRRt	localpathtverifyLocalPkgRRRt
readOnlyTSR>RoRtlongtsizeR6R_t
startswithRtunlinkR	Rd(R/tfoROt
raiseErrortfailedtylptcursizettotsize((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt	verifyPkg;s(




cCspyti||}Wn-tij
o}tdtdnX||jotdtdndS(sHVerify the checksum of the file versus the 
           provided checksumisCould not perform checksumisPackage does not match checksumi(R?tchecksumRet	MiscErrorR	Rd(R/RtchecksumTypeRtfilesumR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytverifyChecksumes
csd}hfd}|iidd|t}g}d}x|D]}	t|	do|	idjoqMn|	i}
tii|
or|i	|
|	tp8|	i
io't}||	t
d|	i
iqq|iit
d	|	fqMn|i|	||	i7}|iip|ooSqMW|i|ttid
o't|djotii|nti}d}d}
x|D]}	|	i}
|d7}tii|
o|i	|
|	to[|iit
d	|	f||	i8}ttid
otii||
qqntii|
|	ijoti|
qn|i	|	dfhf}ti|	i
i}|i|it |	ijoF||	t
d|	i
it!|i|it!|	ifqny|djo1|
o)||	ijotii"|	i#}n)d
|t|tii"|	i#f}|	i
i$|	d|d|d|	i
i%dj}|
|	i7}
ttid
otii||
nWn+t&i'j
o}||	t(|qX||	_)i*|	o|	=qqWttid
otiidn|dj	oo||||n|iidd|dS(NcSs|i}|i}|djo|djot||S|djodS|djodS||jodS||jodSdS(Niii(t
getDiscNumR$tcmp(tapotbpoRtb((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt	mediasortts



csi|gi|dS(N(RR(ROR(R(s0/usr/lib/python2.6/site-packages/yum/__init__.pytadderrorstpredownloadtpkglistitpkgtypetlocals4package fails checksum but caching is enabled for %ssusing local copy of %sttext_meter_total_sizeisKInsufficient space in download directory %s
    * free   %s
    * needed %ss(%s/%s): %st	checkfuncttextR_tnonetpostdownloadR(,R!RR=RgR1RRoRpRqR"R6R_RRdReRORRRR^Rdt
urlgrabbertprogressR\R3RktgetsizeRtstatvfstpkgdirtf_bavailtf_bsizeRR
tbasenametrelativepatht
getPackagethttp_cachingReRRRthas_keyR$(R/R0Rtcallback_totalR-R.trepo_cachedtremote_pkgstremote_sizeROR2tbeg_downloadRt
local_sizeR4tdirstatR5tmylocalR((Rs0/usr/lib/python2.6/site-packages/yum/__init__.pytdownloadPkgsss	 


	


 	%
	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(RRRRtrpmtreadHeaderListFromFileRt
IndexErrorR	RdRR>(R/RRORthlistthdrtyip((s0/usr/lib/python2.6/site-packages/yum/__init__.pytverifyHeaders
	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 problemsR1R2NRisKHeader not in local cache and caching-only mode enabled. Cannot download %sR4R_R6(RgR1tlocalHdrR8tgetRepoRURoRpRqRSR	R?RthdrpathR^R_ReRRdt
dsCallbacktdownloadHeaderRthdrdirRt	getHeaderRBR(
R/RORR2R6tresultRR4RVtsaved_repo_error((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRXs@ 	

	c
Cst|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.
        R1R2iR/iis"Public key for %s is not installedsProblem opening package %sis Public key for %s is not trustedisPackage %s is not signed(RgR1R^tgpgcheckR8RURUtgpgkeyRRRt	miscutilstcheckSigRRoRpR?Rd(
R/ROtcheckt	hasgpgkeyR6Rt	sigresulttlocalfnR[R((s0/usr/lib/python2.6/site-packages/yum/__init__.pytsigCheckPkg2sB
 
	







c
Csg}x|iD]}|iitjoqn|iidjoqn|iii|iipqn|ii|ii}t}x,|iD]!}|i	dot
}PqqW|o|i|iigq|i|ii
|iigqWx|D]}tii|pqnyti|Wn1tj
o%}|iitd|qqX|iititd|qWdS(NRsfile:sCannot remove %ss
%s removed(RHRORRRUR8RCR=tbaseurlRRR~RTRRoRpRqR?RRRNRRdRORRR(R/tfilelistRyR6R2tuRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRjs<

	)cCsdg}|i|ddS(NRQRYtheader(t_cleanFiles(R/texts((s0/usr/lib/python2.6/site-packages/yum/__init__.pytcleanHeaderss	cCsdg}|i|ddS(NRMR<tpackage(Rj(R/Rk((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
cleanPackagess	cCsddg}|i|ddS(Ntsqlites
sqlite.bz2R(Rj(R/Rk((s0/usr/lib/python2.6/site-packages/yum/__init__.pytcleanSqlitescCs(dddddg}|i|ddS(Nsxml.gztxmltcachecookiesmirrorlist.txttascRtmetadata(Rj(R/Rk((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
cleanMetadatascCsddg}|i|ddS(NRrsmirrorlist.txtRRt(Rj(R/Rk((s0/usr/lib/python2.6/site-packages/yum/__init__.pytcleanExpireCachescCs-g}d}xv|D]n}xe|iiD]T}t||}tii|o,tii|oti|||}q)q)WqWx|D]z}	yti	|	Wn4t
j
o(}
|iit
d||	qqX|iitit
d||	|d7}qWt
d||f}d|gfS(NisCannot remove %s file %ss%s file %s removedis%d %s files removed(R8R9RRoRpRqRR?tgetFileListRRRNRRdRORRR(R/RktpathattrtfiletypeRgtremovedtextR6RptitemRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRjs*&!Rc,CsD|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}nXxv|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|\}}}||}
qn|djo|iid|d|}nU|djoN|o|iid|d|}n?y|ii
d|d|}Wntij
o
g}nXx|D]}|o8|iid|o|i|q|i|q|ii|id|i	}|ot|dtd} n|p|i
| o|i|q|i| o|i|q|	i|qWn|djor|iid|d|}t |}x|iid|d|D]'}|i|jo|i|qFqFWn{|djo<d|i_!x|ii"D]\}!}"|!\}}}}}|iid|d|d	|d
|d|}#|i#|"}$x.|#D]&}|i||i||$fqWqW|ot||d|\}}}||}t |}%g}&x;|D]3\}}$||%joqyn|&i||$fqyW|&}qn2|djo$t$i$}'|'|ii%d}(h})|o|iid|d|}n?y|ii
d|d|}Wntij
o
g}nXx`|D]X}t&|i'}*|*|(jo6|)i(|*p|g|)|*<q|)|*i|q\q\Wx4|)D](}+x|)|+D]}|
i|qWqWn||_)||_*||_+|	|_,|
|_-||_!||_.|
|_%||_/|S(sBgenerates lists of packages, un-reduced, based on pkgnarrow optiontiterRRtignore_caseRRR-tepochtverRiis,More than one identical match in sack for %ss*Nothing matches %s.%s %s:%s-%s from updatet	casematchRRROtreversetextrasRtrecentiQN(0R$R^tshowdupesfromreposR?RRRR>RR-tverGTRRtreturnNewestByNameArchRetPackageSackErrorRRWtgetUpdatesListR}R\RORRtDEBUG_1RdRR3RRtverEQRRTRtgetObsoletesTuplesRRkRRtfiletimeRCRRtreinstall_availablet
old_availableRtobsoletesTuplesR(,R/t	pkgnarrowRtshowdupsR~tyghRRRRRRRRRtictdinsttndinstROtkeytavailRYRRRRRtmatchest
exactmatchRt	unmatchedtipkgstlatestR>tinstTupRXtinstpotmatched_obsoletestnobsoletesTuplestnowtrecentlimitt	ftimehashtftimetsometime((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdoPackageListss4


!

!
	 





	
-






									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((trequiresRdRtwhatProvidesR(R/RXtresultsRYtreqst
pkgresultstreqRtfRt
satisfiersRO((s0/usr/lib/python2.6/site-packages/yum/__init__.pytfindDepsws$	
	

c#s-g}x@D]8}ti|o|it|q
|i|q
Wh}h}g}	g}
x|D]}|
i|qhWghx1|D])}i|i||i<qWx3|iiiD]}|	i|i||
qWfd}
|
|	||i	idt
}	|i|
|	|~	ti
d}|o
d}nh}xtt|D]}xt||d|D]|\}}}|o |i|if|joqn|o|||fVn||fV|pd||i|if<qqWqWdS(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. c	sx|D]\}}t}g}||jog||<nxyD]q}xhD]`}tt||}|o>|ii|djo"|i||i|qQqQWqDWt|djo||i|||fqqWdS(Nii(RTRRtlowerRRRR\(	ttmprestsorted_listsRORfttmpkeyst	tmpvalueststfieldR#(trcl2ctfieldstreal_crit_lower(s0/usr/lib/python2.6/site-packages/yum/__init__.pytresults2sorted_listss 	
#
tloweredicSs+ddit|dt|dfS(s%s%stii(RRR(R((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!sRiN(t
RPM_TO_SQLITERCRRRtsacksRR~t"searchPrimaryFieldsMultipleStringsRRRWtoperatort
itemgettertreversedRRR-(R/RtcriteriaRtkeyst
sql_fieldsRtmatched_valuesRRt	real_critRR;Rt	sort_functyieldedRROtkstvs((RRRs0/usr/lib/python2.6/site-packages/yum/__init__.pytsearchGeneratorsZ
	


!cCstitdtiddh}|i||}x[|D]S\}}|o|||n|i|pg||<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. 
Rai(RbRcRdReRfRRCR~(R/RRRRt	match_genROtmatched_strings((s0/usr/lib/python2.6/site-packages/yum/__init__.pytsearchPackagess	cCsh}x|D]}t|}ti|p+t}|ddjo
t}qot}nt}ti|}|pt}|i|}	nt}|ii|t}	|i	i
tit
dt|	x|	D]}
|i	i
tit
d|
g}|o|i|n|o|o|i|n|om|of|i	i
tit
dxG|
i|
i|
iD]*}ti||o|i|q{q{Wn|i	i
tit
dx|
iD]{\}
}\}}}ti|
||||ff}|p;ti|
|pti||o|i|qNqqWt|djoI|o4|o|o||
||q||
|n|||
<qqWq
Wddd	g}x|D]}ti|p+t}|ddjo
t}qt}n
t}t}|p|i|}	t}x|	D]}
g}t
d
t|}|i|t|djoA|o,|o||
||q||
|n|||
<q<q<Wqt}|i}	x|	D]}
g}g}xe|D]]}t|
|}|djoqnt|tijo|i|q|i|qWx2|D]*}ti||o|i|q^q^Wt|djo&|o||
|n|||
<qqWqW|S(NiRsSearching %d packagesssearching package %sssearching in file entriesssearching in provides entriesRgtdirnamestprovides_namessProvides-match: %s(RR?tre_globR=Rtre_filenametreturnPackagesByDepRt	searchAllRORRRRdR\RRtdirlistRgt	ghostlisttfnmatchtprovidestprco_tuple_to_stringtreturnInstalledPackagesByDepRRR$RRtListTypeR~(R/targsRtcallback_has_matchforRRtisglobt	canBeFilet
usedDepStringtwhereRORtthisfiletp_nametp_flagtp_etp_vtp_rtprovttaglistRt
searchlistttagttagdataR|((s0/usr/lib/python2.6/site-packages/yum/__init__.pytsearchPackageProvidess




!&


	
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(
RRReRRdR$tgroupst
return_groupsRRtuser_visibleRR(R/tuservisibleRR~RRtgrpstgrp((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdoGroupListsps(




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(
RRReRRdRttoremovetpackagesRxR~RRtgroupid(	R/tgrpidttxmbrs_usedtthesegroupst	thisgroupRXRYttxmbrsRy((s0/usr/lib/python2.6/site-packages/yum/__init__.pytgroupRemoves 		

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(RRReRRdR=RRRHRORRRRRxRRORRRR\R>(R/RRRRXRYRy((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
groupUnremoves*		

&c
Cs|ii|ptitd|ng}|ii|}|ptitd|n|ii}|o
|}nx7|D]/}|ioqnt	|_g}d|jo|i
|ind|jo|i
|ind|jo|i
|i
nx|D]}	|iititd|	|iy|id|	}
Wn1tij
o"}|iitd|	qX|i
|
x!|
D]}|ii|iqWqW|ii}
|d
j	o
|}
n|
ox|iiD]\}}|i|oy|id|}
Wntij
o
qn)X||iijog|ii|<n|i
|
x;|
D]3}|ii|i|ii|i|iqWqn|i i!d|}|o|i"i#or|ii$djo[g}|i"i%}|id	x/|D]'}	|	i"|jo|i|	q'q'W|}q`nt&|}|iii'|pg|ii|<n|ii|i
|qqWqqW|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 installedtbesttnoarchN((Rt	has_groupReRRdRR^tgroup_package_typestselectedRR~tmandatory_packagestdefault_packagestoptional_packagesRORRRRRtInstallErrorRRRtenable_group_conditionalsR$tconditional_packagesRtisPackageInstalledRHtconditionalsRORR}R-Rtmultilib_policytlegit_multi_archesRRC(R/RR
RRRt
package_typesRRXRYRRRytgroup_conditionalstcondreqtcondtuseR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytselectGroups	

	








'c	Cs|ii|ptitd|n|ii|}|ptitd|nx$|D]}t|_x
|iD]}x|i	D]}|i
i|jo|i
it
joy|ii|Wn;tj
o/|iititd|i
|qnXt|idjoS|i	i|i
ix:|i	ii|igD]}|i	i|iqVWq{qqWqWqgWdS(s1de-mark all the packages in the group for installsNo Group named %s existss%package %s was not marked in group %siN(RR	ReRRdRR=RRRHRORRRRRxRRORRRR\R>RR(R/RRRRRyRY((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
deselectGroup	s2	

&cCsx&|iD]}|i|jo|Sq
W|ii|}t|djo titdt|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 packagesacki(	RQR>RtsearchPkgTupleR\RetDepErrorRdR(R/R>RORXR[((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(RRR\Ret
RpmDBErrorRdR(R/R>RXRO((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRX	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.yumiRRs
gpg-pubkeyitwN(R^RRoRpRqRttransactiontinitReadOnlyTransactionRtpushVSFlagsRMt_RPMVSF_NOSIGNATURESt_RPMVSF_NODIGESTStdbMatchRfRRRRV(R/tgpgkeyscheckedtmytstidxRtmydirR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytgpgKeyChecke	s$

c	Csg}t|tijo|\}}}n|}d}d}|ddjoc|i}t|djo@|\}}}|tjotit	dnt|}qn|i
|||}|i}|S(s~Pass in a generic [build]require string and this function will 
           pass back the packages it finds providing that dep.iRisInvalid version flagN(RRt	TupleTypeR$tsplitR\tSYMBOLFLAGSReRRdRR(	R/t	depstringRtdepnametdepflagstdepvert	dep_splitt
flagsymbolR;((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR	s 
cCs|}t|tijot|}ny|i|}Wn,tij
otitd|nXt|}|i	|i
}|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 %sN(RRtStringTypesRRReRRdRt_bestPackageFromListRR$(R/R0RterrtringR0tpsR[((s0/usr/lib/python2.6/site-packages/yum/__init__.pytreturnPackageByDep	s
cCst|tijo|\}}}n|}d}d}|ddjoc|i}t|djo@|\}}}|tjotit	dnt|}qn|i
i|||iS(sPass in a generic [build]require string and this function will 
           pass back the installed packages it finds providing that dep.iRisInvalid version flagN(
RRR-R$R.R\R/ReRRdRtgetProvidesR(R/R0R1R2R3R4R5((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR	s
cCsRt|djodSt|djo	|dS|i|d}|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.iiN(R\R$t_compare_providers(R/R0tbestlist((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR7	s	cCsg}|ii|}g}g}g}xw|D]o}	|	i|joq1q1|	idjo|i|	q1td|	io|i|	q1|i|	q1W|i|}
|i|}|i|}|o+|
o$|o|
i|ijo
d}n|djo4|
o|i|
n|o|i|qn|
oj|i|
|g}
|
idjo|i|q|
o|i|
n|o|i|qn\|oG|i||g}
|
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-N(R-t
get_arch_listRRR7RR$(R/R0R-tsingle_namet
returnlisttcompatArchListtmultiLibt	singleLibRROtmultitsingletnoR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytbestPackagesFromList	sN(


cCsT|ii|ig}|i|io%||id}|i|}|SdS(s Given a package return the package it's obsoleted by and so
            we should install instead. Or None if there isn't one. iN(RWtcheckForObsoleteR>RCRR$(R/ROtthispkgobsdictRtobsoleting_pkg((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_pkg2obspkg
s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(R=RR$(R/tnodet	next_functslowRtnext((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
_test_loop)
s 


cCs|d}g}xu|ii|D]a}y#|i|i}|i|Wq#tiij
o#|ii	t
d|q#q#Xq#W|S(sD Do groupinstall via. leading @ on the cmd line, for install/update.is!Warning: Group %s does not exist.(RRRRR~RvReRRNRRd(R/tpatterntgroup_stringt	tx_returntgroupR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_at_groupinstall;
s
cCsi|d}g}y|i|}Wn2tiij
o |iitd|nX|i||S(s; Do groupremove via. leading @ on the cmd line, for remove.isNo group named %s exists(RRvReRRNRRdR~(R/RQRRRSR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_at_groupremoveI
s

cCsw|d}|ii|}|ptitd|nt}x|D]}|i|iqMW|ii	|S(s8 Do downgrade of a group via. leading @ on the cmd line.isNo Group named %s exists(
RRReRRdRTRRRtsearchNames(R/RQRRtpkgnamesR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_at_groupdowngradeX
s
	ccst|tpUx|iid|iD]4\}}|i|jo|i|}|Vq)q)Wnx|iD]x\}}\}}}	x]|ii	d|D]F}
|
id|
i
|
i|
iff}|i
d|o	|
VqqWqoWdS(s; Return the pkgs. that are obsoleted by the po we pass in. RtEQRN(RRRWtgetObsoletersTuplesRR>RRRR}RRtreleasetinPrcoRange(R/ROtobstuptinst_tupt
installed_pkgtobs_ntobs_ftobs_etobs_vtobs_rRYtinstalledtup((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_find_obsoleteese
s
cGs?x8|D]0}||iijo|iii|qqWdS(sB Add all of the passed flags to the tsInfo.probFilterFlags array. N(RHtprobFilterFlagsR(R/tflagstflag((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_add_prob_flagst
scKszg}t}|oGt|tpt|to|i|qtitdn6|ptitdn|ido(|dddjo|i	|dSt
}|dg}|iid|dt}|i
||p|d}|iitd|y|i|}Wn5tiij
o#}|iitd	|qX|o*ti|o|i|d
t
}n|o|i
|qqnQ|i|}	|iid|	dd|	dd
|	d
d|	dd|	d}|o|iio|p|	d
o|iidjoh}
g}g}|ii}
|
idxI|D]A}|i|
jod|
|i<|i|qk|i|qkWx/|D]'}|i|
jo|i|qqW|}qqnt |}h}xI|D]A}|i|ip|g||i<q
||ii|q
Wg}x*|i!D]}|i
|i|qeW|}n|pd|jo&|i"id|dgdt}nd|jo|i"id|d}nd|jo!|i"id|dd}nto.x+|D]}|ii#td|q/Wn|ogStitdng}x|D]}|i$i%d|i&ob|i$i'|i&t(oE|ii)t*i+td||i
|i$i,d|i&qqn|i-i.i|i&o&|i/d|}|i
|qn|i0||i1}|d j	od }|id|i3|i4|i5ff}x@|i"id|iD]&}|i6d|o
|}qqqW|o |ii#td||q|ii#td|i|i||i
|i7d|qn|i"i8d|o=|i$i'|i&t9p |ii#td|qqn|i:|pt
}xS|i"id|id
|iD]0}t}|i$i'|i&t9ot
}PqqW|p?|ii#td||i/d|}|i
|qqInx|i"id|id
|iD]o}|i;|o4|i<t=i>t=i?t=i@|i$iA|i&Pn|iB|o|i<t=iCPqkqkW|i&|i-iDd|ijoSxo|iE|D];}|i$iF||}|i$iG|||i|qWq|i$iH|}|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 installRQit@RR~s3Checking for virtual provide or file-provide for %ssNo Match for argument: %sR?RRR-RtversionRR\RRiR>s&Package %s installed and not availables"No package(s) available to installs)Package: %s  - already in transaction setRORZRs8Package %s is obsoleted by %s which is already installeds;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(IR=RRRRReRRdRCRURRRR~RORRRvRRNRR?RRGt_nevra_kwarg_parseR}R-RR^RRRRRRRRHRqR>RsRRRRRRWt
updating_dictRRPRKR$RRR\R]RR3RtallowedMultipleInstallsRRkRMtRPMPROB_FILTER_REPLACEPKGtRPMPROB_FILTER_REPLACENEWFILEStRPMPROB_FILTER_REPLACEOLDFILESRxRtRPMPROB_FILTER_OLDPACKAGEtgetObsoletesListRgt
addObsoletingRvt
addInstall(R/RORRXtwas_patterntpatstmypkgsRRt
nevra_dicttpkgs_by_nameRt	not_addedRRYt	pkgbynametlstRSRRJtalready_obst	poprovtuptfoundtipkgt	obsoleteeRy((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRz
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. RRO(RTt
returnPrcot
differenceRHtgetRequiresR]RR-RRR~R(R/topkgtnpkgtoprovstnprovsRSRRRYRtnaTup((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_check_new_update_providesUs"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(
R=RHRsR{R|tverLERR>RxRORR~R(
R/R>t
available_pkgRSRRyRfROtntxmbrttxs((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_newer_update_in_transgs$
	
cCsa|ii||}|o|i|nd|ijo |iidjo
d|_n|S(NRR(RHt	addUpdatetsetAsDepRR(R/trequiringPotupkgRRy((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
_add_up_txmbr~s#
c&Ks	g}|o|o||iititd|ii}|iio|ii	dd}ng}x|D]\}}|i
|}	|i|	|i}
|
dj	o
|
}	n|i|}|ii|	|}|ii||	|o|i|n|i|qtWxo|D]g\}
}|iid|o#|iititd|q"|i|id|i
|
q"W|Sg}g}|o2|idjo|i|q|i|nB|idoZ|dd	d
jo|i|dS|ii|dg\}}}|i||i||olg}|d	}y|i|}Wn5tiij
o#}|i i!td|nX|i|ny&|dg}|i"i#d|}Wnti$j
o
g}nX|i||o&|o|i i!td
|qn|i%|}|ii&d|dd|dd|dd|dd|d}|p|i"i&d|dd|dd|dd|dd|d}t'|djo(|i(||}t)d|}qn|iiobx|D]{}|ii*i+|i,g}g}|D]}||i
|qX~}x-t-|D]}	|i|i.d|	qWq,Wx|D]}x|ii/i+|i,gD]}|i|}|ii||}|o|i|n|i||ii|o#|iititd|q|ii||}|i|qWqWnxA|D]9}x0|ii0i+|i,gD]}|i
|}|ii|i,o&|iititd|i,q|i,|ii1d|i2jo~x|i3|D]f} |ii4||}|o|i|n|ii|| |ii| ||i|q3Wq|i5|||}|i|qWqWxC|D];}|i||i}	|	dj	o?|iititd||i|id|	qnx|ii6i+|i,gD]}!|ii|!o#|iititd|!qU|i7|!||o#|iititd|!qU|i|!}"|i5|||"}|i|qUW|ii&d|i2d|i8}#|#o$|i9|ot:|#d}#nx|#D]}$|ii|$i,o&|iititd|$i,qR|i7|$i,||o&|iititd|$i,qR|$i;|o&|i5|||$}|i|qRqRWqWxu|D]m}xd|ii&d|i2D]J}%|%|i<jo4|i=|i>|%o|ii?|%|i>q	q7	q7	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 EverythingtnewestiR>s>Not Updating Package that is already obsoleted: %s.%s %s:%s-%sRORRQiRls%sRsNo Match for argument: %sRRR-RRmRR\cSs|dS(i((R((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!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(@RORRRRdRWtgetUpdatesTuplesR^RRRRPRKR$RRHRvRvRRtisObsoletedR~RRURCRURtmatchPackageNamesRRvReRRNRRRRRnR}R\R<tmaptobsoleted_dictRR>RRtobsoleting_dicttupdatesdictRuRRgRRRoRR-RpRtverLTRt_does_this_updateROt
addUpdated(&R/RORRRSRRRRRJttopkgR`Rytnewtoldtinstpkgst	availpkgsRtmRht
depmatchesRRyR{tobs_tupsRpttuptobs_pkgsRRt
obsoleted_pkgtupdatingRRtupdated_pkgtpot_updatedRti_pkg((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs(


&"




"
*
!
#"

	!
&cKs|o|otidng}g}|o
|g}n|ido|dddjo|i|dS|ii|dg\}}}|i||i||og}|d}	y|i|	}Wn5tii	j
o#}|i
itd|nX|p|i
itd|	qK|i|qn|i
|}
|iid|
dd|
dd	|
d	d
|
dd|
d
}t|djo1|idtp|i
itdqnx-|D]%}|ii|}|i|qW|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 removeRQiRls%ssNo Match for argument: %sRRR-RRmRR\RsNo package matched to remove(RetRemoveErrorRCRVRRR~RRvRRNRRdRnR}R\RR=RRHtaddEraseR(R/RORRSRXRRRhRRR{Ry((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRxesD
"


cCs*g}g}g}g}|p~y"td|iid|}Wn0tij
o!|iitd||SX|ii	t
itd|i|n|i
|i
ijo$|iitd||i
|S|iid|i}t|djo9|o!|iitd|i|S|i|nx|D]}	|i|	oh|	i|iijo;|i
|	i
jo|i||	fq|i|qS|i||	fqB|i|	oU|i
|	i
jo1t|i
pt|	i
o|i|qS|i|qB|i|o|i|qB|i|qBW|g}
|D]}|
|dqe~
}|i||o|iitd	||SxY|D]Q}|ii	t
itd
|i|ii||i|id|qWxh|D]`\}}
|ii	t
itd|i|
|ii||id|}|i|qWx0|D](}|ii	t
itd
|iqWxx|D]p}|i i!o]xZ|i"|i D]B}|i#i$||i |i!i||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.
        RRsCannot open file: %s. Skipping.sExamining %s: %ssGCannot add package %s to transaction. Not a compatible architecture: %sRisRPackage %s not installed, cannot update it. Run yum install to install it instead.sExcluding %ssMarking %s to be installedROsMarking %s as an update to %ss&%s: does not update installed package.(&RRRReR$RNRRdRORRR,RR-RR}RR\RRRR^RRRRpt_is_local_excludeRRQR~RRRORRgRHRvRv(R/RYROt
updateonlyRStinstallpkgst
updatepkgst
donothingpkgstinstalledByKeyR`RpRt
check_pkgstoldpoRRytobs_pkg((s0/usr/lib/python2.6/site-packages/yum/__init__.pytinstallLocals")
"cCs|p~y"td|iid|}Wn0tij
o!|iitd|gSX|ii	t
itd|i|n|i
|i
ijo$|iitd||i
gS|i||go|iitd|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
        RRsCannot open file: %s. Skipping.sExamining %s: %ssGCannot add package %s to transaction. Not a compatible architecture: %ssExcluding %sRO(RRRReR$RNRRdRORRR,RR-RRRt	reinstall(R/RYRO((s0/usr/lib/python2.6/site-packages/yum/__init__.pytreinstallLocal
s"cKs|itititig}|o |i|id|in|i|i||pti	t
dnt|}g}g}x.|D]%}|i|i
oP|ii|i|i|t
d|i
}|iiti|qn|ii}	t|i_t|to|id|}
n|id|i}
|	|i_t|
djo=|ii|i|i||it|i
qn|i|
qW|o+|o#tit
ddi|n|i||S(sfSetup the problem filters to allow a reinstall to work, then
           pass everything off to installR>s2Problem in reinstall: no package matched to removes1Package %s is allowed multiple installs, skippingROis6Problem in reinstall: no package %s matched to installs, (RkRMRqRrRsR~RxR>RetReinstallRemoveErrorRdR\RpRORHRORRR,R^RR=RRRRRtReinstallInstallErrorR(R/RORttx_mbrsttemplentnew_membersRR|Rtold_conf_obstmembers((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR%
sH
 

#
cCs|p~y"td|iid|}Wn0tij
o!|iitd|gSX|ii	t
itd|i|n|i
|i
ijo$|iitd||i
gS|i||go|iitd|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
        RRsCannot open file: %s. Skipping.sExamining %s: %ssGCannot add package %s to transaction. Not a compatible architecture: %ssExcluding %sRO(RRRReR$RNRRdRORRR,RR-RRRt	downgrade(R/RYRO((s0/usr/lib/python2.6/site-packages/yum/__init__.pytdowngradeLocalY
s"cCsd|iijpd|iijotSg}t|iidjo2t||iidd\}}}||}n||jotStS(s0returns True if the local pkg should be excludedRRiRi(R^RR=R\RRR(R/ROR0ttoexcRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRx
s$
cKs|o|otidnt}|o
|g}n/d|jo|dddjo|i|d}t}qh|iid|dgdt}|pr|d}|iit	d|y|i
|}Wqtiij
o#}|i
it	d|qXqhnQ|i|}|iid	|d	d
|d
d|dd|d
d|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|ifq
n|
i|q
W|
}t}
x|D]}|
i|iqW|iit|
}h}h}x1|D])}|||i<|||i|if<qWh}xut|D]g}|i|if}|}|}|i|joA||jo4t|i||iip|i}|}qn||joM||	jo,|o$t	d|}|i
i|n|	i|q/n|i||oE||	jo$t	d|}|i
i|n|	i|q/n|	i|||jo|i ||oq/n|||<q/Wg}xx|D]p}|i|if}||joqn|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 removeRQiRlRR~s3Checking for virtual provide or file-provide for %ssNo Match for argument: %sRRR-RRmRR\s$No package(s) available to downgrades1Package %s is allowed multiple installs, skippings"No Match for available package: %ss%Only Upgrade available on package: %s('RetDowngradeErrorR=RYRRRRORRdRRvRRNRRnR}RRTRpRR-RRR,RRRWRRRtverGERRHtaddDowngradeRkRMRtR~(R/RORtdoing_group_pkgstapkgsRRR{RXt
warned_nasttapkgsRYRt
apkg_namesRtlatest_installed_natlatest_installed_ntdowngrade_apkgstnaRtlatest_installedRSR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR
s


	
'






		

	






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(	NR>RRR-RmR\RR(RR$(R/Rt
returndictRRRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRns&





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|qXqpqpWxE|iD]:}|idjo$|id|io
t}q+qqWxE|iD]:}|id
jo$|id|io
t}qsq9q9WxE|iD]:}|id	jo$|id|io
t}qqqW||i_|S(s[ Given a valid historical transaction object, try and repeat
            that transaction. t	ReinstallR>t	DowngradesFailed to downgrade: %stUpdatetInstallsTrue-Installt
ObsoletingtErase(RsTrue-InstallR(R^RR=t
trans_dataRRR>RRRvReRRNRRdRRRx(R/R"RRRY((s0/usr/lib/python2.6/site-packages/yum/__init__.pythistory_redo sB

&


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|qXqpqpWxE|iD]:}|idjo$|id|io
t}q+qqWxE|iD]:}|idjo$|id|io
t}qsq9q9WxE|iD]:}|idjo$|id|io
t}qqqWxE|iD]:}|id
jo$|id|io
t}qqqWxE|iD]:}|idjo$|id|io
t}qKqqW||i_|S(
sY Given a valid historical transaction object, try and undo
            that transaction. RR>tUpdatedsFailed to downgrade: %st
DowngradedRsDep-InstallRsTrue-Installt	ObsoletedR(sDep-InstallsInstallsTrue-Install(R^RR=RRRR>RRRvReRRNRRdRRxR(R/R"RRRY((s0/usr/lib/python2.6/site-packages/yum/__init__.pythistory_undoCsV

&




c
Cst}|iitd|yti|}|djoti|dd}net	d|i
d|id|id|i
d|i}tii|i_|i|d	|id
}Wn@tiij
o.}titdtt|nXti|dt}g}	x|D]}
h}xFdD]>}|
i|ptitd|n|
|||<q5Wti|
d
i|d<|	i|q"W|	S(s
        Retrieve a key file
        @param keyurl: url to the key to retrieve
        Returns a list of dicts with all the keyinfo
        sRetrieving GPG key from %stlimiti't	bandwidthtretrytthrottletprogress_objtproxiesR5s/gpgkeysGPG key retrieval failed: tmultipletkeyidRtuseridtfingerprinttraw_keys2GPG key parsing failed: key does not have value %sthexkeyidN(Rs	timestampsuseridRR(R=RNRcRdR?tto_utf8R$R8turlreadRRtretriesRRt
proxy_dictRtoptst
user_agentRetgrabberR	ReRRRt
getgpgkeyinfoRRCt
keyIdToRPMVertupperR(
R/tkeyurlR6t
key_installedturltrawkeytugRt	keys_infoRtkeyinfotthiskeyRc((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_retrievePublicKeyps>
			 c	Csr|ii|i}|i}t}|ii}x|D]}|i||}	x|	D]}
ti	||
d|
ddjo+|i
itd||
dfqYn|i
i
td|
dt|
d|idd	ft}|iio
t}nw|oJ|h|d
6|
dd6|
dd6|d6|
dd6|
dd6}n&|o|||
d|
d}n|ptitd
n|iti|
d}|djotitd|n|i
itdt}|ptitd|iqYqYWq:W|i|\}}
|djo&|i
itdti|
ndS(sb
        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 verification.
                      Takes arguments of the po, the userid for the key, and
                      the keyid.
        @param fullaskcb: Callback function to use for asking for verification
                          of a key. 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 installedRs#Importing GPG key 0x%s "%s" from %sRsfile://R/RORRsNot installing keyRsKey import failed (code %d)sKey imported successfullysThe 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(R8RURUR^R=RRRR?tkeyInstalledRNRcRdRRtreplaceR^t	assumeyesRReRtpgpImportPubkeyt
procgpgkeyRRe(R/ROtaskcbt	fullaskcbR6tkeyurlsRRRRRctrcR[R((s0/usr/lib/python2.6/site-packages/yum/__init__.pytgetKeyForPackagesX
	$



	
c
	Cs|i}t}x|D]}|i||}x|D]}|dti|ijo+|iitd||dfq5n|ii	td|dt
|d|iddft}|ii
o
t}nR|oJ|h|d6|dd6|dd6|d	6|d
d
6|dd6}n|ptitd|nti|d
|dd|i}	|	ptitdn|iitdt}|ptitd|iq5q5WqWdS(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.
        Rs(GPG key at %s (0x%s) is already importedRs#Importing GPG key 0x%s "%s" from %sRsfile://R/R6RRRsNot installing key for repo %sRtgpgdirsKey import failedsKey imported successfullysThe 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.N(R^R=RR?treturn_keyids_from_pubringR
RNRcRdRRRR^RRReRtimport_key_to_pubringR(
R/R6RR
RRRRcRR[((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt
getKeyForReposD		


#	cCsd}|iidjodSg}|ii}ti|\}}x$|iiD]}x
|iiD]}|i	|jp||i
ijo|idjo|ii
d|i	}||}t||iidjo~t||iid}	xa|D]U}
|
i|
if||fjoq	n|	djoPn|i|
|	d8}	q	WqjqnqnWqXWt|ii|dS(	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(RRRRR(RXtret_begtret_midtret_endRY((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_sort_and_filter_installonly s&


iNRRhRi(RRh(R^tinstallonly_limitRRR?t"get_running_kernel_version_releasetinstallonlypkgsRHRRRORtts_stateR}R\RmR\RRR(R/RRRtcur_kernel_vtcur_kernel_rtinstpkgRRtnumleftRO((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRDs2	
#

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_downloadPackagesR$tPT_GPGCHECKt_checkSignaturest
PT_TEST_TRANSt_doTestTransactiontPT_TRANSACTIONt_doTransaction(R/RtrpmTestDisplayt
rpmDisplayRX((s0/usr/lib/python2.6/site-packages/yum/__init__.pytprocessTransactionYs
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((RO(R((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!|scSs
|idjS(RRh(RRh(R(Ry((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR!|sis!Unable to find a suitable mirror.s3Errors were encountered while downloading packages.s%s: %sN(RtfilterRHRR\R$R"R tPT_DOWNLOAD_PKGSRLROReRRdR?tuniqueRtYumDownloadError(R/RtdlpkgstprobsterrstrRRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR$ys&cCsnxg|D]_}|i|\}}|djoqq|djo|i||iqti|qWdS(s/ The the signatures of the downloaded packages ii(ReRt_askForGPGKeyImportRetYumGPGCheckError(R/RXRROR[R((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR&s

cCstS(su 
        Ask for GPGKeyImport 
        This need to be overloaded in a subclass to make GPG Key import work
        (R=(R/RORR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR5scCs|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 %stdiskspacecheckttesttkeepoldiR^sTest Transaction Errors: s  %s
N(R^trpm_check_debugRORRR,Rdt_run_rpm_check_debugRRR=R~RetYumRPMCheckErrorRtbugtracker_urlRRRRtinitActionTsRWR$t
populateTsR8R\tYumTestTransactionError(R/RRtmsgstrpmlib_onlyRtretmsgsttsConftfeaturettestcbtdscbttserrorsRtdescr((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR(sT







		cCsn|i|idd|ii|iit|dt}|o
||_n|id|dS(s do the RPM Transaction R9iRRN(	R>R?RRatorderRRRR(R/RRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR*s



cCsig}|i}d|_|idd|iix$|iiD]}|i|qEW||_|S(NR8i(RWR$R?RRatproblemsR(R/RRGtprob((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR;s		
	c
Ksti|}||_|ii|_t}|ido|do
t}n|o\g}|o<x?|D]-}|o |i	t
||iiqnqnWn|}||_n|o-|ot
||ii}n||_
n|id|iit|_d|_|ii|_|ii|_|ii|_x?|iD]1}	t||	pqLnt||	||	qLW|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_convertR_i(RRRR^RRRRCR=RRRRft
mirrorlisttsetupR_tenablegroupstmetadata_expireR]t
repo_gpgcheckRRgRlR8Rt
enableRepoRe(
R/RUtbaseurlsRNRtnewrepotvar_converttreplacedRfR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytadd_enable_reposB
	
(

		
s/var/tmps/$basearch/$releasevercCsh|otidjotSti||}|djotS|ii|t	||i
tS(sW Set a new cache dir, using misc.getCacheDir() and var. replace
            on suffix. iN(RoRRR?tgetCacheDirR$R=R8tsetCacheDirRR(R/tforcettmpdirtreusetsuffixR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRZ,s
 cCs|i|ijotS|i|ijptS|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.(	RR=tEVRR-RRRRpR(R/tpkg1tpkg2((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR<sN(R1R2R3R0RYRVR]R`RR!R"R$RhRRyRRRRRPRzRRRWRRR=RRRRRRRRR	RRtpropertyR8RR^RRHRRWRRZR.R9RMRFRaRbRTR_RR^RRGRNRRRRRRtYUM_PID_FILERRXRRR"R'RLRSRXReRRlRnRpRuRvRjRRRRRRRRRRRRR,RR:RR7RGRKRPRURVRYRgRkRRRRRRxRRRRRRRnRRRRRRDR-R$R&R5R(R*R;RXRZR(((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR@s2						f	9								
	:			)				9											
*	b				
									=K		%		*	y		.	8	$								!Lu"		[	!		
					@	
				
					5l4	z		#	-.G6	> 			5
	
4	(((VR3Rotos.pathRMtreRRRkRRRLtlogging.configRRtyum.i18nRvRwRdtP_RrRRReRtrpmUtils.updatesRt
rpmUtils.archRRRtrpmUtils.transactionRR8RR?RRRR[R8turlgrabber.grabberRR	turlgrabber.progressR
tpackageSackRRRAR!RRR tyum.historyRbtsimplefilterRfRRRRRRt	constantstyum.rpmtransRRRRRR5RRt__version__ttupleRpR.tnumRt__version_info__RRRR4RBR@(((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt<module>sj(
6

Youez - 2016 - github.com/yon3zu
LinuXploit