o
    Uh                     @   sp   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
dZG d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                   sF   t   t  d fddfdd|D }t|  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                    sv   z|  }W n t y   s Y d S w t|tr  |  d S t|tr4|   |jd  d S t d|  )Nr   zNot a commit or a tag: )KeyError
isinstancer   addr
   object)shao)commitsr   	obj_storetags h/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/dulwich/greenthreads.pyfind_commit_type0   s   


z1_split_commits_and_tags.<locals>.find_commit_typec                       g | ]}  |qS r   spawn).0s)r   r   r   r   
<listcomp>?       z+_split_commits_and_tags.<locals>.<listcomp>r   N)setgeventjoinall)r   lstr   r   jobsr   )r   r   r   r   r   r   r   _split_commits_and_tags'   s   
r'   c                   @   s&   e Zd ZdZ				d	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                    s   dfdd _ tj|dt|dd\}}	t|dd\}
}tt|d }t|
|\}}t _ fd	d
|D }t	| |	D ]}j
| qK||	}||}dd |D _|d u rpdd _n|_|rx| pyi _d S )Nr   c                    s(   j |   |  }t |jj  d S N)sha_doner   r   tree)r   cmt)object_storeselfr   r   collect_tree_shaU   s   zBGreenThreadsMissingObjectFinder.__init__.<locals>.collect_tree_sha)sizeTr   Fr   c                    r   r   r   )r   c)r/   pr   r   r   k   r    z<GreenThreadsMissingObjectFinder.__init__.<locals>.<listcomp>c                 S   s   h | ]}|d ddfqS )Nr   Fr   )r   wr   r   r   	<setcomp>s   r    z;GreenThreadsMissingObjectFinder.__init__.<locals>.<setcomp>c                 S   s   d S r)   r   )xr   r   r   <lambda>u   s    z:GreenThreadsMissingObjectFinder.__init__.<locals>.<lambda>r!   )r-   r   Poolr'   	frozensetr   r"   r*   r#   r$   r   
differenceunionobjects_to_sendprogress_tagged)r.   r-   haveswantsr<   
get_taggedconcurrencyget_parentshave_commits	have_tagswant_commits	want_tagsall_ancestorsmissing_commitscommon_commitsr&   tmissing_tagsr   )r/   r-   r2   r.   r   __init__K   s8   





z(GreenThreadsMissingObjectFinder.__init__)NNr   Nr!   )__name__
__module____qualname____doc__rL   r   r   r   r   r(   D   s    	r(   )rP   typingr   r#   r   r-   r   r   r   objectsr   r	   r
   r'   r(   r   r   r   r   <module>   s   