Ñò ¾[c@s3dZddkZddklZlZlZddklZddkl Z ddk l Z l Z l Z ddk lZddkZddkZddkZddkZddklZd „Zd efd „ƒYZd efd „ƒYZd„Zdefd„ƒYZd„Zedjo eƒndS(s+ Update metadata (updateinfo.xml) parsing. iÿÿÿÿN(tutf8_text_wraptto_utf8t_(t YumRepository(tFakeRepository(tto_xmlt decompresstrepo_gen_decompress(tcElementTree_iterparse(t ArchStorageccsYy,x%t|ƒD]\}}||fVqWWn&tj otidI|IJnXdS(s@ Works like iterparse, but hides XML errors (prints a warning). sFile is not valid XML:N(t iterparset SyntaxErrortsyststderr(tfilenameteventtelem((s1/usr/lib/python2.6/site-packages/yum/update_md.pytsafe_iterparse(s  tUpdateNoticeExceptioncBseZdZRS(s0 An exception thrown for bad UpdateNotice data. (t__name__t __module__t__doc__(((s1/usr/lib/python2.6/site-packages/yum/update_md.pyR0st UpdateNoticecBs˜eZdZdddd„Zd„Zd„Zd„Zd„Zd„Z dd „Z d „Z d „Z d„Z d„Zd„Zd„Zd„ZRS(s@ A single update notice (for instance, a security fix). cCsµhdd6dd6dd6dd6dd6dd6dd6dd 6dd 6dd 6dd 6dd 6dd6dd6dd6gd6gd6td6|_|o|i|ƒn||_||_dS(Nttfromttypettitletreleasetstatustversiont pushcountt update_idtissuedtupdatedt descriptiontrightstseveritytsummarytsolutiont referencestpkglisttreboot_suggested(tFalset_mdt_parset_repoidt_vlogger(tselfRtrepoidtvlogger((s1/usr/lib/python2.6/site-packages/yum/update_md.pyt__init__;s.  cCsRt|ƒtjot|iƒ|S|ii|ƒ}|djo d}n|S(s: Allows scriptable metadata access (ie: un['update_id']). RN(RtinttsortedR+tgettNone(R/titemtret((s1/usr/lib/python2.6/site-packages/yum/update_md.pyt __getitem__Ws   cCs ||ijS(s% Allows quick tests for foo in blah. (R+(R/R7((s1/usr/lib/python2.6/site-packages/yum/update_md.pyt __contains__`scCs||i|(thasattrR-R6(tun((s1/usr/lib/python2.6/site-packages/yum/update_md.pyt_ridks cs¢ˆidjodStdƒ}|ˆid;}|dˆˆƒ|f7}|dˆi|ˆi|f7}|dˆˆƒ|f7}ˆiiti|ƒdS(s=Log the mismatched data similarly to conflict markers in git.Ns(Duplicate of %s differs in some fields: Rs<<<<<<< %s:%s s%r ======= %r s >>>>>>> %s:%s(R.R6RR+tlogt logginglevelstDEBUG_3(tdatatmsg(R/R?tother(s1/usr/lib/python2.6/site-packages/yum/update_md.pyt _log_failureqs "R+RRRR#R$RR R!RRRRR%R"R&(stypes update_idsstatussrightssseveritysreleasesissuedsupdatedsversions pushcountsfromstitlessummarys descriptionssolution(R=R*R+tTrue(R/RERFRC((R?R/REs1/usr/lib/python2.6/site-packages/yum/update_md.pyt__eq__gs    cCs ||j S(N((R/RE((s1/usr/lib/python2.6/site-packages/yum/update_md.pyt__ne__‰stfilesR%R#R&c Csªd|i}|ido4|id|idjo|d|id7}ntd„|idƒ}t|ƒotd|jogd}xB|D]:}|d |d d |jod |d pd f7}qW||d iƒd7}ntd„|idƒ}t|ƒoRd|joEd}x |D]}|d|d 7}q)W||d iƒd7}n|idoGd|jo:t|iddddd+ƒ} |ddi| ƒ7}n|idoGd|jo:t|iddddd-ƒ} |ddi| ƒ7}n|idoGd|jo:t|iddddd/ƒ} |ddi| ƒ7}n|id oGd |jo:t|id dddd1ƒ} |d!di| ƒ7}n|id"oGd"|jo:t|id"dddd3ƒ} |d#di| ƒ7}nd$|jo |d Sttii ƒƒ} d%} xT|id&D]E} x<| d'D]0}|d(| joqZn| d|d)7} qZWqIW|| d iƒ7}|S(4Ns, =============================================================================== %(title)s =============================================================================== Update ID : %(update_id)s Release : %(release)s Type : %(type)s Status : %(status)s Issued : %(issued)s R!R s Updated : %scSs|ddjS(Rtbugzilla((tr((s1/usr/lib/python2.6/site-packages/yum/update_md.pytœsR'tbugss Bugs :s %s%s :tidRs - %sRiÿÿÿÿs cSs|ddjS(Rtcve((RL((s1/usr/lib/python2.6/site-packages/yum/update_md.pyRM¥stcvess CVEs :s %s :R%twidthi@tsubsequent_indentt i s: s Summary : %s R"sDescription : %s R&s Solution : %s R#s Rights : %s R$s Severity : %s RJs Files :R(tpackagestarchRs s : s s : s s : s s : s s : ( R+tfiltertlentrstripRtjointsettrpmUtilsRVt getArchList(R/t skip_datatheadtbzstbuglisttbzRQtcvelistRPRCtdesctarchestfilelisttpkgtfile((s1/usr/lib/python2.6/site-packages/yum/update_md.pyttextŒsf )        cCst|iƒƒS(N(RRi(R/((s1/usr/lib/python2.6/site-packages/yum/update_md.pyt__str__×scCs|iS(s Return the metadata dict. (R+(R/((s1/usr/lib/python2.6/site-packages/yum/update_md.pyt get_metadataÚscCs\|idjo<x'dD]}|ii|ƒ|i| tupdateRRRRROsNo id element foundRRR tdateR!R'R"R#R$R%R&R(RRsNo update element foundN(sfromstypesstatussversion(ttagtattribR5R+RiRt_parse_referencest_parse_pkglist(R/RRotchild((s1/usr/lib/python2.6/site-packages/yum/update_md.pyR,ÞsF  cCsvxo|D]g}|idjoEh}x$d D]}|ii|ƒ|| t referenceROthrefRRR'sNo reference element foundN(sidRtstypestitle(RnRoR5R+tappendR(R/RRsRCt refattrib((s1/usr/lib/python2.6/site-packages/yum/update_md.pyRp s cCsÀx¹|D]±}hgd6}d|ijo|iidƒ|d RUtshorttnametpackageR(N(RoR5RnRiRut_parse_packageR+(R/Rt collectionRCR7((s1/usr/lib/python2.6/site-packages/yum/update_md.pyRq!s  "cCsæh}x$d D]}|ii|ƒ|| RVtepochRxRRtsrcit 0123456789RtsumRR)(sarchR|snamesversionsreleaseR}N(RoR5R6RnRiRGR+(R/RRytpkgfieldRr((s1/usr/lib/python2.6/site-packages/yum/update_md.pyRz6s!#cCs–dt|idƒt|idƒt|idƒt|idƒt|idƒt|idƒt|idƒt|id d tƒt|id ƒf }|id o%|d t|id d tƒ7}n|ido|dt|idƒ7}n|ido|dt|idƒ7}n|ido|dt|idƒ7}n|ido|dt|idƒ7}n|idoà|d7}xÅ|idD]¶}|do^|dt|dd tƒt|dd tƒt|dd tƒt|dd tƒf7}q­|dt|dd tƒt|dd tƒt|dd tƒf7}q­W|d7}n|ido|d7}xê|idD]Û}|dt|d d tƒt|d!ƒf7}xš|d"D]Ž}|d#t|d$d tƒt|d!d tƒt|dd tƒt|d%d tƒt|dd tƒ|d&pd't|d(ƒf7}qÚW|d)7}q›W|d*7}n|d+7}|S(,s.Generate the xml for this update notice objects§ %s %s %s %s RRRRRRRR RoR"R!s R%s %s R&s %s R#s %s R$s %s R's s8 RtROs. s R(s s2 %s RwRxRUsƒ %s RVR}R|t0Rs s s (RR+RG(R/RDtreftcollRg((s1/usr/lib/python2.6/site-packages/yum/update_md.pytxmlXsb   %  &2&   N(sfilesssummarysrightsssolution(RRRR6R2R9R:R<RHRIRiRjRkR,RpRqRzR„(((s1/usr/lib/python2.6/site-packages/yum/update_md.pyR5s   "  K   /   "cCs=tii|d|d|df|d|d|dfƒS(s- Compare two "std." tuples, (n, a, e, v, r). iii(R\t miscutilst compareEVR(ttup1ttup2((s1/usr/lib/python2.6/site-packages/yum/update_md.pyt_rpm_tup_vercmp–s!tUpdateMetadatacBsweZdZgd„Zd d„ZeeƒZd„Zd„Z d„Z dd„Z d„Z d „Z d d „ZRS( s* The root update metadata object. cCs“h|_h|_h|_g|_tidƒ|_x;|D]3}y|i|ƒWq=ti j o q=q=Xq=Wt ƒ|_ |i i |_ dS(Nsyum.verbose.update_md( t_noticest_cachet _no_cachet_repostloggingt getLoggerR.taddtErrorst RepoMDErrorR t arch_storagetarchlist(R/trepostrepo((s1/usr/lib/python2.6/site-packages/yum/update_md.pyR2¡s      cCs=|djo|iiƒS||ijo|i|pgS(s Return all notices. N(R6R‹tvaluesR(R/Rx((s1/usr/lib/python2.6/site-packages/yum/update_md.pyt get_notices°s cCsOt|ƒtgƒtdƒfjodi|ƒ}n|ii|ƒpdS(si Retrieve an update notice for a given (name, version, release) string or tuple. t-(N(RRZRŒR5R6(R/tnvr((s1/usr/lib/python2.6/site-packages/yum/update_md.pyt get_notice¸s%c CsÇ|}|d}|d}g}g}tƒ}x7|i|ƒD]&}x|dD]} x| dD]ü} t} | d|jp| d|joC||jo/| d|jo| d|ijo t} qÒqan| d| d| dpd| d | d f}t||ƒdjoqan| o|i||fƒqa|i||fƒ|i|ƒqaWqPWq?Wx8|D]0\}}||jo|i||fƒqpqpW|id td d „dtƒ|S(s Retrieve any update notices which are newer than a given std. pkgtup (name, arch, epoch, version, release) tuple. Returns: list of (pkgtup, notice) that are newer than the given pkgtup, in the order of newest pkgtups first. iiR(RURxRVR|RRRtcmptkeycSs|dS(i((tx((s1/usr/lib/python2.6/site-packages/yum/update_md.pyRMëstreverse( R[R™R*R•RGR‰RuR‘tsort( R/tpkgtupt oldpkgtupRxRVR8tother_arch_listtnoticestnoticetupkgRgt other_arch((s1/usr/lib/python2.6/site-packages/yum/update_md.pytget_applicable_noticesÉs>     "2   cCsä| p |d otS|d|ijo)|i|d}||jotStƒ}x#|dD]}|i|dƒqdWxL|dD]@}|d|joqŠn|i|dƒ|di|ƒqŠWtƒ}x#|dD]}|i|dƒqâWxL|dD]@}|d|joqn|i|dƒ|di|ƒqW|}n||i|dtountseenR‚Rgtfiledatatno((s1/usr/lib/python2.6/site-packages/yum/update_md.pyt add_noticeîsH          &t updateinfoc Csª|p t‚nd }t|ƒtdƒtdƒfjot|ƒ}t|dƒ}n¯t|tƒox|i|ijoa|i}|ii |iƒ|i |ƒ}|p tƒ‚nt |dƒ}t|dƒ}q n't|t ƒot id‚n|}xšt|ƒD]Œ\}}|idjopyt|||iƒ} Wn%tj o} tidIJqnX|i| ƒptidI| d IJq¢qqWd S( sA Parse a metadata from a given YumRepository, file, or filename. Rutrtsupdateinfo.xmlsNo updateinfo for local pkgRls%An update notice is broken, skipping.s3An update notice is broken, or duplicate, skipping:RN(RR6RRtopent isinstanceRRORŽRut retrieveMDRRR’R“RRnRR.R R R¯( R/tobjtmdtypeR0tunfiletinfiletmdRRR>te((s1/usr/lib/python2.6/site-packages/yum/update_md.pyR‘ s8 %     cCs.d}x!|iD]}|t|ƒ7}qW|S(Nu(R¥tunicode(R/R8R¦((s1/usr/lib/python2.6/site-packages/yum/update_md.pyt __unicode__Bs  cCst|iƒƒS(N(RR¼(R/((s1/usr/lib/python2.6/site-packages/yum/update_md.pyRjGscCsžd}|o|i|ƒnxE|iiƒD]4}|o|i|iƒƒq.||iƒ7}q.Wd}|o|i|ƒn ||7}|odS|S(Ns s (twriteR‹R˜R„(R/tfileobjRDR¦tend((s1/usr/lib/python2.6/site-packages/yum/update_md.pyR„Js N(RRRR2R6R™tpropertyR¥RœR©R¯R‘R¼RjR„(((s1/usr/lib/python2.6/site-packages/yum/update_md.pyRŠ›s     % 2 "  c CsÒddk}|iiƒd„}ttiƒdjo |ƒnyItidGHtƒ}x"tidD]}|i|ƒqiWt|ƒGHWn?t j o3ti dtidtidfIJ|ƒnXdS(s update_md test function. iÿÿÿÿNcSs)tidtidIJtidƒdS(NsUsage: %s ...ii(R R targvtexit(((s1/usr/lib/python2.6/site-packages/yum/update_md.pytusagefsiis%s: No such file:'%s'i( tyum.misctmisct setup_localeRXR RÁRŠR‘R»tIOErrorR (tyumRÃtumtsrcfile((s1/usr/lib/python2.6/site-packages/yum/update_md.pytmainas       t__main__( RR tyum.i18nRRRt yum.yumRepoRt yum.packagesRRÄRRRRR R’RRAtrpmUtils.miscutilsR\t rpmUtils.archR Rt ExceptionRtobjectRR‰RŠRËR(((s1/usr/lib/python2.6/site-packages/yum/update_md.pyts(      ÿb Æ