[c2@s`dZddkZddkZddkZddkZddkZddkZddkZddkZddk l Z ddk l Z ddk Z ddklZddklZddklZlZlZddkZddklZlZdd kTdd klZlZdd klZdd kl Z ddk!Zddk"Zdd kl#Z#l$Z$l%Z%ddk&Z&dZ'de fdYZ(dfdYZ)dfdYZ*dfdYZ+dfdYZ,e-dZ.defdYZ/e-dZ0e1djoFe2ei3djoei3ddjod GHd!GHd GHe*Z4xd"d#d$dd%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d'd4d'd5d'd6fD]8Z5e4i6e5Z7d7e5e7d8d9e2e7e7fGHqWne2ei3djoei3dd:jod GHd;GHd GHx4e8d"d<D]#Z5e0e5d*d=ei9d$q7Wd GHd>GHd GHx<e8d"d<D]+Z5e0e5d*d?d@dAei9d$q}Wd GHdBGHd GHx1e8d"d<D] Z5e0e5d*ei9d$qWne2ei3djoei3dd:dCfjoe/Z:e;e:_<d=e:i=dDdHdDe5d*e5d*ei9d$qnWd GHdIGHd GHxLe8d"d<D];Z5e:i>dJdKdLdMdFe5d*e5d*ei9d$qWne2ei3djoei3dd:dNdCdOfjoei?i@ne2ei3djoei3dd:dNfjod GHdPGHd GHx:e8d"d<D])Z5e0e5d*edQei9d$qWd GHd GHdRGHd GHxBe8d"d<D]1Z5e0e5d*edQdAdMei9d$qWd GHne2ei3djoei3dd:dNdCdOfjoe/Z:e;e:_<edQe:i=dDdHdDe5d*e5d*ei9d$qWd GHdTGHd GHxLe8d"d<D];Z5e:i>dJdKdLdMdFe5d*e5d*ei9d$qWd GHnndS(Us'This handles actual output from the cliiN(tproxy(t TextMeter(t URLGrabError(tprco_tuple_to_string(tto_strtto_utf8t to_unicode(t checkSignalst formatRequire(t*(t logginglevelst_(tRPMBaseCallback(tpackagesNewestByNameArch(t utf8_widthtutf8_width_filltutf8_text_fillcCsOttidpdStii}|djodS|djodS|S(s= Simple terminal width, limit to 20 chars. and make 0 == 80. tterminal_width_cachediPii(thasattrt urlgrabbertprogressR(tret((s/usr/share/yum-cli/output.pyt _term_width4s  t YumTextMetercBseZdZddZRS(s# Text progress bar output. cCstti|||dS(N(RRtupdate(tselft amount_readtnow((s/usr/share/yum-cli/output.pyRFsN(t__name__t __module__t__doc__tNoneR(((s/usr/share/yum-cli/output.pyR@stYumTermcBseZdZeZeeidoedZ nhdd6dd6dd6Z hd d 6d d 6d d6dd6dd6dd6dd6dd6Z hd d 6d d6d d6dd6dd 6dd6dd6dd6Z hdd6dd6dd6dd6d d6d!d6Z hd"d 6d#d6d$d6d%d6d&d 6d'd6d(d6d)d6Zhd*d 6d+d6d,d6d-d6d.d 6d/d6d0d6d1d6Zd2Zd=d3d4Zd=d3d5Zd6Zd=ed7Zd8Zd9Zd:Zd;Zd<ZRS(>s*some terminal "UI" helpers based on cursesRcCstS((R(R((s/usr/share/yum-cli/output.pytWstsmult underlinetrevtreversetsgr0tnormalitblackitblueitgreenitcyanitreditmagentaityellowitwhitestboldstblinkttdimsss(BsssssssssssssssscCs(|i|_|i|_|i|_dS(N(t_YumTerm__ansi_forced_MODEtMODEt_YumTerm__ansi_forced_FG_COLORtFG_COLORt_YumTerm__ansi_forced_BG_COLORtBG_COLOR(R((s/usr/share/yum-cli/output.pyt __forced_inits  tautoc Cst|_ttidp d|_nd|_|djo|idShdd6dd6dd6dd 6dd 6dd 6|_hdd 6dd 6dd6dd6dd6dd6dd6dd6|_ hdd 6dd 6dd6dd6dd6dd6dd6dd6|_ |djot |_dSyddk }Wnt |_dSX|p t i}n|ipt |_dSy|id|iWnt |_dSX|i|_ttidp|id|_n|id|_xU|iD]J}|}||ijo|i|}n|i|pd|i|[/*]?(RQtretsub(RR[tcap((s/usr/share/yum-cli/output.pyRTsc s|ip|S|p ti}nfd}xO|D]G}||} |oti| ti} nti| ||}q<W|S(Ncs|iS((tgroup(tmatch(tendtbeg(s/usr/share/yum-cli/output.pyR! s(RFRdtescapettemplatetIRe( RthaystackRjRitneedlesRkt ignore_casetrendertneedletpat((RiRjs/usr/share/yum-cli/output.pyRes   cKs |i|||id||S(NR'(ReR5(RRnRjRotkwds((s/usr/share/yum-cli/output.pytsub_normscKs|i||i|||S(N(RuR5(RRnR\RoRt((s/usr/share/yum-cli/output.pytsub_modescKs|i|d||S(NR0(Rv(RRnRoRt((s/usr/share/yum-cli/output.pytsub_boldscKs|i||i|||S(N(RuR7(RRnRZRoRt((s/usr/share/yum-cli/output.pytsub_fgscKs|i||i|||S(N(RuR9(RRnRZRoRt((s/usr/share/yum-cli/output.pytsub_bgsN(RRRRERFRRRtpropertyRGRSRURXR4R6R8RHRRbRcRTRIReRuRvRwRxRy(((s/usr/share/yum-cli/output.pyR Jsz        d     t YumOutputcBs7eZdZdZdZdZdZdLdZdZ dZ e dZ dLd dLd d Z e d Zd ZddedZed edLdZed edLdZdZddZdZedZdLdZhdLhdZeddZdZdZddZddLdZ d Z!d!Z"d d"d#Z#e d d$Z$dLdLdLd%Z%dLd&Z&ed'Z'd(Z(d)Z)d*Z*d+Z+d,Z,d-Z-d.Z.d/Z/d0Z0dLd1Z1e d2Z2d3Z3d4Z4d5Z5d6Z6d7Z7d8Z8d9Z9gd:Z:h ed;d<6ed;d;6ed=d=6ed>d>6ed?d?6ed@d@6edAdA6edBdB6edCdC6edDdD6edEdE6Z;gdFZ<dGZ=dHZ>dIZ?dJZ@e dKZARS(Ms5 Main output class for the yum command line. cCstid|_tid|_ttdotidid|_n dg|_t |_ d|_ t dtiD|_dS(Nsyum.clisyum.verbose.clit expandMacros %_i18ndomainst:s redhat-distcss%x|]\}}|tfVqWdS(N(RI(t.0tktv((s/usr/share/yum-cli/output.pys 3s (tloggingt getLoggertloggertverbose_loggerRtrpmR|tsplitt i18ndomainsR ttermRt_last_interrupttdicttERRORS_TO_KBASE_ARTICLESt iteritemstreported_error_msgs(R((s/usr/share/yum-cli/output.pyRc(s   c Cstdtdtdtdtdtdtdtdtd td td td g }titi}|ttid |dtid|}|S(NtJantFebtMartAprtMaytJuntJultAugtSeptOcttNovtDecs%mis %d %T (R ttimet localtimetinttstrftime(RtmonthsRR((s/usr/share/yum-cli/output.pyt printtime6s 6<cCsL|iid|i|i|iitd|i||idS(s,failure output for failovers from urlgrabbers%s: %ssTrying other mirror.N(Rterrorturlt exceptionR tsuggestKBaseArticle(Rterrobj((s/usr/share/yum-cli/output.pyt failureReport>s cCsd}t|ido#|iitjo|ii}n7t|ido#|iitjo|ii}n|pdS|i|p%|iit|t |i|R0tnxt||ddD]s\}}|o|o|ii} n|o|ii} nt} |i|p|dtd|d| d|qWq>WdS(Ns%s%sRcSs|dp|dS(ii((tx((s/usr/share/yum-cli/output.pyR!sRRRRG(RRtcolor_list_installed_oldertcolor_list_available_installRIRRE( RRKtverboseRRRRGRSRORPR((s/usr/share/yum-cli/output.pyt_displayPkgsFromNamess(     c Cstd|iGH|iiti}|otdt|iGHnd}|o|i |i }n|i otdt|i GHn|i otd|i GHntd|i ftd|iftd|iftd|iff}d}|o{hhd 6hd 6}x'|D]\}}|i|||q)W|d |d g}|i|}|d  |d  f}nxI|D]A\}}t|d jo"|GH|i|||d |qqWdS(Ns Group: %ss Group-Id: %ss Description: %ss Language: %ss Mandatory Packages:s Default Packages:s Optional Packages:s Conditional Packages:RRiiRG(R tui_nameRR R R RtgroupidRRQtpackagestui_descriptiontlangonlytmandatory_packagestdefault_packagestoptional_packagestconditional_packagesRTRRRY( RRgtverbRRtsectionsRGRt section_nameRK((s/usr/share/yum-cli/output.pytdisplayPkgsInGroupss<    cCsx|D]}td|iGHt||djotdGHqnxn||D]b}|||}tdt|GH|ptdGHqVnx|D]}d|iGHqWqVWqWdS(s=take a list of findDeps results and 'pretty print' the outputs package: %sis" No dependencies for this packages dependency: %ss Unsatisfied dependencys provider: %sN(R RRR(RtresultsRtreqtreqlisttpo((s/usr/share/yum-cli/output.pyt depListOutput;s    Rc Csddddddddd g }|o d }nd }d }d }t|d}x3||jo%||jo|d}||}qWWt|tdjpt|tdjo d} n|djo d} nd} | t|pd |||fS(s4Turn numbers into human-readable metric-like numbersRRtMtGtTtPtEtZtYg@@g@iiils%i%s%sgfffff#@s%.1f%s%ss%.0f%s%s(RttypeR( RtnumbertSItspacetsymbolststeptthreshtdeptht max_depthtformat((s/usr/share/yum-cli/output.pyRNs2   2   cCstii||S(N(RRt format_time(tsecondst use_hours((s/usr/share/yum-cli/output.pyR}ssc Cs|iidjoR|iioE|io;tii|g|i\}}}|p|odSn|iiod|} nd|i |i f} |i | |i |i } |o<|djo|ii}n|i| ||dt} n| GH|djo|iiti}n|pdStd|iGHtdGHxtii|D]u} t| } t|i | jpt|i | joq^nt} tont|i| jotd} |i | } nt|i| jotd } t} nnt|i| jotd } t} nB| id o%td } |i | } t} n td } |o|i| ||dt} n| o|i | t | GHq^| | GHq^WdGHdS(s/ Output search/provides type callback matches. po is the pkg object, values are the things in the po that we've matched. If matchfor is passed, all the strings in that list will be highlighted within the output. verbose overrides logginglevel, if passed. RNs%s : s%s.%s : RpsRepo : %ss Matched from:sDescription : sURL : %ssLicense : %st/sFilename : %ssOther : s (!RRRtquery_install_excludestcmdline_excludestyumR\t parsePackagestshowdupesfromreposRRRRRRtcolor_search_matchRRERR R R R RtmisctuniqueRRIRRRRR( RRjtvaluestmatchforRXRtetmtuRRSt can_overflowR((s/usr/share/yum-cli/output.pyt matchcallbackwsb$      ,          cCs|i|||dtS(NRX(RRE(RRjRR((s/usr/share/yum-cli/output.pytmatchcallback_verbosesc Cs}d}d}d}t}x|D]}y{t|i}||7}y|io||7}nWnnX|pwnyt|i}WnnX||7}Wqt}|iitdPqXqW|p|o,|i i t i td|i |n||jo0|i i t i td|i ||n|o,|i i t i td|i |qyndS(s4Report the total download size for a set of packagesis2There was an error calculating total download sizesTotal size: %ssTotal download size: %ssInstalled size: %sN(RIRRRt installedsizeRERRR RtlogR tINFO_1R( RR\t installonlyttotsizetlocsizetinsizeRRR((s/usr/share/yum-cli/output.pytreportDownloadSizesH     cCsd}t}xR|D]J}yt|i}||7}Wqt}|iitdPqXqW|p,|iit i td|i |ndS(s1Report the total size of packages being removed. is-There was an error calculating installed sizesInstalled size: %sN( RIRRRERRR RRR RR(RR\RRRR((s/usr/share/yum-cli/output.pytreportRemoveSizes  c#sEiittg}hhd6hd6hd6}d}gfd}xtdiiftdiiftdiiftd iiftd iiftd ii ftd ii ftd ii fgD]T\}}g}x,|D]$}|||||i |i }qW|i||fqWxetdifgD]K\}}g}x#|D]} ||||| }qW|i||fqlW|dpdS|dh|d|dhg}d|dddg} i|ddd| dd} | \} }} } }ddiiitd| ftd| ftd| ftd| ftd|ffddiifg}x-|D]%\}}|od|}nx|D]\}}}}}}}|| |f|| f|| f|| f||ff} i| dd }iii\}}xOt|D]A}td!}|||i||i|if;}||}q}W||}qW|o|i|qqWtd"diif}|i|tiiii }tiiii }tiiii } tii}!tii}"|o|itd#|n|o|itd$|n| o|itd%| n|!o|itd&|!n|"o|itd'|"nd(i|S()s@returns a string rep of the transaction in an easy-to-read way.R7Rtricsc|i\}}}}} |i} |i} t|i} i| } |djo d}n|iidjoi i }n*|i oi i }n i i }|i||| | | ||fxidt|fdt| fdt| ffD]4\}}||i|d|||cd7tt|D]*}||c||7<||cd9tSystemRcWs#|i|}|pdS|dS(sf Split gives us a [0] for everything _but_ '', this function returns '' in that case. R2i(R(ttexttargsR((s/usr/share/yum-cli/output.pyt _safe_split_0Sst;is%s <%s>s %s ... <%s>s<%s>(li( RsRRR RRtpwdtgetpwuidtpw_gecostpw_nametKeyErrorR( RRtlimitRRtloginidRRtusertfullname((s/usr/share/yum-cli/output.pyRFs(,      csfd}d|jodS|idd\}}||}|ijodS|djodS||}|ijodS|djp |djodS||jo||}}n||fS(s3 Convert a user "TID" string of 2..4 into: (2, 4). csy|djp|ido]i}|ido?t|td}|djotdn||8}n|St|SWntj odSXdS(Ntlastslast-itz(RttidRRRR(RUR*toff(told(s/usr/share/yum-cli/output.pytstr2intjs  s..iiN(RRR*(R,R*R-tbtidtetid((R,s/usr/share/yum-cli/output.pyt_historyRangeRTIDsgs"     cCst}d}xt|D]}|d|jo/|iitd|d|dfqn|d}x0t|d|ddD]}|i|qWqW|S(su Convert a list of ranged tid typles into all the tids needed, Eg. [(2,4), (6,8)] == [2, 3, 4, 6, 7, 8]. iis4Skipping merged transaction %d to %d, as it overlapsi(RRRtwarnR RR(Rtrtidsttidstlast_endtmtidR((s/usr/share/yum-cli/output.pyt_historyRangeTIDss  ( c Csi|ii}|djo|iitddSt}g}|d}t}|o,t}|ddjo|i dqnx|D]}}yt ||i |Wqt j oM|i ||}|o |i|i|gqn|i|qXqW|o|i|ii|n| o"|o|iitddS||fS(NsNo transactionsiitalls)Bad transaction IDs, or package(s), given(NN(NN(thistoryR(RRtcriticalR RRIRERRRRR0RR6Rtsearch( RtextcmdsR,R3tpatstusertidstprintallR*trtid((s/usr/share/yum-cli/output.pyt_history_list_transactionss:    c Cs)|i|\}}|d'jo#|pddgfSddgfSd}|o d'}n|ii|d|}d}|iidjoddg}n|iid jo dg}nt}d}x`|D]X} | o||joPn|d7}| id'jo|d7}n|i| i qWt |djo"||djo|id nd } t |djot d } n t d } | t t dddt | ddt t dddt t dddt t dddfGHddGHd} d}x|D]} | o||joPn|d7}t |djo| ipd} n|i | i d} tidti| i} |i| i\} }t | dd} t |dd}d}}| id'jod}}na| iod}}nI| iod}}n1| iod }}n| iod!}}n| io d"}n| io d#}n| | i| | || fGd$||fGHq!W|ii}|d'jo|id%tn8|iid&t d}|i!|jo|ind'S((s2 Shows the user a list of data about the history. isNo accessible history to listisFailed history listiR$tusersitcommandstblahs%s | %s | %s | %s | %ss Command lines Login usertIDiis Date and timeis Action(s)itAlterediRiOs%6u | %s | %-16.16s | %s | %4uR2s%Y-%m-%d %H:%MRR t#RpRoRR+R*s%s%sR1t main_onlyN("R@RR8R,Rthistory_list_viewRtcmdlineRtloginuidRR RRRRRt beg_timestampRt trans_datat return_codetoutputtrpmdb_problemst trans_skiptaltered_lt_rpmdbtaltered_gt_rpmdbR*R(t_rpmdb_warn_checksRIREt simpleVersionREtend_rpmdbversion(RR;R3R>R$told_tidstdonetuidstblanksR,tfmtRttmRtuiactstrmarktlmarktlastdbvtrpmdbv((s/usr/share/yum-cli/output.pythistoryListCmds     $             - c Cst|djo|iitddSg}d}xG|dD];}y|djp|ido|djo:t}|iid|}|djot dqn|i }|ido?t |td}|djot dn||8}n|i t |wEnt |djot dn|i |WqEt j o|iitd dSXqEW|ii|}|p|iitd dS|S( NisNo transaction ID giveniR(slast-tcomplete_transactions_onlyR)isBad transaction ID givensNot found given transaction ID(RRR9R RRRIR8R(RR*RRRR,( RR;R3R(textcmdtctoR*R+R,((s/usr/share/yum-cli/output.pyt_history_get_transactionssB      cCsV|i|}|djodSt|djo|iitdn|dS(Nis#Found more than one transaction ID!i(ReRRRR9R (RR;R,((s/usr/share/yum-cli/output.pyt_history_get_transaction6s  cCs d}t}t}g}|ii}|djo$|iitdddgfSx|dD]s}|i||o |i|i||qln.||dj o|i||qln|i |qlW|o|i |ii |n|i }|o&t |}|i |i|n| o]t|djoJ|iidt}|dj o$|i|i|i|iqn|p$|iitdddgfS|ii} | dj o| i} | i} nt} d \} } d}|o|id \} } nx|ii|D]}| dj oG|i| jo7|iid td }| |jo t|_qnd} |i| joD|i| jo4|djotii|}q|i|n|dj o| o d d GHnt} |i|d}|oO|id \} } |i| jo&|i| jotii|}qqn|i|jo.| o d d GHnt} |i||qMqMW|dj o%| o d d GHn|i|ndS(NcSs)yt|SWntj odSXdS(N(RRR(RU((s/usr/share/yum-cli/output.pyR-?ssNo transactionsisFailed history infoiRbs$No transaction ID, or package, giveniiRGRiO(ii(RR8R(RRR9R R0RRRR:tcopyRR6RRIR*RURR,RERTRERRRtYumMergedHistoryTransactiontmerget_historyInfoCmd(RR;R-R3tmtidsR<R,R*tutidsR_tlasttidRWtbmtidtemtidtmobjR`((s/usr/share/yum-cli/output.pythistoryInfoCmd>s                      cCsvd|ijo|iS|ii|i}|p7|ii|i}|pdSdt|diS|diS(sn Given a pkg, find the ipkg.ui_from_repo ... if none, then get an apkg. ... and put a ? in there. Rt?s@?i(R RREtsearchPkgTupleRRGRR(RRRLRM((s/usr/share/yum-cli/output.pyt_hpkg2from_reposcsi|i}htdd6tdd6tdd6tdd6htdd6td d6td d6td d6tg}iiD]}|t|q~d }|d <|d s iRwiR7R0R'R{R2s%s%s%s%s %-*s %s(RERFRtsortRRRRt( Rt prefix_lent was_installedRt pkg_max_lent show_repoRt _pkg_statesRRLRRtui_repo(Rt_pkg_states_availablet_pkg_states_installedR(s/usr/share/yum-cli/output.pyt _simple_pkgs0    sTransaction ID :s%u..%usBegin time :sBegin rpmdb :s**iRii<s (%u seconds)s (%u minutes)is (%u hours)s (%u days)sEnd time :sEnd rpmdb :sUser :sReturn-Code :tAborteds Failures:s, sFailure:tSuccesssCommand Line :s config-mains config-repostsaved_txs-Additional non-default information stored: %dsTransaction performed with:css%x|]}tt|VqWdS(N(RR(R~R((s/usr/share/yum-cli/output.pys s iR~RsPackages Altered:sPackages Skipped:css%x|]}tt|VqWdS(N(RR(R~R((s/usr/share/yum-cli/output.pys (s RsRpmdb Problems:s%s%s: css%x|]}tt|VqWdS(N(RR(R~R((s/usr/share/yum-cli/output.pys 4s iRsScriptlet output:s%4dsErrors:i,i,iPFi,iPFiiiiQs ()RRJR RRRRIRERsR*RR RKtbeg_rpmdbversionRRQt end_timestampRRRRURRRMRRIR8treturn_addon_dataRt differencet trans_withtmaxthistoryInfoCmdPkgsAlteredRPROtproblemRRR\tmainRNterrors(RR,R<RRRUR{RtbegtmtendtmtendtmstbegtmstsofarRuRtcodesRIt addon_infotdefault_addonst non_defaultRtprobRRtline((RRRRs/usr/share/yum-cli/output.pyRjs.  +        *!                      Rs True-Installs Dep-InstallRRR R R RxR Rc Cs~d}|i}d}d}x{|iD]p}|i|i|i}|t|jot|}n|tt|jott|}q%q%Wx|iD]}d } |ip d} nd} |o=ti i |g|\} } } | p| o d} q n|i | \}}|i }|i|i|i}t ||}ton|dj o\|idjoL|i|ijo9|idjo)t|id }d|||}n|dj o\|id joL|i|ijo9|id jo)t|id }d|||}n!d}|idjo |}nd | ||||||i|fGHqWdS(NiRis ** R'R0RR iR Rxs%s%s%s%s %-*s %ss (sUpdateds Downgrade(Rt_history_state2uistateRLR,RRRRWRR\RRtui_nevraRRIRRt(RR,R<R(t all_uistatesR{RRtuistateRRRURRRRtcntln((s/usr/share/yum-cli/output.pyRRsV     !  # # c CsM|i|\}}|djoddgfSd}|ttdddttdddttdd d ttd d d fGHd d GHd}hhd6hd6hd6hd6hd6hd6hd6}x|ii|D] }|i|id}d}ti} t on|i | d%jo d}n|i | d(jo d}ny|i | d+jo d}n[|i | d/jo d}n=|i | d3jo d}n|i | d6jo d}n||i |gi |qWhtdd6tdd6tdd6tdd6td d6td!d6td"d6} d#} xd7D]}||pqgnxt ||D]}| o| djoPn| d7} g} x&|||D]}| i|iqW|i| \} }| |}|t|ddt|ddt|d d | fGHqWqgWdS(8NisFailed history infos%s | %s | %s | %ss Login useritTimeis Action(s)iREiRiOs%s | %s | %s | %8utdaytweekt fortnighttquarterthalftyearR7ii<iii imsLast days Last weeks Last 2 weekss Last 3 monthss Last 6 monthss Last yearsOver a year agoiiiQiiQi: iiQiuiiQi: iwiiQi: iiiQi3(RRRRRRsall(R@RRR R8R,RRJRRIRKRJRRRRLR(RR;R3R>RZRR,RtperiodRt _period2userRWRRR\tuperiod((s/usr/share/yum-cli/output.pythistorySummaryCmdsx         !        c CsWd}t|djo%|d}|djo d}q>n|dj oHyt|Wqtj o'|iitdddgfSXn|dj o|iid|g}nN|ii dt g}|ddjo$|iitdddgfS|p(|iitd |ddgfS|d}|ii |i }t|d joYtd G|i GHtd GHx&|ii |i D]}d |GHqWdGHddgfSx|d D]}||joI|i itid||ii |i |G|i itidntd|GH|i itidqWdS(NiR(sBad transaction ID givensFailed history addon-infoR3Rbis$No transaction ID, or package, givensNo Transaction %s foundisTransaction ID:s)Available additional history information:s %sR2shistory addon-infos%s:s)%s: No additional data found by this name(RRRRRR9R R8R,R(RIRR*RRR R(RR;R*R,t hist_dataRtitemnameRS((s/usr/share/yum-cli/output.pythistoryAddonInfoCmdsL         cCs|ii|}d }|o,| o$|iitdddgfS|p d}n|i}d}|ttdddttdd d ttd d d fGHd d GHd}d}x|ii|d|D]}|d j o&|o|t |i |joPnd }d} } |i d jod} } na|i od} } nI|i od} } n1|i od} } n|iod} } n|io d} n|io d} nx|i D]} |d jo<tii| g|\} } }| o| oqq)n|i| i| i}t|d }| i}ton|d j o\|idjoL|i| ijo9| idjo)t | id}d|||}n|d j o\|idjoL|i| ijo9| idjo)t | id}d|||}n!d }| id!jo | }n|d7}||i||fGd| | fGHqWqW|ii}|d jo|idtn8|iidtd}|i|jo|ind S("s{ Shows the user a list of data about the history, from the point of a package(s) instead of via. transactions. s)Bad transaction IDs, or package(s), givenisFailed history packages-listis %s | %s | %sRDis Action(s)iRi5RiOs%6u | %s | %-50siR$RR RFRpRoRR+R*RR R Rxs%s%sR1RGN(sUpdateds Downgrade( R8R:RRR9R RRR,RRLRMRNRORPRQRRRR\RR,RRRIRR*R(RSRERTRERU(RR;R3R$RRZRR,R(R]R^RRURRRRRR_R`((s/usr/share/yum-cli/output.pythistoryPackageListCmds   .           !   # #  + cCs|ii|}d}|o,| o$|iitdddgfS|p d}n|i}d}x|ii|d|D]}|dj o&|o|t|i |joPnd}x|i D]}|djo<t i i |g|\} } } | o| oqqn|i |i|i} |o dGHntdG|iGHti|i} td G| GHtd G|iGHtd G| GH|idj o1t|i}td Gtid |tGHn|idj otdG|iGHn|idj o+tit|i} tdG| GHn|idj otdG|iGHn|idj otdG|iGHn|idj otdG|iGHn|idj otdG|iGHn|idj otdG|iGHn|i dj o+tit|i } tdG| GHn|i!dj otdG|i!GHn|i"i#dj otdG|i"i#GHn|i"i$dj otdG|i"i$GHn|i"i%dj otdG|i"i%GHn|i"i&dj o4t|i"i&}|i'|}tdG|GHn|i"i(dj o4t|i"i(}|i'|}tdG|GHn|d7}qWqW|ii)}|djo|i*dt+n8|i,i-dtd}|i.|jo|i*ndS(sPrint information about packages in history transactions. :param extcmds: list of extra command line arguments s)Bad transaction IDs, or package(s), givenisFailed history packages-infoiiR$R2sTransaction ID :sBegin time :sPackage :sState :sSize :s%dsBuild host :sBuild time :sPackager :sVendor :sLicense :sURL :sSource RPM :sCommit Time :sCommitter :sReason :sCommand Line :sFrom repo :sInstalled by :sChanged by :R1RGN(/R8R:RRR9R RR,RRLRR\RR,RR*RR RKRRRtlocaleR|REt buildhostRtpackagertvendorRRt sourcerpmRR R treasont command_lineRRRRR(RSRIRERTRU(RR;R3R$RRR,R(RRURRRR[RRR_R`((s/usr/share/yum-cli/output.pythistoryPackageInfoCmdHs  .  !  " ccsPxI|D]A}td}dt|d}||idd|fVqWdS(Ns Error: %sRis (R RR(trestringRRt prefix2nd((s/usr/share/yum-cli/output.pytpretty_output_restrings  N(BRRRRcRRRRRRRt staticmethodRRRRRRRIRRRRRRR'R4R RBRDRQRTRYRfRkRR}RRRRRRRRRRRRRR0R6R@RaReRfRqRtRjRRRRRRR(((s/usr/share/yum-cli/output.pyR{"s        Y '    ( '    ! % @  ,  @ %  #   !%  X $  Z            5 < - X VRcBseZdZddZdZdZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZdZRS(sFprovides text output callback functions for Dependency Solver callbackcCs(tid|_d|_||_dS(s8requires yum-cli log and errorlog functions as argumentssyum.verbose.cliiN(RRRtloopstayum(RR((s/usr/share/yum-cli/output.pyRcs c Cshtdd6tdd6tdd6tdd6td d 6td d 6td d6tdd6}|\}}}}}||} |iititd|||||| dS(NRRus an updateRterasedRRRs a downgradeRt obsoletingRwRtudRtods&---> Package %s.%s %s:%s-%s will be %s(R RRR R( RRR\tmodedictR7RRRRtmodeterm((s/usr/share/yum-cli/output.pytpkgAddeds       cCs|id7_dS(Ni(R(R((s/usr/share/yum-cli/output.pytstartscCs |iititddS(Ns--> Running transaction check(RRR RR (R((s/usr/share/yum-cli/output.pyttscheckscCsE|id7_|iititd|iid|idS(Nis6--> Restarting Dependency Resolution with new changes.s---> Loop Number: %d(RRRR RR tdebug(R((s/usr/share/yum-cli/output.pyt restartLoops cCs |iititddS(Ns"--> Finished Dependency Resolution(RRR RR (R((s/usr/share/yum-cli/output.pyRiscCs&|iititd||dS(Ns---> Processing Dependency: %s for package: %s(RRR RR (RRt formatted_req((s/usr/share/yum-cli/output.pytprocReqs cCs&|iititd||dS(Ns---> Processing Dependency: %s for package: %s(RRR RR (RRjR((s/usr/share/yum-cli/output.pyt procReqPos cCs#|iititd|dS(Ns---> Keeping package: %s(RRR RR (RRjthits((s/usr/share/yum-cli/output.pytgroupRemoveReqscCs#|iititd|dS(Ns--> Unresolved Dependency: %s(RRR RR (RR((s/usr/share/yum-cli/output.pyt unresolvedsc s|\}}|id||if}td|f}t||}|td|f7}p|Sdfd}fd} dtx/tiiD]} || |}qWt} xSti iD]9} | | |\} }| o| i | i qqWdx/tii | D]} || |}qqWdx8ti i | D]} | | |\} }qW|S(sy Create a message for errorlist, non-cli users could also store this data somewhere and not print errorlist. s%s (%s)s Package: %ss Requires: %scSstd|||if}|ddf}t}x@|id|D],}t}|tdtii|7}qDW|p|td7}n|S(s? Add a package to the message, including any provides matches. s %s: %s (%s)tprovidess %ss Not foundN(NNN( R RRRIt matchingPrcosRERRR(RRtneednameRtneedtupRWR((s/usr/share/yum-cli/output.pyt_msg_pkgs$c sf|i|i|i|if}|jp#|io|iijo|Si|td}ii |i t }|otd}n|||7}htdd6tdd6tdd6}x|D]y}xp|i D]e\}}||joqn|i|i|i|if}i|||||7}qWqW|S( NRRs Updated Byt updatedbys Downgraded Byt downgradedbys Obsoleted Byt obsoletedby( RRRRR-RRR RtgetMembersWithStateRtTS_REMOVE_STATESt relatedto( RRtnevrRtrmedtrelmapRtrpkgtrtype(t seen_pkgsR(tybRR(s/usr/share/yum-cli/output.pyt _run_inst_pkgs,0      "cs|i|i|i|if}|jp#|io!|iijot|fSi|td}i i |i t otd}n|||7}t ||fS(Nt AvailableR(RRRRR-RRIRR RRRtTS_INSTALL_STATESRE(RRRR(RRRR(R(s/usr/share/yum-cli/output.pyt_run_avail_pkg s0  N( RRR RRRRREt getProvidesRGRRRF( RtreqPotreqTupt needflagst needversiontprob_pkgRtui_reqRRRtavailable_namesttst((RRRRR(s/usr/share/yum-cli/output.pytformat_missing_requiress>     cCs&|iititd||dS(Ns(--> Processing Conflict: %s conflicts %s(RRR RR (RRtconfname((s/usr/share/yum-cli/output.pyt procConflict7 s cCs&|iititd||dS(Ns(--> Processing Conflict: %s conflicts %s(RRR RR (RRjR((s/usr/share/yum-cli/output.pytprocConflictPo< s cCs |iititddS(NsC--> Populating transaction set with selected packages. Please wait.(RRR RR (R((s/usr/share/yum-cli/output.pyttransactionPopulationA scCs#|iititd|dS(Ns<---> Downloading header for %s to pack into transaction set.(RRR RR (RR((s/usr/share/yum-cli/output.pytdownloadHeaderE sN(RRRRRcRRRRRiRRRRRRRRR(((s/usr/share/yum-cli/output.pyRs            V   RcBs>eZdZdZdZdZdZddZRS(sP The class handles text output callbacks during metadata cache updates. cCs:tid|_tid|_tid|_dS(Nsyum.clisyum.verbose.clisyum.filelogging.cli(RRRRt file_logger(R((s/usr/share/yum-cli/output.pyRcP scCs|ii||dS(N(RR(Rtleveltmessage((s/usr/share/yum-cli/output.pyRU scCs|ii||dS(N(RR(RRR((s/usr/share/yum-cli/output.pyterrorlogX scCs|ii||dS(N(RR(RRR((s/usr/share/yum-cli/output.pytfilelog[ scCst|||dS(N(R(RRRR((s/usr/share/yum-cli/output.pyR^ sN( RRRRcRRRRR(((s/usr/share/yum-cli/output.pyRJ s     c sy|djo|S|djo d}ngfd}xA|iid |D]*}|i|joqTn||iqTWp|Sid }p t|St}t}xED]=}|i|p t }n|i |i jo t }qqW|oO|i d jod |i |i |ifSd |i |i |i |ifSn|od|i |i fS|S(s Get more information on a simple pkgname, if we can. We need to search packages that we are dealing with atm. and installed packages (if the transaction isn't complete). RRRuRRRRcsHo0di|ijodi|odSi|dS(Ni(RR-R(Rj(tmatches(s/usr/share/yum-cli/output.pyt _cond_addn s2RiRs%s-%s-%ss %s:%s-%s-%ss%s.%sN(RRRuRRsodsud(RRt matchNaevrtts_stateRjRRRER-RIRRRRR( Rtpkgnamet ts_statesRRtfmatchtshow_vert show_archRh((Rs/usr/share/yum-cli/output.pyt _pkgname_uia s@     tYumCliRPMCallBackcBsteZdZedZddZddZdZdZ d Z d Z e dd d Z d ZRS(s9 Yum specific callback class for RPM operations. cCstS((R(RU((s/usr/share/yum-cli/output.pyR! scCsbti|td|_d|_tidit i |_ d|_ d|_ ||_dS(NR2syum.verbose.cliRFi(R RcRtlastmsgRt lastpackageRRR R RRNtmarktmarksR(RR((s/usr/share/yum-cli/output.pyRc s    RRRcCst|i||S(s6 Get more information on a simple pkgname, if we can. (RR(RRR((s/usr/share/yum-cli/output.pyt pkgname_ui sc Cs|i|}|i}t|tijot|} n|i|} ||_|djo d} n|d|} |i||||| || |dS(Nild( Rt_max_action_widthRsttypest StringTypesRR Rt _out_event( RtpackageRt te_currenttte_totalt ts_currenttts_totaltprocesstwid1Rtpercent((s/usr/share/yum-cli/output.pytevent s     cCsmt|dpPd}x:|iiD])}t|}||jo |}q&q&W||_n|i}|S(Nt_max_action_wid_cachei(RRRRR(RRR^twid_val((s/usr/share/yum-cli/output.pyR  s    c Cs|iotiip ||jo|i|||d|d|\} }} | t|||t|| | f} | |ijo0tiit| tii | |_n||jo dGHqndS(NRRR( RNRKRLRMt_makefmtRRtwriteRtflush( RRRRRRRRRRZtwid2R((s/usr/share/yum-cli/output.pyR s'   cCs2|o'tiit|tiindS(N(RKRLRRR(RRR((s/usr/share/yum-cli/output.pyt scriptout sicCstt|}d||f}d|d|d} | ||f} |djo d} n t|} d|d} | d|d7} | d7} | d7} | d7} |i} | | jo | } n| | 8} | | djo| d} n|i| | }d||f} d| d }| |d}|o!|d jod | }|}n|o>||it||d f}d |d| }| }nN|d jod| }|}n-||i|f}d|d| }| }|||fS(Ns%s.%st%ss/%Riiis[%-ss]ids %s: %s gY@s %s: %s Rs %s: %s s %s: %s (RRRRRR R(RRRRRRRtlRtfmt_doneRWtpnltoverheadRR tfmt_bartfull_pnlRZRtbar((s/usr/share/yum-cli/output.pyR sH            "    c Csw|}t|i}d}td}t|i}tt||i} |idd|||||| dS(sC Callback for post transaction when we are in verifyTransaction(). idt VerifyingN( RRR RRjRRR R( RtbaseRRRRRRRR((s/usr/share/yum-cli/output.pyt verify_txmbr s N(RsodsudN(RRRRzRRRcR RR RRRERR*(((s/usr/share/yum-cli/output.pyR s    /c Cs(d}tiipdS|djo d}n(|djot||}nd}t}|djo||jo d}nd||f}|t|d8}|djo d}n|djoL|d8}|djo d}n|t||}d|||f}n||jo d t||||f}n|d 8}|djo d}n|d} | t |jot |} n|| 8}|t||}d t|| | |||f}||jotii |n||jotii d ntii dS( ssimple progress bar 50 # marksRFNiRs %d/%diis [%-*s]%ss %s%sis %s: [%-*s]%ss ( RKRLRMRRRRRRRRR( RRRR RRRithashbarRNtnwid((s/usr/share/yum-cli/output.pyR sL                     t__main__iRR2s5 Doing format_number tests, right column should alignigg?g?g?i i g333333&@idgfffff[@iiWiii'ig+ii?Biii#s%36s <%s> %s <%5s>RiRs Doing progress, small nameietabcds Doing progress, big names_%s_s 123456789 is Doing progress, no names rpm-progresstfoos_12345678_.endR's! Doing CB, small proc / small pkgtspkgs Doing CB, big proc / big pkgtlpkgs-=is.ends i18n-progresssi18n-rpm-progresss! Doing progress, i18n: small names 正在安装s Doing progress, i18n: big names' Doing CB, i18n: small proc / small pkgs# Doing CB, i18n: big proc / big pkg(ARRKRRR RRRRdRRturlgrabber.progressRRturlgrabber.grabberRtyum.miscRtyum.i18nRRRRtrpmUtils.miscutilsRRt yum.constantsR R t yum.rpmtransR tyum.packageSackR t yum.packagest yum.historyRRRRRRR R{RRRRRRRRtargvRURuRRRtsleeptcbRERNRRRt setup_locale(((s/usr/share/yum-cli/output.pyts                 1 5 * $+* 0    (& 0 &   (