
    q&f                         d dl Z d dlmZ d dlmZmZ d dlmZ  G d dej                        Z	 G d de
      Zej                  Zy)	    N)_)errorpycompat)
stringutilc                       e Zd Zy)InvalidPointerN)__name__
__module____qualname__     3/usr/lib/python3/dist-packages/hgext/lfs/pointer.pyr   r      s    r   r   c                   $    e Zd ZdZ fdZed        Zd Zd Zd Z	 e
j                  d      Z e
j                  d      Z e
j                  d	       e
j                  d
       e
j                  d ej                  e      z        dZd Z xZS )gitlfspointers"   https://git-lfs.github.com/spec/v1c                     | j                   | d<   t        t        |   |  | j	                  t        j                  |             y )N   version)VERSIONsuperr   __init__updater   byteskwargs)selfargskwargs	__class__s      r   r   zgitlfspointer.__init__   s7    <<ZmT+T2H((01r   c                     	  | d |j                         D              j                         S # t        $ r+ t        t	        d      t        j                  |      z        w xY w)Nc              3   @   K   | ]  }|j                  d d        yw)       Nsplit).0ls     r   	<genexpr>z,gitlfspointer.deserialize.<locals>.<genexpr>#   s     CAqwwtQ'Cs   s   cannot parse git-lfs text: %s)
splitlinesvalidate
ValueErrorr   r   r   pprint)clstexts     r   deserializezgitlfspointer.deserialize    s]    	C1BCCLLNN 	 23j6G6G6MM 	s	   *- 4A!c                     d }t        | j                         j                         |      }dj                  d |D              S )Nc                     | d   dk7  | fS )Nr   r   r   )xs    r   <lambda>z)gitlfspointer.serialize.<locals>.<lambda>*   s    1!3Q 7 r   )keyr   c              3   0   K   | ]  \  }}d ||fz    yw)s   %s %s
Nr   )r"   kvs      r   r$   z*gitlfspointer.serialize.<locals>.<genexpr>,   s     >1
aV+>s   )sortedr&   itemsjoin)r   sortkeyfuncr5   s      r   	serializezgitlfspointer.serialize)   s7    7t}},,.K@xx>>>>r   c                 0    | d   j                  d      d   S )N   oid   :r    r   s    r   oidzgitlfspointer.oid.   s    F|!!$'++r   c                     t        | d         S )N   size)intr=   s    r   sizezgitlfspointer.size1   s    4=!!r   s   \A[a-z0-9.-]+\Zs
   \A[^\n]*\Zs
   \A[0-9]+\Zs   \Asha256:[0-9a-f]{64}\Zs   \A%s\Z)r@   r:   r   c                    d}| j                         D ]  \  }}|| j                  v rP| j                  |   j                  |      s,t        t	        d      |t        j                  |      fz        |dz  }n2| j                  j                  |      st        t	        d      |z        | j                  j                  |      rt        t	        d      |t        j                  |      fz         t        | j                        |k7  rot        t        | j                  j                               j                  | j                                     }t        t	        d      dj                  |      z        | S )z?raise InvalidPointer on error. return self if there is no errorr   s#   unexpected lfs pointer value: %s=%sr   s   unexpected lfs pointer key: %ss   missing lfs pointer keys: %ss   , )r5   _requiredrematchr   r   r   r(   _keyre_valuerelenr4   setkeys
differencer6   )r   requiredcountr2   r3   misss        r   r&   zgitlfspointer.validate>   sX   JJL 	DAqD$$$''*003(@Aj//234  "[[&&q)$Q'H%IA%MNN==&&q)$<=*++A./0 	 t M1#d..3356AA$))+NOD 12UZZ5EE  r   )r	   r
   r   r   r   classmethodr+   r8   r>   rB   recompilerF   rG   r   reescaperD   r&   __classcell__)r   s   @r   r   r      s    3G2
  ?
,"
 RZZ+,Frzz.)HN+

67BJJz,?J,?,?,HHIKr   r   )rO   mercurial.i18nr   	mercurialr   r   mercurial.utilsr   StorageErrorr   dictr   r+   r   r   r   <module>rX      sC    
  '	U'' 	=D =@ ''r   