o
    h$                     @   s   d Z ddlmZmZmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lZdd	lZdd	lZd
d ZG dd deZd	S )z/Test everything about packs reading and writing    )TestBasewith_rw_directoryfixture_path)DeltaApplyReader)
PackEntityPackIndexFilePackFile)OInfoOStream)delta_types)UnsupportedOperation)
to_bin_shaNc                 C   s$   t tjtj| d dd  S )Nr      )r   ospathsplitextbasename)filename r   H/var/www/vscode/kcb/lib/python3.10/site-packages/gitdb/test/test_pack.pybin_sha_from_filename$   s   $r   c                   @   s   e Zd ZedddfZedddfZedddfZed	ded fZed
ded fZedded fZ	dd Z
dd Zdd Zdd Zedd Zdd ZdS )TestPackz7packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx   C   z7packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx      z7packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.idx*   z8packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.packz8packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.packz8packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.packc                 C   s4  |  | ks
J t|  dksJ t| dksJ | |ks&J | |ks.J t| |ks8J t| D ]P}||}|||ksNJ |	|}t|dks[J |d |
|ksfJ |d |ksnJ |d ||ksyJ dD ]}||d | |d |ksJ q{q>| t|jdd d S )N      r   r   r   )            r    )packfile_checksumindexfile_checksumlenversionsizeoffsetsrangeshasha_to_indexentryoffsetcrcpartial_sha_to_indexassertRaises
ValueError)selfindexr'   r(   oidxr+   r-   lr   r   r   _assert_index_file3   s$   

"zTestPack._assert_index_filec              	   C   s"  |  dksJ | |ksJ t| dksJ d}| D ]h}|d7 }||j}||j}|j|jks:J |j|jksBJ t	|dsIJ |
 |
 ksSJ ||j}|s]J zt|}	W n	 tym   Y q w |	
 }
t|
|	jks{J |	d |	
 |
ksJ q ||ksJ d S )Nr   r   r   r   read)r'   r(   r&   checksumstream_iterinfopack_offsetstreamtype_idhasattrr8   collect_streamsr   newr2   seek)r3   packr'   r(   num_objobjr;   r=   streamsdstreamdatar   r   r   _assert_pack_fileN   s0   
zTestPack._assert_pack_filec                 C   s2   | j | jfD ]\}}}t|}| ||| qd S N)packindexfile_v1packindexfile_v2r   r7   )r3   	indexfiler'   r(   r4   r   r   r   test_pack_index|   s   zTestPack.test_pack_indexc                 C   s6   | j | j| jfD ]\}}}t|}| ||| qd S rJ   )packfile_v2_3_asciipackfile_v2_1packfile_v2_2r   rI   )r3   packfiler'   r(   rC   r   r   r   	test_pack   s   zTestPack.test_packc              
      s  t   | j| jf| j| jf| j| jffD ]\}}|\}}}|\}}}t|}| 	 |ks0J |
 	 |ks:J  |  d}	t| | D ]\}
}|	d7 }	|
j|jks\J t|
jdkseJ |
j|jksmJ |
j|jksuJ |
jtvs|J t||
jsJ ||
j}t|tsJ |jd usJ ||
j}t|tsJ |jd usJ z|j|
jddsJ W n	 ty   Y nw |j|
jddsJ qL|	|ksJ qtdd|}tdd	|}tdd
|}d} fdd}t||f|d ft d fD ]\}}}d }|rt|d}|j}|dkr|  |d7 }t|d}tj  |j||d\}}W d    n	1 s<w   Y  t!j	"|dksLJ t#|}| t ks[J |$ t#j%kseJ |& |ksnJ |'  |d ur|'  t!j	"|dksJ t(|}|$ t(j)ksJ |* |ksJ |+ |ksJ | t ksJ |'  q|  t, |}d}	| D ]}
|	d7 }	t-dD ]}||
j|sJ qАq|	t ksJ |'  d S )Nr   r   r   T)use_crcF pack1pack2r4   c                     s    D ]} | j d qd S )Nr   )r=   rB   )rE   	pack_objsr   r   rewind_streams   s   z1TestPack.test_pack_entity.<locals>.rewind_streamswb)object_countd   r   ).listrP   rK   rQ   rL   rO   packindexfile_v2_3_asciir   rC   r   r4   extendr:   zip	info_iterbinshar&   r>   r(   r   r@   r;   
isinstancer	   r=   r
   is_valid_streamr   tempfilemktempopenwrite
write_packr   getsizer   r'   pack_version_defaultr9   closer   index_version_defaultr$   r%   creater*   )r3   rw_dirpackinfo	indexinforR   r'   r(   rM   entitycountr;   r=   oinfoostream
pack_path1
pack_path2
index_path	iterationrZ   ppathipathrD   iwriteifilepfilepack_sha	index_shapfidxrT   r   rX   r   test_pack_entity   s   








zTestPack.test_pack_entityc                 C   s   t d d S )Nznot implemented)pytestskip)r3   r   r   r   test_pack_64   s   zTestPack.test_pack_64N)__name__
__module____qualname__r   rK   rL   r_   rP   rQ   rO   r7   rI   rN   rS   r   r   r   r   r   r   r   r   )   s    .
kr   )__doc__gitdb.test.libr   r   r   gitdb.streamr   
gitdb.packr   r   r   
gitdb.baser	   r
   	gitdb.funr   	gitdb.excr   
gitdb.utilr   r   r   rf   r   r   r   r   r   r   <module>   s   