
    #Cc`$                         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mZ dd
lZdd
lZd Z G 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_shaSkipTestNc                     t          t          j                            t          j                            |                     d         dd                    S )Nr      )r   ospathsplitextbasename)filenames    4lib/python3.11/site-packages/gitdb/test/test_pack.pybin_sha_from_filenamer   $   s>    bg&&rw'7'7'A'ABB1EabbIJJJ    c                      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 Z
d Zd Zd Zed             Z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                    |                                 |                                k    sJ t          |                                           dk    sJ t          |                                          dk    sJ |                                |k    sJ |                                |k    sJ t          |                                          |k    sJ t          |                                          D ]}|                    |          }||                    |          k    sJ |	                    |          }t          |          dk    sJ |d         |
                    |          k    sJ |d         |k    sJ |d         |                    |          k    sJ dD ])}|                    |d |         |dz            |k    sJ *|                     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failUnlessRaises
ValueError)selfindexr-   r.   oidxr1   r3   ls           r   _assert_index_filezTestPack._assert_index_file3   s   &&((E,D,D,F,FFFFF5**,,--33335++--.."4444}}'))))zz||t####5==??##t++++ %**,,'' 	J 	JD))D//C5--c222222KK%%Eu::????8u||D1111118s????8uyy.... ( J J11#bqb'1q5AATIIIIIJ 	j%*DdANNNNNr   c                 z   |                                 dk    sJ |                                |k    sJ t          |                                          dk    sJ d}|                                D ]?}|dz  }|                    |j                  }|                    |j                  }|j        |j        k    sJ |j        |j        k    sJ t          |d          sJ |
                                |
                                k    sJ |                    |j                  }|sJ 	 t          j        |          }	n# t          $ r Y w xY w|	
                                }
t          |
          |	j        k    sJ |	                    d           |	
                                |
k    sJ A||k    sJ d S )Nr   r#   r   r   read)r-   r.   r,   checksumstream_iterinfopack_offsetstreamtype_idhasattrr?   collect_streamsr   newr8   seek)r9   packr-   r.   num_objobjrB   rD   streamsdstreamdatas              r   _assert_pack_filezTestPack._assert_pack_fileN   s   ||~~""""yy{{d""""4==??##r))))##%% 	* 	*CqLG99S_--D[[11F#v'99999<6>111166***** 88::....**3?;;GNNN*.w77    	 <<>>Dt99,,,, LLOOO<<>>T))))) $s   /E
EEc                 |    | j         | j        fD ],\  }}}t          |          }|                     |||           -d S N)packindexfile_v1packindexfile_v2r   r=   )r9   	indexfiler-   r.   r:   s        r   test_pack_indexzTestPack.test_pack_index|   sU    )-)>@U(V 	: 	:$Iw!),,E##E7D9999	: 	:r   c                     | j         | j        | j        fD ],\  }}}t          |          }|                     |||           -d S rR   )packfile_v2_3_asciipackfile_v2_1packfile_v2_2r	   rP   )r9   packfiler-   r.   rJ   s        r   	test_packzTestPack.test_pack   s[    (,(@$BTVZVh'i 	8 	8#HgtH%%D""4$7777	8 	8r   c                     t                      | j        | j        f| j        | j        f| j        | j        ffD ]6\  }}|\  }}}|\  }}}t          |          }|                                	                                |k    sJ |
                                	                                |k    sJ                     |                                           d}	t          |                                |                                          D ]V\  }
}|	dz  }	|
j        |j        k    sJ t!          |
j                  dk    sJ |
j        |j        k    sJ |
j        |j        k    sJ |
j        t&          vsJ t!          |                    |
j                            sJ |                    |
j                  }t-          |t.                    sJ |j        J |                    |
j                  }t-          |t2                    sJ |j        J 	 |                    |
j        d          sJ n# t6          $ r Y nw xY w|                    |
j        d          sJ X|	|k    sJ 8t9          j        dd|          }t9          j        dd	|          }t9          j        dd
|          }d}fd}t          ||f|d ft!                    d f          D ]	\  }}}d }|rt=          |d          }|j        }|dk    r
 |             |dz  }t=          |d          5 }t          j         |j        ||          \  }}d d d            n# 1 swxY w Y   tB          j	        "                    |          dk    sJ tG          |          }|                                t!                    k    sJ |$                                tF          j%        k    sJ |&                                |k    sJ |'                                 ||'                                 tB          j	        "                    |          dk    sJ tQ          |          }|$                                tP          j)        k    sJ |*                                |k    sJ |+                                |k    sJ |                                t!                    k    sJ |'                                  |             t          j,        |          }d}	|                                D ]6}
|	dz  }	t[          d          D ]}|                    |
j        |          sJ  7|	t!                    k    sJ |'                                 d S )Nr   r   r#   T)use_crcF pack1pack2r:   c                  F    D ]} | j                             d           d S )Nr   )rD   rI   )rL   	pack_objss    r   rewind_streamsz1TestPack.test_pack_entity.<locals>.rewind_streams   s3      # #
""""# #r   wb)object_countd   r   ).listrY   rS   rZ   rT   rX   packindexfile_v2_3_asciir   rJ   r   r:   extendrA   zip	info_iterbinshar,   rE   r.   r   rG   rB   
isinstancer
   rD   r   is_valid_streamr   tempfilemktempopenwrite
write_packr   getsizer	   r-   pack_version_defaultr@   closer   index_version_defaultr*   r+   creater0   )r9   rw_dirpackinfo	indexinfor[   r-   r.   rU   entitycountrB   rD   oinfoostream
pack_path1
pack_path2
index_path	iterationrd   ppathipathrK   iwriteifilepfilepack_sha	index_shapfidxr^   rc   s                                 @r   test_pack_entityzTestPack.test_pack_entity   s   FF	%)%79N$O%)%79N$O%)%=t?\$]$_ &	! &	!Hi '/#Hgt'0$Iw))F;;==%%''83333<<>>&&((I5555V//11222E #F$4$4$6$68J8J8L8L M M J Jf
{fm33334;''2----|v~5555yFK////  <;6666 611$+>>?????DK00!%/////|/// --44!'733333~111!11$+t1LLLLLL+   D --dk5-IIIIIID===== _R&99
_R&99
_R&99
		# 	# 	# 	# 	# &)*j)A*4d);*-i..$)?&A &A #	 #	!E5' F %UD)) 1}}   NIeT"" re&0&;Iu{TZip&q&q&q#)r r r r r r r r r r r r r r r7??5))C//// %B7799I....::<<8#@@@@@;;==H,,,,HHJJJ  wu--3333#E**{{}}(KKKKK,,..(::::--//9<<<<xxzzS^^3333		
 	"9f55$$&& 	D 	DDQJE 88 D D--dk7CCCCCCD I&&&&s$   H77
II%!MM	M	c                     t                      rR   r   )r9   s    r   test_pack_64zTestPack.test_pack_64   s     jjr   N)__name__
__module____qualname__r   rS   rT   ri   rY   rZ   rX   r=   rP   rV   r\   r   r   r    r   r   r   r   )   s2       $%^__abdfg$%^__abdfg ,-f g gijlno!\"\]]_`brstbuvM!\"\]]_`brstbuvMOPPRSUmnoUprO O O6, , ,\: : :8 8 8 i i iV    r   r   )__doc__gitdb.test.libr   r   r   gitdb.streamr   
gitdb.packr   r   r	   
gitdb.baser
   r   	gitdb.funr   	gitdb.excr   
gitdb.utilr   noser   r   rp   r   r   r   r   r   <module>r      sY  
 6 5          * ) ) ) ) )                
 " ! ! ! ! ! * * * * * * ! ! ! ! ! !       				 K K K
P P P P Px P P P P Pr   