��c@s�dZddlZddlmZmZmZmZmZddlm Z m
Z
mZddlm
Z
dZddd�Zdd�Zd �Zddd
�Zdded
�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�fd8d9de
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_tinternalcs�g�fd�}xmtr�|dr�yEt�jd�}|d}t|�dkrc|d}nd
}Wq�tk
r~Pq�Xn|j|�}|r�|j|�}n|}|jj|�d}|drZ|dr� �||d�nt
j|||�}tj
|||d |d
tj�itd6��} x4| D]}
�j|
�q@Wn||||d|�|dsPqqWd
S(sdiff trees from two commitscs,|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�S(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
cCs�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
srevision %d
s
branch %s
s
phase %s
s%s%s
(R
RRt changesetR+tdatetdescriptiontreplacet
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�\}}Wqtk
rPqXq�Pq�WdS(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�x]�jj|�D]I}|||krk||j|�|j|�n|| kr4q4q4q4Wq��Wx_|�D]T\}}�jj |�}||
||�}|r�d}|r@�jj|�}|dt
kr|dt|d�7}n|dt
kr@|dt|d�7}q@n�sf|jd t|�|f�n^�d
kr�|jd t|�|f�t
|�|d|�n�jj|�\}}tt|||f�\}}}t�jj||f�\}}|j�d}|jd|||f�||
||�}|tkrs|dkrs|jd
||f�fn||
||�}|tkr�|dkr�|jd
||f�n|jd�|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||<q`WxVt|ddd�D]>}||dkr�|�dk r||pdfVq��|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.pytis_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
cs/�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 %ssrunning %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-configsdebug-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}R�R�R�tcmdtablet inferrepo(((s-/sys/lib/python2.7/site-packages/hgext/hgk.pyt<module>#sT(4 &j
|