�
�c@s�ddklZlZlZlZlZddklZddkZddk Z ddk
Z
ddkZddkZddk
Z
ddkZddkZddkZddkZddkZddkZddkZddkZddkZddkZddkZddkZddkZddklZddkZddk Z ddk!Z!ddk"Z"ddk#Z#ddk$Z$ei%Z%dei&fd��YZ'd�Z(d�Z)d �Z*dS(
i�(tbinthextnullidtnullrevtshort(t_N(treleasetlocalrepositorycBs�eZedddf�Zedi��Zedd�Zed��Z ed��Z
ed��Zd �Zd
�Z
d�Zd�Zd
�Zed�ZdZhd�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'ed$�Z(eed%�Z)d&�Z*ed'�Z+d(d)�Z,d*�Z-d+�Z.d,�Z/d-�Z0d.�Z1d/�Z2d0�Z3d1�Z4d2�Z5d3�Z6d4�Z7e8d5�Z9e8d6�Z:d7�Z;d8eeeeehd9�Z<ed:�Z=d;�Z>ed<�Z?d=eeeeed>�Z@d?�ZAd@�ZBedA�ZCdB�ZDdC�ZEedD�ZFeeedE�ZGdF�ZHdG�ZIeeedH�ZJeeedI�ZKeeedJ�ZLeedK�ZMeedL�ZNdM�ZOdN�ZPdO�ZQdP�ZRedQ�ZSdR�ZTdS�ZUedT�ZVdU�ZWgedV�ZXRS(Wtlookuptchangegroupsubsett branchmapsrevlogv1 store fncache sharedic Cs*tii|�tii|�|_tii|id�|_||_t i
|i�|_
t i
|i�|_||_|i
�|_y3|ii|id�|i�ti|i�Wntj
onXtii|i�p/|otii|�pti|�nti|i�dg}|iiddt�ostitii|id��|id�|iiddt�o|id�n|i
d d
�id�n|i
dd
�}x|D]}|id|�q�W|i�q�titd�|��n�|otitd�|��n�t�}y%t|i
d�i�i ��}Wn/tj
o#}|i!t!i"jo�q�nXx.||i#D]}titd�|��q�W|i|_$y^tii|i
d�i��}tii|�ptitd�|��n||_$Wn/tj
o#}|i!t!i"jo�qjnXt%i%||i$t i
�|_%|i%i|_&|i%i
|_'|i%i|_(|i%i)|i
_)d|_+d|_,d|_-d|_.d|_/d|_0h|_1h|_2d|_3|_4|_5dS(Ns.hgthgrctrevlogv1tformattusestoretstoret
usefncachetfncaches
00changelog.itat9 dummy changelog to prevent using the old repo layouttrequirestws%s
srepository %s not foundsrepository %s already existssrequirement '%s' not supportedt
sharedpaths1.hg/sharedpath points to nonexistent directory %s(6trepot
repositoryt__init__tostpathtrealpathtroottjointorigroottutiltopenertwopenertbaseuitcopytuit
readconfigt
extensionstloadalltIOErrortisdirtexiststmkdirt
configbooltTruetappendtwritetcloseterrort RepoErrorRtsettreadt
splitlinesterrnotENOENTt supportedRRtspathtsopenertsjoint
createmodetNonet_tagst _tagtypestbranchcachet
_ubranchcachet_branchcachetipt
nodetagscachet
filterpatst_datafilterst _transreft_lockreft _wlockref( tselfR#Rtcreatetrequirementstreqfiletrtinstts((s&/sys/lib/python/mercurial/localrepo.pyRs�
%!
cCsjti|i�}dtijo5tid}|i|i�o|id�qWn|i|i_|S(Nt
HG_PENDINGs00changelog.i.a( t changelogR;Rtenviront
startswithRtreadpendingtversiont
defversion(RJtctp((s&/sys/lib/python/mercurial/localrepo.pyRRms
cCsti|i�S(N(tmanifestR;(RJ((s&/sys/lib/python/mercurial/localrepo.pyRZwscCsti|i|i|i�S(N(tdirstateR!R%R(RJ((s&/sys/lib/python/mercurial/localrepo.pyR[{scCs.|djoti|�Snti||�S(N(R>tcontextt
workingctxt changectx(RJtchangeid((s&/sys/lib/python/mercurial/localrepo.pyt__getitem__s
cCstS(N(R.(RJ((s&/sys/lib/python/mercurial/localrepo.pyt__nonzero__�scCs
t|i�S(N(tlenRR(RJ((s&/sys/lib/python/mercurial/localrepo.pyt__len__�sccs&xtt|��D]}|VqWdS(N(txrangeRb(RJti((s&/sys/lib/python/mercurial/localrepo.pyt__iter__�scCsd|iS(Nsfile:(R(RJ((s&/sys/lib/python/mercurial/localrepo.pyturl�scKsti|i||||�S(N(thookR%(RJtnametthrowtargs((s&/sys/lib/python/mercurial/localrepo.pyRh�ss:
cs`t|t�o|}|f}ndi|�}x;�iD]0} | |jotitd�| ��q<q<Wx9|D]1}
�iddtdt ��d|
d|�qwW��fd�}d}|o�y�i
d d
�}
Wn%tj
o�i
d d�}
nX|
i�}||
|d|�x3|D]+}
�iddt ��d|
d|�q/WdSny�idd
�}
Wn%tj
o�idd�}
nX|
i�}||
|ti|�d�ijo�idg�nti�iddg�}�i|||d|d|�}x3|D]+}
�iddt ��d|
d|�q-W|S(Nts%r cannot be used in a tag nametpretagRjtnodettagtlocalcs�|idd�|o"|ddjo|id�nx�|D]�}|o
||�p|}�ioF|�ijo6�ii|t�}|idt|�|f�n|idt��|f�q@W|i�dS(Niii�s
s%s %s
(tseekR0R@R?tgetRRR1(tfptnamestmungetprevtagsRitmtold(RJRn(s&/sys/lib/python/mercurial/localrepo.pyt writetags�s!!t localtagssr+Rs.hgtagssrb+tabtextratmatch(t
isinstancetstrRttag_disallowedR tAbortRRhR.RR!R)R5R>twfiletencodingt fromlocalR[taddtmatch_texactRtcommit(RJRtRntmessageRptusertdateR|tallcharsRXRiRyRvRsRwttagnode((RJRns&/sys/lib/python/mercurial/localrepo.pyt_tag�sN
!$)!)c
Cskx>|i�d D],}d|jotitd���qqW|i�|i||||||�dS(sZtag a revision with one or more symbolic names.
names is a list of strings or, when adding a single tag, names may be a
string.
if local is True, the tags are stored in a per-repository file.
otherwise, they are stored in the .hgtags file, and a new
changeset is committed with the change.
keyword arguments:
local: whether to store tags in non-version-controlled file
(default False)
message: commit message to use if committing
user: name of user to use if committing
date: date tuple to use if committingis.hgtagssCworking copy of .hgtags is changed (please commit .hgtags manually)N(tstatusR R�RttagsR�(RJRtRnR�RpR�R�tx((s&/sys/lib/python/mercurial/localrepo.pyRo�s
cCs3|idjo|i�\|_|_n|iS(sreturn a mapping of tag to nodeN(R?R>t _findtagsR@(RJ((s&/sys/lib/python/mercurial/localrepo.pyR��sc Cs�h}h}ti|i|||�ti|i|||�h}xD|i�D]6\}\}}|tjo||ti|�<qQqQW|ii �|d<t
g}|i�D]"\}}|ti|�|fq�~�}||fS(suDo the hard work of finding tags. Return a pair of dicts
(tags, tagtypes) where tags maps tag name to node, and tagtypes
maps tag name to a string like 'global' or 'local'.
Subclasses or extensions are free to add their own tags, but
should be aware that the returned dicts will be retained for the
duration of the localrepo object.ttip(ttags_tfindglobaltagsR%t
readlocaltagst iteritemsRR�ttolocalRRR�tdict( RJtalltagsttagtypesR�RiRnthistt_[1]tvalue((s&/sys/lib/python/mercurial/localrepo.pyR��s
8cCs|i�|ii|�S(s�
return the type of the given tag. result can be:
'local' : a local tag
'global' : a global tag
None : tag does not exist
(R�R@Rr(RJttagname((s&/sys/lib/python/mercurial/localrepo.pyttagtypes
cCs�g}x\|i�i�D]H\}}y|ii|�}Wn
d}nX|i|||f�qWg}t|�D]\}}}|||fqv~S(s)return a list of tags ordered by revisioni�(R�R�RRtrevR/tsorted(RJtltttnRNR�((s&/sys/lib/python/mercurial/localrepo.pyttagslist&s
cCsi|ipLh|_x@|i�i�D](\}}|ii|g�i|�q&Wn|ii|g�S(s&return the tags associated with a node(RDR�R�t
setdefaultR/Rr(RJRnR�R�((s&/sys/lib/python/mercurial/localrepo.pytnodetags1s
$cCs\t|�d}||jo;|i||d|d�|i||ii�|�n|S(Ni(Rbt_updatebranchcachet_writebranchcacheRRR�(RJtpartialtlrevttiprev((s&/sys/lib/python/mercurial/localrepo.pyt_branchtags9s
cCs|ii�}|idj o|i|jo|iSn|i}||_|idjo
h|_n|ii�|djp||iijo|i�\}}}n|ii|�}|i }|i
||�||_ x0|i�D]"\}}||iti
|�<q�iS(N(RRR�RAR>RCtcleartnodemapt_readbranchcacheR�RBR�R�R�R�(RJR�toldtipR�tlastR�tktv((s&/sys/lib/python/mercurial/localrepo.pyR
Bs$
cCs�h}x�|i�i�D]�\}}d}xVtt|�ddd�D]8}||}d|ii|�djo|}PqHqHW|djo|d}n|||<qW|S(smreturn a dict where branch names map to the tipmost head of
the branch, open heads come before closedii�R1iN(R
R�R>trangeRbRRR5(RJtbttbntheadstheadReth((s&/sys/lib/python/mercurial/localrepo.pyt
branchtags^s
c
Cs�h}y2|id�}|i�id�}|i�Wn&ttfj
ohttfSnXy�|id�idd�\}}t |�t
|�}}|t|�jp||i�|jot
d��nxY|D]Q}|pq�n|idd�\}}|i|i�g�it |��q�WWnhtj
o
�nTtj
oG} |iio|iit| �d�nhtt}}}nX|||fS(Nsbranchheads.caches
it is'invalidating branch cache (tip differs)(R!R5tsplitR1R)tOSErrorRRtpopRtintRbRnt
ValueErrorR�tstripR/tKeyboardInterruptt ExceptionR%t debugflagtwarnR(
RJR�tftlinesR�R�R�RntlabelRO((s&/sys/lib/python/mercurial/localrepo.pyR�ps0!*-
c Cs�y�|idddt�}|idt|�|f�xH|i�D]:\}}x+|D]#}|idt|�|f�qXWqEW|i�Wnttfj
onXdS(Nsbranchheads.cacheRt
atomictemps%s %s
(R!R.R0RR�trenameR)R�(RJtbranchesR�R�R�R�tnodesRn((s&/sys/lib/python/mercurial/localrepo.pyR��s
%c
Cs�h}xFt||�D]5}||}|i|i�g�i|i��qWx1|i�D]#\}}|i|g�} | i|�t| �djoq\ng}
x�|o�|i�}|| joq�n|t g}| D]}
|||
i
�q��i�}|ii||�}g}| D]}||jo||q,q,~} |
i
d|�q�W| i|
�| ||<q\WdS(Nii(RdR�tbranchR/RnR�textendRbR�tminR�RRt reachabletinsert(RJR�tstarttendtnewbranchesRNRXR�tnewnodestbheadst newbheadstlatestR�tbhtminbhrevR�t_[2]tb((s&/sys/lib/python/mercurial/localrepo.pyR��s,
)
;2
cCs�t|t�o|ii|�SnV|djo|ii�dSn4|djotSn|djo|ii�Sn|ii|�}|o|Sn||i �jo|i �|Sn||i
�jo|i
�|Sn|ii|�}|o|Sn||ii�jo#ti
td�t|���ny't|�djot|�}nWnnXtitd�|��dS(Nt.itnullR�s*working directory has unknown parent '%s'!isunknown revision '%s'(R~R�RRRnR[tparentsRR�t_matchR�R�t
_partialmatchR2R�RRRbRR3(RJtkeyR�((s&/sys/lib/python/mercurial/localrepo.pyR�s6
cCstS(N(R.(RJ((s&/sys/lib/python/mercurial/localrepo.pyRp�scCstii|i|�S(N(RRR(RJR�((s&/sys/lib/python/mercurial/localrepo.pyR�scCstii|i|�S(N(RRRR(RJR�((s&/sys/lib/python/mercurial/localrepo.pytwjoin�scCstii|iti|��S(N(RRRRR tpconvert(RJR�((s&/sys/lib/python/mercurial/localrepo.pytrjoin�scCs2|ddjo|d}nti|i|�S(Nit/i(tfilelogR;(RJR�((s&/sys/lib/python/mercurial/localrepo.pytfile�scCs||S(N((RJR_((s&/sys/lib/python/mercurial/localrepo.pyR^�scCs||i�S(s.get list of changectxs for parents of changeid(R�(RJR_((s&/sys/lib/python/mercurial/localrepo.pyR��scCsti||||�S(sechangeid can be a changeset revision, node, or tag.
fileid can be a file revision or node.(R\tfilectx(RJRR_tfileid((s&/sys/lib/python/mercurial/localrepo.pyR��scCs
|ii�S(N(R[tgetcwd(RJ((s&/sys/lib/python/mercurial/localrepo.pyR��scCs|ii||�S(N(R[tpathto(RJR�tcwd((s&/sys/lib/python/mercurial/localrepo.pyR��sRNcCs|i||�S(N(R"(RJR�tmode((s&/sys/lib/python/mercurial/localrepo.pyR��scCstii|i|��S(N(RRtislinkR�(RJR�((s&/sys/lib/python/mercurial/localrepo.pyt_link�scs�||ijog}x|ii|�D]�}}|djoq)nti|id|g�}d}|} xN|ii�D]=\}
}|i |
�o!|}|t
|
�i�} Pq�q�W|p
d�}nti
|�dp|��fd�}n|i||| f�q)W||i|<nxt|i|D]e\}}}||�oI|iitd�||f�|||d|id|d |�}Pq;q;W|S(
Nt!Rlc[sti||�S((R tfilter(RPRXtkwargs((s&/sys/lib/python/mercurial/localrepo.pyt<lambda>sics
�||�S(((RPRXR�(toldfn(s&/sys/lib/python/mercurial/localrepo.pyR�ssfiltering %s through %s
R%Rtfilename(RER%tconfigitemsR�R}RR>RFR�RTRbtlstriptinspectt
getargspecR/tdebugR(RJR�R�tdataR�tpattcmdtmftfntparamsRitfilterfn((R�s&/sys/lib/python/mercurial/localrepo.pyt_filter�s:
$ cCs||i|<dS(N(RF(RJRiR�((s&/sys/lib/python/mercurial/localrepo.pyt
adddatafilterscCsW|i|�oti|i|��}n|i|d�i�}|id||�S(NRNtencode(R�RtreadlinkR�R"R5R(RJR�R�((s&/sys/lib/python/mercurial/localrepo.pytwreadscCs�|id||�}yti|i|��Wntj
onXd|jo|ii||�nG|i|d�i|�d|jo ti |i|�t
t�ndS(NtdecodeR�RR�(RRtunlinkR�R�R"tsymlinkR0R t set_flagstFalseR.(RJR�R�tflags((s&/sys/lib/python/mercurial/localrepo.pytwwrite"s
cCs|id||�S(NR
(R(RJR�R�((s&/sys/lib/python/mercurial/localrepo.pyt
wwritedata/sc Cs�|io
|i�pd}|o|i�o|i�Sntii|id��oti t
d���ny|id�i�}Wnt
j
o
d}nX|idd�i|�|idd�i|ii��|id�|id�f|id�|id �f|id�|id
�fg}ti|ii|i|id�t|�|ii�}ti|�|_|S(Ntjournals'journal already exists - run hg recoverR[Rlsjournal.dirstateRsjournal.branchtundos
undo.dirstatesundo.branch(RGR>trunningtnestRRR+R<R2R3RR!R5R)R0R[R�RttransactionR%R�R;t
aftertransRR=tweakreftref(RJttrtdstrenames((s&/sys/lib/python/mercurial/localrepo.pyR2s("! cCs�|i�}z�tii|id��oM|iitd��ti |i
|id�|ii�|i�t
Sn|iitd��tSWd|i�XdS(NRs%rolling back interrupted transaction
s%no interrupted transaction available
(tlockRRR+R<R%R�RRtrollbackR;R�t
invalidateR.RR(RJR((s&/sys/lib/python/mercurial/localrepo.pytrecoverMs%
c
CsZd}}z;|i�}|i�}tii|id��o�|iit d��t
i|i|id�|ii
�ti|id�|id��y)|id�i�}|ii|�Wn?tj
o3|ii
t d�ti|ii���nX|i�|ii�|i�n|ii
t d��Wdt||�XdS(NRsrolling back last transaction
s
undo.dirstateR[sundo.branchs=Named branch could not be reset, current branch still is: %s
s"no rollback information available
(R>twlockRRRR+R<R%R�RRRR;R�R R�RR!R5R[t setbranchR)R�R�R�Rt destroyedR(RJR!RR�((s&/sys/lib/python/mercurial/localrepo.pyR[s&
%"
cCsrx5di�D]'}||ijot||�q
q
Wd|_d|_d|_d|_d|_d|_ dS(Nschangelog manifest(
R�t__dict__tdelattrR>R?R@RDRARBRC(RJR((s&/sys/lib/python/mercurial/localrepo.pyRss
c Cs�yti|d|d|�}Wn|tij
om}|p�n|iitd�||if�ti|t|iiddd��|d|�}nX|o|�n|S(Nitdescs"waiting for lock on %s held by %r
R%ttimeoutt600( RR2tLockHeldR%R�RtlockerR�tconfig(RJtlocknametwaitt releasefnt acquirefnR&R�RO((s&/sys/lib/python/mercurial/localrepo.pyt_lock~s$cCs�|io
|i�}|dj o|io|i�|Sn|i|id�|d|itd�|i�}t i
|�|_|S(s�Lock the repository store (.hg/store) and return a weak reference
to the lock. Use this before modifying the store (e.g. committing or
stripping). If you are opening a transaction, get a lock as well.)Rs
repository %sN(RHR>theldRR0R<RRRRR(RJR-R�((s&/sys/lib/python/mercurial/localrepo.pyR�s
cCs�|io
|i�}|dj o|io|i�|Sn|i|id�||ii|iit d�|i
�}ti|�|_|S(s�Lock the non-store parts of the repository (everything under
.hg except .hg/store) and return a weak reference to the lock.
Use this before modifying files in .hg.R!sworking directory of %sN(
RIR>R1RR0RR[R0RRRRR(RJR-R�((s&/sys/lib/python/mercurial/localrepo.pyR!�s
c Cs�|i�}|i�}|i|�} |i|t�}
|i|t�}}h}
|i�}|o6|d|jo%|d}|i|�}|}|oC|tjp
|djo%||jo||}|
}q�q�n|pa|iit d�||f�x>|di
�D](}||jo||i�}PqqWn|iit d�||t|�f�||
d<t|�|
d<t|}
}nY|tjoK| i
|
|�}||
jo|t}
}q�|jo
t}q�|tjp| i|
|�p|
o-|i|�| i||
|||
|�Sn|
|jo-|i|�|i�jo|i|�n|
S(sK
commit an individual file as part of a larger transaction
is( %s: searching for copy revision for %s
R�s %s: copy %s:%s
R$tcopyrevN(RR�R�RrRtrenamedR>R%R�Rt ancestorstfilenodeRtancestortcmpR/R�R(RJtfctxt manifest1t manifest2tlinkrevRt
changelisttfnamettexttflogtfparent1tfparent2t fparent2otmetaR$tcfnametcrevt
newfparentR6tfparentancestor((s&/sys/lib/python/mercurial/localrepo.pyt_filecommit�sP
)
'
)RlcCs�d�}|pti|id�}n|pg} | i|_||_n|i�}
zo|ii�\}}|d}
|oG|t
jo:|o3|i�p
|i�ot
itd���n|id|d|�}|o|di|d�ng}xE|
iD]:}||�o'|
i|�i�o|i|�qqW|o)d|djo|didd�n|o|i�ot|d|d |d
�}x�i�D]�}|djp||jp||
ijoq�n||djo||td
��n|| joG|d}xa|D]}|i|�oPqAqAW||td��q�||ijo||td��q�q�Wn|oi|id�oX|t
joK|dp|d p|d
o)|di�|di�jodSnti|�}xI|dD]=}||jo*||djot
itd���q1q1Wti|||f|||||�}|o||||�|_n|o�|
ii�}xa|D]Y}|i itd�|�|
i|�i!|i||�}||d|f||<q�Wt"i#||�n|i$|t%�}x*|d|d D]}|ii&|�qlWx"|d
D]}|ii'|�q�W|ii(|�|i)�|SWd|
i*�XdS(s�Add a new revision to current repository.
Revision information is gathered from the working directory,
match can be used to filter the committed files. If editor is
supplied, it is called to get a commit message.
cSstid||f��dS(Ns%s: %s(R R�(R�tmsg((s&/sys/lib/python/mercurial/localrepo.pytfail�sRlsBcannot partially commit a merge (do not specify files or patterns)R}tcleaniis.hgsubstateiiR�isfile not found!R�sno match under directory!sfile not tracked!R1tus+unresolved merge conflicts (see hg resolve)scommitting subrepository %s
N(+R�talwaysRR/tdirtbadR!R[R�R>RtfilestanypatsR R�RR�R�tsubstatetsubtdirtyR�R4RTRrR�tmerge_t
mergestateR\R]t_textR$R%R�tsubrepot
writestatet commitctxR.tnormaltforgett
setparentstresetR(RJR>R�R�R}tforceteditorR|RJtvdirsR!tp1tp2twctxtchangestsubsRPtmatchedR�tdRtmstcctxtstatetsrtret((s&/sys/lib/python/mercurial/localrepo.pyR��s�
#
*
&"!!
cs�d
}}|i�}|i�|i�}}|i�i�}|i�} |i�}
|i�|o
|i�pd}}�iddt d|d|��i
�}z��i�}ti
|�}
h}g}t��}x�t|i�|i��D]�}�ii|d�yF||}�i||| ||
|�||<|i||i��Wq�tfj
o<|o!�iitd�|��q�|i|�q�q�i|�g}t|�D]+}||jp
|| jo||q�q�~}g}|D]}||jo||qq~}x|D]
}||=q>W�ii||
||i�|i�||f�}�ii ��ii||||i!�|
|i"�|i"�|
|i#�|i$�i��}�fd�}�id dt d
t|�d|d|d|��ii%|
�|i&��i'o�i(�n�idd
t|�d|d|�|SWd
~|i)�Xd
S(stAdd a new revision to current repository.
Revision information is passed via the context argument.
Rlt precommitRjtparent1tparent2s
strouble committing %s!
cs�ii�o
�ipdS(Rl(RRtwritependingR((RJ(s&/sys/lib/python/mercurial/localrepo.pyR��stpretxncommitRntpendingR�N(*R>tremovedRbRcRZR$R�RRhR.RRRtproxyRbR�tmodifiedtaddedR%tnoteRHR4RR�R)R�RR/tupdateR�tmanifestnodeRRtdelayupdatetdescriptionRnR�R|tfinalizeR1RAR�R(RJtctxR2RRRtRbRctm1tm2R�txp1txp2ttrptnewtchangedR;R�R8R�R�tdroptmnR�RY((RJs&/sys/lib/python/mercurial/localrepo.pyRZZsf
'
E2
!$
%cCsti|i|hh�dS(s�Inform the repository that nodes have been destroyed.
Intended for use by strip and rollback, so there's a common
place for anything that has to be done after destroying history.N(R�R�R%(RJ((s&/sys/lib/python/mercurial/localrepo.pyR#�scCs||i|�S(s�
walk recursively through the directory tree or a given
changeset, finding all files matched by the match
function
(twalk(RJR}Rn((s&/sys/lib/python/mercurial/localrepo.pyR��sR�csB�fd�}t|ti�o
|�n�|�t|ti�o
|}n�|}|i�dj} | o��dj}
�pti�i�i���|||}}}
| o'|i��i�jo|i �n|
p��fd�}|�_
n| oS�ii�|||
�}|\}}}}}}}}|
o|og}x|t
|�D]n}|�jp=|i|��i|�jp�|i||i��o|i|�qr|i|�qrW|o||7}n|ocyF�it�}z%x|D]}�ii|�qWWd|i�XWqctij
oqcXqgqkn|
p�|��}| oy|�d�}x9|||D])}d||<|i||i|��q�WxJ|D]}||jo||=q�q�Wn!ggg}}}||�}ggg}}}x�|D]�}||jo�|i|�|i|�jp>||||jo:||p�|i||i��o|i|�n|o|i|�n||=q9|i|�q9W|i�}n|||||||f}g}|D]}||i�q$~|S(s�return status of files between two nodes or node and working directory
If node1 is None, use the first dirstate parent instead.
If node2 is None, compare node1 with working directory.
csE|i�i�}x,|i�D]}�|�p||=qqW|S(N(RZR$tkeys(R~RR(R}(s&/sys/lib/python/mercurial/localrepo.pyt mfmatches�s
R�cs;|�jo*�iid�ii|�|f�ndS(Ns%s: %s
(R%R�R[R�(R�RI(tctx1RJ(s&/sys/lib/python/mercurial/localrepo.pyRO�s
N(R~R\R^R�R>R�RMRR�RZROR[R�R�RR7R�R/R!RR[RR2t LockErrorR4R�tsort(RJtnode1tnode2R}tignoredRKtunknownR�tctx2tworkingt
parentworkingtlistignoredt listcleantlistunknownRORPR7RvRwRttdeletedtfixupR�R!tmf1tmf2RRNR�R�((RJR�R}s&/sys/lib/python/mercurial/localrepo.pyR��s�
"!
,
)%cCs�|i�}zdg}xS|D]K}|i|�}yti|�}Wn1|iitd�|�|i|�qnX|idjo$|iitd�||f�nt i
|i�pt i|i�p+|iitd�|�|i|�q|i
|djo|iitd�|�q|i
|djo|i
i|�q|i
i|�qW|SWd|i�XdS(Ns%s does not exist!
i��se%s: files over 10MB may cause memory and performance problems
(use 'hg revert %s' to unadd the file)
s:%s not added: only files and symlinks supported currently
tamns%s already tracked!
RN(R!R�RtlstatR%R�RR/tst_sizetstattS_ISREGtst_modetS_ISLNKR[tnormallookupR�R(RJtlistR!trejectedR�RYtst((s&/sys/lib/python/mercurial/localrepo.pyR�#s4
&cCsu|i�}zWxP|D]H}|i|djo|iitd�|�q|ii|�qWWd|i�XdS(NRs%s not added!
(R!R[R%R�RR\R(RJR�R!R�((s&/sys/lib/python/mercurial/localrepo.pyR\Bsc CsB|oax^|D]R}yti|i|��Wqtj
o#}|itijo�q`qXqWn|i�}z�x�|D]�}|o:tii |i|��o|i
itd�|�q~|i
|djo|i
i|�q~||i
jo|i
itd�|�q~|i
i|�q~WWd|i�XdS(Ns%s still exists!
Rs%s not tracked!
(R RR�R�R7R8R!RRR+R%R�RR[R\tremoveR(RJR�RR�ROR!((s&/sys/lib/python/mercurial/localrepo.pyR�Ms(#c Cs*g}|ii�D]:}|tjo'||ii|ii|�d�qq~}|i�}z�x�|D]�}|i|djo|iit d�|�qm||djo|dp|d}|i
|�i||�}|i|||i|��|ii
|�qmWWd|i�XdS(NiRNs%s not removed!
i(R[R�RRZR5RRR!R%R�RR�RRR[R( RJR�R�RYt manifestsR!R�RwR�((s&/sys/lib/python/mercurial/localrepo.pytundeletecsP&cCs�|i|�}tii|�ptii|�p|iitd�|�n�tii|�ptii|�p|iitd�|�nZ|i �}z?|i
|djo|i
i|�n|i
i||�Wd|i
�XdS(Ns%s does not exist!
s1copy failed: %s is not a file or a symbolic link
s?r(R�RRR+R�R%R�RtisfileR!R[R�R$R(RJtsourcetdestRYR!((s&/sys/lib/python/mercurial/localrepo.pyR$ss&&cCsq|ii|�}g}|D] }||ii|�|fq~}g}t|�D]\}}||qW~S(N(RRR�R�R�(RJR�R�R�R�R�RNR�((s&/sys/lib/python/mercurial/localrepo.pyR��s4cCs�|djo|di�}n|i�}||jogSn||}|i�|dj o |ii|g|�d}n|pFg}|D].}d|ii|�djo||q�q�~}n|S(NiR1i(R>R�R
treverseRRtnodesbetweenR5(RJR�R�tclosedR�R�R�R�((s&/sys/lib/python/mercurial/localrepo.pytbranchheads�s
5cCs�|p|ii�g}ng}x~|D]v}|}xg|ii|�}|dtjp|dtjo&|i|||d|df�Pn|d}q9q*W|S(Nii(RRR�R�RR/(RJR�R�R�R�RY((s&/sys/lib/python/mercurial/localrepo.pyR��s"!c
Cs�g}x�|D]�\}}|gd}}}d}xm||jo_|tjoR|ii|�d} ||jo|i|�|d}n| }|d7}q6W|i|�q
W|S(Niii(RRRR�R/(
RJtpairsRNttoptbottomR�R�ReR�RY((s&/sys/lib/python/mercurial/localrepo.pytbetween�s
cCs|i||||�dS(s�Return list of roots of the subsets of missing nodes from remote
If base dict is specified, assume that these nodes and their parents
exist on the remote side and that no child of a node of base exists
in both remote and self.
Furthermore base will be updated to include the nodes that exists
in self and remote but no children exists in self and remote.
If a list of heads is specified, return only nodes which are heads
or ancestors of these heads.
All the ancestors of base are in self and in remote.
All the descendants of the list returned are missing in self.
(and so we know that the rest of the nodes are missing in remote, see
outgoing)
i(tfindcommonincoming(RJtremotetbaseR�R_((s&/sys/lib/python/mercurial/localrepo.pytfindincoming�scCs�|ii}g}t�}t�}t�} |djo
h}n|p|i�}n|ii�tjoKd|t<|tgjotgtgt|�fSntgggfSn|ii t
d��g}
x6|D].}||jo|
i|�q�d||<q�W|
}|
p|i�ggfSnt|
�}d}
|i
|
�}
x|
o
g}x0|
o(|
id�}|d|joqin|iit
d�t|d�t|d�f�|dtjon�|| jo|iit
d��qinz|doj|d|joY|iit
d�t|d�t|d�f�|i|dd!�| i|�n|d|jo�|d|jo�|d|joJ|d|jo9|iit
d �t|d��|i|d�nx4|dd
!D]!}||jod||<q
q
WnxM|dd
!D]>}||jo+||jo|i|�|i|�qAqAW|i|d�qiW|o�|
d7}
|iit
d�|
ditt|��f�x�tdt|�d
�D]l}xc|i
|||d
!�D]G}|iit
d�t|d�t|d�f�|
i|�qWq�YqYWxV|oNg}|
d7}
x7t||i|��D]\}}|i|d�|d}d}x�D]�}|iit
d�|t|�t|�f�||jo�|djo;|iit
d�t|��|i|�d||<n@|iit
d�t|�t|�f�|i||f�Pn||d}}q�W|}q�WqqWxB|D]:}||jo'tit
d�t|d
���q�q�W|i�tgjo:|o|iit
d��q\tit
d���n|iit
d�dig}|D]}|t|�q~�d�|iit
d�|
�|i�t|�|fS(scReturn a tuple (common, missing roots, heads) used to identify
missing nodes from remote.
If base dict is specified, assume that these nodes and their parents
exist on the remote side and that no child of a node of base exists
in both remote and self.
Furthermore base will be updated to include the nodes that exists
in self and remote but no children exists in self and remote.
If a list of heads is specified, return only nodes which are heads
or ancestors of these heads.
All the ancestors of base are in self and in remote.
issearching for changes
isexamining %s:%s
sbranch already found
sfound incomplete branch %s:%s
iisfound new changeset %s
isrequest %d: %s
R�i
sreceived %s:%s
snarrowing %d:%d %s
sfound new branch changeset %s
s narrowed branch search to %s:%s
salready have changeset s!warning: repository is unrelated
srepository is unrelateds!found new changesets starting at s
s%d total queries
N(RRR�R4R>R�R�RR�R%R�RR/R�R�R�R�RR�RtmapRdRbtzipR�R2R3R�R R�(RJR�R�R�R_Rwtsearchtfetchtseent
seenbranchR�R�treqtreqcntRNR�RYR�t newsearchR�R�ReR�((s&/sys/lib/python/mercurial/localrepo.pyR��s�
"
"""
"
/
?c
Cs�|djo#h}|i|||d|�n|iitd�ditt|i���d�t |i
i�}|it
�|i�}xc|o[|id�}||jo;|i|�x+|i
i|�D]}|i|�q�Wq�q�Wg} t �}
x�|D]�}|i
i|�\}}||jo||jo| i|�n|o@||jo|
i|�n||jo|
i|�q�q
q
W|o| t|
�fSn| SdS(s�Return list of nodes that are roots of subsets not in remote
If base dict is specified, assume that these nodes and their parents
exist on the remote side.
If a list of heads is specified, return only nodes which are heads
or ancestors of these heads, and return a second element which
contains all remote heads which get new children.
R_scommon changesets up to R�s
iN(R>R�R%R�RRR�RR�R4RRR�R�RR�R�R/R�R�(
RJR�R�R�R_tremainR�R�RYtsubsett
updated_headsRbRc((s&/sys/lib/python/mercurial/localrepo.pytfindoutgoing[s<
-
c Cs6|i�}z|i|d|d|�\}}}|tgjo|iitd��n|p|iitd��dSn|djo|id�o
|}n|djo|i|d�}n?|id�pt i
td���n|i||d�}|i|d|i
��SWd|i�XdS( NR�R_srequesting all changes
sno changes found
iR tpullsWPartial pull cannot be done because other repository doesn't support changegroupsubset.(RR�RR%R�RR>tcapabletchangegroupR R�R taddchangegroupRgR( RJR�R�R_RtcommonR�trheadstcg((s&/sys/lib/python/mercurial/localrepo.pyR��s$
cCs:|id�o|i|||�Sn|i|||�S(Ntunbundle(R�t
push_unbundletpush_addchangegroup(RJR�R_trevs((s&/sys/lib/python/mercurial/localrepo.pytpush�s c
s�h}|i�}�i|||d|�}�i|||�\}}�dj o"�ii|��\} }
�n|�ii�}
����fd�}|
p�iitd��d Sn�|p�|t gjoM|i
d�oh}�p�i�}nQxM�D]E}
�|
i�}||jo||i
|
�q|
g||<qW|i�}x�|D]�}||jo||}ng}||}g}|D](}�|i�|jo||q�q�~}|pqnn||||�pd
SqnqnWq+|�||�pdSq+n|o�iitd��qPn�djo�i|i�d�}n�i|�d�}||fS(NR_c
s�d}�o#t|�t|�jo
d}ng}|D]}|�ii||�q<~}tt|g��t|�@}|ptSnx�|D]�}|�iijoc�ii|��} g}
�D]}|| jo|
|q�q�~
}|p|i|�qq�|i|�q�Wt|�t|�jo
d}n|og|p,�ii t
d��|di��n�ii t
d���iit
d��t
SntS(s�
check whether there are more local heads than remote heads on
a specific branch.
lheads: local branch heads
rheads: remote branch heads
updatelh: outgoing local branch heads
iis,abort: push creates new remote branch '%s'!
s&abort: push creates new remote heads!
s0(did you forget to merge? use push -f to force)
(RbRRR�R4tsumR.R�R�R%R�RR�R�R(
tlheadsR�tupdatelhR�R�R�tupdatelheadstnewheadsRNR&R�R�R�(R�RJR�(s&/sys/lib/python/mercurial/localrepo.pytcheckbranch�s4
!
)2
sno changes found
iR
isnote: unsynced remote changes!
R�(Ni(Ni(Ni(R�R�R�R>RRR�R%R�RRR�R
R�R/R�t_changegroupR�R (RJR�R_R�R�tremote_headstincRyR�tmsng_cltbasesR�tlocalhdsR�R�t remotehdstlhR�R�R�tupdR�R�((R�RJR�s&/sys/lib/python/mercurial/localrepo.pytprepush�sX
".
+
cCsy|i�}z[|i|||�}|ddj o)|\}}|i|d|i��Sn|dSWd|i�XdS(NiR�i(RR�R>R�RgR(RJR�R_R�RRmR�R�((s&/sys/lib/python/mercurial/localrepo.pyR�#scCse|i|||�}|ddj o7|\}}|o
dg}n|i||d�Sn|dS(NiR_R�i(R�R>R�(RJR�R_R�RmR�R�((s&/sys/lib/python/mercurial/localrepo.pyR�.scCs�|iip
|djo$|iitd�t|��n|iioE|iitd��x,|D] }|iidt|��qhWndS(Ntbundles%d changesets found
slist of changesets:
s%s
(R%tverboseR�RRbR�R�R(RJR�R�Rn((s&/sys/lib/python/mercurial/localrepo.pytchangegroupinfo;s$
cs��djo�|i��i�}|i�||jofg}xI|D]A}x8�ii|�D]$}|tjo|i|�q`q`WqGW�i|��Sq�n�iddt d���i��i
||�\�}}�i���t�} x$|D]}| i
�i|��qW| it�t| �} | o1�i
d| �\�}
}
d}
t���n
t���i�h�h��it��d}
d}
d��d����fd�������fd���fd �����fd
������fd���fd���fd
������������������fd�}ti|��S(stThis function generates a changegroup consisting of all the nodes
that are descendents of any of the bases, and ancestors of any of
the heads.
It is fairly complex as determining which filenodes and which
manifest nodes need to be included for the changeset to be complete
is non-trivial.
Another wrinkle is doing the reverse, figuring out which changeset in
the changegroup a particular filenode or manifestnode belongs to.
The caller can specify some nodes that must be included in the
changegroup using the extranodes argument. It should be a dict
where the keys are the filenames (or 1 for the manifest), and the
values are lists of (node, linknode) tuples, where node is a wanted
node and linknode is the changelog node that should be transmitted as
the linkrev.
tpreoutgoingRjR�icSs|S(N((R�((s&/sys/lib/python/mercurial/localrepo.pytidentity�sc
Sst|�}|id|i�x�|D]�}g}|i|�D]}|tjo||q@q@~}x~|ov|i�}||joY|i|�g} |i|�D]}|tjo| |q�q�~ }|i|�qjqjWq&Wx|D]}|i|d�q�S(NR�( R�R�R�R�RR�R�R�R>(
trevlogthassettmsngsetthaslstRnR�RYt parentlstR�R�((s&/sys/lib/python/mercurial/localrepo.pyt
prune_parents�s;
;cs���fd�}|S(NcsL�i|�}x"|dD]}�i||�qW�i|d|�dS(Nii(R5R�(tclnodeRXR�(tmsng_mnfst_settchangedfilesettcl(s&/sys/lib/python/mercurial/localrepo.pytcollect_manifests_and_files�s
((R�R�(R�R�(R�s&/sys/lib/python/mercurial/localrepo.pytmanifest_and_file_collector�scsmt�}xM�D]E}�i�i�i|���}|�jo|i|�qqW��|��dS(N(R4RnR;R�R�(t
has_mnfst_setR�tlinknode(R�R�t
has_cl_setR�tmnfst(s&/sys/lib/python/mercurial/localrepo.pytprune_manifests�s !
cs�|S(N((t mnfstnode(R�(s&/sys/lib/python/mercurial/localrepo.pytlookup_manifest_link�scs(dg������fd�}|S(Nics �i|�}|�djo�i|�}x�|i�D][\}}�i|d�}|dj o0�|}�i|h�}|i||�q<q<Wnp�i|�}x]�D]U}|i|d�}|dj o0�|}�i|h�}|i||�q�q�W|d�d<dS(Nii(R�t readdeltaR�RrR>R�R5(R�RNtdeltamfR�tfnodeR�tndsetRw(tnext_revR�tchangedfilestmsng_filenode_setR�(s&/sys/lib/python/mercurial/localrepo.pytcollect_msng_filenodes�s&
((R�R(R�RR�(R�R�s&/sys/lib/python/mercurial/localrepo.pytfilenode_collector�s "csw�|}t�}xM|D]E}�i|i|i|���}|�jo|i|�qqW�|||�dS(N(R4RnR;R�R�(R�t
filerevlogR�R�R�R�(R�RR�R�(s&/sys/lib/python/mercurial/localrepo.pytprune_filenodess
!
cs�|��fd�}|S(Ncs�|S(N((R�(R�(s&/sys/lib/python/mercurial/localrepo.pytlookup_filenode_links((R=R(R(R�s&/sys/lib/python/mercurial/localrepo.pytlookup_filenode_link_funcs
csW�p
|�jodSnx3�|D]'\}}||jo|||<q(q(WdS(N((RiR�RnR�(t
extranodes(s&/sys/lib/python/mercurial/localrepo.pytadd_extra_nodess
c3sSh}�i���|��}x|D]}|Vq(W���d���i�}|id�i��i|��|��}x|D]}|Vq�Wd}�i��oFxC�D]7}t|t�oq�n�i|h�d||<q�Wnxt |�D]
}�i
|�}t|�pti
td�|��n|�jo2�||��|�|��|i�}ng}t|�djo^tit|��V|V|id|i�|i|�|��}x|D]}|Vq�n|�jo�|=qqWti�V�o'�iddt�d�d��ndS(NiR�sempty or missing revlog for %sitoutgoingRnR�(tgroupR�R�R�R>R�R~R�R�R�R�RbR R�RR�tchunkheadert
closechunkRhR(R�R
tchnktmsng_mnfst_lstR=Rtmsng_filenode_lst(RR�R�R�RRR�RR�R�Rtmsng_cl_lstR�R�RRJ(s&/sys/lib/python/mercurial/localrepo.pytgengroup#s`
N(R>R�R�RRR�RR/R�RhR.R�R�R4RytdiscardR�RZtindexRbR tchunkbuffer(RJR�R�R�RtallheadsR�R�RYt
knownheadstjunkR((R�R�R�RJRR�R�RR�R�R�RRR�R�RRRs&/sys/lib/python/mercurial/localrepo.pyR CsX
/
<GcCs|i||i�|�S(N(R R�(RJt basenodesR�((s&/sys/lib/python/mercurial/localrepo.pyR�lsc
s��iddtd���i��i|��tg}�D]}|�i|�q?~���i���d���fd���fd���fd����������fd�}ti|��S( s$Generate a changegroup of all nodes that we have that a recipient
doesn't.
This is much easier than the previous function as we can assume that
the recipient has any changenode we aren't sending them.
common is the set of common nodes between remote and selfR�RjR�cSs|S(N((R�((s&/sys/lib/python/mercurial/localrepo.pyR��sc3s=x6|D].}|i|��jo|i|�VqqWdS(N(R;Rn(tlogRN(trevset(s&/sys/lib/python/mercurial/localrepo.pyt
gennodelst�scs��fd�}|S(Ncs$�i|�}�i|d�dS(Ni(R5Ry(R�RX(R�R�(s&/sys/lib/python/mercurial/localrepo.pytcollect_changed_files�s((R�R(R�(R�s&/sys/lib/python/mercurial/localrepo.pytchanged_file_collector�scs��fd�}|S(Ncs�i�i�i|���S(N(RnR;R�(R�(R�R�(s&/sys/lib/python/mercurial/localrepo.pyt
lookuprevlink�s((R�R(R�(R�s&/sys/lib/python/mercurial/localrepo.pytlookuprevlink_func�sc3sht�}x(�i���|��D]}|Vq%W�i}�|�}x%|i|�|��D]}|VqbWx�t|�D]�}�i|�}t|�ptitd�|��n�|�}t |�}|oKt
it|��V|V�|�}x#|i||�D]}|VqWq~q~Wt
i�V�o'�i
ddt�d�d��ndS(Nsempty or missing revlog for %sR RniR�(R4R
RZR�R�RbR R�RR�R�RRRhR(R�R
R�tnodeiterR=RR(R�RRJR�R�R�RR(s&/sys/lib/python/mercurial/localrepo.pyR�s6
( RhR.RRtfindmissingR4R�R�R R(RJR�R�R�R�R(( RR�RRJRRR�R�R�s&/sys/lib/python/mercurial/localrepo.pyR�ps 0 $cs���fd�}�fd�}|pdSn�iddtd|d|�d}}} �i��i�t�i��}
�i�}z~ti|�}�i i
td��t��}
ti
|�}�i|||�djo!|otitd ���nt��}||
}�i i
td
��ti
|�}�ii|||��i i
td��x�ti|�}|pPn�i itd�|��i|�}t|�}ti
|�}|i|||�djotitd
���n| t|�|7} |d7}qxt�i��}d}|
o%||
jotd�||
}n�i i
td�|| ||f�|djoP��fd�}�iddtdt�i|
��d|d|d|�n�i|�|i�Wd~X|djo��i itd���i��iddt�i|
��d|d|�xIt|
|�D]4}�iddt�i|��d|d|�q~Wn||
jo||
dSn
||
dSdS(sadd changegroup to repo.
return values:
- nothing changed or no source: 0
- more heads than before: 1+added heads (2..n)
- less heads than before: -1-removed heads (-2..-n)
- number of heads stays the same: 1
cs*�iitd�t|��t��S(Nsadd changeset %s
(R%R�RRRb(R�(R�RJ(s&/sys/lib/python/mercurial/localrepo.pytcsmap�s cs
�i|�S(N(R�(R�(R�(s&/sys/lib/python/mercurial/localrepo.pytrevmap�sitprechangegroupRjR�Rgsadding changesets
s!received changelog group is emptysadding manifests
sadding file changes
sadding %s revisions
s#received file revlog group is emptyiRls (%+d heads)s2added %d changesets with %d changes to %d files%s
cs�i�o
�ipdS(Rl(RqR((RJR�(s&/sys/lib/python/mercurial/localrepo.pyR��stpretxnchangegroupRnRsNsupdating the branch cache
R�tincoming(RhR.RRR{RbR�RRRuR%R�RR�t chunkitertaddgroupR>R R�RZtgetchunkR�R�RRnR}R1R�Rd(RJR�tsrctypeRgtemptyokR"R#t
changesetsRPt revisionstoldheadsRR�tclstartR'tclendR�tfltoR�R�RYRe((R�RJs&/sys/lib/python/mercurial/localrepo.pyR��sz
$
!
!
cCs�|i�}|i�}yt|�}Wn+tj
otitd�|��nX|djotitd���nM|djotitd���n'|djotitd���n|i i
td��|i�}y%tt|id d��\}}Wn1tt
fj
otitd�|��nX|i i
td
�|ti|�f�ti�}x�|�D]�|i�}y(|idd�\} }
t|
�}
Wn1tt
fj
otitd�|��nX|i itd�| ti|
�f�|iti| �d
�}x*ti|d|
�D]}|i|�qMW|i�q�Wti�|}
|
djo
d}
n|i i
td�ti|�|
ti||
�f�|i�t|i��dS(Ns'Unexpected response from remote server:isoperation forbidden by serveris$locking the remote repository failedis%the server sent an unknown error codesstreaming all changes
R�s!%d files to transfer, %s of data
tsadding %s (%s)
Rtlimitg�MbP?s(transferred %s in %.1f seconds (%s/sec)
(t
stream_outtreadlineR�R�R2t
ResponseErrorRR R�R%R�R�R�t TypeErrort bytecountttimeRdR�R;Rt decodedirt
filechunkiterR0R1RRbR�(RJR�RsR�trespttotal_filesttotal_bytesR�ReRitsizetofptchunktelapsed((s&/sys/lib/python/mercurial/localrepo.pyt stream_ins\
%
)
cCs@|o)|o!|id�o|i|�Sn|i||�S(s�clone remote repository.
keyword arguments:
heads: list of revs to clone (forces use of pull)
stream: use streaming clone if possibletstream(R�RDR�(RJR�R�RE((s&/sys/lib/python/mercurial/localrepo.pytcloneMs(Yt__name__t
__module__R4tcapabilitiesR�R9R>Rt
propertycacheRRRZR[R`RaRcRfRgRRhR�R�RoR�R�R�R�R�R�R
R�R�R�R�RRpRR�R�R�R^R�R�R�R�R�R�RRR RRRR RRR0R.RR!RHR�RZR#R�R�R�R\R�R�R$R�R�R�R�R�R�R�R�R�R�R�R�R�R R�R�R�RDRF(((s&/sys/lib/python/mercurial/localrepo.pyRs�T
> !
KdD i �0
p
� Di 0cs:g}|D]}|t|�q~��fd�}|S(Ncs+x$�D]\}}ti||�qWdS(N(R R�(tsrcR�(trenamefiles(s&/sys/lib/python/mercurial/localrepo.pyRcs(ttuple(RPR�R�R((RLs&/sys/lib/python/mercurial/localrepo.pyRas'cCst|tid|�|�S(NR�(RR tdrop_scheme(R%RRK((s&/sys/lib/python/mercurial/localrepo.pytinstancehscCstS(N(R.(R((s&/sys/lib/python/mercurial/localrepo.pytislocalks(+RnRRRRRti18nRRR�RXRRR[R�RZR\RRRR�R R'RhR2R}R�tmergeRUR�R�RRR�R7RR:R�RJRRRRORP(((s&/sys/lib/python/mercurial/localrepo.pys<module>s.($<00H ����T
|