
    g$                         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
 Z G d de      Zy	)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                     t        t        j                  j                  t        j                  j	                  |             d   dd        S )Nr      )r   ospathsplitextbasename)filenames    I/var/www/openai/venv/lib/python3.12/site-packages/gitdb/test/test_pack.pybin_sha_from_filenamer   $   s7    bgg&&rww'7'7'AB1EabI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y)TestPackz7packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.idx   C   z7packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.idx      z7packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.idx*   z8packs/pack-c0438c19fb16422b6bbcce24387b3264416d485b.packz8packs/pack-11fdfa9e156ab73caae3b6da867192221f2089c2.packz8packs/pack-a2bf8e71d8c18879e499335762dd95119d93d9f1.packc                 "   |j                         |j                         k7  sJ t        |j                               dk(  sJ t        |j                               dk(  sJ |j                         |k(  sJ |j	                         |k(  sJ t        |j                               |k(  sJ t        |j	                               D ]  }|j                  |      }||j                  |      k(  sJ |j                  |      }t        |      dk(  sJ |d   |j                  |      k(  sJ |d   |k(  sJ |d   |j                  |      k(  sJ dD ]  }|j                  |d | |dz        |k(  rJ   | j                  t        |j                  dd       y )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/   r1   ls           r   _assert_index_filezTestPack._assert_index_file3   s   &&(E,D,D,FFFF5**,-3335++-."444}}')))zz|t###5==?#t+++ %**,'D))D/C5--c2222KK%Eu:?"?8u||D11118s?"?8uyy... (11#bq'1q5ATIII ( (  	*e&@&@$Jr   c                 B   |j                         dk(  sJ |j                         |k(  sJ t        |j                               dk(  sJ d}|j	                         D ]*  }|dz  }|j                  |j                        }|j                  |j                        }|j                  |j                  k(  sJ |j                  |j                  k(  sJ t        |d      sJ |j                         |j                         k(  sJ |j                  |j                        }|sJ 	 t        j                  |      }	|	j                         }
t        |
      |	j                  k(  sJ |	j                  d       |	j                         |
k(  r+J  ||k(  sJ y # t        $ r Y Bw xY w)Nr   r!   r   r   read)r+   r,   r*   checksumstream_iterinfopack_offsetstreamtype_idhasattrr=   collect_streamsr   newr6   seek)r7   packr+   r,   num_objobjr@   rB   streamsdstreamdatas              r   _assert_pack_filezTestPack._assert_pack_fileN   s}   ||~"""yy{d"""4==?#r)))##%CqLG99S__-D[[1F##v'9'9999<<6>>11166*** 88:...**3??;GN7*..w7 <<>Dt9,,, LLO<<>T)))? &L $)   	s   !F	FFc                     | j                   | j                  fD ]$  \  }}}t        |      }| j                  |||       & y N)packindexfile_v1packindexfile_v2r   r;   )r7   	indexfiler+   r,   r8   s        r   test_pack_indexzTestPack.test_pack_index|   sA    )-)>)>@U@U(V$Iw!),E##E7D9 )Wr   c                     | j                   | j                  | j                  fD ]$  \  }}}t        |      }| j	                  |||       & y rP   )packfile_v2_3_asciipackfile_v2_1packfile_v2_2r	   rN   )r7   packfiler+   r,   rH   s        r   	test_packzTestPack.test_pack   sJ    (,(@(@$BTBTVZVhVh'i#HgtH%D""4$7 (jr   c                 
   t               | j                  | j                  f| j                  | j                  f| j
                  | j                  ffD ]  \  }}|\  }}}|\  }}}t        |      }|j                         j                         |k(  sJ |j                         j                         |k(  sJ j                  |j                                d}	t        |j                         |j                               D ]f  \  }
}|	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)                  |
j                              sJ |j+                  |
j                        }t-        |t.              sJ |j                  J |j1                  |
j                        }t-        |t2              sJ |j                  J 	 |j5                  |
j                  d      sJ 	 |j5                  |
j                  d      rgJ  |	|k(  rJ  t9        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kD  r |        |dz  }t=        |d      5 }t        j@                  |j>                  ||      \  }}d d d        tB        j                  jE                  |      dkD  sJ tG        |      }|j%                         t!              k(  sJ |jI                         tF        jJ                  k(  sJ |jM                         k(  sJ |jO                          |	jO                          tB        j                  jE                  |      dkD  sJ tQ        |      }|jI                         tP        jR                  k(  sJ |jU                         |k(  sJ |jW                         k(  sJ |j%                         t!              k(  sJ |jO                            |        t        jX                  |      }d}	|j                         D ]5  }
|	dz  }	t[        d      D ]   }|j5                  |
j                  |      r J  7 |	t!              k(  sJ |jO                          y # t6        $ r Y w xY w# 1 sw Y   xY w)Nr   r   r!   T)use_crcF pack1pack2r8   c                  J    D ]  } | j                   j                  d        y )Nr   )rB   rG   )rJ   	pack_objss    r   rewind_streamsz1TestPack.test_pack_entity.<locals>.rewind_streams   s     

" !r   wb)object_countd   r   ).listrW   rQ   rX   rR   rV   packindexfile_v2_3_asciir   rH   r   r8   extendr?   zip	info_iterbinshar*   rC   r,   r   rE   r@   
isinstancer
   rB   r   is_valid_streamr   tempfilemktempopenwrite
write_packr   getsizer	   r+   pack_version_defaultr>   closer   index_version_defaultr(   r)   creater.   )r7   rw_dirpackinfo	indexinforY   r+   r,   rS   entitycountr@   rB   oinfoostream
pack_path1
pack_path2
index_path	iterationrb   ppathipathrI   iwriteifilepfilepack_sha	index_shapfidxr\   ra   s                                 @r   test_pack_entityzTestPack.test_pack_entity   s   F	%)%7%79N9N$O%)%7%79N9N$O%)%=%=t?\?\$]$_Hi '/#Hgt'0$Iw)F;;=%%'8333<<>&&(I555V//12E #F$4$4$68J8J8L Mf
{{fmm3334;;'2---||v~~555yyFKK///  <<;666 611$++>???DKK0!%///||/// --4!'7333~~111!11$++t1LLL --dkk5-III3 !N6 D= =M$_X __R&9
__R&9
__R&9
		# &)*j)A*4d);*-i.$)?&A!E5' FUD) 1} NIeT"e&0&;&;Iu{{TZip&q#) #77??5)C/// %B779I...::<8#@#@@@@;;=H,,,HHJ  wwu-333#E*{{}(K(KKKK,,.(:::--/9<<<xxzS^333		G&AP 	""9f5$$&DQJE 8--dkk7CCC $ ' I&&&M , F #"s   (T*'T:*	T76T7:U	c                 .    t        j                  d       y )Nznot implemented)pytestskip)r7   s    r   test_pack_64zTestPack.test_pack_64   s     	%&r   N)__name__
__module____qualname__r   rQ   rR   rg   rW   rX   rV   r;   rN   rT   rZ   r   r   r    r   r   r   r   )   s    $%^_abdfg$%^_abdfg ,-f gijlno!"\]_`brstbuvM!"\]_`brstbuvMOPRSUmnoUprK6,\:8 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   r   r   rn   r   r   r   r   r   <module>r      sP   
 6  * 
 " * !  	 K
P'x P'r   