[c8@sdZddkZddkZddkZddkZdZddkZddkZddkZddk Z ddk Z ddk Z ddk 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 k1l2Z2dd k3l4Z4l5Z5l6Z6ddk7Z7ddk8Z8ddk9Z9ddk: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 canCoinstallt ArchStoragetisMultiLibArch(t compareEVR(t RepoStorage(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( Rt progressbartcallbacktfailure_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(RQt listEnabledtcostRPtsackt _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 fe e e d Z d Z e e d d Zd Ze e dZdZdZdZe e e e e e dZdZdZdZdZe dZe edZdZe e dZe e dZdZdZ 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@e ee e gd^ZAe ee e gd_ZBd`ZCe e daZDdbZEe dcZFddZGeHdeZIe dfZJdgdhdiZKdjZLdkZMdlZNe e dmZOdnZPdoZQdpZRdqZSdrZTdsZUdtZVduZWdvZXdwZYdxZZdyZ[dze e ed{Z\d|Z]eeeed}Z^d~Z_e dZ`e edZade edZbdZcdZdge dZeedZfedZgdZhdZidZjdZkdZle dZme ee dZndZodZpdZqdZrdZsdZtdZudZvdZwe dZxdZydZzdZ{e e edZ|e dZ}e edZ~e dZe dZe dZdZe dZedZdZdZdZe edZddZe e dZee dZe dZe dZdZe e e dZdZdZdZe dZe dZdZge dZee eddZdZdZdZe edZe e dZdZRS(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(Ns yum.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+tpreconfRDt prerepoconftsettrun_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      c Ks |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}|d jotii| 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_wrapperRRt installroott _getsysvert distroverpkgtdoLoggingSetupR1t doPluginSetupt pluginpathtpluginconfpathtreadMainConfigRthistory_record_packagesRttaddtruntyumvartgeteuidtuidtnormpatht persistdirtgett_repos_persistdirtdoFileLogSetuptlogfileRktdebug(R?tkwargstconf_sttargR-R.R0R3R4R5R6R7R8R9R:R;R=R<R>t startupconftpkgname((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 i fj 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 treadfpR tstrRt ConfigErrortsectionststringt 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 |oxt t 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 i d|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__.pyt doRepoSetupYscCsWt|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|iq n|o>ti}|ii||iidti|n|iS(sB For each enabled repository set up the basics of the repository. Rrsrepo time: %0.3fN(RRRRrRRtsetProgressBarRERFtsetFailureCallbackRGtsetInterruptCallbackRHRIRJRKRLRt setCacheDirRMtsetCacheRRQtdoSetupRkR(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__.pyt doSackSetupscCs|idj o|djo|iS|djo d}n|ii|}|iitdti}|p|ii }nh}x|D]}d||        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 |_|i i djod|i_nt |do|ii|i_|`nW|i ioIti}|i idt|i_|iidti|n|ii|i_|ii|i_|ii|i_|ii|i_|i i|i_|i i|i_ti}|ii|iidti||i io;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 doUpdatest doObsoletestcondenseUpdates(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(%RaRRkRRRRR1RRRGRHtappendtreadyRRtgetGroupLocationt RepoMDErrorRRKR tCompst getGroupsRtrepo_gen_decompressRMRt GroupsErrortCompsExceptionRRjtcriticalR/t compscounttcompileR/R0R( R?tgroup_sttreposWithGroupsRPt groupremoteRt overwritet groupfileR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyREsT          c Cs]ti}|iititd|idjoti i |_x|i i 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_dbt PackageTagsRRRStrepoXMLt 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__.pytstfsetcCst|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__.pyt yumUtilsMsgs % cCst|_|o\tid|iioCtd}|ii||i |iidt i dn|i i dt i }|i\}}|i|iio*|iititd|ind}|djo)|iioti|ii}nd|i_|i||\}}|i i dd |d ||iio=|i|d j\}}|i||d t\}}n|iidj o|ii i!n|d j|_g}|djo3|ii"o&|i#i$o|ii%dt&}nh}xi|D]a} |i'| i(oq*n| i)|jo| i(g|| i) Finding unneeded leftover dependenciesit postresolvetrescodetrestringit 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_transactionsRRRRjRVRRtsleepR1Rt resolveDepst_limit_installonly_pkgstclean_requirements_on_removeRkRRRzt_remove_old_depsRtprotected_packagestget_running_kernel_pkgtupR/t readOnlyTSRt _doSkipBrokenttsInfotchangedRcR1Rtprotected_multilibR<R6tgetMembersWithStatetTS_INSTALL_STATEStallowedMultipleInstallstpoRRMtlent searchNamesRXtTS_REMOVE_STATEStverEQt TS_OBSOLETEDtTS_ERASERstkeyst matchNaevrt output_stateRtsave_tsR/R(R?tunfinished_transactions_checkRtds_stRRt kern_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(Rt skip_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\} } } i i | i p|| || q|| || qWxf| D]^} i| }xF|D]>}|i||jo|idjo|qkqkWqOW| pC|d7}|d joPqiid i id tnitd t\}}ti }| |tjoC|d7}|d joPqiid i id tnd}|djoMiidi id tiii\}}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 i d||i fq,q,Wx^|i D]S}|ii|ip7|i i d|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<R6RXRR1t searchNevraRRM( 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 i d t |i xt|i D]}d ||i|if}|ii t i |xItt|iD]2\}}d ||f}|ii t i |qWqqW|ii t i d d ddS(NRtinstallt trueinstallteraset 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 6td d 6} x|iiD]} | i i |joq3n| i d joGt } x,| i D]!} | i |jo t} 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 s itallsmissing requirestrequiressinstalled conflictt conflictsRtprovides(sallR (sallR(salls obsoleted(sallsprovides(RRjRRttypeRst intersectionR/tcheck_dependenciesRRXtproblemR/RRWRMRtinstallonlypkgstcheck_duplicatest duplicatetcheck_obsoletedt obsoletertcheck_providesRR(R?RRtchkcmdtheadert ignore_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|i i 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 |iod i|i}n1t|d o |i od i|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|i i|i0d}|i i.oyt*i/|WqjqjXnt1i2}d|_3|djont4|djo)t5d}|i6i7|d|_3n|i i oq|i i ti  oZg}|D]}|t8t9|q~}|iid|ii:|dd|n|i;i<t5dx"|D]}|i;i<|dqgWt=i>dt5dd||i i? o%|i i ti  o|i@nxzd D]r}t||o\tA||}yt1iB|WqOt,t-fj o#}|i;i<t5d|qOXqqW|i i ti p |i3o|iiCn|iiDt|i|iid|i i 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_recordRt isTsFlagSettRPMTRANS_FLAG_TESTRtfutureRpmDBVersiontlistR/treturnPackagest simpleVersionR/R|tlastRtend_rpmdbversionRRRR-RR3tjoinR5tbegRgt_store_config_in_historyR6ttransactionResultVersionRftopentreadtwrite_addon_dataRtunlinktIOErrortOSErrort reset_nicetniceRFRt GenericHoldert return_codeRRRkRR%R&tendRjRVRtYumRPMTransErrort keepcachetcleanUsedHeadersPackagesRtunlink_fRtdropCachedDataPostTransactionR>tverifyTransaction(R?RzRPtfrpmdbvtusing_pkgs_patst using_pkgstrpmdbvtlastdbvtrpmdb_problemsRRRR"t output_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 t d|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,d o`|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 t d|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_lineR5t returnIdSumRRt checksum_typet checksum_dataRRRRtlocalPkgRtst_ctimetst_mtimetfrom_repo_revisiontfrom_repo_timestamptxattr_origin_urlt origin_urlRPRatrevisiont timestampRt getloginuidR-t downgradest reinstallRst changed_byRAR|t sync_alldbRRtyumdbt get_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?RPt excludelistRtexid_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.1s mark.washedis%s.%usyum.includepkgs.2s wash.matchsyum.includepkgs.3sexclude.marked(tgetIncludePkgListRR1RR(R?RPt includelistRRR((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 i jp>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 i i | or|i | | tp8| iio't}|| td | iiq)q-|iitd | fqon|od| i} | id t 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 i i | o|i | | to[|iitd | f| | i8} tt!i"d ot!i"i$| |qqqqnt i i'| | ijot i(| qBn|i | d fhf}t i)| ii*}|i+|i,t-| ijoF|| td| ii*t.|i+|i,t.| ifqqny5|d jo1| o)| | ijot i i/| i0}n)d|t#|t i i/| 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__.pytadderrorst predownloadtpkglistt 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_cachingRt sigCheckPkgRRRRR'RtrsplitRR\tgrabberRRtsystexitRv(R?RRFtcallback_totalRRRt repo_cachedt remote_pkgst remote_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 |i jo"|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}t i |qX||_ dSn+|iiotitd|i n|io|ii|inyjtii|ipti|in|i |dfhf}|i|d|d|id j}Wn_tij oP}|} yt i |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'|i i }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|d jod}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]!}|ido t }PqqW|o|i |ii gq|ii |i |ii |ii gqWx|D]}tii|pqnyti|Wn1tj o%}|iitd|qqX|iititd|qWdS(NRsfile:sCannot remove %ss %s removed(RRRRRRRRWtbaseurlRR/RR RRRRRRR\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__.pyt cleanSqlite scCs(dddddg}|i|ddS(Nsxml.gztxmlt cachecookiesmirrorlist.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/(RRRRRRt getFileListt_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||||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|dD dit|dt|d |dfS(c3sx|]}|VqWdS(N((Rty(t critweights(s0/usr/lib/python2.6/site-packages/yum/__init__.pys 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 searchtagst searchrpmdbt 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||Wq W|S(NRi(RdR^t search_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||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   c Csd}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| || 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|i i |S|i i |||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<t single_nameR`t returnlisttcompatArchListtmultiLibt singleLibRRtmultitsingletnoR((s0/usr/lib/python2.6/site-packages/yum/__init__.pytbestPackagesFromList sN(   c sid j oiiig}niipd Stdpdti}t i i gg}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?RtthispkgobsdictRARRt oobsoletingtopkgtupRRRXRRkRR((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}|d}g}t}x?|ii|D]+}t}|i|i}|i|q)W|ptit d|n|S(sD Do groupinstall via. leading @ on the cmd line, for install/update.is!Warning: Group %s does not exist.( RWR RR/RRRRtGroupInstallErrorR(R?tpatternt group_stringt tx_returnR(tgroupR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_at_groupinstallp 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(RRRRTRjRVRR(R?R+R,R-R((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_at_groupremove 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( R RRRTRRsRRR1R(R?R+RRtpkgnamesR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt_at_groupdowngrade s  cCsJ|d}|o)|ddjo|d}|i|S|ii|S(s5 Remove things from the transaction, like kickstart. iit@(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/Rt obsoletedBy(R?Rtobs_nR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR8 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}|i i d|dt}|i ||p|d}|iitd |y|i|}Wn;tiij o)}|iitd t|qX|o0ti| o|i|d t d |}n|o|i |qqEnQ|i|} |i id | 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 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+it-R3R1R5s3Checking 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(KRWRRRRMRRRR6R/R/R1RFRRkRRRR,RjRVR%RRRt_nevra_kwarg_parseRR<R6RRRRRR&R/RRRRXRRRRRARRRt updating_dictRRR3R)R$R>RHRRRRRRCRtRPMPROB_FILTER_REPLACEPKGtRPMPROB_FILTER_REPLACENEWFILEStRPMPROB_FILTER_REPLACEOLDFILESRR=RtRPMPROB_FILTER_OLDPACKAGERER8t addObsoletingRt addInstall(R?RRRt was_patterntpatstmypkgsRRt nevra_dictt pkgs_by_nameRt not_addedRRt pkgbynametlstR-Rtobsoleting_pkgt already_obsR(Rtobs_pkgst obsoleteeR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyR s<        %             !!       "   "   ' c Cst|id}t|id}g}x|i|D]}|ii|}x|D]{}xr||D]f} |id| pM|i|if} x3|ii | D]}|i |i d|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 differenceRt getRequirest inPrcoRangeRR<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( RWRRRRtverLERRXRRRfRR/( 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?t requiringPotupkgRR((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt _add_up_txmbrs # c%Ks g}| 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 d jo|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'|q n|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.|q n|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+iRDR3R1s%ssNo Match for argument: %sRR6R<R7RERRFcSs|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$RwRRORRmRMt isObsoletedRRRR6R/R/RFR1RRRRR,RjRVR>R?R%RIRRRtmapRt_ui_nevra_dicttobsoleted_dictRRXRRR<t updatesdicttgetObsoletesListRRlRRRRpRJRkR<RRtverLTR-t_does_this_updateRt addUpdated(%R?RRnt update_toRR-R-R3RRRYttopkgR;Rtnewtoldtinstpkgst availpkgsRt depmatchesRtmRRRTtobs_tupsR[RXRht obsoleted_pkgRtupdatingR\Rt updated_pkgt pot_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 i t d|nX|p0t | } |i i t 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+iRDR3s%ssNo Match for argument: %sRR6R<R7RERRFRs No package matched to remove: %ssSkipping the running kernel: %ss Removing %s from the transaction(#Rt RemoveErrorR6R0R/tmatchPackageNamesRRRR,RjRVRR%RIRRRRWRRtRRRRRRXRRRRRRtaddEraseRM(R?RRR-RRRRRRRTRRR((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|i i 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| d jo9|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]} | | d q[~ } |i!|| o|i i"t d||SxY|D]Q}|i i t it d|i|i#i||i$|i%d|qWxh|D]`\}}|i i t it d|i||i#i||i&d|}|i$|q Wx0|D](}|i i 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<RRRO(R?RRt updateonlyR-t installpkgst updatepkgst donothingpkgst obsoleterstinstalledByKeyR;RRlt check_pkgstoldpoRRtobs_pkg((s0/usr/lib/python2.6/site-packages/yum/__init__.pyt installLocal.s   &&) "c Cs|py1t|d|iid|dtii}Wn0tij o!|ii t d|gSX|i i t it d|i|n|i|iijo$|ii t d||igS|i||go|i it 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 c Ks|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, t failed_pkgs(RCRRKRLRMRRRXRtReinstallRemoveErrorRRRR3RWRRRRRMRRtReinstallInstallErrorRJ( R?RRttx_mbrsttemplent new_membersRRR3t old_conf_obstmembers((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRs@        , c Cs|py1t|d|iid|dtii}Wn0tij o!|ii t d|gSX|i i t it d|i|n|i|iijo$|ii t d||igS|i||go|i it 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 |d d |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 run EOL sNothing specified to downgradeR+iRDR3R1R5s3Checking for virtual provide or file-provide for %ssNo Match for argument: %sRR6R<R7RERRFs$No package(s) available to downgrades1Package %s is allowed multiple installs, skippings"No Match for available package: %ss%Only Upgrade available on package: %sN(-RtDowngradeErrorRWR6R2R/R1RFRkRRRRR,RjRVR%RIRR/RsRRR<RRRzRRMRRERR=RRRtverGERXRgRt addDowngradeRCRRNR(R?RRtdoing_group_pkgstapkgsRRRTRt 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|Sd S( NRR6RERFR<s%s:%s-%ss%s-%ss%s:%sRs*-%ss ((RTRRRRRtevr((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRts*       cCsh}d|joP|d\}}}}}||d<||d<||d<||d<||d<|S|id|d<|id|d<|id|d<|id|d<|ddjo|id|dGPG 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: %stkeyidRtuseridt fingerprinttraw_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 i d |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/t searchFilesRRR%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 i t 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| d d 6| dd6} n&|o||| d | d} n| p t}qPn|ii} | iti| d } | djotit d | n|i i t dt}qPWq1W| o|otit dn|ptit d|in|i|\} }| djo&|i i t 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|i d} 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?RPtdestdirt keyurl_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|i oqsnt|i g|i i} | i|pqsn|i |jod||i Rtnewrepot var_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 t dt |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/RtgetenvRt getCacheDirRRRSRjRVRRRWRRRRRrRLRRRR(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.( RRWRgR<RR,RRR/(R?tpkg1tpkg2((s0/usr/lib/python2.6/site-packages/yum/__init__.pyRyscCsm|iid|iid}x1|iiD] }||i7}|d7}q2W|iid|dS(Ns config-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?RS((s0/usr/lib/python2.6/site-packages/yum/__init__.pytverify_plugins_cbsc CsF|iio;|o|iitddStitdn|pGdtid}t i ddd|\}}t i |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-%MRNs.yumtxtprefixRs%s R2is0 s %s:%s:%s s&Could not save transaction file %s: %s($Rt_unresolvedMembersRjRVRRR,RtstrftimettempfiletmkstempRtfdopenRNRfR/RGR/Rt getTsFlagsRcRRRRRSRRURaRRt_dumpRRwRRRSR( R?RRRURRaRRRR((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-R3RR3Rs(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_byRas downgradessupdatess obsoletess depends_on(/RNt readlinesRRRSRR,RRRRtloadts_ignorerpmtloadts_ignoremissingtstripR/RGR/RjRVRRRRtsetFlagsRMRRWtrstripRRRRVRRRRwRRR}tTransactionMembert current_statetlstripRdRRRRR(R?Rt ignorerpmt ignoremissingtdataRtrpmvRttsflagstnumreposRRtrindexRtnumpkgstpkgstarttpkgcounttpkgprobtcurpkgRt missinganyRXRiRRRtpkgspectorigintcurlistR3R((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| |jo t }PqqWxD|i D]9\} } } |ii | | | i o t }PqqWxB|i|iD]0} |ii | dd i o t }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/RtgetNewRequiresRRRRRRRmRMRRkRRRzR(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 RWR RRRR'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)R/R0R2R6R<R8RCRRfRkRpRRRRRRRRt staticmethodRtRIRRRRRRRRRR!RRR'RRR-RHRRyRLRTRR{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.configRyRXtyum.i18nRRRtP_RR R RRtrpmUtils.updatesR,t rpmUtils.archR RRRtrpmUtils.miscutilsRtrpmUtils.transactionR R_RRRRRRRR}Rturlgrabber.grabberRRturlgrabber.progressRt packageSackRRRR[R1RRRt yum.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__.pytsz                     "                6