
    q&f:                     t    d dl mZ ddlmZ d dlmZ d dlmZm Z mZm	Z	 ddlm
Z d Zd Z G d	 d
e      Zd Zy)   )sha1nodeconstants   )INDEX_ENTRY_V0)_)errornoderevlogutilsutil)nodemapc                     t        | dz	        S )N   intqs    @/usr/lib/python3/dist-packages/mercurial/revlogutils/revlogv0.py	getoffsetr      s    qBw<    c                     t        | dz        S )Ni  r   r   s    r   gettyper      s    q6z?r   c            	       (    e Zd ZdZej
                  Z ej                  dde	j                  e	j                  e	j                  e	j                  ej                        Zej                  d        Zd Zd Zd Z fdZ fdZd	 Zd
 Zd Zd Z xZS )revlogoldindex    data_offsetdata_compressed_lengthdata_delta_baselink_revparent_rev_1parent_rev_2node_idc                     t        j                  t        j                  t        j
                  i      }t        dt        |             D ]  }| |   d   }|||<    |S )Nr      )nodemaputilNodeMapr   nullidr   nullrevrangelen)selfr   rns       r   _nodemapzrevlogoldindex._nodemap0   sY    %%'8'?'?&NOq#d)$ 	AQ
AGAJ	 r   c                     || j                   v S )z*return True if the node exist in the indexr-   r*   r   s     r   has_nodezrevlogoldindex.has_node8   s    t}}$$r   c                      | j                   |   S )zQreturn a revision for a node

        If the node is unknown, raise a RevlogErrorr/   r0   s     r   revzrevlogoldindex.rev<   s     }}T""r   c                 8    | j                   j                  |      S )zIreturn a revision for a node

        If the node is unknown, return None)r-   getr0   s     r   get_revzrevlogoldindex.get_revB   s     }}  &&r   c                 b    t        |       | j                  |d   <   t        t        |   |       y )Nr#   )r)   r-   superr   append)r*   tup	__class__s     r   r9   zrevlogoldindex.appendH   s(     #D	c!fnd*3/r   c                    t        |t              r|j                  dk(  r|j                  t	        d      t        |j                  t        |             D ]  }| j                  | |   d   =  t        t        | /  |       y )Ns.   deleting slices only supports a:-1 with step 1r#   )
isinstanceslicestopstep
ValueErrorr(   startr)   r-   r8   r   __delitem__)r*   ir+   r;   s      r   rD   zrevlogoldindex.__delitem__L   sm    !U#166R<166;MNOOqwwD	* 	*Ad1gaj)	*nd/2r   c                 <    | j                   j                  dd        y )Nr-   )__dict__pop)r*   s    r   clearcacheszrevlogoldindex.clearcachesS   s    *d+r   c                 P    |dk(  r| j                   S t        j                  | |      S )Nr=   )	null_itemlist__getitem__)r*   rE   s     r   rM   zrevlogoldindex.__getitem__V   s&    7>>!a((r   c                      y)z!pack header information in binaryr    )r*   headers     r   pack_headerzrevlogoldindex.pack_header[   s    r   c                     | |   }t        |d         rt        j                  t        d            t	        |d         |d   |d   |d   | |d      d   | |d      d   |d   f}t        j                  | S )	z4return the raw binary string representing a revisionr   s'   index entry flags need revlog version 1r            r#      )r   r   RevlogErrorr   r   r   pack)r*   r3   entrye2s       r   entry_binaryzrevlogoldindex.entry_binary_   s    S	58##<=  eAh!H!H!HqN1qN1!H
 ""B''r   )__name__
__module____qualname__rust_ext_compatr   size
entry_sizer	   rY   r   r'   r   r&   rK   r
   propertycacher-   r1   r3   r6   r9   rD   rI   rM   rQ   r[   __classcell__)r;   s   @r   r   r   #   s    O$$J!!! \\\\!((I 
 %#'03,)
(r   r   c                 D   t         j                  }g }t        j                  t        j
                  t        j                  i      }dx}}t        |       }||z   |k  r| |||z    }||z  }t        j                  |      }	t        j                  |	d   |	d   |	d   |	d   |j                  |	d   t        j                        |j                  |	d   t        j                        |	d         }
|j                  |
       |||	d   <   |dz  }||z   |k  rt        |      }|d fS )	Nr   r   r   rS   rT   rU   rV   r   )r   r`   r$   r%   r   r&   r'   r)   unpackr	   rY   r5   r9   r   )datainlinesindexr   r,   offlcurerZ   s              r   parse_index_v0rn   r   s   AE!!4;;"=>GKAD	A
'Q,3q!q!!#&!#$Q4aDqT QqT4<<8 QqT4<<8aD
 	R!	Q! 'Q,$ 5!E$;r   N)r   r   	constantsr   i18nr    r   r	   r
   r   r$   r   r   rL   r   rn   rO   r   r   <module>rr      sA    %  
L(T L(^r   