ó œçƒQc @s¢dZddlZddlmZmZmZmZmZddlm Z m Z m Z ddl m Z dZddd„Zdd„Zd „Zddd „Zd d ed „Zd„Zd„Zd„Zd„Zieddde dƒe dƒfge dƒfd6eddde dƒfddde dƒfddde dƒfd d!de d!ƒfd"d#de d$ƒfd%d&de d&ƒfge d'ƒfd(6ed d!de d!ƒfge d)ƒfd*6ege d+ƒfd,6ege d-ƒfd.6edd/de d0ƒfge d1ƒfd26ed3d4de d4ƒfd5d6de d6ƒfdd7de d7ƒfd8d9d e d9ƒfge d:ƒfd;6Zejd<7_dS(=sòbrowse the repository in a graphical way The hgk extension allows browsing the history of a repository in a graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is not distributed with Mercurial.) hgk consists of two parts: a Tcl script that does the displaying and querying of information, and an extension to Mercurial named hgk.py, which provides hooks for hgk to get information. hgk can be found in the contrib directory, and the extension is shipped in the hgext repository, and needs to be enabled. The :hg:`view` command will launch the hgk Tcl script. For this command to work, hgk must be in your search path. Alternately, you can specify the path to hgk in your configuration file:: [hgk] path=/location/of/hgk hgk can make use of the extdiff extension to visualize revisions. Assuming you had already configured extdiff vdiff command, just add:: [hgk] vdiff=vdiff Revisions context menu will now display additional entries to fire vdiff on hovered and selected revisions. iÿÿÿÿN(tcommandstutiltpatchtrevlogtscmutil(tnullidtnullrevtshort(t_tinternalc s†g‡fd†}xmtr|dr‚yEtƒjdƒ}|d}t|ƒdkrc|d}nd }Wq‚tk r~Pq‚Xn|j|ƒ}|r©|j|ƒ}n|}|jj|ƒd}|drZ|drït ˆ||dƒnt j |||ƒ}t j |||d |d t jˆitd 6ƒƒ} x4| D]} ˆj| ƒq@Wn||||d |ƒ|dsPqqWd S(sdiff trees from two commitsc s,|dk st‚||jƒ}||jƒ}tj|||ƒ}|j|||ƒd \}}} ttƒ} x?|D]7} ˆjdt|| ƒt|| ƒ| | fƒq}Wx5|D]-} ˆjd| t|| ƒ| | fƒq¿Wx5| D]-} ˆjdt|| ƒ| | | fƒq÷WdS(Nis:100664 100664 %s %s M %s %s s:000000 100664 %s %s N %s %s s:100664 000000 %s %s D %s %s ( tNonetAssertionErrortmanifestRtmatchtstatusRRtwrite( trepotnode1tnode2tfilestmmaptmmap2tmtmodifiedtaddedtremovedtemptytf(tui(s-/sys/lib/python2.7/site-packages/hgext/hgk.pyt __difftree.s"   ,  "  tstdint iiRtprettytR toptstgitRN(tTruet raw_inputtsplittlenR tEOFErrortlookupt changelogtparentst catcommitRR RtdifftdiffoptsR( RRRRRR"RtlineRtchunkstchunk((Rs-/sys/lib/python2.7/site-packages/hgext/hgk.pytdifftree,s6          c Csèd|}|dkr#||}n|jdt|jƒdƒƒx%|jƒD]}|jd|ƒqQW|jƒ}|jƒjddƒ}|jƒ} | rÕ| dj dƒrÕ| dj d ƒd j ƒ} nd} |jd |j ƒt |dƒ|d fƒ| dkr@|jd | t |dƒ|d fƒn|jd |jƒƒ|jd|jƒƒ|jd|jƒƒ|dkr½|jd||jd|ƒjƒfƒn|j|dƒ|rä|jdƒndS(Ns stree %s is parent %s tR!iÿÿÿÿs committer:s: isauthor %s %s %s scommitter %s %s %s s revision %d s branch %s s phase %s s%s%s (R RRt changesetR+tdatet descriptiontreplacet splitlinest startswithR&trstriptusertinttrevtbranchtphasestrtstrip( RRtntprefixtctxtnlprefixtpR5R6tlinest committer((s-/sys/lib/python2.7/site-packages/hgext/hgk.pyR,`s0   !   . +   cCsN|j|ƒ}|j|ƒ}|jj||ƒ}|jt|ƒdƒdS(s"output common ancestor informations N(R)R*tancestorRR(RRRRRA((s-/sys/lib/python2.7/site-packages/hgext/hgk.pytbase€scKsd}|drJy"tƒjdƒ\}}d}Wq~tk rFdSXn4| sX| r~|jtdƒƒtj|dƒnxŽ|r|dkrª|jtd ƒƒd S|j|ƒ}t||||ƒ|dr ytƒjdƒ\}}Wq tk rPq XqPqWdS( scat a specific revisionR!RRs Ns(cat-file: type or revision not supplied scat-filetcommits.aborting hg cat-file only understands commits i( R%R&R(twarnRRthelp_R)R,(RRttypetrR"RBRA((s-/sys/lib/python2.7/site-packages/hgext/hgk.pytcatfile‡s,       ttreeicsfd†}d„}g}g} g} d} x~t|ƒD]p\} } | jdƒr‹ˆj| dƒ}| j|ƒ| j|ƒq@| dkr@| jˆj| ƒƒq@q@WxÒt| ƒD]Ä\} }|jtƒƒ|g}|| j|ƒx‹|r„|jdƒ}|| kr!qúnx]ˆjj|ƒD]I}||| krk|| j|ƒ|j|ƒn|| kr4q4q4q4WqúWqÁWx_|ƒD]T\} }ˆjj | ƒ}|| ||ƒ}|r“d}|r@ˆjj|ƒ}|dt kr|dt |dƒ7}n|dt kr@|dt |dƒ7}q@nˆsf|j d t |ƒ|fƒn^ˆd kr¨|j d t |ƒ|fƒt |ˆ|d |ƒnˆjj|ƒ\}}tt |||fƒ\}}}tˆjj||fƒ\}}|jƒd}|j d |||fƒ|| ||ƒ}|tkrs|dkrs|j d ||fƒfn|| ||ƒ}|tkr·|dkr·|j d ||fƒn|j dƒ|rÚ| |krÚPn| d7} q“q“WdS(Nc3sAtˆƒ}|}dgd}d}xtr<||krI|}d}n ||8}xzt|ƒD]l}|||kr“dg|||||)Pnˆdk rˆ||||<||jƒq`d||}||dkrç||ˆdk r||pdfVqçqçW|dkr(Pq(q(WdS(Niidiiÿÿÿÿ(R'R$txrangeR R4(tcounttitlR1tx(tfullR(s-/sys/lib/python2.7/site-packages/hgext/hgk.pyt chlogwalk®s,       , cSs^t|ƒdkrdSd}x;tt|ƒƒD]'}|||kr/|d|>O}q/q/W|S(Nii(R'RQ(tart reachabletshatmaskRS((s-/sys/lib/python2.7/site-packages/hgext/hgk.pyt is_reachableÊsit^itHEADR!Rs%s%s RJs s%s %s:%ss%s:%s s (t enumerateR9R)tappendtsettaddtpopR*R+tnodeRRRR,tmapR=R5R(RtargsRRVtmaxnrR+RWR\RYt stop_sha1t want_sha1RRRStargtsRAtvisitRERCR[t parentstrtpptp1tp2thth1th2ti1ti2R5((RVRs-/sys/lib/python2.7/site-packages/hgext/hgk.pytrevtree­st         !! cs‡fd†}xk|D]c}|jddƒ}|jd||dƒƒt|ƒdkr|jd||dƒƒqqWdS( sparse given revisionscs+|dkrd}ntjˆj|ƒƒS(NR^ttip(RthexR)(R=(R(s-/sys/lib/python2.7/site-packages/hgext/hgk.pytrevstrs  t:is%s iis^%s N(R&RR'(RRtrevsR"RyRNtrevrange((Rs-/sys/lib/python2.7/site-packages/hgext/hgk.pytrevparses  cOsW|drd}nd}g|D] }|^q }t|||||d|dƒdS(sprint revisionstheaderRJt max_countR+N(R Rv(RRR{R"RVRUtcopy((s-/sys/lib/python2.7/site-packages/hgext/hgk.pytrevlist's   c s/‡fd†}|dˆjdddƒƒdS(sprint extension optionscsˆjd||fƒdS(Ns k=%s v=%s (R(tnametvalue(R(s-/sys/lib/python2.7/site-packages/hgext/hgk.pytwriteopt2stvdiffthgkR!N(tconfig(RRR"R„((Rs-/sys/lib/python2.7/site-packages/hgext/hgk.pyR‡0scOsœtj|jƒdjg|jƒD]"\}}|r#d||f^q#ƒ}|jdddƒd|dj|ƒf}|jd|ƒtj|ƒdS(s start interactive history viewerRs--%s %sR†tpaths %s %ss running %s N( tostchdirtroottjoint iteritemsR‡tdebugRtsystem(RRtetcR"tktvtoptstrtcmd((s-/sys/lib/python2.7/site-packages/hgext/hgk.pytview8s >,RTtlimitR!s!limit number of changes displayedtNUMshg view [-l LIMIT] [REVRANGE]s^viewRERsgenerate patchRNt recursivetPR RkRtCR€s detect copiestStsearchs2hg git-diff-tree [OPTION]... NODE1 NODE2 [FILE]...sdebug-diff-trees'hg debug-cat-file [OPTION]... TYPE FILEsdebug-cat-fileshg debug-configs debug-configshg debug-merge-base REV REVsdebug-merge-basetdefaulttignoredshg debug-rev-parse REVsdebug-rev-parsetHR~tts topo-orderR+RAs max-counts$hg debug-rev-list [OPTION]... REV...sdebug-rev-lists debug-diff-tree debug-cat-file(t__doc__R‰t mercurialRRRRRtmercurial.nodeRRRtmercurial.i18nRt testedwithR R2R,RIROtFalseRvR}RR‡R•tcmdtablet inferrepo(((s-/sys/lib/python2.7/site-packages/hgext/hgk.pyt#sT (4 &j