
    d                     l    d 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	 dddd	Z
 G d
 de          ZdS )z7Utility module for querying an ObjectStore with gevent.    N)pool   )MissingObjectFinder_collect_ancestors_collect_filetree_revs)CommitTagFignore_unknownr   c                     t                      t                       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.
    c                 R   	 |          }t          |t                    r                    |            d S t          |t                    r7                    |                                |j        d                    d S t          d| z            # t
          $ r s Y d S w xY w)Nr   zNot a commit or a tag: %s)
isinstancer   addr	   objectKeyError)shaocommitsr   	obj_storetagss     X/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/dulwich/greenthreads.pyfind_commit_typez1_split_commits_and_tags.<locals>.find_commit_type*   s    	B#A
 !V$$ BC     As## BAHQK(((((:S@AAA  	 	 	!   	s   B B&%B&c                 2    g | ]} j         |          S  spawn).0sr   r   s     r   
<listcomp>z+_split_commits_and_tags.<locals>.<listcomp>9   s(    999JDJ'++999    )setgeventjoinall)r   lstr   r   jobsr   r   r   s   ` `` @@@r   _split_commits_and_tagsr&   !   s     eeG55DB B B B B B B B :9999S999D
N4T?r    c                   "    e Zd ZdZ	 	 	 	 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   c                 h     fd _         t          j        |          t          |d          \  }}	t          |d          \  }
}t	          |          d         }t	          |
|          \  }}t                       _        fd|D             }t          j        |           |	D ]} j        	                    |           |
                    |	          }|                    |          }d |D              _        |	d	  _        n| _        |r
 |            pi  _        d S )
Nc                     j                             |            |          }t          |j        j                    d S N)sha_doner   r   tree)r   cmtobject_storeselfs     r   collect_tree_shazBGreenThreadsMissingObjectFinder.__init__.<locals>.collect_tree_shaO   s?    Mc"""s#C"<4=IIIIIr    )sizeTr
   Fr   c                 <    g | ]}                     |          S r   r   )r   cr1   ps     r   r   z<GreenThreadsMissingObjectFinder.__init__.<locals>.<listcomp>_   s(    EEE(!,,EEEr    c                     h | ]}|d dfS )NFr   )r   ws     r   	<setcomp>z;GreenThreadsMissingObjectFinder.__init__.<locals>.<setcomp>e   s    @@@QD% 0@@@r    c                     d S r+   r   )xs    r   <lambda>z:GreenThreadsMissingObjectFinder.__init__.<locals>.<lambda>g   s    d r    )r/   r   Poolr&   r   r!   r,   r"   r#   r   
differenceunionobjects_to_sendprogress_tagged)r0   r/   haveswantsr@   
get_taggedconcurrencyget_parentshave_commits	have_tagswant_commits	want_tagsall_ancestorsmissing_commitscommon_commitsr%   tmissing_tagsr1   r5   s   ``                @@r   __init__z(GreenThreadsMissingObjectFinder.__init__E   s   	J 	J 	J 	J 	J 	J
 )I;'''"9,^bij"k"k"ki"9,^cjk"l"l"li*<FFqI*<,+
 +
' EEEEEnEEEt 	! 	!AMa     ++I66%%l33@@%@@@*NDMM$DM!2jjll8br    )NNr   N)__name__
__module____qualname____doc__rP   r   r    r   r(   r(   >   s@          %9 %9 %9 %9 %9 %9r    r(   )rT   r"   r   r/   r   r   r   objectsr   r	   r&   r(   r   r    r   <module>rV      s   . > =       3 3 3 3 3 3 3 3 3 3                 ?D$     :,9 ,9 ,9 ,9 ,9&9 ,9 ,9 ,9 ,9 ,9r    