
    6htA                    <   S SK Jr  S SKrSSKJr  SSKJrJr  SSKJ	r	  \R                  (       a  S SK	r	SSKJrJrJrJrJr  SSKJrJr  SS	KJrJr  S
S0rS rS rS rS rS r\	R<                   " S S5      5       r " S S5      r  " S S\R                   5      r!g)    )annotationsN   )_)binhex)attr)encodingerrormetadatapycompatrevlog)dateutil
stringutil)	constantsflagutil   branch   defaultc                    U R                  SS5      R                  SS5      R                  SS5      n U R                  SS5      $ )	a  
>>> from .pycompat import bytechr as chr
>>> d = {b'nl': chr(10), b'bs': chr(92), b'cr': chr(13), b'nul': chr(0)}
>>> s = b"ab%(nl)scd%(bs)s%(bs)sn%(nul)s12ab%(cr)scd%(bs)s%(nl)s" % d
>>> s
'ab\ncd\\\\n\x0012ab\rcd\\\n'
>>> res = _string_escape(s)
>>> s == _string_unescape(res)
True
   \   \\   
s   \n   s   \r       \0)replacetexts    5/usr/lib/python3/dist-packages/mercurial/changelog.py_string_escaper   +   sB     	UG$				 	
 <<v&&    c                    SU ;   a6  U R                  SS5      n U R                  SS5      n U R                  SS5      n [        R                  " U 5      $ )Nr   r   s   \\
r   r   r    )r   r   unescapestrr   s    r   _string_unescaper#   ?   sJ    ~||GY/||FE*||E3'!!$''r    c                    [         R                  5       nU R                  S5       H-  nU(       d  M  [        U5      R                  SS5      u  p4XAU'   M/     U$ )a  
>>> from .pycompat import bytechr as chr
>>> sorted(decodeextra(encodeextra({b'foo': b'bar', b'baz': chr(0) + b'2'})
...                    ).items())
[('baz', '\x002'), ('branch', 'default'), ('foo', 'bar')]
>>> sorted(decodeextra(encodeextra({b'foo': b'bar',
...                                 b'baz': chr(92) + chr(0) + b'2'})
...                    ).items())
[('baz', '\\\x002'), ('branch', 'default'), ('foo', 'bar')]
r      :r   )_defaultextracopysplitr#   )r   extralkvs        r   decodeextrar-   H   sQ      EZZ1#A&,,T15DA!H  Lr    c           	         [        U 5       Vs/ s H  n[        SXU   4-  5      PM     nnSR                  U5      $ s  snf )Ns   %s:%sr   )sortedr   join)dr+   itemss      r   encodeextrar3   [   s?    ;A!9E9a^HQ4y019EE::e Fs   =c                    SR                  U R                  5        Vs/ s H  oR                  5       PM     sn5      R                  S5      $ s  snf )z>strip trailing whitespace and leading and trailing empty linesr   )r0   
splitlinesrstripstrip)descr*   s     r   	stripdescr9   a   s;    ::4??+<=+<axxz+<=>DDUKK=s   Ac                     \ rS rSr\R
                  " 5       r\R
                  " 5       r\R
                  " SS9r\R
                  " SS9r	\R
                  " \R                  " \5      S9r\R
                  " SS9r\R
                  " SS9r\R
                  " SS9r\R
                  " SS9r\R
                  " SS9r\R
                  " \S   S4S9rSrg)	_changelogrevisionf   r    )default)r   r   Nr   F )__name__
__module____qualname____firstlineno__r   ibr)   manifestuserdateFactorylistfiles
filesaddedfilesremovedp1copiesp2copiesdescriptionr&   
branchinfo__static_attributes__r>   r    r   r;   r;   f   s     GGIEwwyH773D776"DGGDLL./E&J774(Lwwt$Hwwt$H''#&K-	":E!BCJr    r;   c                    ^  \ rS rSrSrSrU 4S jr\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rSrU =r$ )changelogrevisionw   zHolds results of a parsed changelog revision.

Changelog revisions consist of multiple pieces of data, including
the manifest node, user, and date. This object exposes a view into
the parsed object.
)_offsets_text	_sidedata_cpsd_changesc                j  > U(       d  [        [        UR                  S9$ [        T
U ]  U 5      nUR                  S5      nUR                  SUS-   5      nUR                  SUS-   5      nX(S-   US-    S:X  a  Un	OUR                  SUS-   5      n	XgX4Ul        X%l        X5l        XEl	        S Ul
        U$ )N)r)   rD   r   r         

)r;   r&   nullidsuper__new__indexrT   rU   rV   rW   rX   )clsclr   sidedatacpsdselfnl1nl2nl3doublenl	__class__s             r   r^   changelogrevision.__new__   s    %MBIINNws# jjjja(jja( a#'"e+Hzz'373H31
!
r    c                L    [        U R                  SU R                  S    5      $ Nr   )r   rU   rT   rd   s    r   rD   changelogrevision.manifest   s!    4::a$--"2344r    c                r    U R                   n[        R                  " U R                  US   S-   US    5      $ Nr   r   )rT   r	   tolocalrU   rd   offs     r   rE   changelogrevision.user   s3    mm

3q6A:A ?@@r    c                t    U R                   nU R                  US   S-   US    nUR                  SS5      SS $ )Nr   rZ       r   )rT   rU   r(   )rd   rs   	dateextras      r   _rawdatechangelogrevision._rawdate   s?    mmJJs1vzCF3	tQ'!,,r    c                    U R                   nU R                  US   S-   US    nUR                  SS5      n[        U5      S:w  a  g US   $ )Nr   rZ   rv      )rT   rU   r(   len)rd   rs   rw   fieldss       r   	_rawextrachangelogrevision._rawextra   sP    mmJJs1vzCF3	q)v;!ayr    c                    U R                   n[        US   5      n [        US   5      nX#4$ ! [         a    Sn X#4$ f = frp   )rx   floatint
ValueError)rd   rawtimetimezones       r   rF   changelogrevision.date   sR    mmSV}	3q6{H ~  	H~	s   - >>c                B    U R                   nUc  [        $ [        U5      $ N)r~   r&   r-   )rd   r   s     r   r)   changelogrevision.extra   s!    nn;  3r    c                   U R                   b  U R                   $ U R                  (       a!  [        R                  " U R                  5      nOw[        R
                  " U R                  =(       d    SU R                  =(       d    SU R                  =(       d    SU R                  =(       d    0 U R                  =(       d    0 S9nXl         U$ )Nr>   )touchedaddedremoved	p1_copies	p2_copies)rX   rW   r   decode_files_sidedatarV   ChangingFilesrI   rJ   rK   rL   rM   )rd   changess     r   r   changelogrevision.changes   s    ==$== ::44T^^DG,,

(boo+))/R---2---2G  r    c                    U R                   (       a  [        U R                  R                  5      $ U R                  nUS   US   :X  a  / $ U R
                  US   S-   US    R                  S5      $ )NrZ   r{   r   r   )rW   r/   r   r   rT   rU   r(   rr   s     r   rI   changelogrevision.files   sd    ::$,,..//mmq6SVIzz#a&1*s1v.44U;;r    c                    U R                   (       a  U R                  R                  $ U R                  R	                  S5      nUc  g [
        R                  " U R                  U5      $ )Ns
   filesadded)rW   r   r   r)   getr   decodefileindicesrI   rd   
rawindicess     r   rJ   changelogrevision.filesadded   sK    ::<<%%%6J))$**jAAr    c                    U R                   (       a  U R                  R                  $ U R                  R	                  S5      nUc  g [
        R                  " U R                  U5      $ )Ns   filesremoved)rW   r   r   r)   r   r   r   rI   r   s     r   rK   changelogrevision.filesremoved   sK    ::<<'''8J))$**jAAr    c                    U R                   (       a  U R                  R                  $ U R                  R	                  S5      nUc  g [
        R                  " U R                  U5      $ )Ns   p1copies)rW   r   copied_from_p1r)   r   r   decodecopiesrI   rd   	rawcopiess     r   rL   changelogrevision.p1copies	  K    ::<<...

{3I$$TZZ;;r    c                    U R                   (       a  U R                  R                  $ U R                  R	                  S5      nUc  g [
        R                  " U R                  U5      $ )Ns   p2copies)rW   r   copied_from_p2r)   r   r   r   rI   r   s     r   rM   changelogrevision.p2copies  r   r    c                h    [         R                  " U R                  U R                  S   S-   S  5      $ )Nr{   rZ   )r	   rq   rU   rT   rm   s    r   rN   changelogrevision.description  s-    

4==+;a+?+A BCCr    c                n    U R                   n[        R                  " UR                  S5      5      SU;   4$ )Nr   s   close)r)   r	   rq   r   )rd   r)   s     r   rO   changelogrevision.branchinfo!  s/    

		) 45x57HHHr    )rX   rW   rT   rV   rU   )r?   r@   rA   rB   __doc__	__slots__r^   propertyrD   rE   rx   r~   rF   r)   r   rI   rJ   rK   rL   rM   rN   rO   rP   __classcell__ri   s   @r   rR   rR   w   s7   I$L 5 5 A A - -
   	 	        < < B B B B < < < < D D I Ir    rR   c                     ^  \ rS rSrSS jrS r\S 5       r\R                  S 5       rU 4S jr	S r
S rS	 rS
 rS rS rS r  SS jrS rS rSrU =r$ )	changelogi'  c                   [         R                   R                  U U[        R                  S4SSSUR                  R                  SS5      UUSS9
  U R                  (       ad  U R                  [         R                  :X  aF  U =R                  [         R                  ) -  sl	        SU R                  l        SU R                  l        SU l        SU l        [#        5       U l        0 U l        UR                  R                  S5      U l        g)a  Load a changelog revlog using an opener.

If ``trypending`` is true, we attempt to load the index from a
``00changelog.i.a`` file instead of the default ``00changelog.i``.
The ``00changelog.i.a`` file contains index (and possibly inline
revision) data for a transaction that hasn't been finalized yet.
It exists in a separate file to facilitate readers (such as
hooks processes) accessing data before a transaction is finalized.

``concurrencychecker`` will be passed to the revlog init function, see
the documentation there.
Ns   00changelogTs   persistent-nodemapF)targetradix
checkambigmmaplargeindexpersistentnodemapconcurrencychecker
trypending
may_inlines   copies-storage)r   __init__revlog_constantsKIND_CHANGELOGoptionsr   
_initempty_format_versionREVLOGV1_format_flagsFLAG_GENERALDELTAdelta_configgeneral_deltadata_configgeneraldelta_storedeltachains_v2_delayed	frozenset_filteredrevs_filteredrevs_hashcache_copiesstorage)rd   openerr   r   s       r   r   changelog.__init__(  s     	$33T: $nn001FN1! 	 	
 ?? 4 4 G 6#;#;";;.3D+,1D)
 "' &[')$$nn001BCr    c                h    SUs=:*  =(       a    [        U 5      :  Os  =(       a    XR                  ;  $ rl   )r|   r   rd   revs     r   __contains__changelog.__contains__S  s'    S$$3t9$G#5G5G*GGr    c                    U R                   $ r   )r   rm   s    r   filteredrevschangelog.filteredrevsV  s    !!!r    c                L    [        U[        5      (       d   eXl        0 U l        g r   )
isinstancer   r   r   )rd   vals     r   r   r   Z  s%     #y)))) ')$r    c                H   > U R                   (       d  [        TU ]	  U5        g g r   )r   r]   _write_docket)rd   trri   s     r   r   changelog._write_docketa  s    G!"%  r    c                   U R                   R                  (       a   eU R                  (       a   eU R                  (       a  U R	                  U5        U R
                  b  SU l        O4U R                   R                  5       nUb  X l        UR                  U5        UR                  S[        U 5      -  U R                  5        UR                  S[        U 5      -  U R                  5        g)z2delay visibility of index updates to other readersNTs	   000-cl-%i)_inneris_open_may_inline_inline_enforceinlinesize_docketr   delay
_indexfileregistertmp
addpendingid_writependingaddfinalize	_finalize)rd   r   	new_indexs      r   delayupdatechangelog.delayupdatee  s    ;;&&&&#### <<##B'<<##D))+I$"+y) 	lRX-t/A/AB
|bh.?r    c                0   U R                   R                  (       a   eU R                  b#  U R                  R                  U5        SU l        gU R                   R                  5       nX l        U R                  (       a  Sn[        R                  " U5      eg)zfinalize index updatesNFz,changelog should not be inline at that point)
r   r   r   writer   finalize_pendingr   r   r
   ProgrammingError)rd   r   new_index_filemsgs       r   r   changelog._finalizey  sr    ;;&&&&<<#LLr"$D![[99;N,O||D,,S11 r    c                   U R                   R                  (       a   eU R                  (       a#  U R                  R                  USS9nSU l        U$ U R                   R                  5       u  p2Ub  X0l        UR                  U5        U$ )zDcreate a file containing the unfinalized state for
pretxnchangegroupT)pendingF)r   r   r   r   r   write_pendingr   r   )rd   r   any_pendingr   s       r   r   changelog._writepending  s{     ;;&&&&<<,,,,R,>K$D 	 &*[[%>%>%@"I$"+y)r    c                f    U R                   (       d   [        R                  R                  X5        g g r   )is_delayingr   r   )rd   r   s     r   r   changelog._enforceinlinesize  s"    MM,,T6  r    c                   U R                  U5      nU R                  U5      nU R                  S:H  n[        XX45      nUR                  UR
                  UR                  UR                  UR                  UR                  4$ )a  Obtain data from a parsed changelog revision.

Returns a 6-tuple of:

   - manifest node in binary
   - author/user as a localstr
   - date as a 2-tuple of (time, timezone)
   - list of files
   - commit message as a localstr
   - dict of extra metadata

Unless you need to access all fields, consider calling
``changelogrevision`` instead, as it is faster for partial object
access.
   changeset-sidedata)
_revisiondatarb   r   rR   rD   rE   rF   rI   rN   r)   )rd   	nodeorrevr1   rb   copy_sdcs         r   readchangelog.read  sj      y)==+%%)>>dx9

AFFAFFAGGQ]]AGGLLr    c                x    U R                  U5      nU R                  U5      n[        XX0R                  S:H  5      $ )z6Obtain a ``changelogrevision`` for a node or revision.r  )r  rb   rR   r   )rd   r  r   rb   s       r   rR   changelog.changelogrevision  s>    !!),==+ "5"59N"N
 	
r    c                    U R                  U5      nU(       d  / $ UR                  S5      nUSU R                  S5      nUSS $ )zH
short version of read that only returns the files modified by the cset
r[   Nr   r{   )revisionr_   r(   )rd   r  r   lastr*   s        r   	readfileschangelog.readfiles  sI     }}Y'Izz'"$Ke$ur    c
           
        [         R                  " U5      [         R                  " U5      p7UR                  5       nU(       d  [        R                  " [        S5      5      eSU;   a6  [        R                  " [        S5      [        R                  " U5      -  5      e[        U5      nU(       a  S[        R                  " U5      -  n
OS[        R                  " 5       -  n
U	(       aC  U	R                  S5      nUS;   a  U	S	 O(US;   a"  [        R                  " [        S5      U-  5      e[        UR                  5      nS	nS nU R                  S
:X  a:  UR                   (       a  U["        R$                  -  n[&        R(                  " U5      nU	(       a  [+        U	5      n	SX4-  n
[-        U5      Xz/U-   SU/-   nSR/                  U5      nU R1                  UU[3        U 5      XVXS9nU R5                  U5      $ )Ns   empty usernamer   s   username %r contains a newlines   %d %dr   )r   r    )   .s   nulls   tips   the name '%s' is reservedr   r  s   %s %sr    )rb   flags)r	   	fromlocalr7   r
   StorageErrorr   r   bytestrr9   r   	parsedatemakedater   r/   r   r   has_copies_infor   REVIDX_HASCOPIESINFOr   encode_files_sidedatar3   r   r0   addrevisionr|   node)rd   rD   rI   r8   transactionp1p2rE   rF   r)   
parseddatebranchsortedfilesr  rb   r*   r   r   s                     r   addchangelog.add  s    ''-x/A/A$/Gdzz| $$Q'8%9::D=$$34x7G7G7MM  !H$6$6t$<<J!H$5$5$77JYYy)F**)$22((45>  U]]+"77$$66655e<H&E!Z$77J]D-;sDkIzz!}+s4y"8  
 yy~r    c                8    U R                  U5      R                  $ )zreturn the branch name and open/close state of a revision

This function exists because creating a changectx object
just to access this is costly.)rR   rO   r   s     r   rO   changelog.branchinfo  s    
 %%c*555r    c                ^    UR                   R                  S/ 5      nUR                  U5        g )Ns   revduplicates)r   
setdefaultappend)rd   r  r   
duplicatess       r   _nodeduplicatecallback changelog._nodeduplicatecallback  s+     !((334DbI
#r    )r   r   r   r   r   r   )FN)NN)r?   r@   rA   rB   r   r   r   r   setterr   r   r   r   r   r  rR   r  r$  rO   r,  rP   r   r   s   @r   r   r   '  s    )DVH " " * *&@(27M,
	( :x6 r    r   )"
__future__r   typingi18nr   r  r   r   
thirdpartyr   TYPE_CHECKING r	   r
   r   r   r   utilsr   r   revlogutilsr   r   r   r&   r   r#   r-   r3   r9   sr;   rR   r   r>   r    r   <module>r8     s    #    
 
 J''((&L
 D D D mI mI`b br    