Current File : //proc/self/root/proc/2/task/2/cwd/usr/lib/python2.7/site-packages/yum/depsolve.pyc
�
�v_c@srdZddlZddlZddlZddlZddlZddlm Z m
Z
ddlZddlmZm
Z
ddlmZddlZddlmZddlmZddlTddlZddlZddlZejd ej�dd
lmZddlmZmZye dd
�d
ks;t!�Wnd�Z"d�Z nXiej#d6ej$ej#Bd6ej%d6ej%ej$Bd6ej$d6de&6Z'iZ(xe'D]Z)e)e(e'e)<q�Wdfd��YZ*dfd��YZ+dfd��YZ,dfd��YZ-de.fd��YZ/d e.fd!��YZ0d"e.fd#��YZ1d$e.fd%��YZ2dS(&s'
Dependency resolution module for yum.
i����N(tarchDifferencetcanCoinstall(tuniquetversion_tuple_to_string(tTransactionMember(tListPackageSack(t
PackageEVR(t*tignore(tproxy(t_t_rpm_ver_atleastiicGs*x#|D]}||kr|}qqW|S(N((txtargsty((s0/usr/lib/python2.7/site-packages/yum/depsolve.pytmin1s
cGs*x#|D]}||kr|}qqW|S(N((RR
R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pytmax5s
tGTtGEtLTtLEtEQit_wrap_ayum_getPkgSackcBs eZdZd�Zd�ZRS(s� This is a wrapper for calling YumBase.pkgSack because
otherwise we take a real reference through the bound method and
that is d00m (this applies to YumBase and TransactionInfo, hence why
we have a separate class). cCst|�|_dS(N(tweakreftayum(tselfR((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt__init__IscCs
|jjS(N(RtpkgSack(R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt__call__Ks(t__name__t
__module__t__doc__RR(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRDs t_wrap_ayum_installcBs eZdZd�Zd�ZRS(s� This is a wrapper for calling YumBase.install because
otherwise we take a real reference through the bound method and
that is d00m (this applies to YumBase and TransactionInfo, hence why
we have a separate class). cCst|�|_dS(N(RR(RR((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRSscOs|jj||�S(N(Rtinstall(RR
tkwargs((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRUs(RRRRR(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR Ns t_wrap_ayum_removecBs eZdZd�Zd�ZRS(s� This is a wrapper for calling YumBase.remove because
otherwise we take a real reference through the bound method and
that is d00m (this applies to YumBase and TransactionInfo, hence why
we have a separate class). cCst|�|_dS(N(RR(RR((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR\scOs|jj||�S(N(Rtremove(RR
R"((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR^s(RRRRR(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR#Ws t_wrap_ayum_updatecBs eZdZd�Zd�ZRS(s� This is a wrapper for calling YumBase.update because
otherwise we take a real reference through the bound method and
that is d00m (this applies to YumBase and TransactionInfo, hence why
we have a separate class). cCst|�|_dS(N(RR(RR((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRescOs|jj||�S(N(Rtupdate(RR
R"((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRgs(RRRRR(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR%`s tDepsolvecBsgeZdZd�Zd�Zed�Zed�Zd�Zd�Z d�Z
d�Zd �Zd
�Z
ddd
�Zd�Zd�Zed��Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zeed�Zd�Zed��Z d�Z!d�Z"d �Z#d!�Z$d"�Z%d#�Z&e&Z'd%d$�Z)RS(&s#A class for resolving dependencies.cCsyd|_d|_d|_t|_tjd�|_tjd�|_ g|_
g|_d|_d|_
t|_dS(Nsyum.Depsolvesyum.verbose.Depsolve(tNonet_tst_tsInfot
dsCallbacktFalsetuse_txmbr_in_callbacktloggingt getLoggertloggertverbose_loggertpathtloopstinstalledFileRequirestinstalledUnresolvedFileRequirest_missing_requires(R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRms cCs)tjtd�tjdd�|j�S(s.Sets up the transaction set before it is used.s5doTsSetup() will go away in a future version of Yum.
t
stackleveli(twarningstwarnR
tErrorstYumFutureDeprecationWarningt_getTs(R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt doTsSetup}scCs�|jdkrc|jdkrc|r_|jjdkr_t|�}|jj|jd|�ndS|jjs�t j
td��n|j|�|j
�dS(s�setup all the transaction set storage items we'll need
This can't happen in __init__ b/c we don't know our installroot
yetNs4Setting up TransactionSets before config class is up(R*R(R)RRtsetDatabasestrpmdbtconftinstallrootR:tYumBaseErrorR
t
_getTsInfotinitActionTs(Rtremove_onlytpkgSackCtor((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR<�s
cCs�|jdkr�|j�|_|r3d}d}nd}t|�}|jj|j||�|jj|j_t|�|j_ t
|�|j_t|�|j_
n|jS(s� remove_only param. says if we are going to do _only_ remove(s) in
the transaction. If so we don't need to setup the remote repos. N(R*R(t_transactionDataFactoryRR>R?R@tinstallonlypkgsR tinstall_methodR%t
update_methodR#t
remove_method(RRERRF((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRC�s cCs
||_dS(N(R*(Rtvalue((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt
_setTsInfo�scCs
d|_dS(N(R(R*(R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt
_delTsInfo�scCs|js|j�n|jS(N(R)RD(R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_getActionTs�s
cCst|jjr5tjd�}tjd|jj�ntjj|jj�|_itj d6tj
d6tjd6tjd6tj
d6tjd6}ttd �r�tj|d
<n|jjd�xP|jjD]B}||kr�|jj||�q�|jjtd�|�q�W|jjs9|jtjtj�nd}x|jjD]}||O}qLW|jj|�d
S(s>Set up the transaction set that will be used for all the work.s%_install_langss%define _install_langs t noscriptst
notriggerstnodocsttesttjustdbt repackagetRPMTRANS_FLAG_NOCONTEXTSt
nocontextsis!Invalid tsflag in config file: %sN(R@toverride_install_langstrpmtexpandMacrotrpmUtilsttransactiontTransactionWrapperRAR)tRPMTRANS_FLAG_NOSCRIPTStRPMTRANS_FLAG_NOTRIGGERStRPMTRANS_FLAG_NODOCStRPMTRANS_FLAG_TESTtRPMTRANS_FLAG_JUSTDBtRPMTRANS_FLAG_REPACKAGEthasattrRVtsetFlagsttsflagst addTsFlagR0tcriticalR
tdiskspacecheckt_add_prob_flagstRPMPROB_FILTER_DISKSPACEtRPMPROB_FILTER_DISKNODESttsInfotprobFilterFlagst
setProbFilter(Rtold_install_langstts_flags_to_rpmtflagt
probfilter((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRD�s2
cCsD|jjtjtd�|�t|jj|||f��}|S(s�Search the packageSacks for what provides the specified
feature or file.
:param name: a string specifying the file or feature to search
for
:param flags: flags related to the search
:param version: the version to search for
:return: a :class:`ListPackagaSack` containing the packages
that match the arguments, and may be empty
sSearching pkgSack for dep: %s(R1tlogt
logginglevelstDEBUG_1R
RRtsearchProvides(RtnametflagstversiontdefSack((s0/usr/lib/python2.7/site-packages/yum/depsolve.pytwhatProvides�s!cCsMt|jj�}|j|kr%tSx!|jD]}||kr/tSq/WtS(s�Return whether the given package object can be installed
multiple times with different versions. For example, this
would be true of kernels and kernel modules.
:param po: the package object that this function will
determine whether can be install multiple times
:return: a boolean specifying whether *po* can be installed
multiple times
(tsetR@RHRxtTruetprovides_namesR,(Rtpotiopkgstprov((s0/usr/lib/python2.7/site-packages/yum/depsolve.pytallowedMultipleInstalls�s
iic
CsG|jr|jj�ni}|jjdkr>|j�n|r�x�|jD]�}|j�}|dkrud}n|j�|j�||j�|j �f}|j
�dkr�d}n|j
�dkr�d}nd|||f<qNWnxQ|jj�D]@}|j
jtjtd�|�|jd
kr�|jdf|krNq�n|jj�} tjj| �r�|jj�}
n|j|j�|jj�}
|jdkr�|j|j�r�|j
jtjtd�|j�d|_t|_q�n|j r
|}n|
| f}|jj!|
||j�|j
jtj"td �|j|j�|jr?|j}|dkr�|j#r�d
}n|jj$|j|�q?q�|jdkr�|j|jf|kr�q�n|jj%|jj&�|jr|j'rq�n|jj$|jd�n|j
jtj"td�|j�q�q�WdS(sxPopulate the transaction set.
:param test: unused
:param keepold: whether to keep old packages
t0itiites
Member: %stus%s converted to installsAdding Package %s in mode %stdsRemoving Package %sN(R�R�(R�((R+ttransactionPopulationttsR(RDtEtNtAtVtRtTypeRmt
getMembersR1RtRutDEBUG_3R
tts_statetpkgtupR�tlocalPkgtosR2texiststreturnHeaderFromPackagetdownloadHeadertreturnLocalHeaderR�tDEBUG_2t
TS_INSTALLtoutput_stateR-t
addInstallRvt
downgradestpkgAddedtaddErasetidxt
downgraded_by(
RRStkeepoldtts_elemttetepochtpkginfotmodettxmbrtrpmfilethdrtcbkeyt
dscb_ts_state((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt
populateTs�sj
- cCsO|js
dSt|jd�r5|jj||�n|jj|j|�dS(sW Call the callback for processing requires, call the nicest one
available. Nt procReqPo(R+RdR�tprocReqRx(RR�tniceformatneed((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt
_dscb_procReqEs
cCs+g}|\}}}tjj|||�}|jjtjtd�||�|j||�yx|j j
dkr�|j|||�\}} n|j|||�\}} | r�|j
j||j|df�nWnDtjk
r}
|j
j||jt|
�f�d}d} nX|| |fS(s�processes a Requires dep from the resolveDeps functions, returns a tuple
of (CheckDeps, missingdep, conflicts, errors) the last item is an array
of error messagess%s requires: %st installedi����ii(R[t miscutilst
formatRequireR1RtRuRvR
R�trepotidt_requiringFromTransactiont_requiringFromInstalledtpo_with_problemstaddt_working_poR:tDepErrortstr(RR�trequirementt errormsgstneednameRytneedversionR�t CheckDepst
missingdepR�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_processReqPs "'"
cCs|t|t|�fS(N(RyR(trntrftrv((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_prco_req_nfv2reqsscCs|j|d|d|d�S(Niii(R�(Rtreq((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt
_prco_req2reqwscCs�t|_t|jd�rR|jj||�}|dk rR|jj||�Sn|\}}}tjj|||�}t d�||fS(Ntformat_missing_requiress%s requires %s(
R~R6RdR+R�R(R[R�R�R
(RtreqPotreqTuptmsgR�t needflagsR�tui_req((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_err_missing_requireszs c%s�d}d}|jj�jt�r.||fS�j\}}}} }
�\}}}
tjj||
|�}d#}d#}g}|||
f|jkr�|j j
tjt
d��|j|||
f}|g}n�|jjd|�r#|jjd|�}xX|D]}|j|j�qWn7|j j
tjt
d�|�|jj|||
�}x�|D]�}||_d|j}|j\}}}}}|j j
tjt
d�|�|jjd|d|d|d |d
|�}|d#kr||jjkr|jjd|d|�}n|d#krS||jjkrS|jjd|�}n|d#kr�td�|jj|||||��r�d}q�n|d#k ra|}||j|||
f<|j j
tjt
d
�|||�PqaqaW|j j
tjt
d�||�|d$kr|j j
tjt
d���|jj}d|j_|jd�d��}||j_t��fd�}||�s|jd�d��}||dt�s|j���}|j j
tjt
d���|j��|�Snd}n|d%kr]|j j
tjt
d���|jd�d��}t} |s�|j���}|j j
tjt
d��|�n||tjj|
�f}!xE|D]=}|j t!kr�|jj"d|!�r�t} Pq�t} q�q�W|r;| r;|j���}|j j
tjt
d��|�n| sT|j��|�Sd}n|d&kr�|j j
tjt
d��|�|j#d��}x|D]}|j$d|�q�Wd}n|d'kr|jd|d|d| d|
d��}"|jj�jt�}|"r�|r�|dj t%krd|j j
tjt
d ��|dj&d�ny|j j
tjt
d!���xW|dj'D]H}#�t(|j)|#j*d��kr�t||j|#�|�dfSq�Wt}||fS|j j
tjt
d"�|�|j��|�S|d#kr�|| |
d#f}$|j+d#kr_|j��|�S|j���}|j j
tj|�d}d}|j|�n||fS((sbprocesses the dependency resolution for a dep where the requiring
package is installedis3Needed Require has already been looked up, cheatingRxs4Needed Require is not a package name. Looking up: %ss%s.%s %s:%s-%ssPotential Provider: %starchR�tvertrelcSs|jS(N(tobsoleted_by(R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt<lambda>�sR�s!Mode is %s for provider of %s: %ssMode for pkg providing %s: %studs"Trying to update %s to resolve depR�trequiringPocstxm|D]e}|s%|j�jkr�\}}}|t|tjj|�f}||jjkrltSqqWtS(N( Rxt_rflagsR[R�tstringToVersionR�trequiresR~R,(ttxmbrstobsR�tntftvtcreq(R�R�(s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_check_update_worked�s
R�s&No update paths found for %s. Failure!itods=No update paths found for %s. Failure due to requirement: %s!R�s+Update for %s. Doesn't fix requirement: %s!R�s/TSINFO: %s package requiring %s marked as eraseR�Rztreleases-TSINFO: Obsoleting %s with %s to resolve dep.s#TSINFO: Updating %s to resolve dep.s*Cannot find an update path for dep for: %sN(R�(R�(R�(R�R�(,RmtgetMembersWithStateR�tTS_REMOVE_STATESR[R�R�R(t
cheaterlookupR1RtRuR�R
R?tcontainst
matchNaevrtappendR�tgetProvidesR�tgetModeR@t
exactarchlisttfiltert obsoletesR&R,R~R�R�R�R�tTS_INSTALL_STATESt checkPrcoR$tsetAsDeptTS_OBSOLETEDR�t
updated_bytmapR�t
returnPrcoR(%RR�R�t errorlistt checkdepsR�RxR�R�R�R�R�R�R�R�tneedmodetneedpot providerst
cheater_poR�R�tinst_potinst_strti_nti_ati_eti_vti_rtthismodetorigobsR�R�tfixedt
req_lookupt
newupdatestpkgtreqpkg((R�R�s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR��s�
!
%
%
! !%
cCs�|jdkrtS|dkr(d}nt|�tjtjtjfkrjtj j
|�\}}}n0t|�tjtjfkr�|\}}}n|j}|j
d|||||ff�r�|jjtd�||�tStS(Nitprovidess"Quick matched %s to require for %s(t _last_reqR(R,ttypettypest
StringTypetNoneTypetUnicodeTypeR[R�R�t TupleTypetListTypeR�R1tdebugR
R~(RRxRyRztr_etr_vtr_rR�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_quickWhatProvides8s $ $c%Cs�|j\}}}}}|\} }
}d}d}
i}|j| |
|�rX||
fS|j| |
|�}x�|j�D]�}|jjd|�r�|jjtj t
d�|�|j|�qzng}|j|�sz|j
jd|j�}x�|D]�}t|j|jj�s�|jj|�rdt
d�|}|jjtj |�|j|�q�q�|jj|�r�|j|jg�j|j�q�q�q�W|jjd|j�}xo|D]d}|j|�r�t|j|j�r�t
d�|}|jjtj |�|j|�q�q�q�WqzqzWt|�dkrnd}
|j||�}|j|�||
fSx�|j�D]�}|j\}}}}}|j
jd|d|d |d
|d|�}|dkr{|jjtj t
d�|�||_||
fSq{Wg}x�|j�D]�}|jd|d|jd |jd|jd|j �}|j!|�x6|D].}||jkrkt"}||_||
fSqkWqW|j�}t|�dkr�|d} n&|j#||d| �}!|!dd} |jjd| �r<d}
d}|j||�}|j|�||
fS|jjd| jd| j�}"t|"�dkr�|jj$t
d�| |f�|j
j%| |"d�}|j&d|�d|"dj'kr�|"dj'j(|_(n d|_(t"}| |_n�|jj$t
d�| |�t)j*| t+|
�|�}#|j,| d|#�}$x_|$D]W}|j&d|�d|_(|j|_|j|krQt-|j
j.||j�qQqQW|$s�d}
d}|j||�}|j|�nd}||
fS(skprocesses the dependency resolution for a dep where requiring
package is in the transaction setiR�sB%s is in providing packages but it is already installed, removing.Rxs8Potential resolving package %s has newer instance in ts.s<Potential resolving package %s has newer instance installed.iR�R�R�R�R�R�s#%s already in ts, skipping this oneR�RzR�s#TSINFO: Marking %s as update for %streasontdeps$TSINFO: Marking %s as install for %stprovides_for(R�R�(/R�RR|treturnPackagesR?R�R1RtRuR�R
t
delPackageR�RmR�RxRR�R�tverGTtverLTt
setdefaultR�tsearchNevratlenR�R�RtreturnNewestByNameR&R�RzR�textendR~t_compare_providersRt addUpdateR�t
yumdb_infoRtmisctstring_to_prco_tupleR�R!R�R$(%RR�R�R�RxR�R�RzR�R�R�R�R�R�tupgradedtprovSackRttspkgsttspkgR�tdbpkgstdbpkgR�taR�R�trtpkgmodetresultsttresultsR�tpkgstbestt
pkgresultstinsttreqtupleR�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�Js�
)
%
-
!
!cCsO|js
dSt|jd�r5|jj||�n|jj|j|�dS(sW Call the callback for processing requires, call the nicest one
available. NtprocConflictPo(R+RdR<tprocConflictRx(RR�R�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_dscb_procConflict�s
cCs*t}g}|\}}}|j\} }
}}}
tjj|||�}|j||�t|j�}|tj @r�|j
d|j�|jj|jt
�}t|j�|kr'|r'||fSn]|tj@r'|j
d| �|jj|jt
�}t|j�|kr'|r'||fSn|j
d|j�|jj|jt
�}t|j�|krw|rw||fS|j
d| �|jj|jt
�}t|j�|kr�|r�||fSd| t|�f}|j|�|jjtj|�t}|jj|||df�||fS(s6processes a Conflict dep from the resolveDeps() methodRxs%s conflicts with %si����(R~R�R[R�R�R>R$RmRYt
RPMSENSE_LESSR&RxR�R�tRPMSENSE_GREATERR�R�R1RtRuRvR,R�R�(RR�tconflicttconflicting_poR�R�R�RyR�RxR�R�R�R�R�tlengthR�R�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_processConflict�s>
cCs7x0|jD]%}|jr
|jj|j�q
q
WdS(N(RmtisDepR$R�(RR�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_undoDepInstalls&s cCs�d}ddl}ddl}|j|�}|j|j�}|j�dGH|jj|�}|j�|j dd�|j
d�|S(s
Call :func:`resolveDeps`, and profile the call using the
hotshot profiler.
:return: a tuple containing the result code and a list of
result strings. This is simply the return value of
:func:`resolveDeps` being passed up.
sanaconda.prof.0i����Nsdone running depcheckttimetcallsi(thotshott
hotshot.statstProfiletruncalltresolveDepstclosetstatstloadt
strip_dirst
sort_statstprint_stats(RtfnRItproftrcRO((s0/usr/lib/python2.7/site-packages/yum/depsolve.pytprof_resolveDeps,s
cCsddl}ddl}|j�}|j|j�}|jd�dGH|jd�}|j�|jd�|j d�|S(sCall :func:`resolveDeps`, and profile the call using the
cprof profiler.
:return: a tuple containing the result code and a list of
result strings. This is simply the return value of
:func:`resolveDeps` being passed up.
i����Ntyumprofsdone running depcheckRGi(
tcProfiletpstatsRKRLRMt
dump_statstStatsRQRRRS(RRYRZRURVtp((s0/usr/lib/python2.7/site-packages/yum/depsolve.pytcprof_resolveDeps@s
cCs�t|j�s"dtd�gfSt�|_d|_d|_|jjdt �t
}|}|}d}g}|jr�|jj�nd}x#t
r�||j
jp�dkr�dtd�gt|�fS|d7}t
}x[|r;i|_|jr |jj�n|j|�\}} }
}|| O}||
O}q�Wd|_|r�t }xI|j�D];\}}
|j||
�\}}}||O}||7}q^W|r�|jr�|jj�n|jjtjtd��q�q�nd|_|r�t }xG|j�D]9}|j|�\}}||O}||7}|rPqqWt
rm|j�rmt
}t
}d|_qmn|r�|jr�|jj�n|jjtjtd��q�q�nPq�Wxo|jj�D]^}|j|j�r�|j dkr�|jjtj!td �|j�d
|_ t"|_#q�q�W|jrn|j
j$sM|jj%�qn|rn|rn|jj%�qnn|jjtjtd��t |j_&t|�dkr^t|�}t�}x�|jD]�\}}}||f|kr�q�n|j'||f�|jjtj(d||j)f�|j*d
d�}|jjtj(d|�q�Wd|fSt|j�s�dtd�gfSdtd�gfS(s1Resolve dependencies for the packages in the current
trasaction set.
:param full_check: whether to also check removes and installs,
as well as dependencies
:param skipping_broken: if this is true, a message saying that
dependency solving has finished successfully will not be output.
This is useful since if there are broken packages that are
being skipped, :func:`resolveDeps` will need to be called
multiple times before dependency solving is completely finished
isSuccess - empty transactionthardi����isDepsolving loop limit reached.sRestarting LoopR�s%s converted to installR�sDependency Process endings.SKIPBROKEN: %s from %s has depsolving problemss
s
--> sSKIPBROKEN: --> %sisSuccess - deps resolvedN(+R$RmR
R}R�R(R�Rt
resetResolvedR,R~R+tstartR@tdepsolve_loop_limitRR�ttscheckt_resolveRequirest_checkFileRequiresR�trestartLoopR1RtRuRvt_checkConflictsRDt_checkObsoletesR�R�R�R�R�R�R�tskip_brokentendtchangedR�tDEBUG_4trepoidtreplace(Rt
full_checktskipping_brokenR�tCheckRemovest
CheckInstallsR�terrorstdepsolve_loop_countt
checkinstallstcheckremovestmissingR�RtcheckdepR�RAR�tdonetwpoterr((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRMTs�
c
Csit}t}t}t}x>|jj�D]-}|jr�|jr�|j}|jr[d}n|dkry|jryd}n|dkr�|jtkr�d}q�|j s�d}q�n|jj
|j|�n|jj
tjtd�|f�|j r|jr|jdd|_n|j|_|jtk|jjdkkr]|j|�}t}n|j|�}t}t} x�|D]�\}
}|jr�|j|
|�}|jj
tj|�|j|�|jj|
|j|df�d } qn|j|
|�\}
}}||
O}||7}| |O} qW| sK|jj |�n|| O}q(W||||fS(
NR�R�R3toR�sChecking deps for %sii����i(!R,RmtgetUnresolvedMembersR+R�R�t reinstallR�t
TS_OBSOLETINGtupdatesR�R�R1RtRuR�R
t relatedtoR�R�R�tstateR(t
_checkInstallR~t_checkRemoveR�R�R�R�R�R�tmarkAsResolved(RRstany_missingR�RrRqR�R�t thisneedstmissing_in_pkgR�RR�RxRwR�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRd�sX !
cCs�idd6dd6dd6dd6d d
6dd6}|j|dd�}d
}|d
jd�r�|d
jd�s�|d
jd�r�d}n||fS(s8 Get a sort key for a package requires from most "narrow" to least,
this tries to ensure that if we have two reqs like
"libfoo = 1.2.3-4" and "foo-api" (which is also provided by
libxyz-foo) that we'll get just libfoo.
There are other similar cases this "handles".iRiRiRiRiRici
itlibs()s ()(64bit)N(R(tgett
startswithtendswith(R�tmappert flagscoret namescore((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt
_sort_req_key
s0
& c
Cs�|jjd�}g}|jjsQx*|jD]}|j|jd��q.Wnt|�}g}x&t|d|j�D]}|dj d�r�qyn||kr�qyn|j
jtj
td�||�|jj|�}|r |jjd|�r |j|j|j|�f�qynxe|D]]}|j|jkrEq'nx<|jjd|jd t�D]} | j|jd
t�qdWq'WqyW|S(NR�tstrong_requirestkeyisrpmlib(s%looking for %s as a requirement of %sR
R�t
output_statestrelonly(R�R�R@trecheck_installed_requiresR�R&R}tsortedR�R�R1RtRuR�R
RmR�tinPrcoRangeR�R�RxR�R�R�R�R~(
RR�t
txmbr_reqstoldreqstoldpotretR�tprovsR�tmember((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�*s0"
"cCsA|j}|jd�}i}x6|j|jD]$}x|jD]}d||<q?Wq/Wg}x�|D]�}|djd�r�qdn||kr�qdnx�|jj|�j�D]�\} }
|j j
rW|jrW|jt
krW|j}|rt|d�r|j|j|
�n.|r@t|d�r@|j|j| |
�n|jj|j�gS|j jr�|jr�|jt
kr�|j}|r�t|d�r�|j| |
�n.|r�t|d�r�|j|j| |
�n|jj|j�gS|j jrZ|jt
krZ|j}|rCt|d�rC|j|j| |
�n|jj|j�gSx�|
D]�}t}
x-|jD]"}|jd|�rwt}
PqwqwW|
r�qanx-|jD]"}|jd|�r�t}
Pq�q�W|
r�qan|\}}}|jj|||�sa|j| |j|||�f�qaqaWq�WqdW|S(NR
iisrpmlib(trepoPkgRemoveReqt removeReqtgroupRemoveReq(R�R�R�R�R
R�RmtgetRequirest iteritemsR@trepopkgsremove_leaf_onlytrepopkgR�tTS_ERASER+RdR�R�R$R�tgroupremove_leaf_onlytgroupsR�tremove_leaf_onlyR,R�R~R�R�R�(RR�R�R�t
newpoprovstnewpoR]R�R�RthitstcbthittfoundR�R�R�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�Rsp
%
1c
Cs�t�}t�}i}g}|jdkrQ|jj�\|_|_|_ng}x||jj�D]k\}}|jj |dt
�r�|j|�qg|j|�x'|D]}|j
|g�j|�q�WqgWx|D]}|j|=q�W||j8}x|jj dt�D]} g}x�| jjD]�\}
}}|
jd�r-|j|
�|
|jkr�t}
x6| jD]+}|jd|
ddf�rwt}
PqwqwW|
r�q-q�n|
|kr�|j|
�n|j|
�|j
|
g�j| jj�q-q-W||j| jj<qWg}x�|jD]u}g}x@|j|D]1}|jj |dt
�riqEn|j|�qEW|s�|j|�q+n||j|<q+Wx|D]}|j|=q�W|j}x�|D]�}||jkr�q�n|jj|�}|r7|j
|g�jg|D]}|j^q�q�n|jj|�}|r�|j
|g�jg|D]}|j^qh�q�n|tjj|�kr�tjj|�}|jj|�}|r�|j
|g�jg|D]}|j^q��q�q�nxh||D]\}|jj |t�}|r:|dj}n|j|�}|j||ddff�q Wq�W|jj |j|j|j|�|S(NR�t/R�it(NNN(!R}R4R(R?tfileRequiresDataR5tinstalledFileProvidersR�R*R�R�R�R&R"R�R�R�R�R,R�R�R~R�R�RmtgetOldProvidesR&tgetNewProvidesR�R2trealpathtgetInstalledPackageObjectttransactionCacheFileRequires(RtfileRequirest
nfileRequirest
reverselookupR�ttodelR�tfilestfilenameR�RxRrtevrtalready_brokenR�tfnamet
niFP_fnametiFPtoprovR�tnprovR�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRe�s� $
!
&
/// $c
Cs1g}g}x|jj�D]�}|jj|jdt�rCqn|jd�}|s^qn|j|�x�|D]�}|\}}}x|jj|||�D]e} | jd|jdkr�| jd|jdkr�q�n|j||j |||�| f�q�WqrWqWx�|jjdt
�D]�}
|
j}t}x�|
jjd�D]�}|st|j|
j�t
}n|\}}}x|jj|||�D]e} | jd|jdkr�| jd|jdkr�q�n|j||j |||�| f�q�WqOWq'Wtd�r|S|jj|�|S(NR�t conflictsiiii (ii i(R?treturnConflictPackagesRmR�R�R�R�R�R�R�R�R�R,R~R�Rt transactionCacheConflictPackages(RR�tcpkgsR�R�RAR3R�R�RBR�Ry((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRgsB
4 4csNg}t}�fd�}x�jj�D]�}�jj|jdt�rRq+n|jd�}|smq+n|j|�x�|D]�\}}}x��jj d|�D]n} | j
j|g�s�q�n|j| j
g�r�q�ntd�}
�j
j|
| |�|| �t}q�Wq�Wq+Wx�jjddt�D]�}t}x�|j
jD]�}
|sw|j|j
�t}nx��jj d|
�D]�} | jtkr�q�n| j
|j
kr�q�n| j
j|j
g�s�q�n|j
j| j
g�r�q�ntd�}
�j
j|
| |�|| �t}q�WqRWq9W�jj|�|S(NcsY�jj|j��jj|j��jj|j��jpEij|jd�dS(N(
RmR$R�RRR�tupR4tpopR((totxmbr(R(s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_do_obs?sR�R�Rxs.Removing %s due to obsoletes from installed %ss$Removing %s due to obsoletes from %s(R,R?treturnObsoletePackagesRmR�R�R�R�R�R�R�tobsoletedByR
R1twarningR~R(R�tobsoletes_namesR�t transactionCacheObsoletePackages(RtopkgsR�R�R�R�tobs_nameR�R�R�R�R�Rytobs_n((Rs0/usr/lib/python2.7/site-packages/yum/depsolve.pyRh:sR
cCsl|jjd|�}x!|D]}|jtkrtSqWt|�dkrOtS|jjd|�shtStS(s�Return whether the given package in installed.
:param pkgname: the name of the package
:return: whether the package in installed
Rxi( RmR�R�R�R~R$R,R?R�(RtpkgnametlstR�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pytisPackageInstalledus
c sm�jjtjtd�t|��dd�}d�}d�}�fd�}d�}i} xI|D]A}
|
j| kr�| |
jj|
jkr�qin|
| |
j<qiW| j�}i}t �}x|D]}
d||
<q�W�j
jd d
|d|�x�|j�D]�}
�j
jd|
j�}
|
r
t|
�d
}|j|
�rc||
cd7<q�|j|
�r�||
cd7<q�|j|
�r�||
cd8<q�q
q
W|j�}i}x,|D]$}x�|D]�}||kr�q�n|j|kr�jj|j�d ||j<n||jsG|j||jd�rZ||cd8<nt}|j|g�r�t}||cd8<�jjtjtd�||f�n|r�|j�jjf}n�jjf}xw|D]o}||||�}|s q�n�jjtjtd||||f��||kr�||cd7<q�q�Wq�W||cd|jjd7<�jjtjtd||jjf��|||�r��jjtjtd||f��||cd7<n|||�r3�jjtjtd||f��|j|�n�j|j�r��jjtjtd|j|f��||cd7<n|r�||j|j�}|dkr��jjtjtd|||f��||c|d7<q�q�q�W|d%k r%t |j��}i�xS|D]K}|||kr6qn|||�}|d%kr[i�Pn|�|<qWt!��dkr%�jjtjtd�t|��t�d�fd��}xct"|�D]R}�|�|d
kr�Pn�jjtjtd�|�||cd7<q�Wq%nt |j��}i}x.|D]&}|||kr`qDnd||<qDWt!|�dkrux9|D]1}t#|�}�j$|�}t!|�||<q�Wt%|j��}�jjtjtd �|�x�|D]y}|||kr>�jjtjtd�|�||cd7<q�||}�jjtjtd!�||f�q�Wnt |j��}xQ|D]I}|||kr�q�n||cd7<||ct!|j�d
7<q�Wt |j��t%|j��d}x|D]}||c|8<qWt|j&�dd"�d#t�}�jjtjtd$t|���|S(&sotake the list of pkgs and score them based on the requesting package
return a dictionary of po=scores"Running compare_providers() for %sicSs`tt|�t|��}x5t|�D]'}||||kr(t||�Sq(Wt||�S(N(RR$trangeR(RRtminlentnumtoff((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_common_prefix_len�s
cSs6t|d�stSt|d�s&tS|j|jkS(Nt sourcerpm(RdR,R�(RR((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_common_sourcerpm�s
cSs>|dkrtSx'|jD]}|jd|�rtSqWtS(NR
(R(R,R�R�R~(RRtydep((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt
_conflict_req�scs�t||j�}�jjrQ|dkrQ�jjtjtd�|�|Snt||j�}|dkr�||kr��jjtjtd�|�|S||kr�dS|S(Nisbetter arch in po %s( RR�tmultilibR1RtRuRlR
R((RRtreq_compare_archtx_distty_dist(R(s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_compare_arch_distance�sc Ss�d}xx|jD]m}|\}}\}}}||kr@qn|dkrRqn|dk rbdS|pkd||pwdf}qW|S(s) This converts a package into a specific version tuple for the
required provide. The provide _must_ be '=' and epoch=None and
release=None == '0'.
If there is 0 or 2+ matches, return None.
If the req does not == the provide name, return None. RR�N(R(R
( RtprovnameR�R�R�R�R�R�R3((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_pkg2prov_version�sitcompare_providerstproviders_dicttreqpoRxi����ii�iis%s obsoletes %ss-archdist compared %s to %s on %s
Winner: %sidi
s'compare_providers_priority for %s is %sscommon sourcerpm %s and %sisconflict req %s and %ss#base package %s is installed for %ss%common prefix of %s between %s and %ssprovides vercmp: %sR�cst�|�S(N(R(R(t
prov_depsolve(s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�fss Winner: %ssrequires minimal: %ds Loser(with %d): %scSs|d|dfS(Nii((R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR��streversesBest Order: %sN('R1RtRuRlR
R�R�R�tvaluesR}tpluginstruntkeysR?R#RxR�R!tverEQR RR%R,R�R~R�tbestarchtcompare_providers_priorityR�R�tbase_package_nameR(RR$treversedRR�Rtitems( RR7R�R�R�R�R�R�R�tunique_nevra_pkgsRR9tpenalizet rpmdbpkgstnewesttlposR�tnextpot obsoletedtarchestthisarchtrestcpltbestnumR�twinnertrec_depsolvet
fake_txmbrtreqsR�tshiftt bestorder((R�Rs0/usr/lib/python2.7/site-packages/yum/depsolve.pyR'�s
#)
!&
N(*RRRRR=R,R<RCRMRNRORDR|R�R�R�R�tstaticmethodR�R�R�R�RR�R>RDRFRWR^R~RMRdR�R�R�ReRgRhR�t_isPackageInstalledR(R'(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR'jsH & F # � � ) { > ( M s ( ; tDepCheckcBs)eZdZd�Zd�Zd�ZRS(s-Object that :class:`YumDepsolver` uses to see what things are
needed to close the transaction set. The attributes requires and
conflicts are lists of requires and conflicts in the current
transaction set. Each item in the lists is a :class:`Requires` or
:class:`Conflicts` object.
cCsg|_g|_dS(N(R�R�(R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�s cCs#t||�}|jj|�dS(sCreate and add a :class:`Requires` object to the list of
requires.
:param po: the package object involved in the requires
:param req_tuple_list: a list of required by *po* that are
un-closed in the transaction set
N(tRequiresR�R�(RR�treq_tuple_listtreqobj((s0/usr/lib/python2.7/site-packages/yum/depsolve.pytaddRequires�s cCs#t||�}|jj|�dS(sCreate and add a :class:`Conflicts` object to the list of
conflicts.
:param conflict_po_list: a list of conflicting package objects
:param conflict_item: what the conflict between the members of
*conflict_po_list is.
N(t ConflictsR�R�(Rtconflict_po_listt
conflict_itemtconfobj((s0/usr/lib/python2.7/site-packages/yum/depsolve.pytaddConflicts�s(RRRRRR(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�s RcBseZdZd�ZRS(sTA pure data class for holding a package and the list of things
it requires.
cCs||_||_dS(N(RR�(RRR�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�s (RRRR(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�sRcBseZdZd�ZRS(s]A pure data class for holding a list packages and what the
conflict between them is.
cCs||_||_dS(N(tpkglistRA(RRRA((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�s (RRRR(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�s(3Rtos.pathR�RR.trpmUtils.transactionR[trpmUtils.miscutilst
rpmUtils.archRRR*RRttransactioninfoRRYtpackageSackRtpackagesRt constantsRuR:R8tsimplefilterR;RR tyumR
RRtAssertionErrorRR@tRPMSENSE_EQUALR?R(RyR�R�RR R#R%tobjectR'RRR(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt<module>s^
������L"