ó
žçƒQc           @   sÉ   d  d l  m Z m Z m Z d  d l m Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 i d d 6Z
 d „  Z d „  Z d „  Z d	 „  Z d
 e f d „  ƒ  YZ d „  Z d e j f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   bint   hext   nullid(   t   _Nt   defaultt   branchc         C   s:   |  j  d d ƒ j  d d ƒ j  d d ƒ }  |  j  d d ƒ S(	   s  
    >>> d = {'nl': chr(10), 'bs': chr(92), 'cr': chr(13), 'nul': chr(0)}
    >>> s = "ab%(nl)scd%(bs)s%(bs)sn%(nul)sab%(cr)scd%(bs)s%(nl)s" % d
    >>> s
    'ab\ncd\\\\n\x00ab\rcd\\\n'
    >>> res = _string_escape(s)
    >>> s == res.decode('string_escape')
    True
    s   \s   \\s   
s   \ns   s   \rt    s   \0(   t   replace(   t   text(    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   _string_escape   s    *c         C   s£   t  j ƒ  } x |  j d ƒ D] } | r d | k rm | j d d ƒ } | j d d ƒ } | j d d ƒ } n  | j d ƒ j d d	 ƒ \ } } | | | <q q W| S(
   s¡  
    >>> sorted(decodeextra(encodeextra({'foo': 'bar', 'baz': chr(0) + '2'})
    ...                    ).iteritems())
    [('baz', '\x002'), ('branch', 'default'), ('foo', 'bar')]
    >>> sorted(decodeextra(encodeextra({'foo': 'bar',
    ...                                 'baz': chr(92) + chr(0) + '2'})
    ...                    ).iteritems())
    [('baz', '\\\x002'), ('branch', 'default'), ('foo', 'bar')]
    R   s   \0s   \\s   \\
s   
t    t   string_escapet   :i   (   t   _defaultextrat   copyt   splitR   t   decode(   R   t   extrat   lt   kt   v(    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   decodeextra   s    
!c         C   s@   g  t  |  ƒ D]  } t d | |  | f ƒ ^ q } d j | ƒ S(   Ns   %s:%sR   (   t   sortedR	   t   join(   t   dR   t   items(    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   encodeextra2   s    3c         C   s5   d j  g  |  j ƒ  D] } | j ƒ  ^ q ƒ j d ƒ S(   s>   strip trailing whitespace and leading and trailing empty liness   
(   R   t
   splitlinest   rstript   strip(   t   descR   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt	   stripdesc7   s    t   appenderc           B   s\   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d d	 „ Z	 d
 „  Z
 RS(   s`   the changelog index must be updated last on disk, so we use this class
    to delay writes to itc         C   s:   | |  _  | |  _ | j ƒ  |  _ t j | ƒ j |  _ d  S(   N(   t   datat   fpt   tellt   offsett   utilt   fstatt   st_sizet   size(   t   selfR"   t   buf(    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   __init__>   s    		c         C   s   |  j  t d j |  j ƒ ƒ S(   NR
   (   R(   t   lenR   R!   (   R)   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   endD   s    c         C   s   |  j  S(   N(   R$   (   R)   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyR#   F   s    c         C   s   d  S(   N(    (   R)   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   flushH   s    c         C   s   |  j  j ƒ  d  S(   N(   R"   t   close(   R)   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyR/   J   s    i    c         C   s„   | d k r | |  _  n@ | d k r6 |  j  | 7_  n" | d k rX |  j ƒ  | |  _  n  |  j  |  j k  r€ |  j j |  j  ƒ n  d S(   s,   virtual file offset spans real file and datai    i   i   N(   R$   R-   R(   R"   t   seek(   R)   R$   t   whence(    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyR0   M   s    iÿÿÿÿc         C   sê   d } |  j  |  j k  rg |  j j | ƒ } | } |  j  t | ƒ 7_  | d k rg | t | ƒ 8} qg n  | d k ræ |  j  |  j } |  j j d d j |  j ƒ ƒ |  j d 3|  j d | | | !} |  j  t | ƒ 7_  | | 7} n  | S(   s5   only trick here is reads that span real file and dataR
   i    i   (   R$   R(   R"   t   readR,   R!   t   insertR   (   R)   t   countt   rett   st   doff(    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyR2   X   s    
c         C   s/   |  j  j t | ƒ ƒ |  j t | ƒ 7_ d  S(   N(   R!   t   appendt   strR$   R,   (   R)   R6   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   writej   s    (   t   __name__t
   __module__t   __doc__R+   R-   R#   R.   R/   R0   R2   R:   (    (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyR    ;   s   					c            s   d ‡  ‡ ‡ ‡ f d † } | S(   Nt   rc            sR   |  ˆ k r ˆ |  | ƒ Sˆ r< ˆ |  d | j  d d ƒ ƒ St ˆ |  | ƒ ˆ  ƒ S(   Ns   .at   at   w(   R   R    (   t   namet   mode(   R*   t   divertt   openert   target(    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   oo   s
    (    (   RD   RE   RC   R*   RF   (    (   R*   RC   RD   RE   s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   delayopenern   s    t	   changelogc           B   sÝ   e  Z d  „  Z d „  Z d „  Z d d d „ Z e j 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 d „ Z d „  Z d d d „ Z d „  Z RS(   c         C   si   t  j  j |  | d ƒ |  j r> |  j t  j M_ t |  _ n  | |  _ t |  _ t |  _	 t
 ƒ  |  _ d  S(   Ns   00changelog.i(   t   revlogR+   t
   _initemptyt   versiont   REVLOGGENERALDELTAt   Falset   _generaldeltat   _realopenert   _delayedt   _divertt	   frozensett   filteredrevs(   R)   RD   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyR+   y   s    				c         C   sG   x@ t  t |  ƒ d d d ƒ D]" } | |  j k r |  j | ƒ Sq Wd S(   s   filtered version of revlog.tipi   iþÿÿÿiÿÿÿÿN(   t   xrangeR,   RS   t   node(   R)   t   i(    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   tip„   s    #c            s;   t  ˆ  j ƒ d k r% t j j ˆ  ƒ S‡  f d †  } | ƒ  S(   s#   filtered version of revlog.__iter__i    c          3   s8   x1 t  t ˆ  ƒ ƒ D] }  |  ˆ  j k r |  Vq q Wd  S(   N(   RT   R,   RS   (   RV   (   R)   (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   filterediter   s    (   R,   RS   RI   t   __iter__(   R)   RX   (    (   R)   s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyRY   Š   s    i    c         c   sA   x: t  t |  ƒ j | | ƒ D] } | |  j k r | Vq q Wd S(   s   filtered version of revlog.revsN(   t   superRH   t   revsRS   (   R)   t   startt   stopRV   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyR[   –   s    "c         C   s   |  j  |  j d ƒ ƒ |  j S(   Ni    (   t   revRU   t
   _nodecache(   R)   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   nodemapœ   s    c         C   s9   y  |  j  | ƒ } | |  j k SWn t k
 r4 t SXd S(   s"   filtered version of revlog.hasnodeN(   R^   RS   t   KeyErrorRM   (   R)   RU   RV   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   hasnode¢   s
    c         C   s&   |  j  r |  j ƒ  St t |  ƒ j ƒ  S(   N(   RS   t	   _headrevsRZ   RH   t   headrevs(   R)   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyRd   ª   s    	
c         O   s-   |  j  s t ‚ t t |  ƒ j | | Ž  d  S(   N(   RS   t   AssertionErrorRZ   RH   R   (   R)   t   argst   kwargs(    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyR   °   s    c         C   sR   t  t |  ƒ j | ƒ } | |  j k rN t j t | ƒ |  j t d ƒ ƒ ‚ n  | S(   s   filtered version of revlog.revs   no node(	   RZ   RH   R^   RS   t   errort   LookupErrorR   t	   indexfileR   (   R)   RU   R>   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyR^   ¶   s    'c         C   s4   | |  j  k r t | ƒ ‚ n  t t |  ƒ j | ƒ S(   s   filtered version of revlog.node(   RS   t
   IndexErrorRZ   RH   RU   (   R)   R^   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyRU   ½   s    c         C   s4   | |  j  k r t | ƒ ‚ n  t t |  ƒ j | ƒ S(   s"   filtered version of revlog.linkrev(   RS   Rk   RZ   RH   t   linkrev(   R)   R^   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyRl   Ã   s    c         C   s4   | |  j  k r t | ƒ ‚ n  t t |  ƒ j | ƒ S(   s%   filtered version of revlog.parentrevs(   RS   Rk   RZ   RH   t
   parentrevs(   R)   R^   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyRm   É   s    c         C   s4   | |  j  k r t | ƒ ‚ n  t t |  ƒ j | ƒ S(   s    filtered version of revlog.flags(   RS   Rk   RZ   RH   t   flags(   R)   R^   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyRn   Ï   s    c         C   sO   t  |  _ t |  ƒ d k |  _ g  |  _ t |  j |  j |  j |  j ƒ |  _ d S(   s2   delay visibility of index updates to other readersi    N(	   t   TrueRP   R,   RQ   t	   _delaybufRG   RO   Rj   RD   (   R)   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   delayupdateÕ   s
    		c         C   s¼   t  |  _ |  j |  _ |  j r^ |  j |  j d ƒ } | j } | j ƒ  t j	 | | d  ƒ nM |  j
 r« |  j |  j d ƒ } | j d j |  j
 ƒ ƒ | j ƒ  g  |  _
 n  |  j | ƒ d S(   s   finalize index updatess   .aiþÿÿÿR?   R
   N(   RM   RP   RO   RD   RQ   Rj   RA   R/   R%   t   renameRp   R:   R   t   checkinlinesize(   R)   t   trt   nfilet   nR"   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   finalizeÝ   s    			
	
c         C   sI   t  j  |  j | ƒ } | j |  _ | j |  _ | j |  _ | j |  _ d  S(   N(   RI   RD   t   indexR`   R_   t   _chunkcache(   R)   t   fileR>   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   readpendingï   s
    c         C   s   |  j  r |  j |  j ƒ } |  j |  j d d ƒ } | j | j ƒ  ƒ | j d j |  j  ƒ ƒ | j ƒ  g  |  _  t |  _ n  |  j rŒ t St	 S(   sD   create a file containing the unfinalized state for pretxnchangegroups   .aR@   R
   (
   Rp   RO   Rj   R:   R2   R   R/   Ro   RQ   RM   (   R)   t   fp1t   fp2(    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   writependingö   s    	
		c         C   s&   |  j  s" t j j |  | | ƒ n  d  S(   N(   RP   RI   Rs   (   R)   Rt   R"   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyRs   	  s    	c         C   sM  |  j  | ƒ } | s+ t d d	 g  d t f S| j d ƒ } t j | | d ƒ } | |  j d ƒ } t | d ƒ } t j | d ƒ } | d j d d ƒ } t | ƒ d k rö t	 | d ƒ }	 y t
 | d ƒ }
 Wn t k
 rì d }
 n Xt } n1 t	 | d ƒ t
 | d ƒ }	 }
 t | d ƒ } | d } | | |	 |
 f | | | f S(
   sí  
        format used:
        nodeid
        : manifest node in ascii
        user
          : user, no 
 or  allowed
        time tz extra
 : date (time is int or float, timezone is int)
                        : extra is metadata, encoded and separated by ' '
                        : older versions ignore it
        files

       : files modified by the cset, no 
 or  allowed
        (.*)            : comment (free text, ideally utf-8)

        changelog v0 doesn't use extra
        R
   i    s   

i   s   
i   t    i   (   i    i    (   t   revisionR   R   Rx   t   encodingt   tolocalR   R    R,   t   floatt   intt
   ValueErrorR   (   R)   RU   R   t   lastR   R   t   manifestt   usert   tdatat   timet   timezoneR   t   files(    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyR2     s(    
	!
c
         C   s  t  j | ƒ t  j | ƒ } } | j ƒ  } | sI t j t d ƒ ƒ ‚ n  d | k rw t j t d ƒ t | ƒ ƒ ‚ n  t | ƒ } | rŸ d t j	 | ƒ }
 n d t j
 ƒ  }
 |	 r|	 j d ƒ } | d k rÚ |	 d =q| d k rt j t d ƒ | ƒ ‚ qn  |	 r*t |	 ƒ }	 d |
 |	 f }
 n  t | ƒ | |
 g t | ƒ d | g } d j | ƒ } |  j | | t |  ƒ | | ƒ S(   Ns   empty usernames   
s   username %s contains a newlines   %d %dR   R   R
   t   .t   nullRW   s   the name '%s' is reserveds   %s %s(   s   defaultR
   (   R   RŽ   s   tip(   R   t	   fromlocalR   Rh   t   RevlogErrorR   t   reprR   R%   t	   parsedatet   makedatet   getR   R   R   R   t   addrevisionR,   (   R)   R‡   RŒ   R   t   transactiont   p1t   p2Rˆ   t   dateR   t
   parseddateR   R   R   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   add3  s0    
)c         C   s#   t  j |  j | ƒ d j d ƒ ƒ S(   sˆ   return the branch of a revision

        This function exists because creating a changectx object
        just to access this is costly.i   R   (   R   R‚   R2   R”   (   R)   R^   (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyR   X  s    N(   R;   R<   R+   RW   RY   t   NoneR[   R%   t   propertycacheR`   Rb   Rd   R   R^   RU   Rl   Rm   Rn   Rq   Rw   R{   R~   Rs   R2   R›   R   (    (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyRH   x   s*   																'$(   RU   R    R   R   t   i18nR   R%   Rh   RI   R   R   R	   R   R   R   t   objectR    RG   RH   (    (    (    s7   /sys/lib/python2.7/site-packages/mercurial/changelog.pyt   <module>   s   0				3	
