
    d                     f   d Z ddlZddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZmZ ddlmZ dd	lmZ dd
lmZmZmZmZmZ ddlmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2 dZ3dZ4dZ5dZ6ej7        dk    rdndZ8 G d de          Z9 G d de9          Z: G d de          Z; G d de9          Z< G d de9          Z= G d d e9          Z> G d! d"e          Z? ed#          Z@ G d$ d%          ZA G d& d'eA          ZB G d( d)eeA          ZC G d* d+eeB          ZD G d, d-eeB          ZE G d. d/e          ZF G d0 d1e          ZG G d2 d3e          ZH G d4 d5e          ZI G d6 d7e          ZJ G d8 d9e          ZK G d: d;e          ZLdS )<zTests for Dulwich packs.    N)sha1)BytesIO)TestCase   )ApplyDeltaErrorChecksumMismatch)GitFile)MemoryObjectStore)BlobCommitTree
hex_to_sha
sha_to_hex)	OFS_DELTA	REF_DELTADeltaChainIteratorMemoryPackIndexPackPackDataPackStreamReaderUnpackedObject_delta_encode_size_encode_copy_operationapply_deltacompute_file_shacreate_deltadeltify_pack_objectsload_pack_indexread_zlib_chunksunpack_object
write_packwrite_pack_headerwrite_pack_index_v1write_pack_index_v2write_pack_object   )
build_packmake_objects(   bc63ddad95e7321ee734ea11a7a62d314e0d7481(   6f670c0fb53f9463760b7295fbb814e965fb20c8(   b2a2766a2879c209ab1176e7e778b81ae422eeaa(   f18faa16531ac570a3fdc8c7ca16682548dafd12win320o1006440o100666c                        e Zd ZdZ fdZej                            ej                            ej        	                    e
          d                    Zd Zd Zd Zd Z xZS )	PackTestszBase class for testing packsc                     t                                                       t          j                    | _        |                     t          j        | j                   d S N)supersetUptempfilemkdtemptempdir
addCleanupshutilrmtreeself	__class__s    [/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/dulwich/tests/test_pack.pyr4   zPackTests.setUp;   sB    '))t|44444    z../../testdata/packsc           	          t          t          j                            | j        d|                    d          z                      S )z7Returns a PackIndex from the datadir with the given shazpack-%s.idxascii)r   ospathjoindatadirdecoder<   shas     r>   get_pack_indexzPackTests.get_pack_indexB   s:    GLL}szz'7J7J'JKK
 
 	
r?   c           	          t          t          j                            | j        d|                    d          z                      S )z=Returns a PackData object from the datadir with the given shapack-%s.packrA   )r   rB   rC   rD   rE   rF   rG   s     r>   get_pack_datazPackTests.get_pack_dataH   s:    GLL~

78K8K'KLL
 
 	
r?   c           	          t          t          j                            | j        d|                    d          z                      S )Nzpack-%srA   )r   rB   rC   rD   rE   rF   rG   s     r>   get_packzPackTests.get_packN   s3    BGLLy3::g;N;N/NOOPPPr?   c                 r    	  ||i | d S # t           $ r }|                     |           Y d }~d S d }~ww xY wr2   r   failr<   funcargskwargses        r>   assertSucceedszPackTests.assertSucceedsQ   \    	D$!&!!!!! 	 	 	IIaLLLLLLLLL	    
616)__name__
__module____qualname____doc__r4   rB   rC   abspathrD   dirname__file__rE   rI   rL   rN   rW   __classcell__r=   s   @r>   r0   r0   8   s        &&5 5 5 5 5
 goobgll27??8+D+DF\]]^^G
 
 

 
 
Q Q Q      r?   r0   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
PackIndexTestsz'Class that tests the index of packfilesc                    |                      t                    }|                     t          |j        t                     |                     |                    t                    d           |                     |                    t                    d           |                     |                    t                    d           dS )@Tests that the correct object offset is returned from the index.         N)	rI   	pack1_shaassertRaisesKeyErrorobject_offsetassertEquala_shatree_sha
commit_shar<   ps     r>   test_object_offsetz!PackIndexTests.test_object_offset[   s    	**(AOY???//55522C88844b99999r?   c                    |                      t                    }|                     t          |j        d           |                     |                    d          t          t                               |                     |                    d          t          t                               |                     |                    d          t          t                               dS )rf   il  rg   rh   ri   N)
rI   rj   rk   rl   object_sha1rn   r   ro   rp   rq   rr   s     r>   test_object_sha1zPackIndexTests.test_object_sha1c   s    	**(AM3777s++Z->->???s++Z-A-ABBBr**Jz,B,BCCCCCr?   c                     |                      t                    }|                     dt          |                     d S N   )rI   rj   rn   lenrr   s     r>   test_index_lenzPackIndexTests.test_index_lenk   s7    	**CFF#####r?   c                    |                      t                    }|                     dt          |                                                     |                     dt          |                                                     d S )Ns(   f2848e2ad16f329ae1c92e3b95e91888daa5bd01s(   721980e866af9a5f93ad674144e1459b8ba3e7b7)rI   rj   rn   r   get_stored_checksumget_pack_checksumrr   s     r>   test_get_stored_checksumz'PackIndexTests.test_get_stored_checksumo   s    	**7q,,..//	
 	
 	
 	7q**,,--	
 	
 	
 	
 	
r?   c                 n    |                      t                    }|                     |j                   d S r2   )rI   rj   rW   checkrr   s     r>   test_index_checkzPackIndexTests.test_index_checkz   s1    	**AG$$$$$r?   c                     |                      t                    }d |                                D             }|                     g d|           d S )Nc                 :    g | ]\  }}}t          |          ||fS  r   .0socs       r>   
<listcomp>z3PackIndexTests.test_iterentries.<locals>.<listcomp>   s+    HHHWQ1JqMM1a(HHHr?   ))r)   rg   N)r*   rh   N)r+   ri   N)rI   rj   iterentriesrn   r<   rs   entriess      r>   test_iterentrieszPackIndexTests.test_iterentries~   sf    	**HHHHH  
 	
 	
 	
 	
 	
r?   c                     |                      t                    }|                     t          t          t
          ht          |                     d S r2   )rI   rj   rn   rp   rq   ro   setrr   s     r>   	test_iterzPackIndexTests.test_iter   s>    	**(J6A?????r?   N)rZ   r[   r\   r]   rt   rw   r|   r   r   r   r   r   r?   r>   rd   rd   X   s        11: : :D D D$ $ $	
 	
 	
% % %

 

 

@ @ @ @ @r?   rd   c                   n    e Zd ZdZdZdZdZddz  Zddz  Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd ZdS )TestPackDeltass#   The answer was flailing in the winds$   The answer was falling down the pipes   zzzzzr?      Zi    順 c                     |                      |d                    t          |t          t	          ||                                                   d S )Nr?   )rn   rD   r   listr   )r<   basetargets      r>   _test_roundtripzTestPackDeltas._test_roundtrip   sR    HH[tLv,F,F'G'GHHII	
 	
 	
 	
 	
r?   c                 F    |                      | j        | j                   d S r2   )r   test_string1r<   s    r>   test_nochangezTestPackDeltas.test_nochange   $    T.0ABBBBBr?   c                 F    |                      | j        | j                   d S r2   )r   test_string_huger   s    r>   test_nochange_hugez!TestPackDeltas.test_nochange_huge   s$    T2D4IJJJJJr?   c                 F    |                      | j        | j                   d S r2   )r   r   test_string2r   s    r>   test_changezTestPackDeltas.test_change   r   r?   c                 F    |                      | j        | j                   d S r2   )r   r   test_string3r   s    r>   test_rewritezTestPackDeltas.test_rewrite   r   r?   c                 F    |                      | j        | j                   d S r2   )r   test_string_emptytest_string_bigr   s    r>   test_empty_to_bigz TestPackDeltas.test_empty_to_big   s$    T3T5IJJJJJr?   c                 F    |                      | j        | j                   d S r2   )r   r   r   r   s    r>   test_empty_to_hugez!TestPackDeltas.test_empty_to_huge   s$    T3T5JKKKKKr?   c                 f    |                      | j        | j        z   | j        | j        z              d S r2   )r   r   r   r   r   s    r>   test_huge_copyzTestPackDeltas.test_huge_copy   s@    !D$55!D$55	
 	
 	
 	
 	
r?   c                     |                      t          t          ddz  dddz  z              |                      t          t          dd           d S )N   ai   s   r?   s    )rk   r   r   r   s    r>   test_dest_overflowz!TestPackDeltas.test_dest_overflow   sa    7N+dWn<		
 	
 	
 	[#/J	
 	
 	
 	
 	
r?   c                     dg}dg}t          ||          }g d}|                     d                    |          d                    |                     d S )Ns  tree 03207ccf58880a748188836155ceed72f03d65d6
parent 408fbab530fd4abe49249a636a10f10f44d07a21
author Victor Stinner <victor.stinner@gmail.com> 1421355207 +0100
committer Victor Stinner <victor.stinner@gmail.com> 1421355207 +0100

Backout changeset 3a06020af8cf

StreamWriter: close() now clears the reference to the transport

StreamWriter now raises an exception if it is closed: write(), writelines(),
write_eof(), can_write_eof(), get_extra_info(), drain().
s~   ]tree ff3c181a393d5a7270cddc01ea863818a8621ca8
parent 20a103cc90135494162e819f98d0edfc1f1fba6b]710738@10738 +0100)s]   tree ff3c181a393d5a7270cddc01ea863818a8621ca8
parent 20a103cc90135494162e819f98d0edfc1f1fba6bs7   
author Victor Stinner <victor.stinner@gmail.com> 14213s   10738s@    +0100
committer Victor Stinner <victor.stinner@gmail.com> 14213s   10738 +0100s   

StreamWriter: close() now clears the reference to the transport

StreamWriter now raises an exception if it is closed: write(), writelines(),
write_eof(), can_write_eof(), get_extra_info(), drain().
r?   )r   rn   rD   )r<   chunksdeltaresexpecteds        r>   test_pypy_issuezTestPackDeltas.test_pypy_issue   sq    J
 8

 &%((
 
 
 	(++SXXc]];;;;;r?   N)rZ   r[   r\   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r?   r>   r   r      s        9L:LLTkOf}
 
 
C C CK K KC C CC C CK K KL L L
 
 
	
 	
 	
%< %< %< %< %<r?   r   c                   N    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )TestPackDataz)Tests getting the data from the packfile.c                 ^    |                      t                                                     d S r2   )rL   rj   closer   s    r>   test_create_packzTestPackData.test_create_pack   s(    9%%++-----r?   c                 <   t           j                            | j        dt                              d          z            }t          |d          5 }t          j        |t           j        	                    |                     d d d            d S # 1 swxY w Y   d S )NrK   rA   rb)
rB   rC   rD   rE   rj   rF   openr   	from_filegetsize)r<   rC   fs      r>   test_from_filezTestPackData.test_from_file   s    w||DL.9;K;KG;T;T*TUU$ 	9q"'//$"7"7888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   3BBBc                     |                      t                    5 }|                     dt          |                     d d d            d S # 1 swxY w Y   d S ry   )rL   rj   rn   r{   rr   s     r>   test_pack_lenzTestPackData.test_pack_len   s    	** 	(aQA'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(   $AAAc                     |                      t                    5 }|                     |j                   d d d            d S # 1 swxY w Y   d S r2   )rL   rj   rW   r   rr   s     r>   r   zTestPackData.test_index_check   s    	** 	)a(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   AA
Ac                 x   |                      t                    5 }d}d}dt          |          z   }t          |                                          }|                     t          dd|gd           t          dd|gd           t          d	d
dgd           g|           d d d            d S # 1 swxY w Y   d S )Ns   tree b2a2766a2879c209ab1176e7e778b81ae422eeaa
author James Westby <jw+debian@jameswestby.net> 1174945067 +0100
committer James Westby <jw+debian@jameswestby.net> 1174945067 +0100

Test commit
r)   s	   100644 a ri   r&   )offsetpack_type_numdecomp_chunkscrc32rh   r   rg   rz   s   test 1
)rL   rj   r   r   iter_unpackedrn   r   )r<   rs   commit_datablob_sha	tree_dataactuals         r>   test_iter_unpackedzTestPackData.test_iter_unpacked   s   	** 	a!  CH%
8(<(<<I!//++,,F""Ak]bfggg"#Qykaefff"#Q{mcghhh
   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   BB//B36B3c                     |                      t                    5 }d |                                D             }|                     h d|           d d d            d S # 1 swxY w Y   d S )Nc                 :    h | ]\  }}}t          |          ||fS r   r   r   s       r>   	<setcomp>z0TestPackData.test_iterentries.<locals>.<setcomp>  s+    LLLAq
1q!,LLLr?   >   r)   rg   ieQr*   rh   i"Ak6r+   ri   l   YB )rL   rj   r   rn   r   s      r>   r   zTestPackData.test_iterentries  s    	** 	aLLAMMOOLLLG  " %  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   7AA#&A#c                    |                      t                    5 }t          j                            | j        d          }|                    |           t          |          }|                     t                    }| 	                    t          t          j        |          j                  t                     | 	                    ||           d d d            d S # 1 swxY w Y   d S )Nz
v1test.idx)rL   rj   rB   rC   rD   r7   create_index_v1r   rI   rn   octstatst_mode	indexmoder<   rs   filenameidx1idx2s        r>   test_create_index_v1z!TestPackData.test_create_index_v1,     	** 	)aw||DL,??Hh'''"8,,D&&y11DS!2!2!:;;YGGGT4(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)   B9C!!C%(C%c                    |                      t                    5 }t          j                            | j        d          }|                    |           t          |          }|                     t                    }| 	                    t          t          j        |          j                  t                     | 	                    ||           d d d            d S # 1 swxY w Y   d S )Nz
v2test.idx)rL   rj   rB   rC   rD   r7   create_index_v2r   rI   rn   r   r   r   r   r   s        r>   test_create_index_v2z!TestPackData.test_create_index_v25  r   r   c                 ~   t          d          }|                     t          d                                          t	          |                                                     |                     t          d                                          t	          |d                                                     |                     t          d                                          t	          |d                                                     |                     t          d                                          t	          |d	                                                     |                     t          d
                                          t	          |dd                                                     d S )N   abcd1234wxyz   )buffer_sizes   abcd1234end_ofss   1234wxyz   )	start_ofss   1234r   r   )r   rn   r   	hexdigestr   r<   r   s     r>   test_compute_file_shaz"TestPackData.test_compute_file_sha>  s   O$$!!++--/?/B/B/L/L/N/N	
 	
 	
 	!!++--QA...88::	
 	
 	
 	''))Q+++5577	
 	
 	
 	''))Q!,,,6688	
 	
 	
 	MM##%%Q!R888BBDD	
 	
 	
 	
 	
r?   c                     t          d          }|                     t          t          |d           |                     t          t          |d           |                     t          t          |dd           d S )Nr   r      
   ir   )r   rk   AssertionErrorr   r   s     r>    test_compute_file_sha_short_filez-TestPackData.test_compute_file_sha_short_fileT  s~    O$$.*:AsKKK.*:ArJJJ,a2s 	 	
 	
 	
 	
 	
r?   N)rZ   r[   r\   r]   r   r   r   r   r   r   r   r   r   r   r   r?   r>   r   r      s        33. . .9 9 9
( ( () ) )  .  0) ) )) ) )
 
 
,
 
 
 
 
r?   r   c                   t    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd ZdS )TestPackc                     |                      t                    5 }|                     dt          |                     d d d            d S # 1 swxY w Y   d S ry   )rN   rj   rn   r{   rr   s     r>   test_lenzTestPack.test_len^  s    ]]9%% 	(QA'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(r   c                     |                      t                    5 }|                     t          |           d d d            d S # 1 swxY w Y   d S r2   )rN   rj   assertInrp   rr   s     r>   test_containszTestPack.test_containsb  s    ]]9%% 	'MM(A&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   AAAc                     |                      t                    5 }|                     t          |t                             t
                     d d d            d S # 1 swxY w Y   d S r2   )rN   rj   rn   typerp   r   rr   s     r>   test_getzTestPack.test_getf  s    ]]9%% 	6T!H+..555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   4AA #A c                     |                      t                    5 }|                     t          t          t
          ht          |                     d d d            d S # 1 swxY w Y   d S r2   )rN   rj   rn   rp   rq   ro   r   rr   s     r>   r   zTestPack.test_iterj  s    ]]9%% 	Dh
E:CFFCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   6AA"%A"c           
      2   |                      t                    5 fdt          t          t          fD             }|                     |t          t                                                                         d d d            d S # 1 swxY w Y   d S )Nc                      h | ]
}|         S r   r   r   r   rs   s     r>   r   z,TestPack.test_iterobjects.<locals>.<setcomp>p  s    DDD!DDDr?   )	rN   rj   rq   rp   ro   rn   r   r   iterobjects)r<   r   rs   s     @r>   test_iterobjectszTestPack.test_iterobjectsn  s    ]]9%% 	CDDDDz8U&CDDDHXs4+@+@'A'ABBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   A#BBBc           	         |                      t                    5                                 }fdt          t          t
          fD             }|                     |t          t          |                               |                     |t          t          |                               |                     dt          |                     d d d            d S # 1 swxY w Y   d S )Nc                 $    h | ]}|         d fS r2   r   r  s     r>   r   z,TestPack.test_pack_tuples.<locals>.<setcomp>v  s!    LLL1tLLLr?   rz   )
rN   rj   pack_tuplesrq   rp   ro   rn   r   r   r{   )r<   tuplesr   rs   s      @r>   test_pack_tupleszTestPack.test_pack_tupless  s   ]]9%% 	-]]__FLLLLz8U.KLLLHXs4<<'8'8999Xs4<<'8'8999QF,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   B8C!!C%(C%c                 H   |                      t                    5 }|t                   }|                     |j        d           |                     |                                                                                    d          t                     |t                   }|                     |j        d           |                     |                                                                                    d          t                     |t                   }|                     |j        d           |                     |                                                                                    d          t                     ddd           dS # 1 swxY w Y   dS )z)Tests random access for non-delta objects   blobrA      tree   commitN)
rN   rj   ro   rn   	type_namerH   r   encoderp   rq   )r<   rs   objs      r>   test_get_object_atzTestPack.test_get_object_at{  s   ]]9%% 		PE(CS]G444SWWYY002299'BBEJJJH+CS]G444SWWYY002299'BBHMMMJ-CS]I666SWWYY002299'BBJOOO		P 		P 		P 		P 		P 		P 		P 		P 		P 		P 		P 		P 		P 		P 		P 		P 		P 		Ps   E/FFFc                    |                      t                    5 }|                     |j        j                   t
          j                            | j        d          }t          ||
                                           t          |          5 }|                     ||           |                     |j        j                   |                     |                                |                                           |                     |j                                        |j                                                   |j        j        |j        j        k    }|j                                        }|j                                        }|                     |p||k               d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NElch)rN   rj   rW   indexr   rB   rC   rD   r7   r!   r  r   rn   namer   versionr~   
assertTrue)r<   origpackbasenamenewpackwrong_versionorig_checksumnew_checksums          r>   	test_copyzTestPack.test_copy  s)   ]]9%% 	P 4555w||DL&99Hx!5!5!7!7888h P7  7333##GM$7888  ',,..AAA  N4466M3355  
 !) 6'-:O O ( B B D D&}@@BB N,1NOOOP P P P P P P P P P P P P P P	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps7   A6GDF8,G8F<	<G?F<	 GGGc                     |                      t                    5 }|t                   }|                     d|j                   |                     g |j                   d d d            d S # 1 swxY w Y   d S )Ns(   James Westby <jw+debian@jameswestby.net>)rN   rj   rq   rn   authorparents)r<   rs   commits      r>   test_commit_objzTestPack.test_commit_obj  s    ]]9%% 	1z]FH&-XXXR000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   AA,,A03A0c                     t           j                            | j        d          }t	          ||                                           t          |          S )Nsomepack)rB   rC   rD   r7   r!   r  r   )r<   r$  r%  s      r>   
_copy_packzTestPack._copy_pack  sA    7<<j998X1133444H~~r?   c                    |                      t                    5 }|                     |          }d d d            n# 1 swxY w Y   |5  |                                }d d d            n# 1 swxY w Y   |                     t
          j                            |                     t          |          5 }|	                                }| 
                    d|           d d d            d S # 1 swxY w Y   d S )N rN   rj   r2  keepr#  rB   rC   existsr   readrn   )r<   rs   keepfile_namer   bufs        r>   test_keep_no_messagezTestPack.test_keep_no_message  s   ]]9%% 	#""A	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#  	% 	%FFHHM	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	}55666-   	&A&&((CR%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s3   =AA
A++A/2A/7+C//C36C3c                    |                      t                    5 }|                     |          }d d d            n# 1 swxY w Y   d}|5  |                    |          }d d d            n# 1 swxY w Y   |                     t
          j                            |                     t          |d          5 }|	                                }| 
                    |dz   |           d d d            d S # 1 swxY w Y   d S )Ns   some messager      
r5  )r<   rs   msgr9  r   r:  s         r>   test_keep_messagezTestPack.test_keep_message  s   ]]9%% 	#""A	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#  	( 	(FF3KKM	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	}55666 -&& 	/!&&((CS5[#...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s3   =AAA..A25A2;.C66C:=C:c                     |                      t                    5 }|                     t          |                                           d d d            d S # 1 swxY w Y   d S r2   )rN   rj   rn   r!  rr   s     r>   	test_namezTestPack.test_name  s    ]]9%% 	2Y111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   .AAAc                    |                      t                    5 }|                     t                    t          j        |                                           |j                            d           t                      }t          |j
        d           |
                    |j                                                   t          |                                          }t          d|          t          j        fdfd          |                     t           fd           |                     t           j                   d d d            d S # 1 swxY w Y   d S )Nri   i'  r4  filec                       S r2   r   bad_datas   r>   <lambda>z/TestPack.test_length_mismatch.<locals>.<lambda>      h r?   c                       S r2   r   r   s   r>   rH  z/TestPack.test_length_mismatch.<locals>.<lambda>       r?   c                       j         S r2   databad_packs   r>   rH  z/TestPack.test_length_mismatch.<locals>.<lambda>  s	    hm r?   )rL   rj   rI   r   from_objectscheck_length_and_checksum_fileseekr   r"   writer8  getvaluer   from_lazy_objectsrk   r   r<   rO  bad_filerG  rQ  r   s      @@@r>   test_length_mismatchzTestPack.test_length_mismatch  s   	** 	d''	22EdE**DDFFFJOOByyHhnd333NN4:??,,---x002233H222H-.>.>.>.>NNHn.C.C.C.CDDD B  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   D6E!!E%(E%c                 ^   |                      t                    5 }|                     t                    t          j        |                                           |j                            d           t          |j        	                                d d         dz             }t          d|          t          j        fdfd          |                     t          fd           |                     t          j                   d d d            d S # 1 swxY w Y   d S )	Nr   r   s   r4  rC  c                       S r2   r   rF  s   r>   rH  z1TestPack.test_checksum_mismatch.<locals>.<lambda>  rI  r?   c                       S r2   r   rK  s   r>   rH  z1TestPack.test_checksum_mismatch.<locals>.<lambda>  rL  r?   c                       j         S r2   rN  rP  s   r>   rH  z1TestPack.test_checksum_mismatch.<locals>.<lambda>  s	     r?   )rL   rj   rI   r   rR  rS  rT  rU  r   r8  r   rX  rk   r   rY  s      @@@r>   test_checksum_mismatchzTestPack.test_checksum_mismatch  s\   	** 	d''	22EdE**DDFFFJOOAtz00#6,GHHH222H-.>.>.>.>NNH.0E0E0E0EFFF ("D  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   C7D""D&)D&c                 <   |                      t                    5 }d |                                D             }|                     dt	          |                     |                     t          |          t          |j                             |                     |t                   t                     |                     |t                   t                     |                     |t                   t                     d d d            d S # 1 swxY w Y   d S )Nc                     i | ]
}|j         |S r   idr   r   s     r>   
<dictcomp>z/TestPack.test_iterobjects_2.<locals>.<dictcomp>  s    555AD!555r?   rz   )rN   rj   r  rn   r{   sortedr   assertIsInstancero   r   rp   r   rq   r   r<   rs   objss      r>   test_iterobjects_2zTestPack.test_iterobjects_2  s   ]]9%% 	<55Q]]__555DQD		***VD\\6!'??;;;!!$u+t444!!$x.$777!!$z"2F;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   C)DDDc                 H   |                      t                    5 }d |                    t          g          D             }|                     dt          |                     |                     |t                   t                     d d d            d S # 1 swxY w Y   d S )Nc                     i | ]
}|j         |S r   rc  re  s     r>   rf  z4TestPack.test_iterobjects_subset.<locals>.<dictcomp>  s    HHHAD!HHHr?   r&   )rN   rj   iterobjects_subsetrq   rn   r{   rh  r   ri  s      r>   test_iterobjects_subsetz TestPack.test_iterobjects_subset  s    ]]9%% 	<HHQ%9%9:,%G%GHHHDQD		***!!$z"2F;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   A/BBBN)rZ   r[   r\   r  r  r
  r   r  r  r  r*  r/  r2  r;  r?  rA  r[  r`  rk  ro  r   r?   r>   r  r  ]  s       ( ( (' ' '6 6 6D D DC C C
- - -P P PP P P(1 1 1  
& & &/ / / 2 2 2  "  < < << < < < <r?   r  c                   6     e Zd Z fdZd Zd Zd Zd Z xZS )TestThinPackc           	      ^   t                                                       t                      | _        i | _        dD ] }t          t          |          | j        |<   !| j                            | j        d                    | j                            | j        d                    t          j	                    | _
        |                     t          j        | j
                   t          j                            | j
        d          | _        t%          | j        dz   d          5 }t'          |t(          | j        d         j        dfft          j        dft(          | j        d         j        d	ffg| j        
           d d d            n# 1 swxY w Y   |                     d          5 }t1          |j                  5 }|                    | j        dz   |j                   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | j        | j        d         j        = d S )N)   foo   bar   foo1234   bar2468rN  rs  rt  packz.packwbru  rv  storeTz.idxresolve_ext_ref)r3   r4   r
   rz  blobsr(   r   
add_objectr5   r6   pack_dirr8   r9   r:   rB   rC   rD   pack_prefixr   r'   r   rd  type_num	make_packr   
_data_pathcreate_indexr|  )r<   blobr   rw  rO  r=   s        r>   r4   zTestThinPack.setUp  s   &((

< 	< 	<D*4d;;;DJt
dj0111
dj0111 !(**t}5557<<v>>$"W,d33 		qF!3!6
 CD]F+F!3!6
 CD
 j   		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 ^^D!! 	UT$/** Ud!!$v-t?S " U U UU U U U U U U U U U U U U U U	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U
 Jtz&),---sI   (AFFF-H
%G3'H
3G7	7H
:G7	;H

HHc                 J    t          | j        |r| j        j        nd           S )Nr{  )r   r  rz  get_raw)r<   r|  s     r>   r  zTestThinPack.make_pack  s1    2AKDJ..t
 
 
 	
r?   c                    |                      d          5 }|                     t          |j        | j        d         j                   d d d            n# 1 swxY w Y   |                      d          5 }|                     d|                    | j        d         j                             d d d            d S # 1 swxY w Y   d S )NFru  T)rz   ru  )r  rk   rl   r  r}  rd  rn   rr   s     r>   test_get_rawzTestThinPack.test_get_raw!  sL   ^^E"" 	Nah	4:j3I3LMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N^^D!! 	TQ_aii
:8N8Q.R.RSSS	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	Ts#   2AAA4:B;;B?B?c                    d | _         |                     d          5 }t          dddg          }d|_        |                    | j        d         j                  }|                     ||           d d d            n# 1 swxY w Y   |                     d          5 }t          dddg          }d|_        |                    | j        d         j                  }|                     ||           d d d            d S # 1 swxY w Y   d S )	NF   s   (f=#ZGeܖFs	   1234)
delta_baser   ri   ru  T)maxDiffr  r   r   get_unpacked_objectr}  rd  rn   )r<   rs   r   gots       r>   test_get_unpacked_objectz%TestThinPack.test_get_unpacked_object'  s   ^^E"" 	,a%V:;  H
 !HO''
:(>(ABBCXs+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, ^^D!! 	Q%V:;  H
 !HO''
:(>(ABBC  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s%   AA??BBADD	Dc           	          |                      d          5 }|                     t          t          |                                           d d d            n# 1 swxY w Y   |                      d          5 }|                     t          | j        d         j        | j        d         j        | j        d         j        g          t          d |                                D                                  d d d            d S # 1 swxY w Y   d S )NFTru  rt  rv  c              3   $   K   | ]}|j         V  d S r2   rc  re  s     r>   	<genexpr>z0TestThinPack.test_iterobjects.<locals>.<genexpr>K  s$      55qt555555r?   )	r  rk   rl   r   r  rn   rg  r}  rd  rr   s     r>   r  zTestThinPack.test_iterobjects?  sn   ^^E"" 	?ahammoo>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?^^D!! 
	Q
:.1
6*-
:.1  55Q]]__55555	 	 	
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	s$   4AAA6B DD
D)	rZ   r[   r\   r4   r  r  r  r  ra   rb   s   @r>   rq  rq    sx         .  .  .  .  .D
 
 
T T T  0      r?   rq  c                   &    e Zd Zd Zd Zd Zd ZdS )WritePackTestsc                     t                      }t          |j        d           |                     d|                                           d S )N*   s   PACK      *)r   r"   rV  rn   rW  r   s     r>   test_write_pack_headerz%WritePackTests.test_write_pack_headerP  sB    II!'2&&&=qzz||LLLLLr?   c                    t                      }|                    d           |                                }t          |j        t          j        d          }|                     |t          j        |	                                dd                    dz             |                    d           |
                    |           t          |j        d          \  }}|                     t          j        |j                   |                     t          j        |j                   |                     dg|j                   |                     ||j                   |                     d|           d S )N   headerr     l       xTcompute_crc32)r   rV  tellr%   r   r  rn   zlibr   rW  rU  r    r8  r   obj_type_numr   )r<   r   r   r   unpackedunuseds         r>   test_write_pack_objectz%WritePackTests.test_write_pack_objectU  s1   II		!!'4='BB
1::<<+; < <z IJJJ		v(tDDD&(>???(=>>>'H$:;;;///v&&&&&r?   c                 D   t                      }|                    d           |                                }t          d          }|                                }t          |j        t          j        d|           |                     |	                                |	                                           |
                    |                                |d                     |                     |	                                |	                                           d S )Nr  rs  r  )rH   r   rV  r  r   copyr%   r   r  assertNotEqualdigestupdaterW  rn   r<   r   r   sha_asha_bs        r>   test_write_pack_object_shaz)WritePackTests.test_write_pack_object_shae  s    II		V

!'4='uEEEEELLNNELLNN;;;QZZ\\&''*+++88888r?   c                 F   t                      }|                    d           |                                }t          d          }|                                }t          |j        t          j        d|d           |                     |	                                |	                                           |
                    |                                |d                     |                     |	                                |	                                           d S )Nr  rs  r  r  )rH   compression_levelr  r  s        r>   (test_write_pack_object_compression_levelz7WritePackTests.test_write_pack_object_compression_levelp  s    II		V

!'4='uXYZZZZELLNNELLNN;;;QZZ\\&''*+++88888r?   N)rZ   r[   r\   r  r  r  r  r   r?   r>   r  r  O  sS        M M M
' ' ' 	9 	9 	9	9 	9 	9 	9 	9r?   r  (721980e866af9a5f93ad674144e1459b8ba3e7b7c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )BaseTestPackIndexWritingc                 r    	  ||i | d S # t           $ r }|                     |           Y d }~d S d }~ww xY wr2   rP   rR   s        r>   rW   z'BaseTestPackIndexWriting.assertSucceeds  rX   rY   c                 *    t          | j                  r2   )NotImplementedErrorr   r<   r   r   pack_checksums       r>   r   zBaseTestPackIndexWriting.index  s    !$*---r?   c                     |                      dg t                    }|                     |                                t                     |                     dt	          |                     d S )Nz	empty.idxr   )r   r  rn   r   r{   )r<   idxs     r>   
test_emptyz#BaseTestPackIndexWriting.test_empty  s[    jjb-88..00-@@@CHH%%%%%r?   c                 4   t          d          }t          d          }|ddf|ddfg}| j        s*|                     t          | j        d|t
                     d S |                     d|t
                    }|                     |                                t
                     |                     dt          |                     t          |
                                          }|                     t          |          t          |                     t          ||          D ]p\  }}|\  }}	}
|\  }}}|                     ||           |                     |	|           | j        r|                     |
|           [|                     |           qd S )	N(4e6388232ec39792661e2e75db8fb117fc869ce6(e98f071751bd77f59967bfa671cd2caebdccc9a2l   ` 4    l   xdZKFk\   
single.idxr   )r   _supports_largerk   	TypeErrorr   r  rn   r   r{   r   r   zip_has_crc32_checksumassertIsNone)r<   
entry1_sha
entry2_shar   r  actual_entriesminer   my_sha	my_offsetmy_crc
actual_shaactual_offset
actual_crcs                 r>   
test_largez#BaseTestPackIndexWriting.test_large  s    JKK
 JKK
+R0>C
 # 	4:|Wm   Fjjw>>..00-@@@CHH%%%coo//00Ws>':':;;;88 	. 	.LD&(,%FIv4:1JzVZ000Y666' .  4444!!*----	. 	.r?   c                    t          d          }|ddfg}|                     d|t                    }|                     |                                t                     |                     dt          |                     t          |                                          }|                     t          |          t          |                     t          ||          D ]p\  }}|\  }}}	|\  }
}}|                     ||
           |                     ||           | j	        r|                     |	|           [| 
                    |           qd S )N(6f670c0fb53f9463760b7295fbb814e965fb20c8rg   r  r  r&   )r   r   r  rn   r   r{   r   r   r  r  r  )r<   	entry_sha
my_entriesr  r  r  r   r  r  r  r  r  r  s                r>   test_singlez$BaseTestPackIndexWriting.test_single  sS   IJJ	 #r*+
jjz=AA..00-@@@CHH%%%coo//00Z#n*=*=>>>
N;; 	. 	.LD&(,%FIv4:1JzVZ000Y666' .  4444!!*----	. 	.r?   N)rZ   r[   r\   rW   r   r  r  r  r   r?   r>   r  r    s_          . . .& & &
. . .6. . . . .r?   r  c                   &    e Zd Zd Zd Zd Zd ZdS )BaseTestFilePackIndexWritingc                 6    t          j                    | _        d S r2   )r5   r6   r7   r   s    r>   r4   z"BaseTestFilePackIndexWriting.setUp  s    '))r?   c                 8    t          j        | j                   d S r2   )r9   r:   r7   r   s    r>   tearDownz%BaseTestFilePackIndexWriting.tearDown  s    dl#####r?   c                    t           j                            | j        |          }|                     |||           t          |          }|                     |j                   |                     |j	        | j
                   |S r2   )rB   rC   rD   r7   
writeIndexr   rW   r   rn   r"  _expected_version)r<   r   r   r  rC   r  s         r>   r   z"BaseTestFilePackIndexWriting.index  sr    w||DL(33g}555d##CI&&&d&<===
r?   c                     t          |d          5 }|                     |||           d d d            d S # 1 swxY w Y   d S )Nrx  )r	   	_write_fn)r<   r   r   r  r   s        r>   r  z'BaseTestFilePackIndexWriting.writeIndex  s    Xt$$ 	6NN1g}555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   6::N)rZ   r[   r\   r4   r  r   r  r   r?   r>   r  r    sP        * * *$ $ $  6 6 6 6 6r?   r  c                        e Zd Zd Zd Zd ZdS )TestMemoryIndexWritingc                 J    t          j        |            d| _        d| _        d S )NT)r   r4   r  r  r   s    r>   r4   zTestMemoryIndexWriting.setUp  s(    t#' #r?   c                 "    t          ||          S r2   )r   r  s       r>   r   zTestMemoryIndexWriting.index  s    w666r?   c                 .    t          j        |            d S r2   )r   r  r   s    r>   r  zTestMemoryIndexWriting.tearDown  s    $r?   N)rZ   r[   r\   r4   r   r  r   r?   r>   r  r    sA        $ $ $
7 7 7         r?   r  c                       e Zd Zd Zd ZdS )TestPackIndexWritingv1c                     t          j        |            t                              |            d| _        d| _        d| _        t          | _        d S )NFr&   )r   r4   r  r  r  r  r#   r  r   s    r>   r4   zTestPackIndexWritingv1.setUp  sI    t$**4000#( !"$,r?   c                 b    t          j        |            t                              |            d S r2   r   r  r  r   s    r>   r  zTestPackIndexWritingv1.tearDown  -    $$--d33333r?   NrZ   r[   r\   r4   r  r   r?   r>   r  r    2        - - -4 4 4 4 4r?   r  c                       e Zd Zd Zd ZdS )TestPackIndexWritingv2c                     t          j        |            t                              |            d| _        d| _        d| _        t          | _        d S )NTr   )r   r4   r  r  r  r  r$   r  r   s    r>   r4   zTestPackIndexWritingv2.setUp  sI    t$**4000#' #!",r?   c                 b    t          j        |            t                              |            d S r2   r  r   s    r>   r  zTestPackIndexWritingv2.tearDown  r  r?   Nr  r   r?   r>   r  r    r  r?   r  c                        e Zd ZdZ ej        e          ZdZ fdZd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Z xZS )ReadZlibTestss   tree 4ada885c9196b6b6fa08744b5862bf92896fc002
parent None
author Jelmer Vernooij <jelmer@samba.org> 1228980214 +0000
committer Jelmer Vernooij <jelmer@samba.org> 1228980214 +0000

Provide replacement for mmap()'s offset argument.s
   nextobjectc                     t                                                       t          | j        | j        z             j        | _        t          t          j        t          | j
                  d          | _        d S )Nr   )
decomp_lenr   )r3   r4   r   compextrar8  r   r   r  r{   decompr  r;   s    r>   r4   zReadZlibTests.setUp  sV    DI
2338	&t}T[AQAQYZ[[[r?   c                    t          | j                  }d| j        _        |                     t
          t          | j        | j                   |dz
  | j        _        |                     t          j	        t          | j        | j                   |dz   | j        _        |                     t          j	        t          | j        | j                   d S )Nr&   )
r{   r  r  r  rk   
ValueErrorr   r8  r  error)r<   good_decomp_lens     r>   test_decompress_sizez"ReadZlibTests.test_decompress_size  s    dk**#% *&6	4=QQQ#2Q#6 $*&6	4=QQQ#2Q#6 $*&6	4=QQQQQr?   c                 *   t          | j        d d                   j        }|                     t          j        t          || j                   t          | j                  j        }|                     t          j        t          || j                   d S )Nr   )r   r  r8  rk   r  r  r   r  )r<   r8  s     r>   test_decompress_truncatedz'ReadZlibTests.test_decompress_truncated  sr    ty"~&&+$*&6dmLLLty!!&$*&6dmLLLLLr?   c                    t          t          j        d          }t          j        d          }t          || j        z             j        }t          ||          }| 	                    dd
                    |j                             |                     d|           | 	                    | j        | |            z              d S )Nr   )r  r?   )r   r   r  r  compressr   r  r8  r   rn   rD   r   r  )r<   r  r  r8  r  s        r>   test_decompress_emptyz#ReadZlibTests.test_decompress_empty  s    !$-A>>>}S!!tdj()).!$11chhx'=>>???C(((Vddff_55555r?   c                     d | j         _        t          | j        | j                    |                     d | j         j                   d S r2   )r  r   r   r8  rn   r   s    r>   test_decompress_no_crc32z&ReadZlibTests.test_decompress_no_crc32%  sA    "DM222t}233333r?   c                    t          | j        | j        fd|i|}|                     | j        d                    | j        j                             |                     t          j        | j	                  | j        j                   | 
                    d|           |                     | j        ||                                 z              d S )Nr   r?   )r   r8  r  rn   r  rD   r   r  r   r  r  r  )r<   r   rU   r  s       r>   _do_decompress_testz!ReadZlibTests._do_decompress_test*  s    !It}
 
2=
AG
 
 	chht}/J&K&KLLLDI..0CDDDC(((Vdiikk%9:::::r?   c                 p    |                      d           |                     d | j        j                   d S )N   )r  rn   r  comp_chunksr   s    r>   test_simple_decompressz$ReadZlibTests.test_simple_decompress3  s7      &&&t}899999r?   c                 0    |                      d           d S )Nr&   r  r   s    r>   test_decompress_buffer_size_1z+ReadZlibTests.test_decompress_buffer_size_19        #####r?   c                 0    |                      d           d S )Nr   r  r   s    r>   test_decompress_buffer_size_2z+ReadZlibTests.test_decompress_buffer_size_2<  r  r?   c                 0    |                      d           d S ry   r  r   s    r>   test_decompress_buffer_size_3z+ReadZlibTests.test_decompress_buffer_size_3?  r  r?   c                 0    |                      d           d S )Nr   r  r   s    r>   test_decompress_buffer_size_4z+ReadZlibTests.test_decompress_buffer_size_4B  r  r?   c                     |                      dd           |                     | j        d                    | j        j                             d S )Nr
  T)include_compr?   )r  rn   r  rD   r  r  r   s    r>   test_decompress_include_compz*ReadZlibTests.test_decompress_include_compE  sJ      D 999CHHT]-F$G$GHHHHHr?   )rZ   r[   r\   r  r  r  r  r  r4   r  r  r  r  r  r  r  r  r  r  r  ra   rb   s   @r>   r  r    s       	=  4=  DE\ \ \ \ \
R R RM M M6 6 64 4 4
; ; ;: : :$ $ $$ $ $$ $ $$ $ $I I I I I I Ir?   r  c                        e Zd Zd Zd Zd ZdS )DeltifyTestsc                 f    |                      g t          t          g                                d S r2   )rn   r   r   r   s    r>   r  zDeltifyTests.test_emptyK  s/    T"6r":":;;<<<<<r?   c           	      .   t          j        d          }|                     t          |j        |                                                                d |                                          gt          t          |dfg                               d S )Nrs  rH   r  r   r?   )
r   from_stringrn   r   r  rH   r  as_raw_chunksr   r   )r<   bs     r>   r  zDeltifyTests.test_singleN  s    V$$AJAEEGGNN,<,<]^]l]l]n]nooop%3xj1122	
 	
 	
 	
 	
r?   c           
         t          j        d          }t          j        d          }t          t          |                                |                                                    }|                     t          |j        |                                	                                d |                                          t          |j        |                                	                                |                                	                                |          gt          t          |df|dfg                               d S )Nse   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasd   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  r?   )r   r  r   r   r   rn   r   r  rH   r  r   )r<   b1b2r   s       r>   test_simple_deltazDeltifyTests.test_simple_deltaU  s   j))j))\""2"2"4"4b6F6F6H6HIIJJr{0A0Adbdbrbrbtbtuuur{0A0AbffhhooN_N_otuuu %Cy2s)&<==>>	
 	
 	
 	
 	
r?   N)rZ   r[   r\   r  r  r%  r   r?   r>   r  r  J  sA        = = =
 
 


 

 

 

 

r?   r  c                   &    e Zd Zd Zd Zd Zd ZdS )TestPackStreamReaderc           	          t                      }t          |g            t          |j                  }|                     dt          t          |                                                               d S )Nr   )r   r'   r   r8  rn   r{   r   read_objectsr<   r   readers      r>   test_read_objects_emtpyz,TestPackStreamReader.test_read_objects_emtpyc  sb    II1b!!&))CV%8%8%:%: ; ;<<=====r?   c                    t                      }t          |t          j        dft          dfg          }t          |j                  }t          |                    d                    }| 	                    dt          |                     |\  }}| 	                    |d         d         |j                   | 	                    t          j        |j                   | 	                    t          j        |j                   | 	                    d |j                   | 	                    dd                    |j                             | 	                    |d         d         |j                   | 	                    |d	         d         |j                   | 	                    t          |j                   | 	                    d |j                   | 	                    |j        |j        z
  |j                   t%          dd
          }| 	                    d                    |          d                    |j                             | 	                    |d	         d         |j                   d S )Nr  r      blob1Tr  r   r   r?   r   r&   r/  )r   r'   r   r  r   r   r8  r   r)  rn   r{   r   r   r  r  rD   r   r   r   )r<   r   r   r+  objectsunpacked_blobunpacked_deltar   s           r>   test_read_objectsz&TestPackStreamReader.test_read_objectsi  s%   II(M*
 
 "!&))v***>>??CLL)))(/%~A(<===(CDDD(BCCC}7888#((=+F"G"GHHHA(;<<<A(=>>>N$@AAA~:;;;!M$88%	
 	
 	
 Wh//%#((>3O*P*PQQQA(<=====r?   c           	         t                      }t          |t          j        dft          dfg           t          |j        d          }|                     dt          t          |
                                                               d S )Nr  r.  r   )zlib_bufsizer   )r   r'   r   r  r   r   r8  rn   r{   r   r)  r*  s      r>   test_read_objects_bufferedz/TestPackStreamReader.test_read_objects_buffered  s    II(M*	
 	
 	
 "!&q999CV%8%8%:%: ; ;<<=====r?   c                     t          t                      j                  }|                     t          t
          |                                           d S r2   )r   r   r8  rk   r   r   r)  )r<   r+  s     r>   test_read_objects_emptyz,TestPackStreamReader.test_read_objects_empty  s?    !')).11.$0C0C0E0EFFFFFr?   N)rZ   r[   r\   r,  r3  r6  r8  r   r?   r>   r'  r'  b  sV        > > >> > >B
> 
> 
>G G G G Gr?   r'  c                   2     e Zd ZdZ fdZd Z fdZ xZS )TestPackIteratorTc                 `     t                      j        |i | t                      | _        d S r2   )r3   __init__r   _unpacked_offsets)r<   rT   rU   r=   s      r>   r<  zTestPackIterator.__init__  s1    $)&)))!$r?   c                     |j         |j        d                    |j                  |                                |j        fS )z0Return entries in the same format as build_pack.r?   )r   r  rD   
obj_chunksrH   r   )r<   r  s     r>   _resultzTestPackIterator._result  s;     O!HHX())LLNNN
 	
r?   c                     || j         vsJ d|z              | j                             |           t                                          |||          S )Nz!Attempted to re-inflate offset %i)r=  addr3   _resolve_object)r<   r   r   base_chunksr=   s       r>   rC  z TestPackIterator._resolve_object  sc    T3333/&8 433 	""6***ww&&M;
 
 	
r?   )rZ   r[   r\   _compute_crc32r<  r@  rC  ra   rb   s   @r>   r:  r:    se        N' ' ' ' '
 
 

 
 
 
 
 
 
 
 
r?   r:  c                        e Zd Z fdZd Zd ZddZddZd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )DeltaChainIteratorTestsc                     t                                                       t                      | _        t	                      | _        d S r2   )r3   r4   r
   rz  r   fetchedr;   s    r>   r4   zDeltaChainIteratorTests.setUp  s0    &((
uur?   c                     g }|D ]G}t          t          |          }|                    |           | j                            |           H|S )NrN  )r(   r   appendrz  r~  )r<   
blobs_datar}  rO  r  s        r>   store_blobsz#DeltaChainIteratorTests.store_blobs  sX     	( 	(Dt$///DLLJ!!$''''r?   c                     t          |          }|                     || j        d|z             | j                            |           | j                            |          S )z?Wrapper around store.get_raw that doesn't allow repeat lookups.zAttempted to re-fetch object %s)r   assertNotInrI  rB  rz  r  )r<   bin_shahex_shas      r>   get_raw_no_repeatz)DeltaChainIteratorTests.get_raw_no_repeat  se    W%%L-7	
 	
 	

 	!!!z!!'***r?   Nc                     |!t          t          | j                            }|r| j        pd }t	          d|          }t
                              ||          S Nz	test.packrC  r{  )boolr   rz  rR  r   r:  for_pack_data)r<   r   thinr|  rO  s        r>   make_pack_iterz&DeltaChainIteratorTests.make_pack_iter  s[    <TZ(())D94#9AT!,,,--dO-TTTr?   c                    |!t          t          | j                            }|r| j        pd }t	          d|          }|sJ t          j        |          }t          j        ||          }t          
                    |||          S rT  )rU  r   rz  rR  r   r   for_packr   rR  r:  for_pack_subset)r<   r   subsetrW  r|  rO  r   rw  s           r>   make_pack_iter_subsetz-DeltaChainIteratorTests.make_pack_iter_subset  s    <TZ(())D94#9AT!,,,(.. u--//fo/^^^r?   c                     fd|D             }|                      |t          |                                                     d S )Nc                      g | ]
}|         S r   r   )r   ir   s     r>   r   z>DeltaChainIteratorTests.assertEntriesMatch.<locals>.<listcomp>  s    9991GAJ999r?   )rn   r   _walk_all_chains)r<   expected_indexesr   	pack_iterr   s     `  r>   assertEntriesMatchz*DeltaChainIteratorTests.assertEntriesMatch  sM    9999(89994	(B(B(D(D#E#EFFFFFr?   c                    t                      }t          |t          j        dft          j        dft
          j        dfg          }|                     g d||                     |                     |                    d           |                     g || 	                    |g                      |                    d           |                     ddg|| 	                    ||d         d         |d         d         g                     |                    d           |                     ddg|| 	                    |t          |d         d                   t          |d         d                   g                     d S )Nr  r  r  r   r&   r   r   r&   rz   )r   r'   r   r  r   r   rd  rX  rU  r]  r   r<   r   r   s      r>   test_no_deltasz&DeltaChainIteratorTests.test_no_deltas  sz   II),((
 
 				7D4G4G4J4JKKK	q			GT-G-G2-N-NOOO	q			A1K1KAPWXYPZ[\P]_fgh_ijk_lOm1n1nooo	q			FGT77JwqzRS}<U<UWabijkblmnboWpWp;qrr	t 	t 	t 	t 	tr?   c           
         t                      }t          |t          j        dft          dft          dfg          }|                     g d||                     |                     |                    d           |                     g d||                     ||d         d         |d         d         g                     d S )	Nr  r.  )r      blob2)r   r   r&   r   r&   rz   r   )	r   r'   r   r  r   rd  rX  rU  r]  rg  s      r>   test_ofs_deltasz'DeltaChainIteratorTests.test_ofs_deltas  s    II(M*M*
 
 				7D4G4G4J4JKKK	q			IIw&&q71:a='!*Q-*HII	K 	K 	K 	K 	Kr?   c                     t                      }t          |t          j        dft          dft          dfg          }|                     g d||                     |                     d S )Nr  r.  r&   rj  rf  )r   r'   r   r  r   rd  rX  rg  s      r>   test_ofs_deltas_chainz-DeltaChainIteratorTests.test_ofs_deltas_chain	  sn    II(M*M*
 
 				7D4G4G4J4JKKKKKr?   c                     t                      }t          |t          dft          j        dft          dfg          }|                     g d||                     |                     d S )Nr&   r/  r  rm  r&   r   r   r   r'   r   r   r  rd  rX  rg  s      r>   test_ref_deltasz'DeltaChainIteratorTests.test_ref_deltas  sn    IIM**M*
 
 				7D4G4G4J4JKKKKKr?   c                     t                      }t          |t          dft          j        dft          dfg          }|                     g d||                     |                     d S )N)r   r/  r  rm  rq  rr  rg  s      r>   test_ref_deltas_chainz-DeltaChainIteratorTests.test_ref_deltas_chain"  sn    IIM**M*
 
 				7D4G4G4J4JKKKKKr?   c                     t                      }t          |t          dft          j        dft
          dfg          }|                     g d||                     |                     d S )Nrp  r  rm  )r&   r   r   )r   r'   r   r   r  r   rd  rX  rg  s      r>   test_ofs_and_ref_deltasz/DeltaChainIteratorTests.test_ofs_and_ref_deltas.  sp     IIM**M*
 
 				7D4G4G4J4JKKKKKr?   c           	          t                      }t          |t          j        dft          dft
          dft
          dft
          dfg          }|                     g d||                     |                     d S )Nr  )r   rj  r.  )r&      blob3)r   s   bob)r   r   r   r&   rz   )r   r'   r   r  r   r   rd  rX  rg  s      r>   test_mixed_chainz(DeltaChainIteratorTests.test_mixed_chain>  s~    II(M*M*M*K(  	$:M:Ma:P:PQQQQQr?   c           	      ~   d}t           j        dfg}t          |          D ]C}|                    t          |dt          |                              d          z   ff           Dt                      }t          ||          }| 	                    t          |dz             || 
                    |                     d S )Nd   r  rA   r&   )r   r  rangerK  r   strr  r   r'   rd  rX  )r<   nobjects_specr`  r   r   s         r>   test_long_chainz'DeltaChainIteratorTests.test_long_chainL  s    01q 	T 	TAQ#a&&--:P:P0P,Q RSSSSIIQ--a!egt7J7J17M7MNNNNNr?   c           	         d}t           j        dfg}t          |          D ]C}|                    t          ddt          |                              d          z   ff           Dt                      }t          ||          }dgt          t          ddd                    z   }| 
                    |||                     |                     d S )Nr|  r  r   rA   r  )r   r  r}  rK  r   r~  r  r   r'   r   rd  rX  )r<   r  r  r`  r   r   indicess          r>   test_branchy_chainz*DeltaChainIteratorTests.test_branchy_chainU  s    01q 	T 	TAQ#a&&--:P:P0P,Q RSSSSIIQ--#U32..///$2E2Ea2H2HIIIIIr?   c                 n   |                      dg          \  }t                      }t          |t          |j        dffg| j                  }|                     |          }|                     dg||           |                     t          |j                  g|
                                           d S )Nr  r/  ry  r   rM  r   r'   r   rd  rz  rX  rd  rn   r   ext_refsr<   r  r   r   rc  s        r>   test_ext_refz$DeltaChainIteratorTests.test_ext_ref`  s    ""G9--IIQ)dgx-@!A B$*UUU''**	Wi888*TW--.	0B0B0D0DEEEEEr?   c                    |                      dg          \  }t                      }t          |t          dft          |j        dffg| j                  }|                     |          }|                     ddg||           |                     t          |j                  g|
                                           d S )Nr  rm  r/  ry  r&   r   r  r  s        r>   test_ext_ref_chainz*DeltaChainIteratorTests.test_ext_ref_chainh  s    ""G9--IIM*TWh/0 *
 
 
 ''**	A;;;*TW--.	0B0B0D0DEEEEEr?   c                    |                      dg          \  }|                      dg          \  }|j        |j        k     sJ t                      }t          |t          |j        dfft          dfg| j                  }|                     |          }|                     ddg||           |                     t          |j                  g|
                                           d S )Nr  rj  )r   ry  ry  r   r&   )rM  rd  r   r'   r   rz  rX  rd  rn   r   r  )r<   r  blob2r   r   rc  s         r>   test_ext_ref_chain_degeneratez5DeltaChainIteratorTests.test_ext_ref_chain_degeneratew  s     ""G9--##XJ//w!!!!IITWh/0M* *
 
 
 ''**	A;;;*TW--.	0B0B0D0DEEEEEr?   c                    |                      dg          \  }t                      }t          |t          |j        dfft          |j        dffg| j                  }|                     |          }|                     ddg||           |                     t          |j                  g|
                                           d S )Nr  r/  rj  ry  r   r&   r  r  s        r>   test_ext_ref_multiple_timesz3DeltaChainIteratorTests.test_ext_ref_multiple_times  s    ""G9--IITWh/0TWh/0 *
 
 
 ''**	A;;;*TW--.	0B0B0D0DEEEEEr?   c                    |                      ddg          \  }}t                      }t          |t          |j        dfft          |j        dffg| j                  }|                     |          }|                     ddg||           |                     t          |j                  t          |j                  g|
                                           d S )Nrs  rt     foo1   bar2ry  r   r&   r  )r<   r#  r$  r   r   rc  s         r>   test_multiple_ext_refsz.DeltaChainIteratorTests.test_multiple_ext_refs  s    !!66"233BIIRUG,-RUG,- *
 
 
 ''**	A;;;*RU++Z->->?ASASAUAUVVVVVr?   c                    |                      dg          \  }t                      }t          |t          |j        dffg| j                   |                     |d          }	 t          |                                           | 	                                 d S # t          $ r-}|                     |j        gf|j                   Y d }~d S d }~ww xY w)Nr  r/  ry  F)rW  )rM  r   r'   r   rd  rz  rX  r   ra  rQ   rl   rn   rT   )r<   r  r   rc  rV   s        r>   test_bad_ext_ref_non_thin_packz6DeltaChainIteratorTests.test_bad_ext_ref_non_thin_pack  s    ""G9--II1	DGX#678
KKKK'''66		3++--...IIKKKKK 	3 	3 	3twi\16222222222	3s   %5B 
C&"CCc           	      |   |                      g d          \  }}}t                      }t          |t          dft          |j        dfft          |j        dfft          |j        dffg| j                   | j        |j        = | j        |j        = |                     |          }	 t          |                                           | 	                                 d S # t          $ rT}|                     t          |j        |j        g          ft          |j        d                   f           Y d }~d S d }~ww xY w)N)rs  rt  s   baz)r&   s   foo99r  r  s   baz3ry  r   )rM  r   r'   r   rd  rz  rX  r   ra  rQ   rl   rn   rg  rT   )r<   r#  r$  b3r   rc  rV   s          r>   test_bad_ext_ref_thin_packz2DeltaChainIteratorTests.test_bad_ext_ref_thin_pack  sS   %%&>&>&>??
BIIM*RUG,-RUG,-RUG,-	 *		
 		
 		
 		
 JruJru''**		N++--...IIKKKKK 	N 	N 	NfbeRU^446q	9J9J8LMMMMMMMMM	Ns   &5C 
D;'A	D66D;r2   )rZ   r[   r\   r4   rM  rR  rX  r]  rd  rh  rk  rn  rs  ru  rw  rz  r  r  r  r  r  r  r  r  r  ra   rb   s   @r>   rG  rG    s           
  	+ 	+ 	+U U U U_ _ _ _G G Gt t t&K K K"
L 
L 
LL L L
L 
L 
LL L L R R RO O O	J 	J 	JF F FF F FF F F(F F FW W W	3 	3 	3N N N N N N Nr?   rG  c                       e Zd Zd ZdS )DeltaEncodeSizeTestsc                 d   |                      dt          d                     |                      dt          d                     |                      dt          d                     |                      dt          d                     |                      d	t          d
                     d S )N    r      r&   s      s     s   r   )rn   r   r   s    r>   
test_basiczDeltaEncodeSizeTests.test_basic  s    "4Q"7"7888"4Q"7"7888&8&=&=>>>&8&>&>???*<V*D*DEEEEEr?   NrZ   r[   r\   r  r   r?   r>   r  r    s(        F F F F Fr?   r  c                       e Zd Zd ZdS )EncodeCopyOperationTestsc                 &   |                      dt          dd                     |                      dt          dd                     |                      dt          dd                     |                      d	t          dd                     d S )
N   r   s   
r&   r   s   dr|  r  s   )rn   r   r   s    r>   r  z#EncodeCopyOperationTests.test_basic  s    "8A">">???*@B*G*GHHH,.DS$.O.OPPP,.DT1.M.MNNNNNr?   Nr  r   r?   r>   r  r    s(        O O O O Or?   r  )Mr]   rB   r9   sysr5   r  hashlibr   ior   dulwich.testsr   errorsr   r   rD  r	   object_storer
   r0  r   r   r   r   r   rw  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   utilsr'   r(   rj   ro   rp   rq   platformr   r0   rd   r   r   r  rq  r  r  r  r  r  r  r  r  r  r'  r:  rG  r  r  r   r?   r>   <module>r     s  ,   
			  



               " " " " " " 6 6 6 6 6 6 6 6       , , , , , , @ @ @ @ @ @ @ @ @ @ @ @ @ @< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < + * * * * * * *7	368
,'11JJz	       @4@ 4@ 4@ 4@ 4@Y 4@ 4@ 4@nX< X< X< X< X<X X< X< X<vp
 p
 p
 p
 p
9 p
 p
 p
fX< X< X< X< X<y X< X< X<vT T T T T9 T T Tn*9 *9 *9 *9 *9X *9 *9 *9Z 
EFF:. :. :. :. :. :. :. :.z6 6 6 6 6#; 6 6 6*
  
  
  
  
 X'? 
  
  
 4 4 4 4 4X'C 4 4 44 4 4 4 4X'C 4 4 4MI MI MI MI MIH MI MI MI`
 
 
 
 
8 
 
 
06G 6G 6G 6G 6G8 6G 6G 6Gr
 
 
 
 
) 
 
 
8QN QN QN QN QNh QN QN QNhF F F F F8 F F FO O O O Ox O O O O Or?   