
    .Ph                     |    d Z ddlmZ ddl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d	d
Z G d de          ZdS )z7Utility module for querying an ObjectStore with gevent.    )OptionalN)pool   )MissingObjectFinder_collect_ancestors_collect_filetree_revs)CommitObjectIDTagFignore_unknownr   c                     t                      t                      d fdfd|D             }t          j        |           fS )zSplit object id list into two list with commit SHA1s and tag SHA1s.

    Same implementation as object_store._split_commits_and_tags
    except we use gevent to parallelize object retrieval.
    returnNc                 R   	 |          }t          |t                    r                    |            d S t          |t                    r7                    |                                |j        d                    d S t          d|            # t
          $ r s Y d S w xY w)Nr   zNot a commit or a tag: )
isinstancer	   addr   objectKeyError)shaocommitsr   	obj_storetagss     T/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/dulwich/greenthreads.pyfind_commit_typez1_split_commits_and_tags.<locals>.find_commit_type0   s    	@#A
 !V$$ @C     As## @AHQK(((((>>>???  	 	 	!   	s   B B&%B&c                 2    g | ]} j         |          S  spawn).0sr   r   s     r   
<listcomp>z+_split_commits_and_tags.<locals>.<listcomp>?   s(    999JDJ'++999    r   N)setgeventjoinall)r   lstr   r   jobsr   r   r   s   ` `` @@@r   _split_commits_and_tagsr*   '   s     eeG55D@ @ @ @ @ @ @ @ @ :9999S999D
N4T?r#   c                   &    e Zd ZdZ	 	 	 	 d	 ddZdS )GreenThreadsMissingObjectFinderzFind the objects missing from another object store.

    Same implementation as object_store.MissingObjectFinder
    except we use gevent to parallelize object retrieval.
    Nr   r   c                     d fd _         t          j        |          t          |d          \  }}	t          |d          \  }
}t	          t          |          d                   }t          |
|          \  }}t                       _        fd|D             }t          j	        |           |	D ]} j        
                    |           |                    |	          }|                    |          }d	 |D              _        |	d
  _        n| _        |r
 |            pi  _        d S )Nr   c                     j                             |            |          }t          |j        j                    d S N)sha_doner   r   tree)r   cmtobject_storeselfs     r   collect_tree_shazBGreenThreadsMissingObjectFinder.__init__.<locals>.collect_tree_shaU   s?    Mc"""s#C"<4=IIIIIr#   )sizeTr   Fr   c                 <    g | ]}                     |          S r   r   )r    cr5   ps     r   r"   z<GreenThreadsMissingObjectFinder.__init__.<locals>.<listcomp>k   s(    EEE(!,,EEEr#   c                     h | ]}|d ddf	S )Nr   Fr   )r    ws     r   	<setcomp>z;GreenThreadsMissingObjectFinder.__init__.<locals>.<setcomp>s   s!    000Qaq% 000r#   c                     d S r/   r   )xs    r   <lambda>z:GreenThreadsMissingObjectFinder.__init__.<locals>.<lambda>u   s    d r#   r$   )r3   r   Poolr*   	frozensetr   r%   r0   r&   r'   r   
differenceunionobjects_to_sendprogress_tagged)r4   r3   haveswantsrE   
get_taggedconcurrencyget_parentshave_commits	have_tagswant_commits	want_tagsall_ancestorsmissing_commitscommon_commitsr)   tmissing_tagsr5   r9   s   ``                @@r   __init__z(GreenThreadsMissingObjectFinder.__init__K   s   	J 	J 	J 	J 	J 	J 	J
 )I;'''"9%1#
 #
 #
i #:%A#
 #
 #
i .7|\::1=.
 .
 +=,+
 +
' EEEEEnEEEt 	! 	!AMa     ++I66%%l33 10%000 	 *NDMM$DM"3zz||:r#   )NNr   Nr$   )__name__
__module____qualname____doc__rU   r   r#   r   r,   r,   D   sJ          -; 
-; -; -; -; -; -;r#   r,   )rY   typingr   r&   r   r3   r   r   r   objectsr	   r
   r   r*   r,   r   r#   r   <module>r\      s   0 > =                      
 + * * * * * * * * * ?D$     :4; 4; 4; 4; 4;&9 4; 4; 4; 4; 4;r#   