a
    d$                     @   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   ]/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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sLJ | |ks\J t| |kspJ t| D ]}||}|||ksJ |	|}t|dksJ |d |
|ksJ |d |ksJ |d ||ksJ dD ]$}||d | |d |ksJ qq|| t|jdd d S )N      r   r   r   )            r    )packfile_checksumindexfile_checksumlenversionsizeoffsetsrangeshaZsha_to_indexentryoffsetcrcZpartial_sha_to_indexassertRaises
ValueError)selfindexr'   r(   Z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s4J d}| D ]}|d7 }||j}||j}|j|jkstJ |j|jksJ t	|dsJ |
 |
 ksJ ||j}|sJ zt|}	W n ty   Y q@Y n0 |	
 }
t|
|	jksJ |	d |	
 |
ks@J q@||ks$J d S )Nr   r   r   r   read)r'   r(   r&   checksumstream_iterinfoZpack_offsetstreamtype_idhasattrr5   collect_streamsr   newr0   seek)r1   packr'   r(   num_objobjr8   r9   ZstreamsZdstreamdatar   r   r   _assert_pack_fileN   s.    

zTestPack._assert_pack_filec                 C   s2   | j | jfD ] \}}}t|}| ||| qd S N)packindexfile_v1packindexfile_v2r   r4   )r1   	indexfiler'   r(   r2   r   r   r   test_pack_index|   s    zTestPack.test_pack_indexc                 C   s6   | j | j| jfD ] \}}}t|}| ||| qd S rD   )packfile_v2_3_asciipackfile_v2_1packfile_v2_2r   rC   )r1   packfiler'   r(   r?   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sbJ |
 	 |ksvJ  |  d}	t| | D ]\}
}|	d7 }	|
j|jksJ t|
jdksJ |
j|jksJ |
j|jksJ |
jtvsJ t||
jsJ ||
j}t|ts.J |jd us>J ||
j}t|tsZJ |jd usjJ z|j|
jddsJ W n ty   Y n0 |j|
jddsJ q|	|ks(J q(tdd|}tdd	|}tdd
|}d} fdd}t||f|d ft d fD ]j\}}}d }|r:t|d}|j}|dkrJ|  |d7 }t|d(}tj  |j||d\}}W d    n1 s0    Y  t!j	"|dksJ t#|}| t ksJ |$ t#j%ksJ |& |ksJ |'  |d ur|'  t!j	"|dks J t(|}|$ t(j)ks<J |* |ksNJ |+ |ks`J | t ksvJ |'  q|  t, |}d}	| D ]2}
|	d7 }	t-dD ]}||
j|sJ qq|	t ksJ |'  d S )Nr   r   r   T)use_crcF Zpack1Zpack2r2   c                     s    D ]} | j d qd S )Nr   )r9   r>   )rA   Z	pack_objsr   r   rewind_streams   s    z1TestPack.test_pack_entity.<locals>.rewind_streamswb)Zobject_countd   r   ).listrJ   rE   rK   rF   rI   packindexfile_v2_3_asciir   r?   r   r2   extendr7   zipZ	info_iterZbinshar&   r:   r(   r   r<   r8   
isinstancer	   r9   r
   Zis_valid_streamr   tempfilemktempopenwriteZ
write_packr   getsizer   r'   Zpack_version_defaultr6   closer   Zindex_version_defaultr$   r%   creater*   )r1   Zrw_dirZpackinfoZ	indexinforL   r'   r(   rG   entitycountr8   r9   ZoinfoZostreamZ
pack_path1Z
pack_path2Z
index_path	iterationrQ   ZppathZipathr@   ZiwriteZifileZpfileZpack_shaZ	index_shapfidxrN   r   rP   r   test_pack_entity   s    







8
zTestPack.test_pack_entityc                 C   s   t d d S )Nznot implemented)pytestskip)r1   r   r   r   test_pack_64   s    zTestPack.test_pack_64N)__name__
__module____qualname__r   rE   rF   rU   rJ   rK   rI   r4   rC   rH   rM   r   re   rh   r   r   r   r   r   )   s   .
kr   )__doc__Zgitdb.test.libr   r   r   Zgitdb.streamr   Z
gitdb.packr   r   r   Z
gitdb.baser	   r
   Z	gitdb.funr   Z	gitdb.excr   Z
gitdb.utilr   rf   r   rY   r   r   r   r   r   r   <module>   s   