Qc@sddlZddlZddlmZmZmZmZmZmZddl m Z ddl m Z m Z ddlmZddlmZddlZdZddZd efd YZd efd YZgdd ZddZddZdZdZdZdZdZdZ e dZ!e dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*d Z+d!Z,d"Z-d#efd$YZ.d%ejfd&YZ/dS('iN(tmatchtpatchtscmutilterrortuitutil(t_(thextnullid(t ErrorResponse(tHTTP_NOT_FOUNDcCsd|ddkrd|}n|ddkr:|d }ntjj|}|dkr\dS|dS(Nit/i(tostpathtdirname(tptup((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyRs   ccs|ru|V|dkr1|dkr1d}|Vn|dksCt|dksUtx||krq|d9}qXWnx&trd|Vd|V|d9}qxWdS(Nii(i2ii ii(tAssertionErrortTrue(tstept firststep((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt_navseqs   trevnavcBs5eZdZdZdZdZdZRS(cCs|j|_dS(sUNavigation generation object :repo: repo object we generate nav for N(t changelogt_revlog(tselftrepo((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt__init__,scCs|jdk S(s,return True if any revision to navigate overN(t_firsttNone(R((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt __nonzero__4scCs0yt|jjSWntk r+dSXdS(s1return the minimum non-filtered changeset or NoneN(titerRtnextt StopIterationR(R((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR8s cCst|jj|S(N(RRtnode(Rtrev((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR?scs|sid d6d d6fSg}xItd|D]8}||krGPn|j|||j||q1W|j|j}d||j|fggx|D]}||jkrqn||ko|knrjdt|||j|fnd|ko'|knrjdt|||j|fqqWjdd ifd d6fd d6fS(scomputes label and revision id for navigation link :pos: is the revision relative to which we generate navigation. :pagelen: the size of each navigation page :limit: how far shall we link The return is: - a single element tuple - containing a dictionary with a `before` and `after` key - values are generator functions taking arbitrary number of kwargs - yield items are dictionaries with `label` and `node` keys tbeforetafteris(%i)s+%dis-%dttipcSsi|dd6|dd6S(NitlabeliR"((ti((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pytiscsfdDS(Nc3s|]}|VqdS(N((t.0R((tdata(s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pys js((tmap(R+t navbefore(s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR)jscsfdDS(Nc3s|]}|VqdS(N((R*R((R+(s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pys ks((R,(R+tnavafter(s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR)ks(((R&R&(RtappendtsortRRRtabs(RtpostpagelentlimitttargetstftfirstR#((R+R.R-s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pytgenBs.     -1  (t__name__t __module__RRRRR8(((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR*s     t filerevnavcBseZdZdZRS(cCs(|jj|_|j||_dS(sNavigation generation object :repo: repo object we generate nav for :path: path of the file we generate nav for N(t unfilteredRt _changelogtfileR(RRR ((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyRoscCs"t|jj|jj|S(N(RR=R"Rtlinkrev(RR#((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyRzs(R9R:RR(((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR;ms ccsg|D]}|jtkr|^q}t|dkrW|dj|krWdSx|D]}i|jd6|jd6}|j|d<|j|d<|j|d<|j|d( R"RtlenR#RR@RARBRCRt safehasattrR (tsiblingsthiderevtstd((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt _siblings~s+(  cCst|j|S(N(RJtparents(tctxthide((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyRKscCst|j|S(N(RJtchildren(RLRM((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyRNscCs:|j}|r6td|ddt|dgSgS(NR>iR"i(trenamedtdictR(tfctxtr((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt renamelinks $cCs'g|j|D]}i|d6^qS(Ntname(tnodetags(RR"R(((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt nodetagsdictscCs'g|j|D]}i|d6^qS(NRT(t nodebookmarks(RR"R(((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pytnodebookmarksdictscCsog}|j}y|j|}Wntjk rAd}nX||jkrk|ji|d6n|S(NRT(RCt branchtipRtRepoLookupErrorRR"R/(RRLtbranchesRCt branchnode((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pytnodebranchdicts  cCs{g}|j}y|j|}Wntjk rAd}nX|dkrw||jkrw|ji|d6n|S(NtdefaultRT(RCRYRRZRR"R/(RRLR[RCR\((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt nodeinbranchs  cCs9g}|j}|dkr5|ji|d6n|S(NR^RT(RCR/(RLR[RC((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pytnodebranchnodefaults   cks2x+|j|D]}||d||VqWdS(Nttag(RU(Rttmpltt1R"targstt((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pytshowtagscks2x+|j|D]}||d||VqWdS(Ntbookmark(RW(RRbRcR"RdRe((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt showbookmarkscCs%|jd}tj|jd|S(NR t(tlstripRt canonpathtroot(RR ((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt cleanpathscCsWy||}WnBtjk rR|j}||j|j|j|}nX|S(N(Rt RepoErrortmanifestR?R#tlookup(RtchangeidRLtman((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt changeidctxs  )cCsd}d|jkrU|jdd}|jd}|dkrx||d}qxn#d|jkrx|jdd}nt||S(NR&R"it:iiRo(tformtfindRs(RtreqRqtipos((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt changectxs cCsYd|jkrU|jdd}|jd}|dkrU|| }t||SndS(NR"iRti(RuRvRsR(RRwRqRx((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt basechangectxs  cCsd|jkr!ttdnt||jdd}d|jkr^|jdd}n2d|jkr|jdd}nttdy|||}Wn)tjk r|j|d|}nX|S(NR>sfile not giveniR"tfilenodesnode or filenode not giventfileid(RuR R RmRRntfilectx(RRwR RqRQ((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyR}sccsVx/|| D]#}|ddt|d|Vq Wt||krR|dVndS(Nt filedifflinkR"R>t fileellipses(RRD(RbtfilesR"tmaxR6((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt listfilediffss!c#sd}|}fd} |rHtj|j|j|} ntj|j|j} tj|jdt} |dkr|j } | r| dj pt } n |j } |j }g}xtj || || d| D]}|jdrT|rT|j}dd|jd |d | d j||Vg}n|jdr|d krd j|jtd }n|j|qW|j}dd|jd |d | d j||VdS(Ncss&d}xtr!|V|d7}q WdS(Ni(R(tstart((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pytcountgens c 3sxt|jtD]\}}d||df}|jdrNd}n6|jdrfd}n|jdr~d}nd }|d |d d |d d|VqWdS(Ns%d.%dit+t difflineplust-t difflineminust@t difflineattdifflinetlinetlineidsl%st linenumbers% 8s(t enumeratet splitlinesRt startswith(tdifftblocknotlinenotltltype(Rb(s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pytprettyprintliness"     t untrusteditoptsRt diffblocktparityRtlinesRitrawi(RtexactRltgetcwdtalwaysRtdiffoptsRRRRKR"RRRR tjoinRR/(RRbRLtbasectxRRtstyleRt blockcountRtmRRKtnode1tnode2tblocktchunkR((Rbs;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pytdiffss2  !    %   c#sfdfd}tjd}|dkredd||jVn4x1|jd|D]}dd||VqxWdS(s>Generator function that provides side-by-side comparison data.cs~|rd|pd}||r)d|p,d7}dd|d|dd|pQdd |p^dd d|pmdd |pzdS( Nsl%sRisr%stcomparisonlinettypeRtleftlinenumbers% 6stleftlinetrightlinenumbert rightline((Rt leftlinenoRt rightlinenoRR(Rb(s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pytcompline6s  c 3sZxS|D]K\}}}}}||}||}t||}xZt|D]L} d|d|| dd|| d|| dd|| VqLW||krxt|||D]4} d|d| dd| ddddVqWq||krxLt|||D]4} d|ddddd| dd| VqWqqWdS(NRRiRRR(tmintxrangeR( topcodesRtllotlhitrlotrhitlen1tlen2tcountR((Rt leftlinest rightlines(s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pytgetblockAs0          itcomparisonblockRtnN(tdifflibtSequenceMatcherRt get_opcodestget_grouped_opcodes(RbtcontextRRRRHtoc((RRRRbs;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pytcompare3s   ccsgtjtj|j|}tj|\}}}}}x!trb||||||fVqBWdS(s3Generator function that provides the diffstat data.N(Rt diffstatdataRt iterlinesRt diffstatsumR(RLRtstatstmaxnametmaxtotaltaddtotalt removetotaltbinary((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt diffstatgenbs! cCs;|j\}}}}}}tdt|||fS(s#Return a short summary of the diff.s5 %d files changed, %d insertions(+), %d deletions(-) (R RRD(tstatgenRRRRRR((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt diffsummaryjs c#s|j\}}}}}|j} fd} d} x|D]\} } }}| | krjdpmd}| |}| d7} ||d|jd| d| d |d | | d | |d |jVqFWd S(s5Return a diffstat template for each file in the diff.cs"dkrdSt|dS(Niid(tfloat(R((R(s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pytpctws it diffstatlinktdiffstatnolinkiR"R>tfilenottotaltaddpctt removepctRN(R RR(RbRLRRRRRRRRRRtfilenametaddstremovestisbinaryttemplateR((Rs;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pytdiffstatqs   !t sessionvarscBs8eZddZdZdZdZdZRS(t?cCs||_||_dS(N(Rtvars(RRR((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyRs cCs |j|S(N(R(Rtkey((s;/sys/lib/python2.7/site-packages/mercurial/hgweb/webutil.pyt __getitem__scCs||j| sD.  C            4 /