[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 |_dS|djpt yddk }Wnt |_dSX|p ti}n|ipt |_dSy|id|iWnt |_dSX|i|_ttidp|id|_n|id|_xU|iD]J}|}||ijo|i|}n|i|pd|i|[/*]?(RRtretsub(RR\tcap((s/usr/share/yum-cli/output.pyRUsc 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(RFRetescapettemplatetIRf( RthaystackRkRjtneedlesRlt ignore_casetrendertneedletpat((RjRks/usr/share/yum-cli/output.pyRfs   cKs |i|||id||S(NR'(RfR5(RRoRkRptkwds((s/usr/share/yum-cli/output.pytsub_normscKs|i||i|||S(N(RvR5(RRoR]RpRu((s/usr/share/yum-cli/output.pytsub_modescKs|i|d||S(NR0(Rw(RRoRpRu((s/usr/share/yum-cli/output.pytsub_boldscKs|i||i|||S(N(RvR7(RRoR[RpRu((s/usr/share/yum-cli/output.pytsub_fgscKs|i||i|||S(N(RvR9(RRoR[RpRu((s/usr/share/yum-cli/output.pytsub_bgsN(RRRRERFRRRtpropertyRGRTRVRYR4R6R8RHRRcRdRURIRfRvRwRxRyRz(((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.pyRd(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( RRLtverboseRSRRGRTRPRQR((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 RtgroupidRRRtpackagestui_descriptiontlangonlytmandatory_packagestdefault_packagestoptional_packagestconditional_packagesRURRRZ( RRhtverbRStsectionsRGRt section_nameRL((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 : RqsRepo : %ss Matched from:sDescription : sURL : %ssLicense : %st/sFilename : %ssOther : s (!RRRtquery_install_excludestcmdline_excludestyumR]t parsePackagestshowdupesfromreposRRRRRRtcolor_search_matchRRERR R R R R tmisctuniqueRRIRRRRR( RRktvaluestmatchforRYRtetmtuRRTt can_overflowR((s/usr/share/yum-cli/output.pyt matchcallbackwsb$      ,          cCs|i|||dtS(NRY(RRE(RRkRR((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#sYiittg}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} | \} }} } }|djptddiiitd| 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;}||}qW||}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.R8Rtricsc|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( RtRRR 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(RVR+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 RRIRERRRRR1RR7Rtsearch( RtextcmdsR-R4tpatstusertidstprintallR+trtid((s/usr/share/yum-cli/output.pyt_history_list_transactionss:    c CsC|i|\}}|d(jo#|pddgfSddgfSd}|o d(}n|ii|d|}d}|iidjoddg}n|iid jo dg}n|iid jptt}d}x`|D]X} | o||joPn|d7}| id(jo|d7}n|i | i qWt |djo"||djo|i d 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|ii d't!d}|i"|jo|ind(S()s2 Shows the user a list of data about the history. isNo accessible history to listisFailed history listiR%tusersitcommandsssingle-user-commandstblahs%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#RqRpRR,R+s%s%sR2t main_onlyN(#RARR9R-Rthistory_list_viewRJRtcmdlineRtloginuidRR RRRRRt beg_timestampRt trans_datat return_codetoutputtrpmdb_problemst trans_skiptaltered_lt_rpmdbtaltered_gt_rpmdbR+R)t_rpmdb_warn_checksRIRFt simpleVersionREtend_rpmdbversion(RR<R4R?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(RRR:R RRRIR9R)RR+RRRR-( RR<R4R)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(RfRRRR:R (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(RV((s/usr/share/yum-cli/output.pyR.?ssNo transactionsisFailed history infoiRcs$No transaction ID, or package, giveniiRHRiO(ii(RR9R)RRR:R R1RRRR;tcopyRR7RRIR+RVRR-RFRURERSRtYumMergedHistoryTransactiontmerget_historyInfoCmd(RR<R.R4tmtidsR=R-R+tutidsR`tlasttidRXtbmtidtemtidtmobjRa((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 RRFtsearchPkgTupleRRHRR (RRRMRN((s/usr/share/yum-cli/output.pyt_hpkg2from_reposcsi|i}htdd6tdd6tdd6tdd6htdd6td d6td d6td d6tg}iiD]}|t|q~d }|d <|d s iRxiR8s-Impossible, installed not newer and not olderR0R'R|R2s%s%s%s%s %-*s %s( RFRGRtsortRRIRJRRRu( Rt prefix_lent was_installedRt pkg_max_lent show_repoRt _pkg_statesRRMRRtui_repo(Rt_pkg_states_availablet_pkg_states_installedR(s/usr/share/yum-cli/output.pyt _simple_pkgs2    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(RR((s/usr/share/yum-cli/output.pys s iRRsPackages Altered:sPackages Skipped:css%x|]}tt|VqWdS(N(RR(RR((s/usr/share/yum-cli/output.pys (s RsRpmdb Problems:s%s%s: css%x|]}tt|VqWdS(N(RR(RR((s/usr/share/yum-cli/output.pys 4s iRsScriptlet output:s%4dsErrors:i,i,iPFi,iPFiiiiQs ()RRKR RRRRIRERtR+RRRLtbeg_rpmdbversionRRRt end_timestampRRRRVRSRNRRJR9treturn_addon_dataRt differencet trans_withtmaxthistoryInfoCmdPkgsAlteredRQRPtproblemRRR]tmainROterrors(RR-R=RRRVR|RtbegtmtendtmtendtmstbegtmstsofarRvRtcodesRJt addon_infotdefault_addonst non_defaultRtprobRRtline((RRRRs/usr/share/yum-cli/output.pyRks.  +        *!                      Rs True-Installs Dep-InstallRR R R R RyR 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 Rys%s%s%s%s %-*s %ss (sUpdateds Downgrade(Rt_history_state2uistateRMR-RRRRXRR]RRtui_nevraRRIRRu(RR-R=R)t all_uistatesR|RRtuistateRRRVRRRRtcntln((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)iRFiRiOs%s | %s | %s | %8utdaytweekt fortnighttquarterthalftyearR8ii<iii imsLast days Last weeks Last 2 weekss Last 3 monthss Last 6 monthss Last yearsOver a year agoiiiQiiQi: iiQiuiiQi: iwiiQi: iiiQi3(RRRRRRsall(RARRR R9R-RRKRRIRLRKRRRRMR(RR<R4R?R[RR-RtperiodRt _period2userRXRRR]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-infoR4Rcis$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(RRRRRR:R R9R-R)RIRR+RRR R(RR<R+R-t hist_dataRtitemnameRT((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 | %sREis Action(s)iRi5RiOs%6u | %s | %-50siR%RR RGRqRpRR,R+RR R Rys%s%sR2RHN(sUpdateds Downgrade( R9R;RRR:R RRR-RRMRNRORPRQRRRSRR]RR-RRRIRR+R)RTRFRURERV(RR<R4R%RR[RR-R)R^R_RRVRRRRRR`Ra((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 :R2RHN(/R9R;RRR:R RR-RRMRR]RR-RR+RRRLRRRtlocaleR}REt buildhostRtpackagertvendorRRt sourcerpmRR R treasont command_lineRRRRR)RTRIRFRURV(RR<R4R%RRR-R)RRVRRRR\RRR`Ra((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(BRRRRdRRRRRRRt staticmethodRRRRRRRIRRRRRRR(R5R RCRERRRURZRgRlRR~RRRRRRRRRRRRRR1R7RARbRfRgRrRuRkRRRRRRR(((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.pyRds c Cshtdd6tdd6tdd6tdd6td d 6td d 6td d6tdd6}|\}}}}}||} |iititd|||||| dS(NRRvs an updateRterasedRRRs a downgradeRt obsoletingRxRtudRtods&---> Package %s.%s %s:%s-%s will be %s(R RRR R( RRR]tmodedictR8RRRRtmodeterm((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.pyRjscCs&|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 (RRkR((s/usr/share/yum-cli/output.pyt procReqPos cCs#|iititd|dS(Ns---> Keeping package: %s(RRR RR (RRkthits((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(RRtneednameRtneedtupRXR((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 RRRRRFt getProvidesRHRRRG( 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 (RRkR((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(RRRRRdRRRRRjRRRRRRRRR(((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.pyRdP 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( RRRRdRRRRR(((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). RRRvRRRRcsHo0di|ijodi|odSi|dS(Ni(RR.R(Rk(tmatches(s/usr/share/yum-cli/output.pyt _cond_addn s2RiRs%s-%s-%ss %s:%s-%s-%ss%s.%sN(RRRvRRsodsud(RRt matchNaevrtts_stateRkRRRER.RIRRRRR( Rtpkgnamet ts_statesRRtfmatchtshow_vert show_archRi((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(RV((s/usr/share/yum-cli/output.pyR! scCsbti|td|_d|_tidit i |_ d|_ d|_ ||_dS(NR2syum.verbose.cliRGi(R RdRtlastmsgRt lastpackageRRR R RROtmarktmarksR(RR((s/usr/share/yum-cli/output.pyRd 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_widthRtttypest StringTypesRR R t _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( RORLRMRNt_makefmtRRtwriteRtflush( RRRRRRRRRR[twid2R((s/usr/share/yum-cli/output.pyR s'   cCs2|o'tiit|tiindS(N(RLRMRRR(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_doneRXtpnltoverheadRR tfmt_bartfull_pnlR[Rtbar((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 RRkRRR R( RtbaseRRRRRRRR((s/usr/share/yum-cli/output.pyt verify_txmbr s N(RsodsudN(RRRR{RRRdR RR RR RERR+(((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 # marksRGNiRs %d/%diis [%-*s]%ss %s%sis %s: [%-*s]%ss ( RLRMRNRRRRRRRRR( RRRR RRRjthashbarROtnwid((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(ARRLRRRRR RReRRturlgrabber.progressRRturlgrabber.grabberRtyum.miscRtyum.i18nRRRRtrpmUtils.miscutilsRRt yum.constantsR R t yum.rpmtransR tyum.packageSackR t yum.packagest yum.historyRRRRRRR R|RRRRRRRRtargvRVRvRRRtsleeptcbRERORRRt setup_locale(((s/usr/share/yum-cli/output.pyts                 1 5 * $+* 0    (& 0 &   (