Spade
Mini Shell
�
8M�bc@s�ddlZddlZddlZddlZddlZejjd�ddlZddlZddl m
Z
ddl mZddlm
Z
ddlZddl mZddlZddlZddlmZddlZddlZddlZddlmZdd lmZdd
lmZddlmZddlTddlZddlZddl Z
ddl!Z!ddl"Z"ddl#Z#ddl$Z$ddl%Z%ddl&Z&e'Z(y9ddl)Z)e*e)d
�p�e*e)d�r�e+Z)nWne,k
r
e+Z)nXd�Z-d�Z.e!j/dej0�ej1d�Z2ej1d�Z3dej4fd��YZ5deej6fd��YZ7e+d�Z8dfd��YZ9dS(i����Ntmedia(t
URLGrabber(tdefault_grabber(t
format_number(tURLGrabError(t
Repository(tconfig(tmisc(tcomps(t_(t*tgettsetcCs3ts
dSytj|d|�}WndSX|S(Nsuser.yum.checksum.(txattrtNoneR(tfilenametchktypetret((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_xattr_get_chksumQscCs4ts
dSytj|d||�WntSXtS(Nsuser.yum.checksum.(R
RRtFalsetTrue(RRtchksum((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_xattr_set_chksum\stignores yum.Repossyum.verbose.RepostYumPackageSackcBsteZdZd�Zd�Zd�Zd
d�Zd�Zdd
dd�Z d �Z
d
�Zd�Zd�Z
RS(s;imports/handles package objects from an mdcache
dict
objectcCs&tjj|�||_i|_dS(N(tpackageSacktPackageSackt__init__tpctadded(tselftpackageClass((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRos cCsTy|j�Wn?tjk
rO}tjdt|�t|�|jf�nXdS(NsException %s %s in %s
ignored(tclosetErrorst RepoErrortverbose_loggertdebugtreprtstrt__del__(Rte((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR'tscCs
i|_dS(N(R(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR
zsc
Cs�||jkr)||j|kr)dSnt|�}|dkrd}x||D]t}|d7}|rz|j|||�n||}|j||�} || _|j|j|| �|j| �qNW||jkr�g|j|<n|j|jd�d|_ n�|dkr�||jkrRd|j|krRt
jd||jf�qRnd}xu|D]m}|d7}|r�|j|||�n||}||jkr_x%|j|D]} | j
|�q�Wq_q_W|j|j|�d|_ ndS(Ntmetadataiit filelistst otherdatas$%s
md for %s imported before
primary(R*R+(RtlentprogressbarRtidt_addToDictAsListtpkgsByIDt
addPackagetappendtindexesBuiltR!R"tui_idtimportFromDict(
Rtrepotdatatypetdataobjtcallbackttotaltcurrenttpkgidtpkgdicttpo((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytaddDict}sH
cCs�x�|D]�}||jj|g�kr.qn|dkrCd}n-|dkrXd}n|dkrd}nq|j||�r|j||�s�|j|dtdd �q�qqWd S(
s& Just schedule the metadata downloads R)t
primary_dbR*tfilelists_dbR+tother_dbtasynctfailfuncN(RRt_check_db_versiont_check_uncompressed_db_gent_retrieveMDRR(RR6tdatatitemtmydbtype((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_retrieve_async�s
R)icCs�|dkrdddg}n |g}t|d�s`tjd|jd|jd|�|_nx,|D]$}||jkr�||j|kr�qgq�n|dkr�d }d
}|j} |jj}
nc|dkr�d}d}|j } |jj
}
n3|dkrgd}d
}|j} |jj}
nqg|j
||�r�|j||�}|sj|j||�}n|s�|j|�}|r�tj|jd|�|j||�}n|s�tjd|�q�n|jj|�}
n�t|_| �}|d}tj||d|j�}|s3tjd|�n|}|jj|�}|j\}}|
||�}
|s�|j|||
|�n~
qgW|`dS(NtallR)R*R+tcacheHandlertstoredirtrepoidR9R@tprimaryRARBtothers/gen/%s.sqlites
%s: Check uncompressed DB faileds.xmltcacheds%s: Decompress DB
failed(thasattrtsqlitecachectRepodataParserSqlitetcachedirR.RMRt
getPrimaryXMLt
getPrimarytgetFileListsXMLtgetFileliststgetOtherXMLtgetOtherdataREt_check_uncompressed_dbRFRGRtunlink_fR!R"t
open_databaseRt_xml2sqlite_localtrepo_gen_decompresstcachetrepoXMLtgetDatatchecksumR?(RR6tmdtypeR9t cacheonlyRHRIRJtmymdtypetrepo_get_functiontrepo_cache_functiontdb_un_fntdb_fntdobjtxmltgenRtxmldatatctypetcsum((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytpopulate�sn
c
Cs�|jj|�}|j\}}tjj|�}|jd|}|d}|j||d|dt�spdSt
j||d|j�} | r�|j
||| �SdS(s7return file name of db in
gen/ dir if good, None if
nott/s.sqliteRHtcheck_can_failRRN(RcRdtlocationtostpathtbasenameRVt_checkMDRRRRaRbt_check_uncompressed_db_fn(
RR6Rftmydbdatatr_basetremotetfnamet
compressed_fnRkR((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRFs
c Csl|jj|�}|j\}}tjj|�}|jd|}tj|dt �}|j
|||�S(s8return file name of uncompressed db is good, None if
notRttfn_only(RcRdRvRwRxRyRVRt
decompressRR{( RR6RfR|R}R~RR�Rk((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR]$scCsld}tjj|�rhy|j||dt�Wn*tk
r^|jsetj |�qeqhX|}n|S(Ntopenchecksum(
RRwRxtexiststcheckMDRRRbRR^(RR6RfRktresult((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR{.s
cCs
|j|�S(N(RE(RR6Rf((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRE>sN(t__name__t
__module__t__doc__RR'R
RR?RKRsRFR]R{RE(((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRms , T
t
YumRepositorycBs eZdZd�Zd�Zd�Zee�Zd�Zee�Z d�Z
d�Zd�Zee�Z
d�Zd �Zd
�Zd�Zdyedzd�Zd�Zd�Zd�Zd�Zd�Zed�Zd�Zd�Zed�Zd�Zd�Z
ed��Z!ed��Z"d�Z#d�Z$d�Z%d�Z&ed
��Z'ed!��Z(ed"�d#��Z)ed$�d%��Z*ed&�d'��Z+ed(�d)��Z,ed*��Z-d+�Z.d,�Z/d-�Z0d.�Z1d/�Z2ed0d1�d2d3�d4d5��Z3d6�Z4ed0d7�d2d8�d4d9��Z5d:�Z6dzdzdzdzdzdzdzdzd;edzd<�Z7e7Z8dzdzed=�Z9dzd;ed>�Z:d?�Z;d@�Z<dA�Z=edB�Z>dC�Z?dzdzdzdzdD�Z@dE�ZAdzdzdF�ZBdzdG�ZCdH�ZDdI�ZEdJ�ZFdzdK�ZGedL�ZHdM�ZIeJdN��ZKdzdzdO�ZLdP�ZMdzdQ�ZNdzdR�ZOedS�ZPdzdT�ZQdU�ZRdV�ZSdzdzdW�ZTdX�ZUdzdY�ZVdZ�ZWed0d[�d2d\�d4d]��ZXd^�ZYd_�ZZed`�Z[edzeda�Z\db�Z]edc�Z^dd�Z_de�Z`df�Zadg�Zbdzdh�Zcdi�Zddj�Zedk�Zfdzdl�Zgdm�Zhdn�Zidodzdp�Zjdq�Zkdr�Zlds�Zmdt�Zndu�Zodvdwgdx�ZpRS({so
This is an actual repository object
Configuration attributes are pulled in from config.RepoConf.
cCs�tjj|�tj||�d|_g|_g|_d|_d|_ d|_
d|_i|_d|_
t|_d|_i|_i|_d|_d|_d|_t|_i|_d|_d|_d|_d|_d|_idd6dd6dd 6dd
6dd6dd6|_t|_d|_d|_
d|_!d|_"d|_#t|_$d|_%d|_&d|_'d|_(t)|_*d|_+d|_,d|_-t|_.dS(
Nis
yumgroups.xmlsrepodata/repomd.xmltcachecookieti�RPR*RQtgroupt
updateinfotprestodelta(/RtRepoConfRRRtrepofilet
mirrorurlst_urlstenablegroupstgroupsfilenamet
repoMDFilet_repoXMLt_oldRepoMDDataRbRt_retry_no_cachetmirrorlistparsedtyumvart_proxy_dicttmetadata_cookie_fnt_metadataCurrentt _metalinktgroups_addedthttp_headerstrepo_config_agetbasecachedirtbase_persistdirtcostt
copy_localt retrievedt_preloaded_repomdR9tmulti_callbacktfailure_objtmirror_failure_objtinterrupt_callbackt_callbacks_changedt mediafunctgpg_import_functgpgca_import_functconfirm_funcRttimestamp_checkt_sackt _grabfunct_grabt_async(RRO((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRHsV cCs`|dkrdSt|d�r+|j}nd}t|j|�}|rM|St|j|j�S(s@
Sort yum repos. by cost, and then by alphanumeric on their id.
iR�i�N(RRSR�tcmpR.(RRQtocostR((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt__cmp__�scCs.|jdkr'tjtj�|_n|jS(N(R�Rt
sqlitesacktYumSqlitePackageSacktYumAvailablePackageSqlite(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_getSack�scCst|d�rt|d�Stj|�}|s:d}ng|\}}||}d|kri|d}n8d|kr�|d}nd|kr�|d}nd}|j}xE|jD]:}d||kr�|d7}|t|j|�7}q�q�Wt|d|�|S(s@
Show self.id, but include any $releasever/$basearch/etc. data.
t__cached_ui_idR�tmetalinkt
mirrorlisttbaseurlt$Rt( RStgetattrRt_readRawRepoFileR.tui_repoid_varsR&R�tsetattr(Rtvaltinit
section_idRtvar((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_ui_id�s*
cCs0|jdk r|jj�ntj|�dS(N(R�RtsackR
R(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR
�scCs
d|_dS(N(RR�(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt
_resetSack�scCs|j�|jr|jSdS(N(tdoProxyDictR�R(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt__getProxyDict�s
cCs|jS(s7Returns the instance of this repository's package
sack.(R�(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytgetPackageSack�scCs
t|d�r|jdk StS(s;Returns true if this repository is setup and ready
for
use.tmetadata_cookieN(RSRcRR(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytready�s
cCsCd|jj�kr*|jjd�}n|jjd�}|jS(s"Returns
the location of the
group.tgroup_gzR�(Rct fileTypesRdRv(Rtthisdata((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytgetGroupLocation�scCs|jS(N(R.(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt__str__�siicCs�ytj||||�SWn`tjtfk
r|}|r?dSd|}t|tj�rjt|�}ntj |��nXdS(s�takes
filename, hand back Checksum of it
sumtype = md5 or sha
filename = /path/to/file
CHUNK=65536 by defaults#Error opening file for checksum: %sN(
RReR!t MiscErrortEnvironmentErrorRt
isinstancetFIPSNonCompliantErrorR&R"(RtsumtypetfiletCHUNKtchecksum_can_failtdatasizeR(tmsg((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt _checksum�s
c!Cs�d|j}d(}x�t|�D]�}|jd#�r;q n||krMq
ntt||�tj�rnq
nt||�}|r�t|�tt�td$�fkr�d%}nt|�tj kr�d&j
|�}n|d'||f}q W|S()Ns[%s]
R�R�t
metalink_datatgrabtgrabfuncRctcfgR�R�R�R�R�R9R�R�R�R.R�R�R�R�R�R�R�R�tquick_enable_disableR�R�turlsR�R�R�R�R iR�s,
s%s = %s
(!s mediafuncssacks
metalink_datasgrabsgrabfuncsrepoXMLR�s retrievedsmirrorlistparsedsgpg_import_funcsgpgca_import_funcsfailure_objscallbacksconfirm_funcsgroups_addedsinterrupt_callbacksidsmirror_failure_objsrepo_config_agesgroupsfilenames
copy_localsbasecachedirshttp_headerssmetadata_cookiesmetadata_cookie_fnR�s
repoMDFilestimestamp_checksurlss
mirrorurlssyumvarsrepofilesmulti_callback(R.tdirt
startswithR�R�ttypest
MethodTypettypeRtListTypetjoin(Rtoutputt
excluded_varstattrtres((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytdump�s4
+ cCso|j�ytj|ddg�WnDtk
rj}|jtjkrXtj|�qktt|��nXdS(s%Persistently enables
this
repository.tonlytenabledN( tenableRtwriteRawRepoFiletIOErrorterrnotEACCEStloggertwarningR&(RR(((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytenablePersistents
cCso|j�ytj|ddg�WnDtk
rj}|jtjkrXtj|�qktt|��nXdS(s&Persistently
disables this
repository.R�R�N( tdisableRR�R�R�R�R�R�R&(RR(((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytdisablePersistent"s
cCs9t|j�dkr5|jr5tjd|j�ndS(shself-check the
repo information - if we don't have enough to move
on then raise a repo erroris(Cannot find a valid baseurl for
repo:
%sN(R,R�tmediaidR!R"R4(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytcheck-scCs|jr
dSi|_d}d
}|j|kr:d}n�|jr�d|j}|j|kr�tj|j�}|j|kr�|dtj|j�7}ntjd|�j �\}}d|||f}q�n|dk r
||jd<||jd<||jd <ndS(Nt_none_R�s%st:s(\w+://)(.+)s%s%s@%sthttpthttpstftp(NRR�(
R�Rtproxytproxy_usernameturllibtquotetproxy_passwordtretmatchtgroups(Rtproxy_stringtemptytauthtprototrest((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR�4s&
cCs]g}x+|jD]
}|j||j|f�qW|pFd|jksY|jd�n|S(sAConvert our dict of
headers to a list of 2-tuples for
urlgrabber.tPragmasno-cache(Rsno-cache(R�R2(RRbtheaderstkey((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt__headersListFromDictMscCs'tjdtjdd�|j�dS(Ns5setupGrab()
will go away in a future version of Yum.
t
stackleveli(twarningstwarnR!tYumFutureDeprecationWarningt
_setupGrab(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt setupGrabXs cs��jdkrtjj}ntjj}�j�}td�jd�jd�j d�j
d�jdd|��_�fd �}�j
}�jr�t||�}n�fd
�}|�j|d|��_dS(s_sets up the grabber functions with the
already stocked in urls for
the mirror groupst
roundrobintprogress_objtmulti_progress_objtfailure_callbackR�R�tregettsimplecs|tj|�jjd�d}�jjj|�}|rxitj|�d6i|j d6|j
d6|jd6d6}n|S(Nt@i����tmirrortmax_connectionst
preferencetprivatetkwargs(turlparseturlsplittnetloctsplitR�t_host2mcRRtto_utf8R'R(R)(turlthosttmc(R(s//usr/lib/python2.7/site-packages/yum/yumRepo.pytadd_mcns
c s�i}|j}|jdksE|jdkr�t|dd�dkr�t|d�j�}|�jt�j�kr�t|d<q�n|jd kr�t|d
<n�j}|r�t |�r�|difp�|\}}}|j
||||��n|S(
Niitcodeiii�ttriestremovei����tfail(ii�((t exceptionR�R�tretriesR,R�RRR�tcallabletupdate(tobjtactionR(R6tcbtfuntargtkarg(R(s//usr/lib/python2.7/site-packages/yum/yumRepo.pytmirror_failures '
*N(tfailovermethodt
urlgrabberR&t
MGRandomOrdertMirrorGroupt_default_graboptsRR9R�R�R�R�R�R�R�tmapR�(RtmgclasstugoptsR4R�RC((Rs//usr/lib/python2.7/site-packages/yum/yumRepo.pyR]s$
cCs�i|jd6|jd6|jd6|jd6|jd6|jd6|jd6t|jd|��d 6|j d
6|j d6|j
d6|jd
6|jd6t
jjd6|jd6|jd6|jd6}|jdkr�t|d<n
|j|d<|S(Nt keepalivet bandwidthtretrytthrottlettimeouttminratet
ip_resolveRbR�tssl_verify_peertssl_verify_hosttssl_ca_certtssl_certtssl_keyt
user_agenttusernametpasswordtftp_disable_epsvtlibproxytproxies(RLRMR:RORPRQRRttuplet#_YumRepository__headersListFromDictt sslverifyt sslcacertt
sslclientcerttsslclientkeyRtoptsRXRYRZR[RRt
proxy_dict(RRbRd((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRH�s*
cCs0|js|jr)|j�t|_n|jS(N(R�R�RR(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_getgrabfunc�s
cCs0|js|jr)|j�t|_n|jS(N(R�R�RR(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_getgrab�s
cCs
|j�S(N(Rf(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt<lambda>�scCs
|j�S(N(Rg(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRh�scCs{tjj|�r(tjj|�r(dSytj|dd�Wn5tk
rv}dd|d|f}tj|�nXdS(s@make the necessary directory path,
if possible, raise on failureNtmodei�s
%s: %s %s: %ssError making
cache directorys error
was(RwRxR�tisdirtmakedirstOSErrorR!R"(RtdpathR(R�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_dirSetupMkdir_p�s$c Cs�tjj|j|j�}tjj|j|j�}tjj|d�}tjj|d�}|jd|�|jd|�|jd|�|jd|�d}tj�dkr�d }n|jd
|d|�|jd|d
|�|jd|j }|jd|�x1|j|jd|j
gD]}|j|�q2Wx>|jgD]0}y|j|�WqVt
jk
r�}qVXqVW|jd�r�t|_n|jd�|jd�|jd�dS(s6make
the necessary dirs, if possible, raise on
failuretpackagesRt_dir_setup_cachedirt_dir_setup_pkgdirt_dir_setup_hdrdirt_dir_setup_persistdirR�is-rot_dir_setup_gpgdirs/gpgdirt_dir_setup_gpgcadirs /gpgcadirRtt_dir_setup_metadata_cookies/gens
repomd.xmlR�smirrorlist.txtsmetalink.xmlN(RwRxR�R�R.R�tsetAttributetgeteuidRVR�tpkgdirRnt
persistdirR!R"t_preload_md_from_system_cacheRR�( RRVRzRythdrdirtexttcookieR�R(((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytdirSetup�s6 #
cCs3d|}t||�s&|j�nt||�S(s;
Make the directory attributes call .dirSetup() if needed.
t_dir_setup_(RSRR�(RR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_dirGetAttr�s
cCs�d|}t||�s&|j�n|dkrit|d�sMg|_n|jjt||��nt|||�}|dkr�|j|�n|S(s;
Make the directory attributes call .dirSetup() if needed.
R�Rqt_old_pkgdirs(s_dir_setup_pkgdir(RSRR�R2R�R�Rn(RR�R�R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_dirSetAttr�s
cCs
|jd�S(NRV(R�(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRh scCs
|jd�S(NRz(R�(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRh
scCs
|jd�S(NRy(R�(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRhscCs|jd|�S(NRy(R�(Rtx((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRh
scCs
|jd�S(NR|(R�(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRhscCs|jd|�S(NR|(R�(RR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRhscCs
|jd�S(Ntgpgdir(R�(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRhscCs|jd|�S(NR�(R�(RR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRhscCs
|jd�S(Ntgpgcadir(R�(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRhscCs|jd|�S(NR�(R�(RR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRhscCs
|jd�S(NR�(R�(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRhscCs'tjdtjdd�|j�dS(Ns8baseurlSetup()
will go away in a future version of Yum.
Ri(RRR!Rt
_baseurlSetup(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytbaseurlSetups cCsF|jr
dS|jsdS|jjd�dkr6dS|j|_dS(NR�i����(R�R�tfind(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_hack_mirrorlist_for_anacondas c Cs�|j|j�|_|j|_g}|j�|jrl|jrl|jt|jj ���t
|_n|jr�|jr�|j|j��t
|_n|j|�|_
|j|j
|_t|j�dkrlt|d�rltjj|j�rl|jsiytj|j�Wn3ttfk
rN}tjd|j|f�qfXtjd|j�qiqln|j|_|j�dS(s�go
through the baseurls and mirrorlists and populate self.urls
with valid ones, run self.check() at the end to make sure it
workeditmirrorlist_files-Could not delete bad mirrorlist file: %s -
%ss-removing mirrorlist with no valid mirrors:
%sN(t_replace_and_check_urlR�t
_orig_baseurlR�R�R�textendtlistR�R�RR�t_getMirrorListR�R�R,RSRwRxR�R�RbRR^R�RlR�terrorR�R(RR�R(((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR�*s,
$ cCs
g}d}x�|D]�}|dkr+qntj||j�}|ddkr]|d}ny%tj|�\}}}}} }
Wn"tttfk
r�}d}nX|dkr�|}qq|j|�qW|dk r|r�t j
d tj|��qt j
d
tj|��n|S(
NR�i����RttblahRRR�RsMYumRepo
Warning: Some mirror URLs are not using ftp, http[s] or file.
Eg. %ssJYumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. %s(R�N(shttpsftpsfileshttps(Rtparsert
varReplaceR�R+t
ValueErrort
IndexErrortKeyErrorR2R�R�RR0R�(Rturl_listtgoodurlstskippedR1tstbtptqtftoR(((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR�Ns*
%
cCs|js|j�n|jS(N(R�R�(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_geturlsls
tfgetcCs
|j�S(N(R�(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRhqstfsetcCst|d|�S(NR�(R�(Rtvalue((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRhrstfdelcCst|dd�S(NR�(R�R(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRhsscCs�|js�|jdd|_|jd}|j�stj|j�}|jd|jdk�}y8t d|j
|�}|j||dd|j�}Wqt
k
r}tjj|j�s�d |j}tj|�ntjd
||jdtj|jd�f�t|_qXn|js�y)tj|�|_tj||j�Wq�tjk
r�}tjd
||f�t|_tj|�q�Xn|jr�tj|j�|_q�n|jS(NRtsmetalink.xmls.tmpRbRLR
ttexts%s/metalinksQCannot retrieve metalink for repository: %s. Please
verify its path and try agains*Could not get metalink %s error was
%s: %siis)Could not parse metalink %s error was
%s(R�RVtmetalink_filenamet_metalinkCurrentRR0R�RHthttp_cachingRR9turlgrabR4RRwRxR�R!R"R�R�targst
to_unicodeRR�tMetaLinkRepoMDtshutiltmovetMetaLinkRepoErrorParseFailR^(RtlocalR1RKtugR�R(R�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_getMetalinkus6
#
1 cCs
|j�S(N(R�(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRh�scCst|d|�S(NR�(R�(RR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRh�s cCst|dd�S(NR�(R�R(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRh�scCsZ|r"|jd�p!|jd�S|js/tSx$|jD]}|j|�s9tSq9WtS(NRtsfile:(R�R�Rt_all_urls_are_filesR(RR1((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR��s R$cKs|dkr|j}n|dks0|dkrFtjd|j�n|jdkr�tjj|�rk|Stjd||jf�n|r�t j
|�\}
}}}}n|jr�|jr�d}|r�|
dkr�|r�t
|�}q�ny\|jd|d|d|d|d |d
|d|jd|jd
|d||f�
}|SWq�tjk
r~}tjtjd|f�q�Xn|r|s�|j|�rtjtjj|��}|j|j}|t|�krtjtd�tjj|�t|�tt|��f�qn|r,|
dkr,|jd|
�}td|jd |d| d|jd|j
d|d|d|j!|�}|d|}y:|j"t#j$|�|dt#j$|�d||f�}Wqt%k
r(}|j&||�d|||f}tj|�}||_'|�qXn�t(|j)d|
��}yg|j*j"t#j$|�|dt#j$|�d||fd |d| d|d|d|d|j!|�}Wnit%k
r}|j&||�d|||f}t+|dd�}tj,||�}||_'|�nX|S(s�retrieve
file from the mirrorgroup for the repo
relative to local, optionally get range from
start to end, also optionally retrieve from a specific
baseurls/get request for Repo %s, gave no source or destis0Caching enabled
but no local cache of %s from
%sRR�t checkfunctrelativeR�R�R1Rtnametdiscnumtranges8Error
getting package from media; falling back to url %ssKInsufficient space in
download directory %s
* free %s
* needed %sRbR R#R"R�tsizetretry_no_cacheRts*failed to
retrieve %s from %s
error was %sR�sfailure: %s from %s:
%sterrorsN(-RR�R!R"R4RbRwRxR�R+R,RR�tintR�t
MediaErrorR#tlogt
logginglevelstDEBUG_2R�tstatvfstdirnametf_bavailtf_bsizetlongR RRHRR9R�R�R�R�RR0Rt_del_dl_fileR6R^R_R�R�tNoMoreMirrorsRepoError(RR1R�R�tstarttendR�R�R�R#RbR�R*tschemeR-RxtquerytfragidR�R�R(tdirstattavailRKR�R~terrstrRR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_getFile�s�!T! 4
c
s�j}�j���j}|j��rM�j�r=�Stj��n|dkrn��fd�}n|jdk|_ z@|j
d|d|d�d|d|d|d �j|�}Wdt|_ X|j
d
�r�j�rd} | ��jjf} tj| �n|S(Ncs5�j�s1tj��tdtd���ndS(Ni����s)Package
does not match intended
download.(tverifyLocalPkgRR^RR (R=(R�tpackage(s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR�"s
s
lazy:packagesR1R�R�R�R�RbR�RCs3Downloaded
package %s, from %s, but it was
invalid.(trelativepathtlocalPkgtbasepatht_preload_pkg_from_system_cacheR�RR^RR�R�R�R�RRR6R.R!R"(
RR�R�R�RbR*R~R�RR�((R�R�s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt
getPackages2
cCs�|j}|j�}|j}|j}||} |j}
tjj|j�sbtj |j�n|j
d|
d|d|d|ddd|d|dd d
|d| �
S(NR1R�R�R�R#R�R�R�iRbR�(R�tlocalHdrthdrstartthdrendR�RwRxR�R|RkR�R(RR�R�R#RbR~R�R�R�R�R�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt getHeader@s
!cCs�|jdk r|jS|j|j|j�}|s8|S|jdd}tjj|�s_t S|j
�|jdd}|jr�tjj|�r�t St|_tS(s�Check if there is a
metadata_cookie and check its age. If the
age of the cookie is less than metadata_expire time then return
true
else return False. This result is cached, so that
metalink/repomd.xml
are synchronized.Rts
repomd.xmlsmetalink.xmlN(
R�RtwithinCacheAgeR�tmetadata_expireRVRwRxR�RR�R�R(RtmC_deftrepomdfntmlfn((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytmetadataCurrentRs
cCs�|jdk r|jS|jrHtjj|j�rHtjd|�n|jr]t |_nNtjj|j�s~t
|_n-|j|j|j
�r�t |_n t
|_|jS(Ns$Cannot find metalink.xml file for
%s(R�RRbRwRxR�R�R!R"RRR�R�R�(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR�os cCs�t|d�r�|jjd�r�|jjd�r�|jtd�}|jtd�}|dkr{|dkswt�tS|dkr�|dkr�tSn|dkr�|dkr�tSq�ntS(s8Return
whether cache_req matches metadata_expire_filter.t_metadata_cache_reqs
read-only:tfuturetpasttpresent(R�R�R�(R�R�(RSR�R�tmetadata_expire_filterR,tAssertionErrorRR(Rt
cache_filtt cache_req((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_matchExpireFilter�s
cCs�|r|j�rd}n|dkr=tjj|�r=tSt}tjj|�r�tj|�}|d|tj�kr�t}n|dtj�kr�t}n|js�|S|dt |j
�kr�t}q�n|S(sxcheck if any file is older than a certain amount
of time. Used for
the cachecookie and the mirrorlist
return True if w/i the expiration time limit
false if the time limit has expired
Additionally compare the file to age of the newest .repo or
yum.conf
file. If any of them are newer then invalidate the cache
i����i(R�RwRxR�RRtstatttimetcheck_config_file_ageR�R�(Rtmyfiletexpiration_timetexpire_req_filterR�tcookie_info((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR��s
cCse|j}tjj|j�s*|j}ntj|tj�rat|jd�}|j�~ndS(s/if
possible, set touch the metadata_cookie
filesw+N( R�RwRxR�RVtaccesstW_OKtopenR
(RRtfo((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytsetMetadataCookie�s
cCs�y1||_||_||_||_||_Wntjk
rL}�nX|jr�|jr�|jr�|j r�t
jtj
d�t|_t|_ndS(Ns1Disabling media repo for non-media-aware
frontend(RbR�R�R�R�R!R"RR�R�R#R�R�R�RR�Rtskip_if_unavailable(RRbR�R�R�R�R(((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytsetup�s
' cCsO|jr2tjj|�r2tjd|j�n|jsG|j�rKtSt S(s(
Should we cache the current repomd.xml s"Cannot find repomd.xml file
for %s(
RbRwRxR�R!R"R4R�RR(RR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_cachingRepoXML�s
cCsk|jdif}|dkr0d|jk}nd}yvtjdddddtjj|��}|jd|j d |d
dd|d
dd|d|j
dkdd�}Wnmtk
r�}tj
|�|r�dStjd||f�n.tjk
rtj
|�|rdS�nXytj||�Wn4tj
|�|rMdStjd||f�nX|S(s*
Call _getFile() for the repomd.xml file.
told_repo_XMLR�tprefixtrepomdtsuffixstmp.xmlR�R�R�R�iR�R#R�RbRLR�i�sError
downloading file %s: %ssError renaming file %s to
%s(N(t
_checkRepoXMLRR�ttempfiletmktempRwRxR�R�R�R�RRR^R!R"trename(RR�R�t
grab_can_failR�ttfnameR�R(((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_getFileRepoXML�sD
cCsuytj|j|�SWnWtjk
rp}|dkrJd|jk}n|rTdStjd|j|f�nXdS(s Parse the
repomd.xml file. R�s&Error importing repomd.xml from %s:
%sN( trepoMDObjecttRepoMDR.R!tRepoMDErrorRR�R"R4(RR�tparse_can_failR(((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt
_parseRepoXMLscCs�x+tj|jd�D]}tj|�qWtjj|�r�|d}tj||�|j |t
�}|dkr|dSi|d6|d6|d6gd6|_|SdS(s= If we have an older
repomd.xml file available, save it out. s
/*.old.tmps.old.tmpR�R�t old_localtnew_MD_filesN(
tglobRVRR^RwRxR�R�tcopy2R
RRR�(RR�RRRn((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_saveOldRepoXMLs
cCs�|jstjd|j�nd|jkr;i|_dSx"|jdD]}tj|�qIW|j}i|_d|kr�tj|d|d�n|d|_ d|kr�dSx&|dD]}tj|d|�q�WdS( s0
If we have older data available, revert to it. s*Can't download or
revert repomd.xml for %sR�NRRR�told_MD_filess.old.tmp(
R�R!R"R4R�RR^RwRR�(RRtold_datatrevert((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_revertOldRepoXML
s
cCsl|j}i|_d|kr2tj|d�nd|krBdSx#|dD]}tj|d�qMWdS(s
Done with old data, delete it.
RRNs.old.tmp(R�RR^(RRR((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_doneOldRepoXML?s cCs�|dkr|j}n|dkr?d|j�kr?d}n|dkrq|j|dd|�rq|d7}n||jj|�fS( NR�R�RQR*RPt_dbRc(sothers filelistssprimary(RRcR�REtrepoDataR(RRfRc((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_get_mdtype_dataLs
cCsN|j\}}|jdtjj|�}|rJtj|dt�}n|S(NRtR�(RvRVRwRxRyRR�R(RRHt
compressedR}R~R�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_get_mdtype_fnameXs
cCs~d|jkrtS|jd}|jrz|j|jjkrztjd|jtj |j�tj |jj�f�t
StS(s| We check the timestamps, if any of the timestamps for the
"new" data is older than what we have ... we revert.
R�skNot using downloaded %s/repomd.xml because it is older than what we
have:
Current : %s
Downloaded:
%s(R�RR�t timestampRcR�R�R.R�tctimeR(RR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_groupCheckDataMDNewer`s
cCs�|j|jkrtS|j|jkr,tSt}xJ|jD]?}||jkrWq<n|j||j|krutSt}q<W|S(s7
Check parsed repomd.xml against metalink.repomd data.
(RRtlengthR�t checksumstchksumsR(RcR�tdoneRe((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_checkRepoXMLMetalinkss
cCs�|dkr|j}n|dkr0|j}n|j||j�rItSxb|jjD]T}|j||�rVtjt j
dtj|jj
�tj|j
�f�tSqVWtS(s@ Check the repomd.xml
against the metalink data, if we have it. s/Using older repomd.xml
Latest: %s
Using:
%sN(RR�R�R!R�Rtold_repomdsR#R�R�R�R�RRR(RRcR�R�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_checkRepoMetalink�scCsk|j|�}|stS|j�|js0tS|jj}|jr[|j|jkr[tS|j ||�S(sx
Save the Old Repo XML, and if it exists check to see if it's the
latest available given the metalink data. (
RRR�R�R�R�R�RRR!(RR�toxmlR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_latestRepoXML�s
cCsN|jd}|jdk r
tS|j|�r>t}|}n�t}|j|�rr|}|j}|d|_ni|j||�}|dkr�|j r�t
|d�r�|jdkr�tj
d|j�n|j�tS|j�|jdkr |j|�|_n|jdkr&|j�tS|r0tS|j�sJ|j�tStS( s`
Common LoadRepoXML for instant and group, returns False if you
should just return.
s/repomd.xmlR�R�twritesread-only:futures Can't download
repomd.xml for
%sN(swritesread-only:future(RVR�RRR�RR%R�RR�RSR�R!R"R4RR�R
R(RR�tmdtypesR�tcachingR�R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_commonLoadRepoXML�s<
cCs[|jdkrtS|dkr+|j}n||jkrWt|j|jkrWtSntS(NRn(tmddownloadpolicyRRRcRt DBVERSIONt dbversionR(RRfRc((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRE�sc Cs�|dkrdS|s.t}|j|�}nEt}|j|�}tjj|�sstj|dt�}t}n|j tjj
|��|j||d|d|dt�s�dS|S(s� Check that we already
have this data, and that it's valid. Given
the DB mdtype and the main mdtype (no _db suffix).
R�R�RHRuN(RRRRwRxR�RR�RR{RyRz(RRHtdbmdtypetmmdtypet
file_checkRR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_groupCheckDataMDValid�s cCsZ|j|�}x7|D]/\}}|j|dt�s|j�tSqW|j|�tS(s�
Retrieve any listed mdtypes, and revert if there was a failure.
Also put any of the non-valid mdtype files from the
old_repo_XML
into the delete list, this means metadata can change filename
without us leaking it.
tretrieve_can_fail(t_commonRetrieveDataMD_listRGRRRt_commonRetrieveDataMD_done(RR'tdownloadingtndatatnmdtype((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_commonRetrieveDataMDs
cCsd�}|jj�}xH|jj�D]7}||kr@q(n|dkrRq(n|j|�q(W|d
krx|}ng}d|jkr�d
}n|jd}||jd<g}|jd<g}xO|D]G}|j|�\} }
|r�|j|d |�\}}|j|||t �}
|
r�|||| |
�rCq�nt
j|
|
d
�|j|
�|
d}t
jj
|�r�t
j||d
�|j|�q�q�n|
d
kr�q�n||kr�q�n|j|
| |�r�q�n|j|
| f�|j|j|
t��q�W|S(s+ Return a list of metadata to be retrieved
cSs||dkrtS||kr
tS|j|jkr6tStjj|jd�}tjj|jd�}||krxtStS(s9
Check if two returns from _get_mdtype_data() are equal.
iN(RRReRwRxRyRvR(tomdtypetodataR6R5tornametnrname((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt
_mdtype_eqsR@RARBR�R�RRRcs.old.tmps.sqlite(s
primary_dbsfilelists_dbsother_dbsgroup_gzN(R�tkeysRcR�R2RR�RR0RRwRRxR�RR(RR'R<tall_mdtypesRftrevertsR�t
newmdfilesR4R6R5R8R9R�t gen_local((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR2sR
cCs7x&|D]\}}|j|t�}qW|j�dS(s$
Uncompress the downloaded metadata
N(RRR(RR4R5R6R�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR3oscCs#|j|�r|j|�ndS(s�
Retrieve the new repomd.xml from the repository, then check it
and parse it. If it fails we revert to the old version and
pretend
that is fine. If the new repomd.xml requires new version of
files
that we have, like updateinfo.xml, we download those too and if
any
of those fail, we again revert everything and pretend old data
is
good.
N(R)R7(RR�R'((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_groupLoadRepoXMLvscCs�idgd6dgd6ddddgd6ddddd d
gd6}t�}t|j�tjkr�|j|j|j|jg��n0x-|jD]"}|j|j||g��q�W|s�d|kr�d}n|jd�t t
|��}|S(
Nt__None__tinstantRPs
group:primaryR�R�tpkgtagssgroup:smallR*R�s
group:mains group:all(RR�tmdpolicyR�tStringTypesR<RRtdiscardtsortedR�(Rt md_groupsR'RF((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_mdpolicy2mdtypes�s
%
cCs[y|j||j��SWntk
r:|j��nXtjd|j|jf�dS(s5retrieve/check/read in
repomd.xml from the repositorys#Bad loadRepoXML policy (for %s):
%sN(RBRKtKeyboardInterruptRR!R"R4RF(RR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_loadRepoXML�s
cCs*|jr|jS|jd|j�|jS(NR�(R�RMR4(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_getRepoXML�s cCs
|j�S(N(RN(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRh�scCst|d|�S(NR�(R�(RR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRh�scCst|dd�S(NR�(R�R(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRh�scCst|�tjkr!|j}n|}|jr�|jr�tjdkr_t dd|��n|j
d}yP|jddddd|d d
|jddddd
|j
dkdd�}Wn,t k
r�}t dd||f��nXtj|||j�}|rq|jrqy|j||j�Wn)tjk
rU}t dd|��nXtj|||j�}n|s�t dd|��q�nytj|j|�}Wn/tjk
r�}t dd||f��nX|j�|jr|j|�rt dd|��ndS(Ni����s?pygpgme
is not working so repomd.xml can not be verified for
%ss/repomd.xml.ascR�srepodata/repomd.xml.ascR�iR�R�s%s/signatureR#R�RbRLR�i�s1Error
finding signature for repomd.xml for %s: %ss;Gpg Keys not imported, cannot
verify repomd.xml for repo %ss1repomd.xml signature could not be verified
for %ss%Error importing repomd.xml for %s: %ss)repomd.xml does not match
metalink for
%s(R�R�tInstanceTypeRt
repo_gpgcheckt_override_sigchecksRtgpgmeRRRVR�R4R�tvalid_detached_sigR�R�R�R!tYumBaseErrorRRR.RR�R�R#(RR�tfilepathtsigfileR�R(tvalidRc((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR��sF
cCsCtj|�}|sdS|r2|j|kr2dStj|�dS(s4 Delete a
downloaded file if it's the correct size.
N(Rtstat_ftst_sizeR^(RR�R�tsd((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR��scCs|j|||�S(s,check
the metadata type against its
checksum(Rz(RtfnRfR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR��scCs�|}|dkr'|jj|�}n|rH|j\}}|j} n|j\}}|j} t|�tj kr�|j
}
n|}
| dk r�t| �} nt|
|�}|r"t
j|
�}|dk r"| dkr�||kr�|jdkr�dS| |jkr||krdSq"ny|j||
d| �}Wn3tjk
rs}
|r]dStdd|
��nX||kr�t|
||�dS|r�dStdd��dS( s5 Internal function, use
.checkMD() from outside yum. iiR�i����sError performing
checksum: %si����s%Metadata file does not match
checksumN(RRcRdR�topensizeReR�R�R�RORR�RRRXRYR�R!R"RR(RR[RfR�RHRuR�tr_ctypetr_csumR�R�tl_csumtfsizeR(((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRz�sB '
cCs
|j|�S(s�base function to retrieve
metadata files from the remote url
returns the path to the local metadata file of a
'mdtype'
mdtype can be 'primary', 'filelists',
'other' or
'group'.(RG(RRf((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt
retrieveMDscs��jj��}|j\}}tjj|�}�jd|}�jj��rZ|S�j rst
j|�ntjj|�s��j
tjj|��r��j|�dt�r�d�j�<|Sn�jdkr&|r�dStjj|�rd|} nd|�jf} tj| �nt}
�jjd�}|dk r�|jj��}|dk r�tjj|jd�}
||
kp�|j|jk}
q�ny���fd�}d�j�f}|jdks�|
r�d}nd }�j|t|j���jd
|d|ddd
|d|d|d�jdkd|j|�}WnVtjk
rz|rtdS�n:tk
r�}|r�dStjd|�jf�nX|SdS(s8 Internal function,
use .retrieveMD() from outside yum. RtRuis;Caching enabled and local
cache: %s does not match checksums0Caching enabled but no local cache of %s
from %sR�csLy�j|��Wn$tk
r:tj|j��nXd�j�<dS(Ni(R�RRR^RR�(R=(RfR(s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR�Qs
s%s/%sR$R�R�R�R#R�R�RbRLR�s6Could
not retrieve %s matching remote checksum from
%sN(RcRdRvRwRxRyRVR�RR�RR^R�R{RzRRbRR4R!R"R�RReR�R�R�R�R�R(RRfR1R*R�R}R~RR�R�tpartialtorepomdR9tofnameR�R�R#R(((RfRs//usr/lib/python2.7/site-packages/yum/yumRepo.pyRGsl
cCs
|jd�S(s]this gets
you the path to the primary.xml file, retrieving it if we
need a new
oneRP(Ra(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRWwscCs
|jd�S(s_this
gets you the path to the filelists.xml file, retrieving it if we
need a new
oneR*(Ra(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyRY~scCs
|jd�S(NRQ(Ra(R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR[�scCs�d|jj�kr|jddt�}|r{ytj|dd|j�}Wq{tk
rw}tj |�d}q{Xn|S|jddt�S(s�gets groups and returns
group file path for the repository, if there
is none or retrieve/decompress fails, it returns
NoneR�R1s comps.xmlRRR�N(RcR�RGRRRaRbR�R�R�R(RR[R(((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt getGroups�s
cCs||_||_t|_dS(N(R9R�RR�(RR9R�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytsetCallback�s cCs||_t|_dS(N(R�RR�(RR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt
setFailureObj�s cCs||_t|_dS(N(R�RR�(RR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytsetMirrorFailureObj�s cCs||_t|_dS(N(R�RR�(RR9((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytsetInterruptCallback�s cCs�g}g}|dk r�y|j�}WnEtk
ro}|dkrOd}ntjd||f�g}nXxT|D]I}tjd|�s�qwn|j�}|jdd�}|j |�qwWn||fS(s5
read the mirror list from the specified file object
s <unknown>s+Could not read mirrorlist %s, error was
%ss
\w+://\S+\s*$s$ARCHs $BASEARCHN(
Rt readlinest ExceptionR�R�R
RtrstriptreplaceR2(RR�R1t
returnlisttcontentR(tlineR&((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_readMirrorList�s"
cCs�|jdd|_d}t}|j|j|jdt�rft}t|jd�}d|j}n�|j}t j |�d}|dkr�d|}n|j
�}ytjj
||�}WnJtk
r}tjd||jdtj|jd �f�d}nX|j||�\}}|r||jr�|r�t|jd
�} x|D]}
| j|
�qUW| j�q�nL|r�tjj|j�r�tj|jd�|jt|jd��dS|S(s$retrieve
an up2date-style mirrorlist file from our mirrorlist url,
also save the file to the local repo dir and use that if cache
expiry
not expired
we also s/$ARCH/$BASEARCH/ and move along
return the baseurls from the mirrorlist file
Rtsmirrorlist.txtR�trsfile://iR�s1Could not retrieve
mirrorlist %s error was
%s:
%sitwN(RVR�RRR�tmirrorlist_expireRR�R�R+RHREtgrabberturlopenRR�R�R�RR�RqRbR&R
RwRxR�tutime(RR�tcacheokR1R�RKR(RnRoR�Rp((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR��s:
1
cCs~tjj|�stStjj|�r[tj|�tjtj|�tjkr[tSnytj||�WntSXtS(s&attempts
to copy the file, if
possible( RwRxR�RR�tST_CTIMER�RR(RR[tdestfn((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt
_preload_file�s,R�cCs�t|d�stS|jdkr&tStjj|j|j�}tjj|�sWtStjj|�tjj|j �kr�tS|d|tjj
|�}|dkr�|j d|tjj
|�}n|j||�S(sLattempts to copy the file from the system-wide
cache,
if
possibletold_base_cache_dirR�RtN(
RSRR|RwRxR�R.R�tnormpathRVRyRR{(RRtsubdirRztglob_repo_cache_dirR[((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_preload_file_from_system_cache�s'$cCs
|j|�S(sUattempts
to copy the metadata file from the system-wide cache,
if
possible(R�(RR((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR{scCs�tjj|j��}tjj|j|�}|j|j�ddd|�rUtSt|d�sht Sx6|j
D]+}|jtjj||�|�rrtSqrWt S(sOattempts to copy the package from
the system-wide cache,
if
possibleR~s packages/RzR�(RwRxRyR�R�RyR�RRSRR�R{(RtpkgtpnameRztopkgdir((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR�s !cCs�g}dGHy|jj�}Wn<tjk
r\}tddt|��}|j|�|SXxp|D]h}d|GHy|j|�Wqdtjk
r�}d|}td|t|��}|j|�qdXqdW|S(Nsverifying
mdisfailed to load repomd.xmlsverifying %ss.%s metadata missing or does
not match
checksumi(RcR�R!R"tRepoVerifyProblemR&R2Ra(Rtproblemstmd_typesR(tprbtmd_typeR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt
_verify_md"s"
cCs�dGHg}|j�}|dk r5tj|�}nytj�}|j|�WnJtjtj fk
r�}d}t
t|t|��}|j|�n8X|j
dkr�d}t
t|d�}|j|�n|S(Nsverifying compsscomps file failed to
addisno groups in
compsR�(ReRRR�RtCompstaddR!tGroupsErrortCompsExceptionR�tREPO_PROBLEM_COMPSR&t
compscount(RR�tgrpfiletcR(R�R�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt
_verify_comps7s"cCsgS(N((R((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt_verify_packagesSstrepodataRcCs|g}d|kr(|j|j��nd|krV|jrV|j|j��qVnd|krx|j|j��n|S(s}download/verify
the specified items
@items = ['repodata', 'comps'] can include:
repodata, comps, packages
R�RRo(R�R�R�R�R�(RtitemsR�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pytverifyVs iN(qR�R�R�RR�R�tpropertyR�R�R4R
R�t_YumRepository__getProxyDictReR�R�R�R�RRR�R�R�RRR�RR_RRRHRfRgR�R�RnRR�R�RVRzRyR|R�R�R�R�R�R�R�R�R�R�R�R�R�t_YumRepository__getR�R�R�R�R�R�R�R�R�RR
RRRRRRtstaticmethodR!R#R%R)RER0R7R2R3RBRKRMRNRcR�R�R�RzRaRGRWRYR[ReRfRgRhRiRqR�R{R�R{R�R�R�R�R�(((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR�As� =
< ' $ $
h) # *
-
S ,
0 Z , cCsRtjdtjdd�g}ttjd�r=tj}nddl}|}tj|�d}|dkr{d|}n|}y|j |d |�}WnBt
k
r�}d
||jdtj
|jd�fGHd}nX|dk rN|j�} xT| D]I}
tjd|
�rq�n|
j�}|jd
d�}|j|�q�Wn|S(Ns9getMirrorList() will go away
in a future version of Yum.
RiRvi����iR�sfile://R]s1Could not retrieve mirrorlist %s
error was
%s: %sis\s*(#|$)s$ARCHs $BASEARCH(RRR!RRSRERuR
R+RvRR�RR�RRjR
RRlRmR2(R�tpdictRnturlresolverR
R�R1R�R(RoRpR&((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt
getMirrorListgs2
)
R�cBseZdZed�ZRS(s9 Holder for each
"problem" we find with a repo.verify().
cCs(||_||_||_||_dS(N(R�tmessagetdetailstfake(RR�R�R�R�((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR�s (R�R�R�RR(((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyR��s(:RwR
R�R�R+t
uses_fragmentR2R
R!turlgrabber.grabberRRturlgrabber.progressRturlgrabber.mirrorRERRRtreposRR�RTR�tyumRRRR t constantsR�tloggingR�RR
R�R�R�RRtskip_old_DBMD_checkR
RSRtImportErrorRRtsimplefilterRt getLoggerR�R#RRR�R�R�R�(((s//usr/lib/python2.7/site-packages/yum/yumRepo.pyt<module>sn
��������-%