
    .Ph0                        d Z ddlmZmZmZ ddlmZ ddlmZ ddl	m
Z
mZmZ ddlmZmZmZ ddlmZ dd	lmZmZ erdd
l	mZ 	 ddlmZ n# e$ r dZY nw xY w eed          Z G d d          Z G d de          ZdS )z%Tests for the object store interface.    )TYPE_CHECKINGAnyCallable)
skipUnless)commit_tree)PackBasedObjectStoreiter_tree_contentspeel_sha)BlobTree	TreeEntry)DEPTH_INFINITE   )make_objectmake_tag)BaseObjectStore)patchN
   yummy datadatac                      e Zd ZU ded<   eeegdf         ed<   eee         eg ef         gdf         ed<   eeegdf         ed<   eeegdf         ed<   eeegdf         ed<   d d
Z	d dZ
 eed          d d            Zd dZd dZd dZd dZd dZd dZd dZd dZd dZd dZd dZd dZd Zd dZd dZd dZd dZd dZdS )!ObjectStoreTestsr   storeNassertEqualassertRaisesassertNotInassertNotEqualassertInreturnc                 h    |                      dg| j                            ddi                     d S )N(   1111111111111111111111111111111111111111   refs/heads/foor   r   determine_wants_allselfs    _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/dulwich/tests/test_object_store.pytest_determine_wants_allz)ObjectStoreTests.test_determine_wants_all?   sB    KJ**,=y+IJJ	
 	
 	
 	
 	
    c                 f    |                      g | j                            ddi                     d S )Nr"   s(   0000000000000000000000000000000000000000r#   r%   s    r'   test_determine_wants_all_zeroz.ObjectStoreTests.test_determine_wants_all_zeroE   s?    
..0A9/MNN	
 	
 	
 	
 	
r)   zRequired mock.patchc                    | j                             t                     dt          j        i}t	          j        | j         dd          5 }|                     g | j                             |d                     |                     t          j        g| j                             |t                               |	                                 |                     g | j                             |d                     |
                    t          j                   |                     t          j        g| j                             |d                     d d d            d S # 1 swxY w Y   d S )Nr"   
_get_depthr   )return_valuer   )depth   )r   
add_object
testobjectidr   objectr   r$   r   assert_not_calledassert_called_with)r&   refsms      r'   test_determine_wants_all_depthz/ObjectStoreTests.test_determine_wants_all_depthJ   s   
j)))!:=1\$*lCCC 	qR!?!?A!?!N!NOOO
..t>.JJ   !!!R!?!?A!?!N!NOOO  ///!?!?A!?!N!N  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   
DE&&E*-E*c                    |                      d| j                            t          j                             | j                            t                     |                      d| j                            t          j        d                      t          t          d          | j                                       |                      d| j                            t          j        fd                     d S )	Nr   r   c                     g S N )xs    r'   <lambda>z1ObjectStoreTests.test_get_depth.<locals>.<lambda>a   s    " r)   )get_parentss   parent datar   r0   c                 .    | t           k    rj        gng S r<   )r2   r3   )r>   parents    r'   r?   z1ObjectStoreTests.test_get_depth.<locals>.<lambda>j   s    Q*__vykk" r)   )r   r   r-   r2   r3   r1   r   r   )r&   rB   s    @r'   test_get_depthzObjectStoreTests.test_get_depth\   s    DJ11*-@@AAA
j)))tz$$Z]$MM	
 	
 	
 T777
f%%%J!!LLLL "  	
 	
 	
 	
 	
r)   c                 V    |                      g t          | j                             d S r<   )r   listr   r%   s    r'   	test_iterzObjectStoreTests.test_itern   s(    T$*--.....r)   c                 D                           t           fd           d S )Nc                       j         d         S Ns(   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r   r%   s   r'   r?   z7ObjectStoreTests.test_get_nonexistant.<locals>.<lambda>r   s    DJy,A r)   )r   KeyErrorr%   s   `r'   test_get_nonexistantz%ObjectStoreTests.test_get_nonexistantq   s)    ($A$A$A$ABBBBBr)   c                 <    |                      d| j                   d S rI   )r   r   r%   s    r'   test_contains_nonexistantz*ObjectStoreTests.test_contains_nonexistantt   s     DJ/////r)   c                 :    | j                             g            d S r<   r   add_objectsr%   s    r'   test_add_objects_emptyz'ObjectStoreTests.test_add_objects_emptyw   s    
r"""""r)   c                 :    | j                             g            d S r<   rO   r%   s    r'   test_add_commitz ObjectStoreTests.test_add_commitz   s      	
r"""""r)   c                 "   t          t          d          }| j                            |           |j        }|j        dz   |_        | j        |         }|                     |j        |j                   |                     |j        |           dS )zdTest if updating an existing stored object doesn't erase the
        object from the store.
        s   datar   s   updateN)r   r   r   r1   r3   r   r   r   )r&   test_objecttest_object_idstored_test_objects       r'   test_store_resiliencez&ObjectStoreTests.test_store_resilience   s     "$W555
k***$&+i7!Z7KN,>,ABBB+.?????r)   c                 X   | j                             t                     |                     t          j        ht          | j                              |                     t          j        | j                    | j         t          j                 }|                     |t                     d S r<   )r   r1   r2   r   r3   setr   )r&   rs     r'   test_add_objectz ObjectStoreTests.test_add_object   s|    
j)))*-#dj//:::jmTZ000Jz}%J'''''r)   c                 b   t           dfg}| j                            |           |                     t           j        ht          | j                             |                     t           j        | j                   | j        t           j                 }|                     |t                      d S )Nmypath)r2   r   rP   r   r3   rZ   r   )r&   r   r[   s      r'   test_add_objectsz!ObjectStoreTests.test_add_objects   s    X&'
t$$$*-#dj//:::jmTZ000Jz}%J'''''r)   c           
         t          t          d          }t          t          d          }t          t          d          }|||fD ]}| j                            |           d|j        dfd|j        dfg}t          | j        |          }d|j        dfd|j        dfg}t          | j        |          }dd|j        |j        ff}	|                     |	gt          | j                            ||                               |                     |	d	d|j        |j        ffgt          | j                            ||d
                               d S )Ns   a1r   s   a2   b   a餁  )rb   rb   )rc   rc   )ra   ra   T)want_unchanged)	r   r   r   r1   r3   r   r   rE   tree_changes)
r&   blob_a1blob_a2blob_bblobblobs_1tree1_idblobs_2tree2_idchange_as
             r'   test_tree_changesz"ObjectStoreTests.test_tree_changes   sp   d///d///T---gv. 	( 	(DJ!!$'''''*h/$	81LMtz733'*h/$	81LMtz733 Z$

 	(T$**A*A(H*U*U%V%VWWW3fi5KL ((8D(QQRR	
 	
 	
 	
 	
r)   c           	      B   t          t          d          }t          t          d          }t          t          d          }|||fD ]}| j                            |           d|j        dfd|j        dfd|j        dfd	|j        dfd|j        dfg}t          | j        |          }|                     d
 |D             t          t          | j        |                               |                     g t          t          | j        d                                d S )Nrb   r   ra      crc      ad/b   ad/bd/c  s   ad/cc                 8    g | ]\  }}}t          |||          S r=   )r   ).0phr8   s       r'   
<listcomp>z<ObjectStoreTests.test_iter_tree_contents.<locals>.<listcomp>   s*    777IQ1Yq!Q777r)   )	r   r   r   r1   r3   r   r   rE   r	   )r&   blob_arh   blob_cri   blobstree_ids          r'   test_iter_tree_contentsz(ObjectStoreTests.test_iter_tree_contents   s3   T---T---T---VV, 	( 	(DJ!!$'''' 69h'fi*H-fi*69h'
 dj%0077777#DJ8899	
 	
 	
 	T"4TZ"F"FGGHHHHHr)   c           
      v   t          t          d          }t          t          d          }t          t          d          }|||fD ]}| j                            |           d|j        dfd|j        dfd|j        dfg}t          | j        |          }| j        |         }t          |t                    sJ | j        |d	         d
                  }t          |t                    sJ | j        |d         d
                  }	t          dd|          t          dd|j                  t          d	d|j                  t          dd|j                  t          dd|	j                  t          dd|j                  g}
t          | j        |d          }| 
                    |
t          |                     d S )Nrb   r   ra   rq   rc   rr   rs   rt   s   adr   s   bdr)   i @  s   ad/bdT)include_trees)r   r   r   r1   r3   r   
isinstancer   r   r	   r   rE   )r&   rz   rh   r{   ri   r|   r}   treetree_adtree_bdexpectedactuals               r'   %test_iter_tree_contents_include_treesz6ObjectStoreTests.test_iter_tree_contents_include_trees   s   T---T---T---VV, 	( 	(DJ!!$'''' 69h'fi*H-

 dj%00z'"$%%%%%*T%[^,'4(((((*WU^A./ c8W--dHfi00eXwz22gx33h'*55j(FI66
 $DJtLLL4<<00000r)   c                 \    t          ||          }| j                            |           |S )N)name)r   r   r1   )r&   r   objtags       r'   r   zObjectStoreTests.make_tag   s/    s&&&
c"""
r)   c                 l   | j                             t                     |                     dt                    }|                     dt                    }|                     dt                    }t          |||fD ]7}|                     |t          ft          | j         |j                             8d S )N   1   2   3)r   r1   r2   r   r   r
   r3   )r&   tag1tag2tag3r   s        r'   test_peel_shazObjectStoreTests.test_peel_sha   s    
j)))}}T:..}}T:..}}T:..dD1 	N 	NCc:.SV0L0LMMMM	N 	Nr)   c                     | j                             t                     |                     t          j        df| j                             t          j                             d S )Nr   )r   r1   r2   r   r   type_numget_rawr3   r%   s    r'   test_get_rawzObjectStoreTests.test_get_raw   sX    
j)))]M*DJ,>,>z},M,M	
 	
 	
 	
 	
r)   c                 v    | j                             t                     | j                                          d S r<   )r   r1   r2   closer%   s    r'   
test_closezObjectStoreTests.test_close   s2    
j)))
r)   c           
         | j                             t                     |                     t          j        gt          | j                             t          j                                       |                     t          j        gt          | j                             t          j        d d                                        |                     t          j        gt          | j                             t          j        d d                                        |                     t          j        gt          | j                             d                               d S )N
      r)   )r   r1   r2   r   r3   rE   iter_prefixr%   s    r'   test_iter_prefixz!ObjectStoreTests.test_iter_prefix   s   
j)))*-$tz/E/Ejm/T/T*U*UVVV]OT$*"8"8ss9K"L"LMM	
 	
 	
 	]OT$*"8"8rr9J"K"KLL	
 	
 	
 	*-$tz/E/Ec/J/J*K*KLLLLLr)   c                 |    |                      g t          | j                            d                               d S )Nr!   )r   rE   r   r   r%   s    r'   test_iter_prefix_not_foundz+ObjectStoreTests.test_iter_prefix_not_found  s6    T$*"8"8"C"CDDEEEEEr)   r   N) __name__
__module____qualname____annotations__r   r4   type	Exceptionr   r(   r+   r   r   r9   rC   rF   rK   rM   rQ   rS   rX   r\   r_   ro   r~   r   r   r   r   r   r   r   r=   r)   r'   r   r   6   s        66*D01111DOXb#g->?EFFFF66*D01111ff-t34444'-....
 
 
 

 
 
 

 Z,--   .-"
 
 
 
$/ / / /C C C C0 0 0 0# # # ## # # #
@ @ @ @( ( ( (( ( ( (
 
 
 
2I I I I*1 1 1 1<  
N N N N
 
 
 
   
	M 	M 	M 	MF F F F F Fr)   r   c                   B    e Zd ZU eed<   d	dZd	dZd	dZd	dZd	dZ	dS )
PackBasedObjectStoreTestsr   r   Nc                 L    | j         j        D ]}|                                 d S r<   )r   packsr   )r&   packs     r'   tearDownz"PackBasedObjectStoreTests.tearDown  s/    J$ 	 	DJJLLLL	 	r)   c                 `    |                      g t          | j        j                             d S r<   )r   rE   r   r   r%   s    r'   test_empty_packsz*PackBasedObjectStoreTests.test_empty_packs  s+    T$*"23344444r)   c                 F   t          t          d          }| j                            |           t          t          d          }| j                            |           t          t          d          }t          t          d          }| j                            |d f|d fg           |                     |j        |j        |j        |j        ht          | j                             |                     dt          | j        j	                             |                     d| j        
                                           |                     g t          | j        j	                             |                     d| j        
                                           d S )	Nr   r      more yummy data   even more yummy data   and more yummy datar   r0   r   )r   r   r   r1   rP   r   r3   rZ   lenr   pack_loose_objectsr   rE   )r&   b1b2b3b4s        r'   test_pack_loose_objectsz1PackBasedObjectStoreTests.test_pack_loose_objects  s_   M222
b!!!$6777
b!!!$;<<<$:;;;
T
RJ7888"%ru5s4:GGGC
 011222DJ99;;<<<BTZ%5 6 6777DJ99;;<<<<<r)   c                    t          t          d          }| j                            |           t          t          d          }| j                            |           t          t          d          }t          t          d          }| j                            |d f|d fg           t          t          d          }t          t          d          }| j                            |d f|d fg           |                     |j        |j        |j        |j        |j        |j        ht          | j                             |                     dt          | j        j	                             |                     d	| j        
                                           |                     d
t          | j        j	                             |                     d| j                                                   d S )Nr   r   r   r   r   s   and more datas   and some more datar0      r   r   r   r   r   r1   rP   r   r3   rZ   r   r   repackr   )r&   r   r   r   r   b5b6s          r'   test_repackz%PackBasedObjectStoreTests.test_repack'  s   M222
b!!!$6777
b!!!$;<<<$:;;;
T
RJ7888$4555$9:::
T
RJ7888"%rubeRUCS__UUUC
 011222DJ--//000C
 011222DJ99;;<<<<<r)   c                    t          t          d          }| j                            |           t          t          d          }| j                            |           | j                            |d f|d fg           | j                            |d fg           |                     |j        |j        ht          | j                             |                     dt          | j        j	                             |                     d| j        
                                           |                     dt          | j        j	                             |                     d| j                                                   |                     |j        |j        ht          | j                             |                     dt          | j        j	                             |                     d| j        
                                           |                     dt          | j        j	                             |                     d| j                                                   d S )Nr   r   r   r0   r   r   r   )r&   r   r   s      r'   test_repack_existingz.PackBasedObjectStoreTests.test_repack_existing8  s    M222
b!!!$6777
b!!!
T
RJ7888
T
|,,,"%TZ999C
 011222DJ--//000C
 011222DJ99;;<<<"%TZ999C
 011222DJ--//000C
 011222DJ99;;<<<<<r)   r   )
r   r   r   r   r   r   r   r   r   r   r=   r)   r'   r   r     s            5 5 5 5= = = == = = ="= = = = = =r)   r   )__doc__typingr   r   r   unittestr   dulwich.indexr   dulwich.object_storer   r	   r
   dulwich.objectsr   r   r   dulwich.protocolr   utilsr   r   r   unittest.mockr   ImportErrorr2   r   r   r=   r)   r'   <module>r      s  , , + / / / / / / / / / /       % % % % % %         
         
 , + + + + + ( ( ( ( ( ( ( ( 5444444#######   EEE [M222
VF VF VF VF VF VF VF VFr:= := := := := 0 := := := := :=s   A AA