mò )á¸Ec@s dkZdkZdkZdklZd„Zhd„Zd„Zd„Z d„Z d„Z d„Z d „Z ed jo‡dkZd Zeieid d ƒ\ZZx+eD]#\ZZedjo d ZqµqµWeo e\ZndZe eeƒndS(N(s LogReadercCsqh}d}x^|D]V\}}}|djo:|i|dƒ\}}|||df||<|}qqW|S(Nii(ii( tbylinetNonetprevloctlogtwhattplacettdeltatgettttnhits(RRRRRRRR ((tA/data/zmath/zope/lib/python/Products/ZCTextIndex/tests/hs-tool.pytload_line_info s cCsJy ||SWn7tj o+tii|ƒd}|||<|SnXdS(Ni(tcachetpathtKeyErrortostsplittfn(R R R((R tbasenames   cCsUxN|D]F\}}|djoqn|\}}}d|Gt|ƒG|GHqWdS(Ns%8d %8d(tresultstinfoRRtfilenametlinetfuncnameR(RRRRRR((R t print_resultss   c Csíh}x|D]y\}}|pq n|\} }|\} } }|i | ƒ}|djog}|| }tii|ƒo%||}|iƒt||ƒq§q§WdS(N(tfilesRtstatsRttimethitstfileRtfuncRtlRtappendtkeystordertsorttkRR texiststvtannotate( RRRRRR$R&RRRRRR"((R tannotate_results&s&       cCs®ddGH|GHddGHt|ƒ}d}|dd}xo|D]g}||jo>d|ddG|G|d=|o|dd}q›d}n ddG|G|d7}q>WHdS(Nt-i<iis%6d %8d t i(RtopentftitlinestmatchRR(RR.R,R-RR/((R R'9s"      cCsLtii|ƒ\}}tii|dƒ}tii||ƒ}||fS(Ns.hs-tool( RR RRtdRtjoint cache_dirt cache_file(RR0R3R2R((R tget_cache_nameMscCsnt|ƒ\}}tii|ƒpti|ƒnt|dƒ}zt i ||dƒWd|i ƒXdS(Ntwbi(R4RR2R3RR R%tmkdirR+tfptcPickletdumpRtclose(RRR7R3R2((R t cache_resultsSsc Csût|ƒ\} }tii|ƒoQtii|ƒtii|ƒjo,t|dƒ}t i |ƒ}|i ƒnct|ƒ}t|ƒ}g}|iƒD]\}} || |fqŸ~}|iƒt||ƒ|ot|ƒn t|ƒdS(Ntrb(R4RR2R3RR tisfiletgetmtimeR+R7R8tloadRR:t LogReaderRR Rt_[1]titemsR$R&R#R;R'R(R( RR'R7RARRR$RR3R2R&((R tmain]s8  3  t__main__iitAs-As profile.dat(R8tos.pathRtsyst hotshot.logR@R RRR(R'R4R;RCt__name__tgetoptt annotate_ptargvtoptstargstoR&R(R'R8R&R R(RRNR4RORRGRKR@RJR;RCRRMR((R t?s.