HEX
Server: Apache
System: Linux infong-uk86 4.4.400-icpu-106 #2 SMP Mon Sep 15 08:23:40 UTC 2025 x86_64
User: u44115835 (4976590)
PHP: 8.4.17
Disabled: NONE
Upload Files
File: //kunden/lib/python3/dist-packages/dulwich/__pycache__/greenthreads.cpython-39.pyc
a

�~�_��@sjdZddlZddlmZddlmZmZddlmZmZm	Z	d
dd�Z
Gd	d
�d
e�ZGdd�de	�ZdS)z7Utility module for querying an ObjectStore with gevent.�N)�pool)�Commit�Tag)�MissingObjectFinder�_collect_filetree_revs�ObjectStoreIteratorFcsDt��t������fdd����fdd�|D�}t�|���fS)z�Split 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.
    csrz�|}Wnty$�s �YnJ0t|t�r<��|�n2t|t�rb��|���|jd�ntd|��dS)N�zNot a commit or a tag: %s)�KeyError�
isinstancer�addr�object)�sha�o)�commits�ignore_unknown�	obj_store�tags��6/usr/lib/python3/dist-packages/dulwich/greenthreads.py�find_commit_type1s


z1_split_commits_and_tags.<locals>.find_commit_typecsg|]}���|��qSr��spawn)�.0�s)rrrr�
<listcomp>?�z+_split_commits_and_tags.<locals>.<listcomp>)�set�gevent�joinall)rZlstrr�jobsr)rrrrrrr�_split_commits_and_tags's
r c@seZdZdZddd�ZdS)�GreenThreadsMissingObjectFinderz�Find the objects missing from another object store.

    Same implementation as object_store.MissingObjectFinder
    except we use gevent to parallelize object retrieval.
    Nrcs���fdd����_tj|d��t�|d��\}}	t�|d��\}
}��|�d}��|
|�\}
}t��_��fdd�|D�}t�|�|	D]}�j�	|�q�|�
|	�}|
�|�}td	d�|D���_|dur�d
d��_
n|�_
|r�|�p�i�_dS)Ncs(�j�|��|}t�|j�j�dS�N)�sha_donerrZtree)r
Zcmt)�object_store�selfrr�collect_tree_shaNszBGreenThreadsMissingObjectFinder.__init__.<locals>.collect_tree_sha��sizeTFrcsg|]}���|��qSrr)r�c)r&�prrrarz<GreenThreadsMissingObjectFinder.__init__.<locals>.<listcomp>cSsg|]}|ddf�qS)NFr)r�wrrrrgrcSsdSr"r)�xrrr�<lambda>irz:GreenThreadsMissingObjectFinder.__init__.<locals>.<lambda>)r$r�Poolr Z_collect_ancestorsrr#rrr�
difference�union�objects_to_send�progressZ_tagged)r%r$ZhavesZwantsr2Z
get_tagged�concurrencyZget_parentsZhave_commitsZ	have_tagsZwant_commitsZ	want_tagsZ
all_ancestorsZmissing_commitsZcommon_commitsr�tZmissing_tagsr)r&r$r*r%r�__init__Js4����
�


z(GreenThreadsMissingObjectFinder.__init__)NNrN)�__name__�
__module__�__qualname__�__doc__r5rrrrr!Ds�r!cs:eZdZdZd�fdd�	Zdd�Zdd�Zd	d
�Z�ZS)�GreenThreadsObjectStoreIteratorz�ObjectIterator that works on top of an ObjectStore.

    Same implementation as object_store.ObjectStoreIterator
    except we use gevent to parallelize object retrieval.
    rcs*||_tj|d�|_tt|��||�dS)Nr')�finderrr.r*�superr:r5)r%�storeZshasr;r3��	__class__rrr5usz(GreenThreadsObjectStoreIterator.__init__cCs|\}}|j||fSr")r=)r%�argsr
�pathrrr�retrievezsz(GreenThreadsObjectStoreIterator.retrieveccs,|j�|j|���D]\}}||fVqdSr")r*Zimap_unorderedrBZitershas)r%r
rArrr�__iter__~s
�z(GreenThreadsObjectStoreIterator.__iter__cCs�t|j�dkrt|j�St|jj�r�g}tdt|jj��D]}|�|j�|jj��q:t	�
|�|D]}|jdurd|j�|j�qdqt|j�S)Nr)�lenZ_shasr;r1�range�appendr*r�nextrr�value)r%r�_�jrrr�__len__�s


z'GreenThreadsObjectStoreIterator.__len__)r)	r6r7r8r9r5rBrCrK�
__classcell__rrr>rr:os
r:)FN)
r9rrZdulwich.objectsrrZdulwich.object_storerrrr r!r:rrrr�<module>s�
+