Plan 9 from Bell Labs’s /usr/web/sources/contrib/jas/root/sys/lib/python2.7/site-packages/mercurial/context.pyc

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


��c@s�ddlmZmZmZmZmZddlmZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZejZdefd��YZdefd��YZdefd	��YZd
efd��YZdefd
��YZ defd��YZ!dS(i�(tnullidtnullrevtshortthextbin(t_Nt	changectxcBsreZdZdd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d	�Z
ed
��Zed��Z
ed��Zed
��Zed��Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d �Z"d!�Z#d"�Z$d#�Z%d$�Z&d%�Z'd&�Z(d'�Z)d(�Z*d)�Z+d*�Z,d+�Z-d,�Z.d-�Z/d.�Z0d/�Z1d0�Z2d1�Z3d2�Z4d3�Z5d4�Z6d@d@d5�Z8d6�Z9d7�Z:d8�Z;d9�Z<gd@d@d:d;�Z=d@d@d<�Z>ed=��Z?d>�Z@d?�ZARS(As]A changecontext object makes access to data related to a particular
    changeset convenient.tcCs,|dkrd}n||_t|t�r�y|jj|�|_Wn*tk
rrtjt	d�|��nX||_
dSt|t�r�t|�}n|dkr�|j
j�|_|jj|j�|_
dS|dkr�|_t|_
dS|dkr4|jj�|_|jj|j�|_
dSt|�dkr�y&||_|jj|�|_
dSWq�tk
rq�Xny�t|�}t|�|kr�t�nt|j�}|dkr�||7}n|dks�|kr��n||_
|jj|�|_dSWntttfk
r5nXt|�d	kr�y/t|�|_|jj|j�|_
dSWq�ttfk
r�q�Xn||jkr�|j||_|jj|j�|_
dS||jjkr|jj||_|jj|j�|_
dSy2|j|�|_|jj|j�|_
dSWntjk
rXnX|jj|�|_|jdk	r�|jj|j�|_
dS||j�j
j �kr�tj!t	d
�t"|���ny%t|�dkr�|�}nWntk
rnXtjt	d�|��dS(s+changeid is a revision number, node, or tagRt.sunknown revision '%s'Ntnullttipiii(s*working directory has unknown parent '%s'!($t_repot
isinstancetintt	changelogtnodet_nodet
IndexErrorterrortRepoLookupErrorRt_revtlongtstrtdirstatetp1trevRRR
tlentLookupErrort
ValueErrort
OverflowErrorRt	TypeErrort
_bookmarkst
_tagscachettagst	branchtipt
_partialmatchtNonet
unfilteredtparentstAbortRR(tselftrepotchangeidtrtl((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt__init__s�		
				
	
		
cCst|j��S(N(RR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt__str__uscCs
|j�S(N(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt__int__xscCsdt|�S(Ns<changectx %s>(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt__repr__{scCs0yt|j�SWntk
r+t|�SXdS(N(thashRtAttributeErrortid(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt__hash__~s
cCs-y|j|jkSWntk
r(tSXdS(N(RR2tFalse(R(tother((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt__eq__�s
cCs||kS(N((R(R6((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt__ne__�scCs
|jtkS(N(RR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt__nonzero__�scCs|jjj|j��S(N(RRtreadR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt
_changeset�scCs|jjj|jd�S(Ni(RtmanifestR:R;(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt	_manifest�scCs|jjj|jd�S(Ni(RR<t	readdeltaR;(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt_manifestdelta�scCsX|jjj|j�}|dtkr5|d }ng|D]}t|j|�^q<S(Nii�(RRt
parentrevsRRR(R(tptx((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt_parents�s
cCstj||jj�S(N(tsubrepotstateRtui(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pytsubstate�scCs
||jkS(N(R=(R(tkey((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt__contains__�scCs
|j|�S(N(tfilectx(R(RH((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt__getitem__�sccs#xt|j�D]}|VqWdS(N(tsortedR=(R(tf((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt__iter__�scCs|jS(N(R;(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt	changeset�scCs|jS(N(R=(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR<�scCs|jdS(Ni(R;(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pytmanifestnode�scCs|jS(N(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�scCs|jS(N(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�scCs
t|j�S(N(RR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�scCs|jdS(Ni(R;(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pytuser�scCs|jdS(Ni(R;(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pytdate�scCs|jdS(Ni(R;(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pytfiles�scCs|jdS(Ni(R;(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pytdescription�scCstj|jdjd��S(Nitbranch(tencodingttolocalR;tget(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRU�scCsd|jdkS(Ntclosei(R;(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pytclosesbranch�scCs|jdS(Ni(R;(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pytextra�scCs|jj|j�S(N(RtnodetagsR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR!�scCs|jj|j�S(N(Rt
nodebookmarksR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt	bookmarks�scCs|jjj|j|j�S(N(Rt_phasecachetphaseR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR`�scCstj|j�S(N(tphasest
phasenamesR`(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pytphasestr�scCs|j�tjkS(N(R`Ratpublic(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pytmutable�scCs|jtj|jd�kS(Ntvisible(Rtrepoviewt
filterrevsR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pythidden�scCs|jS(s)return contexts for each parent changeset(RC(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR&�scCs|jdS(Ni(RC(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�scCs0t|j�dkr |jdSt|jd�S(Niii�(RRCRR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pytp2�scCs;|jjj|j�}g|D]}t|j|�^qS(s(return contexts for each child changeset(RRtchildrenRR(R(tcRB((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRk�sccs;x4|jjj|jg�D]}t|j|�VqWdS(N(RRt	ancestorsRR(R(ta((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRm�s"ccs;x4|jjj|jg�D]}t|j|�VqWdS(N(RRtdescendantsRR(R(td((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRo�s"cCs|j�tj|jd�kS(s!True if the changeset is obsoletetobsolete(RtobsmodtgetrevsR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRq�scCs|j�tj|jd�kS(s True if the changeset is extincttextinct(RRrRsR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRt�scCs|j�tj|jd�kS(s;True if the changeset is not obsolete but it's ancestor aretunstable(RRrRsR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRu�scCs|j�tj|jd�kS(s�True if the changeset try to be a successor of a public changeset

        Only non-public and non-obsolete changesets may be bumped.
        tbumped(RRrRsR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRv�scCs|j�tj|jd�kS(s�Is a successors of a changeset with multiple possible successors set

        Only non-public and non-obsolete changesets may be divergent.
        t	divergent(RRrRsR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRwscCs"|j�p!|j�p!|j�S(s=True if the changeset is either unstable, bumped or divergent(RuRvRw(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyttroubledscCs^g}|j�r"|jd�n|j�r>|jd�n|j�rZ|jd�n|S(s�return the list of troubles affecting this changesets.

        Troubles are returned as strings. possible values are:
        - unstable,
        - bumped,
        - divergent.
        RuRvRw(RutappendRvRw(R(ttroubles((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRzscCsd|jkrey!|j||jj|�fSWqetk
ratj|j|td���qeXnd|jks�||j�kr�||j	kr�|j	||j	j|�fSn|j
jj|j
d|�\}}|stj|j|td���n||fS(NR=snot found in manifestR?i(t__dict__R=tflagstKeyErrorRtManifestLookupErrorRRRSR?RR<tfindR;(R(tpathRtflag((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt	_fileinfo!s!
!
%cCs|j|�dS(Ni(R�(R(R�((s5/sys/lib/python2.7/site-packages/mercurial/context.pytfilenode3scCs1y|j|�dSWntjk
r,dSXdS(NiR(R�RR(R(R�((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR|6sc	Cs@|dkr|j|�}nt|j|d|d|d|�S(s&get a file context from this changesettfileidRtfilelogN(R$R�RJR(R(R�R�R�((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRJ<scCsS|j}|dkr(|jdj}n|jjj|j|�}t|j|�S(s<
        return the ancestor context of self and c2
        iN(RR$RCRRtancestorR(R(tc2tn2tn((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�Cs
	cCs|jjj|j|j�S(s-True if other is descendant of this changeset(RRt
descendantR(R(R6((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�Nsccs�t|j��}|jd�x>|D]6}||krH|j|�n||�r&|Vq&q&WxYt|�D]K}||jkr�qmn|j|td�|�rm||�rm|VqmqmWdS(NRsno such file in rev %s(tsetRStdiscardtremoveRLt_dirstbadR(R(tmatchtfsettfn((s5/sys/lib/python2.7/site-packages/mercurial/context.pytwalkRs

(cCstj||�S(N(RD(R(R�((s5/sys/lib/python2.7/site-packages/mercurial/context.pytsubdstglobcCs=|j}tj|j|j�||||d|jd|�S(Ntauditortctx(RtmatchmodR�troottgetcwdR�(R(tpatstincludetexcludetdefaultR+((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�gs	c	Ks�|dkr|j�}n|dk	rGt|t�rG|j|}ntj|jj|�}tj|j|j	�|j	�d|d|�S(s;Returns a diff generator for the given contexts and matcherR�toptsN(
R$RRRRtpatchtdiffoptsRFtdiffR(R(tctx2R�R�R�((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�ms!cCstj|j�S(N(tscmutiltdirsR=(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�wscCs|jS(N(R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�{scCstS(N(R5(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pytdirty~sN(Bt__name__t
__module__t__doc__R-R.R/R0R4R7R8R9t
propertycacheR;R=R?RCRGRIRKRNROR<RPRRRRQRRRSRTRURZR[R!R^R`RcReRiR&RRjRkRmRoRqRtRuRvRwRxRzR�R�R|R$RJR�R�R�R�R�R�R�R�R�(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRs|_																																																	
	RJcBs�eZdZd/d/d/d/d�Zed��Zed��Zed��Zed��Z	ed��Z
ed��Zd�Zd	�Z
d
�Zd�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d�Z"d�Z#d �Z$d!�Z%d"�Z&d#�Z'd$�Z(d%�Z)d&�Z*d'�Z+d(�Z,d)�Z-d*�Z.e/d/d/d+�Z0d,�Z1e/d-�Z2d.�Z3RS(0saA filecontext object makes access to data related to a particular
       filerevision convenient.cCs�||_||_|dk	sO|dk	sO|dk	sOtd|||f��|ra||_n|dk	ry||_n|dk	r�||_n|dk	r�||_ndS(sechangeid can be a changeset revision, node, or tag.
           fileid can be a file revision or node.s.bad args: changeid=%r, fileid=%r, changectx=%rN(Rt_pathR$tAssertionErrort_filelogt	_changeidt
_changectxt_fileid(R(R)R�R*R�R�R((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR-�s		cCsHyt|j|j�SWn*tjk
rCt|jj�|j�SXdS(N(RRR�RRR%(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR��scCs|jj|j�S(N(RtfileR�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR��scCs3d|jkr|jj�S|jj|j�SdS(NR�(R{R�RR�tlinkrevt_filerev(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR��s
cCs9d|jkr"|jj|j�S|jj|j�SdS(NR�(R{R�tlookupR�R�R�R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt	_filenode�scCs|jj|j�S(N(R�RR�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR��scCs|jS(N(R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt	_repopath�scCs+y|jtSWntjk
r&tSXdS(N(R�tTrueRRR5(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR9�s
cCs d|j�t|j��fS(Ns%s@%s(R�RR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR.�scCsdt|�S(Ns<filectx %s>(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR0�scCs9yt|j|jf�SWntk
r4t|�SXdS(N(R1R�R�R2R3(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR4�s
cCs?y&|j|jko$|j|jkSWntk
r:tSXdS(N(R�R�R2R5(R(R6((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR7�s

cCs||kS(N((R(R6((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR8�scCs"t|j|jd|d|j�S(sMopens an arbitrary revision of the file without
        opening a new filelogR�R�(RJRR�R�(R(R�((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRJ�scCs|jS(N(R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pytfilerev�scCs|jS(N(R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR��scCs|jj|j�S(N(R�R|R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR|�scCs|jS(N(R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR��scCsKd|jkr|jj�Sd|jkr8|jj�S|jj|j�S(NR�R�(R{R�RR�R�R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�s


cCs|jj|j�S(N(R�R�R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�scCs
|jj�S(N(R�R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRscCst|j��S(N(RR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRscCs
|jj�S(N(R�RQ(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRQscCs
|jj�S(N(R�RR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRRscCs
|jj�S(N(R�RS(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRS
scCs
|jj�S(N(R�RT(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRTscCs
|jj�S(N(R�RU(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRUscCs
|jj�S(N(R�R[(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR[scCs
|jj�S(N(R�R`(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR`scCs
|jj�S(N(R�Rc(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRcscCs
|jj�S(N(R�R<(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR<scCs|jS(N(R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRscCs|jj|j�S(N(R�R:R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pytdatascCs|jS(N(R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�scCs|jj|j�S(N(R�tsizeR�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�scCs0ytj|j��SWntk
r+tSXdS(N(tutiltbinaryR�tIOErrorR5(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pytisbinary"s
cCso|jdkr7|jjsO|j�d|j�ksO|j�|j�krk|jj|j|j��St	S(sVcompare with other file context

        returns True if different than fctx.
        iN(
R�R$Rt_encodefilterpatsR�R�tcmpR�R�R�(R(tfctx((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�(scCs�|jj|j�}|s|S|j�|j�kr;|S|j�}|j}xK|jj�D]:}y||j|�kr�dSWq`t
jk
r�q`Xq`W|S(s#check if file was actually renamed in this changeset revision

        If rename logged in file revision, we report copy for changeset only
        if file revisions linkrev points back to the changeset in question
        or both changeset parents contain different file revisions.
        N(R�trenamedR�RR�R�R�R&R�R$RR(R(R�tnametfnodeRA((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�7s	c	Cs�|j}|j}g|jj|j�D]}|||f^q(}|jj|j�}|r||d|ddf|d<ng|D]9\}}}|tkr�t|j|d|d|�^q�S(NiiR�R�(	R�R�R&R�R�R$RRJR(R(RAtflR�tplR+R,((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR&Ps		1cCs|j�dS(Ni(R&(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR\scCsH|j�}t|�dkr&|dSt|j|jddd|j�S(NiiR�i�R�(R&RRJRR�R�(R(RA((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRj_sc	CsJ|jj|j�}g|D]*}t|j|jd|d|j�^qS(NR�R�(R�RkR�RJRR�(R(RlRB((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRkesc	sud�}d�}d�}|dkr-|p<|r9|p<|}�fd�}tj�fd�����fd��tj������fd�}	�j��j�kr��j�j��}
n�}
|
g}i}i}
id|
6}xX|rN|d	}||
k}|s,|	|�|
|<nt}|
|}xS|D]K}||krkt}|j	|�n|sC|j
|d
�d||<qCqCW|r�j�||k}|r�||}n||j�|�}x[|D]S}|s�|||�}n||dkr ||=||=q�||cd8<q�W|||<g|
|<q�Wt
||
d
||
djt��S(sreturns a list of tuples of (ctx, line) for each line
        in the file, where ctx is the filectx of the node where
        that line was last changed.
        This returns tuples of ((ctx, linenumber), line) for each line,
        if "linenumber" parameter is NOT "None".
        In such tuples, linenumber means one at the first appearance
        in the managed file.
        To reduce annotation cost,
        this returns fixed value(False is used) as linenumber,
        if "linenumber" parameter is "False".cSs|gt|j��|fS(N(Rt
splitlines(ttextR((s5/sys/lib/python2.7/site-packages/mercurial/context.pytdecorate_compatwscSs#|tfgt|j��|fS(N(R5RR�(R�R((s5/sys/lib/python2.7/site-packages/mercurial/context.pytwithout_linenumberzscSsBt|j��}gtd|d�D]}||f^q&|fS(Ni(RR�txrange(R�RR�ti((s5/sys/lib/python2.7/site-packages/mercurial/context.pytwith_linenumber}scsxtj|d|dd�dt�}xK|D]C\\}}}}}|dkr-|d||!|d||+q-q-W|S(NiR�trefinet=i(tmdifft	allblocksR�(tparenttchildtblocksta1ta2tb1tb2tt(R�(s5/sys/lib/python2.7/site-packages/mercurial/context.pytpair�s	#cs�jj|�S(N(RR�(RB(R((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt<lambda>�sc	s@|�jkr�jp!�|�}t�j|d|d|�S(NR�R�(R�R�RJR(R�R�tlog(tgetlogR((s5/sys/lib/python2.7/site-packages/mercurial/context.pytgetctx�s$cs�|j}|jdkrLg|j�D]}|j�|j�f^q%}n.g|jj|j�D]}||f^qb}�r�|j�}|r�|d�|d�j	|d�f|d<q�ng|D]'\}}|t
kr��||�^q�S(Nii(R�R�R$R&R�R�R�R@R�RR(RMRAR�R�R+(tfollowR�R�(s5/sys/lib/python2.7/site-packages/mercurial/context.pyR&�s	4.1ii�iN(R$R�tlrucachefuncRR�RJR�R�R5RyRXtpopR�tzipR�(R(R�t
linenumberR�R�R�R�tdecorateR�R&tbasetvisitthisttpcachetneededRMtpcachedtreadyR�RAtreusabletcurr((R�R�R�R�R(s5/sys/lib/python2.7/site-packages/mercurial/context.pytannotateks^			
	
	


!




cs�|j��j�kr8�j�|kr8|�j�S�j�|krj|j�|krj|�j�S|j�|kr��j�|kr�||j�Si�xj�|fD]\}|jdkr�g|j�D]}|j�|j�f^q�}|�|jdf<q�q�Wi�j�j6|j|j6����fd�}�j�jf|j|jf}}t	j
|||�}	|	r�|	\}
}t�j|
d|d�|
�SdS(s�
        find the common ancestor file context, if any, of self, and fc2

        actx must be the changectx of the common ancestor
        of self's and fc2's respective changesets.
        cs�|�kr�|S|\}}|�krE�jj|��|<n�|}g|j|�D]}|tkr_||f^q_}|j|�}|r�|j|�n|�|<|S(N(RR�R&RR�Ry(tvertexRMR�R�RAR�tre(tacachetflcacheR((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR&�s
4
R�R�N(
R�R�R$R&R�R�R�R�R�R�tgenericancestorRJR(R(tfc2tactxRlR�R�R&RntbtvRM((R�R�R(s5/sys/lib/python2.7/site-packages/mercurial/context.pyR��s&	*$$1 % ccs�i}|}|rdpd}xetr�x4|j�| D]"}|||j�|j�f<q8W|shPn|jt|��}|Vq!WdS(Ni(R$R�R&RRR�tmax(R(tfollowfirstR�RltcutR�((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRms	 cCs]tj|d�si|_nt|�}||jkrRtj|�|j|<n|j|S(Nt
_copycache(R�tsafehasattrR�Rtcopiest
pathcopies(R(R�tsc2((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�sN(4R�R�R�R$R-R�R�R�R�R�R�R�R9R.R0R4R7R8RJR�R�R|R�RR�RRRQRRRSRTRUR[R`RcR<RR�R�R�R�R�R�R&RRjRkR5R�R�RmR�(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRJ�s`																																			j	1t
workingctxcBs�eZdZdd0d0d0d0d�Zd�Zd�Zd�Zd�Zd�Z	e
d��Ze
d	��Zd
�Z
e
d��Ze
d��Ze
d
��Ze
d��Zeeed�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d�Z"d�Z#d �Z$d!�Z%d"�Z&d#�Z'd$�Z(d0d%�Z)d&�Z*d'�Z+ee,e,d(�Z-dd)�Z.dd*�Z/d+�Z0d,�Z1d-�Z2d.�Z3d/�Z4RS(1syA workingctx object makes access to data related to
    the current working directory convenient.
    date - any valid date string or (unixtime, offset), or None.
    user - username string, or None.
    extra - a dictionary of extra values, or None.
    changes - a list of file lists as returned by localrepo.status()
               or None to use the repository status.
    RcCs^||_d|_d|_||_|r?tj|�|_n|rQ||_n|r�t	|d �|_
|d|_|d|_|d|_
nd|_d|_d|_
i|_|r�|j�|_nd|jkr7ytj|jjj��}Wn&tk
r&tjtd���nX||jd<n|jddkrZd|jd<ndS(NiiiRUsbranch name not in UTF-8!RR�(RR$RRt_textR�t	parsedatet_datet_usertlistt_statust_unknownt_ignoredt_cleant_extratcopyRVt	fromlocalRRUtUnicodeDecodeErrorR'R(R(R)R�RQRRR[tchangesRU((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR-#s6				

				
cCst|jd�dS(Nit+(RRC(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR.CscCsdt|�S(Ns<workingctx %s>(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR0FscCstS(N(R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR9IscCs|jj|dkS(Ns?r(RR(R(RH((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRILscs�|jjj�j�t|j�dkrR|jdj����fd�}n\|j\}}|j|�}|j�|j�|j��������fd�}|S(Niics�||�}�j|�S(N(R|(RM(t	copiesgettman(s5/sys/lib/python2.7/site-packages/mercurial/context.pytfuncXscsr�||�}�j|��j|��j|�}}}||krN|S||kr^|S||krn|SdS(NR(R|(RMtfl1tfl2tfla(Rtm1tm2tma(s5/sys/lib/python2.7/site-packages/mercurial/context.pyRbs/(RRR�RXRRCR<R�(R(RRRjtpa((RRRRRs5/sys/lib/python2.7/site-packages/mercurial/context.pyt_buildflagfuncOs&cCs|jjj|j�S(N(RRtflagfuncR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt	_flagfuncoscs]|jdj�j��t|j�dkrU|j�j����fd�}n�fd�}|jjj�}|j}|j	\}}}}x�d|fd|ffD]}\}}	xn|	D]f}
|j
|
|
�}||�j
|t�|�|
<y�j|
||
��Wq�t
k
r%q�Xq�Wq�Wx(||D]}
|
�kr9�|
=q9q9W�S(s:generate a manifest corresponding to the working directoryiics|�kr�S�S(N((RM(Rtman2(s5/sys/lib/python2.7/site-packages/mercurial/context.pytgetmanzscs�S(N((RM(R(s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�sRntm(RCR<RRRjRRR�RRRXRR�tOSError(R(RtcopiedtfftmodifiedtaddedtremovedtdeletedR�R,RMtorig((RRs5/sys/lib/python2.7/site-packages/mercurial/context.pyR=ss(	%
 
ccs9|jj}x&|D]}||dkr|VqqWdS(NR+(RR(R(RpRM((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRN�s
cCs|jj�d S(Ni(Rtstatus(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�scCs|jjj�S(N(RRFtusername(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�scCs
tj�S(N(R�tmakedate(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�scCsR|jjj�}|dtkr/|d }ng|D]}t|j|�^q6S(Nii�(RRR&RR(R(RARB((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRC�s
cCs�|jjd|d|d|�}d|_|_|_|rN|d|_n|rd|d|_n|rz|d|_n|d |_|S(s�Explicit status query
        Unless this method is used to query the working copy status, the
        _status property will implicitly read the status using its default
        arguments.tignoredtcleantunknowniiiN(RR(R$RRR	R(R(R+R,R-tstat((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR(�s!
cCs|jS(N(R=(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR<�scCs|jp|jjj�S(N(RRRFR)(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRQ�scCs|jS(N(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRR�scCs|jS(N(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRT�scCs't|jd|jd|jd�S(Niii(RLR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRS�scCs|jdS(Ni(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR#�scCs|jdS(Ni(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR$�scCs|jdS(Ni(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR%�scCs|jdS(Ni(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR&�scCs|jdk	st�|jS(N(RR$R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR-�scCs|jdk	st�|jS(N(RR$R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR+�scCs|jdk	st�|jS(N(R	R$R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR,�scCstj|jd�S(NRU(RVRWR
(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRU�scCs
d|jkS(NRY(R
(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRZ�scCs|jS(N(R
(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR[�scCs4g}x'|j�D]}|j|j��qW|S(N(R&textendR!(R(R�RA((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR!�scCs4g}x'|j�D]}|j|j��qW|S(N(R&R/R^(R(R�RA((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR^�scCs9tj}x)|j�D]}t||j��}qW|S(N(RatdraftR&R�R`(R(R`RA((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR`�s	cCstS(N(R5(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRi�scCsgS(N((R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRk�scCsed|jkr;y|jj|�SWq;tk
r7dSXny|j|�SWntk
r`dSXdS(NR=R(R{R=R|R}RR (R(R�((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR|�s

cCst|j|d|d|�S(s-get a file context from the working directoryRR�(tworkingfilectxR(R(R�R�((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRJscCs|jdj|�S(s*return the ancestor context of self and c2i(RCR�(R(R�((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�scCs+t|jjj|t|j�tt��S(N(RLRRR�RGR�R5(R(R�((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�sc	Cs�x0t|j�D]}|j|�j�rtSqW|rE|j�p�|ri|j�|j�j�kp�|j�p�|j	�p�|j
�p�|o�|j�S(s-check whether a working directory is modified(RLRGR�R�R�RjRURR#R$R%R&(R(tmissingtmergeRUts((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�s$$cs��fd�}|jj�}|jj|jj}}z�g}x{|D]s}tj|||��|jj|�}	ytj|	�}
Wn>t	k
r�|j
td�||��|j|�qGnX|
j
dkr|j
td�|d|
j
d||�f�ntj|
j�p-tj|
j�s]|j
td�||��|j|	�qG||dkr�|j
td	�||��qG||d
kr�|j|�qG|j|�qGW|SWd|j�XdS(Ncstjj�|�S(N(tosR�tjoin(RM(tprefix(s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�ss%s does not exist!
i��so%s: up to %d MB of RAM may be required to manage this file
(use 'hg revert %s' to cancel the pending addition)
ii@Bs:%s not added: only files and symlinks supported currently
tamns%s already tracked!
R+(RtwlockRFRR�t
checkportabletwjoinR5tlstatR twarnRRytst_sizeR.tS_ISREGtst_modetS_ISLNKtnormallookuptaddtrelease(R(RR7R6R9RFtdstrejectedRMRAtst((R7s5/sys/lib/python2.7/site-packages/mercurial/context.pyRCs8


%$ cs��fd�}|jj�}z�g}x�|D]�}||jjkry|jjjtd�||��|j|�q.|jj|dkr�|jjj|�q.|jjj|�q.W|SWd|j	�XdS(Ncstjj�|�S(N(R5R�R6(RM(R7(s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�@ss%s not tracked!
Rn(
RR9RRFR=RRyR�tdropRD(R(RSR7R6R9RFRM((R7s5/sys/lib/python2.7/site-packages/mercurial/context.pytforget?s
#ccsQxJ|jjjg|jD]}|j�^q�D]}t|j|�Vq2WdS(N(RRRmRCRR(R(RARn((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRmPs)cCs�|j�}|jj�}z�x�|D]�}|jj|dkra|jjjtd�|�q%||dkr|d|p�|d|}|j�}|jj|||j	��|jjj
|�q%WWd|j�XdS(NR+s%s not removed!
ii(R&RR9RRFR=RR�twwriteR|tnormalRD(R(RtpctxsR9RMR�R�((s5/sys/lib/python2.7/site-packages/mercurial/context.pytundeleteUs
 ,cCs�|jj|�}tjj|�sD|jjjtd�|�n�tjj|�petjj	|�s�|jjjtd�|�nc|jj
�}zF|jj|dkr�|jjj|�n|jjj
||�Wd|j�XdS(Ns%s does not exist!
s1copy failed: %s is not a file or a symbolic link
s?r(RR;R5R�tlexistsRFR=RtisfiletislinkR9RRCRRD(R(tsourcetdestRAR9((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRds $cCsux1|j�|j�D]}|jjj|�qWx'|j�D]}|jjj|�qAW|jjj|�dS(sQPerform post-commit cleanup necessary after committing this ctx

        Specifically, this updates backing stores this working context
        wraps to reflect the fact that the changes reflected by this
        workingctx have been committed.  For example, it marks
        modified and added files as normal in the dirstate.

        N(R#R$RRRKR%RHt
setparents(R(RRM((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt
markcommittedts

cCs|jjj�S(N(RRR�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR��sN(5R�R�R�R$R-R.R0R9RIRR�RR=RNRRRRCR5R(R<RQRRRTRSR#R$R%R&R-R+R,RURZR[R!R^R`RiRkR|RJR�R�R�R�RCRIRmRMRRTR�(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRs`					  																								#				R1cBs�eZdZd
d
d�Zed��Zd�Zd�Zd�Z	d�Z
d�Zd�Zd	�Z
d
�Zd�Zd�ZRS(suA workingfilectx object makes access to data related to a particular
       file in the working directory convenient.cCsS||_||_d|_d|_|_|r=||_n|rO||_ndS(sechangeid can be a changeset revision, node, or tag.
           fileid can be a file revision or node.N(RR�R$R�R�R�R�R�(R(R)R�R�R((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR-�s			cCs
t|j�S(N(RR(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR��scCstS(N(R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR9�scCsd|j�|jfS(Ns%s@%s(R�R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR.�scCsdt|�S(Ns<workingfilectx %s>(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR0�scCs|jj|j�S(N(RtwreadR�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR��scCsE|jjj|j�}|s"dS||jjdjj|t	�fS(Ni(
RRR!R�R$R�RCR=RXR(R(trp((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR��sc	Cs�d�}|j}|j}|jj}|j�}|rI|dg}n|||d|�|fg}x1|dD]%}|j||||�|f�qsWg|D]9\}}	}
|	tkr�t|j	|d|	d|
�^q�S(s5return parent filectxs, following copies if necessarycSs|jj|t�S(N(R=RXR(R�R�((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR��siiR�R�N(N(
R�R�R�RCR�R$RyRRJR(R(R�R�R�tpclR�R�tpcRAR�R,((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR&�s			#cCsgS(N((R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRk�scCstj|jj|j��jS(N(R5R<RR;R�R>(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR��scCs}|jj�\}}y/ttj|jj|j��j�|fSWn2t	k
rx}|j
t
jkrn�n||fSXdS(N(R�RRR
R5R<RR;R�tst_mtimeR terrnotENOENT(R(R�ttzterr((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRR�s/cCs
|j|�S(sVcompare with other file context

        returns True if different than fctx.
        (R�(R(R�((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR��sN(R�R�R�R$R-R�R�R9R.R0R�R�R&RkR�RRR�(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR1�s
										tmemctxcBs�eZdZdddd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zdd�Zd�ZRS(s;Use memctx to perform in-memory commits via localrepo.commitctx().

    Revision information is supplied at initialization time while
    related files data and is made available through a callback
    mechanism.  'repo' is the current localrepo, 'parents' is a
    sequence of two parent revisions identifiers (pass None for every
    missing parent), 'text' is the commit message and 'files' lists
    names of files touched by the revision (normalized and relative to
    repository root).

    filectxfn(repo, memctx, path) is a callable receiving the
    repository, the current memctx object and the normalized path of
    requested file, relative to repository root. It is fired by the
    commit function for every file in 'files', but calls order is
    undefined. If the file is available in the revision being
    committed (updated or added), filectxfn returns a memfilectx
    object. If the file was removed, filectxfn raises an
    IOError. Moved files are represented by marking the source file
    removed and the new file added with copy information (see
    memfilectx).

    user receives the committer name and defaults to current
    repository username, date is the commit date in any format
    supported by util.parsedate() and defaults to current date, extra
    is a dictionary of metadata or is left empty.
    c	Cs'||_d|_d|_||_|r9tj|�pBtj�|_||_	g|D]}	|	pgt
^qX}|\}
}g|
|fD]}	t|j|	�^q�|_t
t|��}|ggggg|_||_|r�j�p�|_|jjdd�dkr#d|jd<ndS(NRURR�(RR$RRRR�RR*RRRRRCRLR�Rt
_filectxfnRR
RX(R(R)R&R�RSt	filectxfnRQRRR[RARRj((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR-�s				$	.	cCst|jd�dS(NiR(RRC(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR.scCs|jS(N(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR/	scCstS(N(R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR9scCs
|j|�S(N(RJ(R(RH((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRKscCs|jdS(Ni(RC(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRscCs|jdS(Ni(RC(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRjscCs|jp|jjj�S(N(RRRFR)(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRQscCs|jS(N(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRRscCs|jS(N(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRTscCs
|j�S(N(R#(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRSscCs|jdS(Ni(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR#scCs|jdS(Ni(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR$!scCs|jdS(Ni(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR%#scCs|jdS(Ni(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR&%scCs|jdS(Ni(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR-'scCs|jdS(Ni(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR+)scCs|jdS(Ni(R(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR,+scCstj|jd�S(NRU(RVRWR
(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRU-scCs|jS(N(R
(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR[/scCs||j�S(N(R|(R(RM((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR|1scCs|jS(s)return contexts for each parent changeset(RC(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR&4scCs|j|j||�S(s-get a file context from the working directory(R_R(R(R�R�((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRJ8scCs|jj|�S(scommit context to the repo(Rt	commitctx(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pytcommit<sN(R�R�R�R$R-R.R/R9RKRRjRQRRRTRSR#R$R%R&R-R+R,RUR[R|R&RJRb(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR^�s4																					t
memfilectxcBsheZdZeed
d�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd�Zd	�Z
RS(sYmemfilectx represents an in-memory file to commit.

    See memctx for more details.
    cCs\||_||_|rdp!d|r-dp0d|_d|_|rX|tf|_ndS(sQ
        path is the normalized file path relative to repository root.
        data is the file content as a string.
        islink is True if the file is a symbolic link.
        isexec is True if the file is executable.
        copied is the source file path if current file was copied in the
        revision being committed, or None.R,RRBN(R�t_datat_flagsR$t_copiedR(R(R�R�RPtisexecR!((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR-Es		%	cCstS(N(R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR9TscCsd|j�|jfS(Ns%s@%s(R�R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR.VscCs|jS(N(R�(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�XscCs|jS(N(Rd(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�ZscCs|jS(N(Re(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR|\scCs
d|jkS(NRB(Re(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRg^scCs
d|jkS(NR,(Re(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRP`scCs|jS(N(Rf(R(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyR�bsN(R�R�R�R5R$R-R9R.R�R�R|RgRPR�(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyRc@s							("RRRRRRti18nRR�R�RR�R�RDR�RVRaR�R�R�R5RZR.RqRrRgR�tobjectRRJRR1R^Rc(((s5/sys/lib/python2.7/site-packages/mercurial/context.pyt<module>s"(l$	���Qh

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].