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__/objects.cpython-313.pyc
�

mEdg��	�P�%SrSSKrSSKrSSKrSSKrSSKrSSKrSSKJr SSK	J
r
JrJr SSK
Jr SSKJr SSKJrJrJrJr SS	KJrJrJrJrJrJrJr SS
KJr \(aSSK J!r! Sr"S
r#Sr$Sr%Sr&Sr'Sr(Sr)Sr*Sr+Sr,Sr-Sr.Sr/Sr0\1r2"SS\5r3Sr4Sr5Sr6S r7S!\84S"jr9S#r:S$r;S%\<S&\<S!\14S'jr=SXS(\>S)\\>4S*jjr?S+\\1\<4S!\\@S,4S-jrASYS.jrBS/\\1S0\>S!S4S1jrCSYS2jrDS3rE"S4S55rF"S6S,5rG"S7S8\G5rHS9\\1S!\\\IS:\I\\1\1444S;jrJS<rK"S=S>\G5rL"S?S@\"S@/SAQ55rMSZSBjrNSCrOSD\84SEjrPSF\I\1\I\<\244S!\14SGjrQSF\I\1\I\<\244S!\14SHjrRS[S!\>4SIjjrS"SJSK\T5rU"SLSM\G5rVSNrWSZSOjrXSPrYSQrZSRr["SSST\G5r\\\\V\H\L4r]0r^\_\\1\<4\@\G4\`SU'\]H!ra\a\^\aR�'\a\^\aR�'M# \Nrd\PreSSVKfJNrg SSWKfJPrh \grN\hrPg!\ia gf=f)\zAccess to base git objects.�N)�
namedtuple)�Callable�Iterable�Iterator)�sha1)�BytesIO)�
TYPE_CHECKING�BinaryIO�Optional�Union�)�ChecksumMismatch�FileFormatException�NotBlobError�NotCommitError�NotTagError�NotTreeError�ObjectFormatException)�GitFile)�HASHs(0000000000000000000000000000000000000000�treesparentsauthors	committersencodingsmergetagsgpgsigsobjectstype�tagstaggeri�l����s-----BEGIN PGP SIGNATURE-----c��\rSrSrSrSrg)�EmptyFileException�Uz+An unexpectedly empty file was encountered.�N)�__name__�
__module__�__qualname__�__firstlineno__�__doc__�__static_attributes__r��1/usr/lib/python3/dist-packages/dulwich/objects.pyrrUs��5r#rc�<�[R"U5[:H$)zXCheck if a mode indicates a submodule.

Args:
  m: Mode to check
Returns: a ``boolean``
)�stat�S_IFMT�S_IFGITLINK)�ms r$�S_ISGITLINKr*Ys���;�;�q�>�[�(�(r#c�v�[R"5nURU5nX!R5-
nU$�N)�zlib�
decompressobj�
decompress�flush)�string�dcomp�dcompeds   r$�_decompressr4cs3����� �E����v�&�G��{�{�}��G��Nr#c�f�[R"U5n[U5S:XdSU<35eU$)z5Takes a string and returns the hex of the sha within.�(z!Incorrect length of sha1 string: )�binascii�hexlify�len)�sha�hexshas  r$�
sha_to_hexr<js6��
�
�
�c�
"�F��v�;�"��L� A�&��L�L���Mr#c���[U5S:Xd
SU35e[R"U5$![a4n[	U[
5(de[
URS5UeSnAff=f)z)Takes a hex sha and returns a binary sha.r6zIncorrect length of hexsha: rN)r9r7�	unhexlify�	TypeError�
isinstance�bytes�
ValueError�args)�hex�excs  r$�
hex_to_sharFqsj���s�8�r�>�?�9�#��?�?�>�/��!�!�#�&�&���/��#�u�%�%������!��%�3�.��/�s�1�
A/�/A*�*A/�returnc��[U5S:wag[R"U5 g![[R4a gf=f)Nr6FT)r9r7r>r?�Error)rDs r$�valid_hexsharJ|sE��
�3�x�2�~������3����
�x�~�~�&����s�)�A�Ac���[U5[U5La[USS5bURS5nUSSnUSSn[RRXU5$)zDTakes a hex sha and returns its filename relative to the given path.�encodeN�ascii�)�type�getattr�decode�os�path�join)rSrD�dir�files    r$�hex_to_filenamerW�s[��
�D�z��c��"�w�t�X�t�'D�'P��j�j��!��

�b�q�'�C��q�r�7�D�
�7�7�<�<��4�(�(r#c�$�UR[RRS5SSnSU3n[	U5S:XdU5eUup4[	U5S:Xa[	U5S:XdU5eX4-RS5n[
U5 U$)z?Takes an object filename and returns its corresponding hex sha.rN���NzInvalid object filename: �&rM)�rsplitrRrS�sepr9rLrF)�filename�names�errmsg�base�restrDs      r$�filename_to_hexrb�s���
�O�O�B�G�G�K�K��+�B�C�0�E�(��
�
3�F��u�:��?�"�F�"�?��J�D��t�9��>�c�$�i�2�o�5�v�5�-��;�
�
�w�
'�C��s�O��Jr#�num_type�lengthc��[U5nUc[SU35eURS-[U5R	S5-S-$)zCReturn an object header for the given numeric type and text length.�unsupported class type num: � rM�)�object_class�AssertionError�	type_name�strrL)rcrd�clss   r$�
object_headerrn�sL��
�x�
 �C�
�{��;�H�:�F�G�G��=�=�4��#�f�+�"4�"4�W�"=�=��E�Er#�name�	docstringc�4^�SU4SjjnU4Sjn[X2US9$)zBA property that helps tracking whether serialization is necessary.c�4>�[UST-U5 SUlg)N�_T)�setattr�_needs_serialization)�obj�valueros  �r$�set�"serializable_property.<locals>.set�s�����S�4�Z��'�#'�� r#c�">�[UST-5$)Nrs)rP)rvros �r$�get�"serializable_property.<locals>.get�s����s�C�$�J�'�'r#��doc�rGN)�property)rorprxr{s`   r$�serializable_propertyr��s���(�(��C�)�,�,r#rO�ShaFilec�.�[RUS5$)z�Get the object class corresponding to the given type.

Args:
  type: Either a type name string or a numeric type.
Returns: The ShaFile subclass corresponding to the given type, or None if
    type is not a valid type name/number.
N)�	_TYPE_MAPr{)rOs r$riri�s���=�=��t�$�$r#c�D�[U5(d[USU35eg)z�Check if a string is a valid hex sha string.

Args:
  hex: Hex string to check
  error_msg: Error message to use in exception
Raises:
  ObjectFormatException: Raised when the string is not valid
� N)rJr)rD�	error_msgs  r$�check_hexshar��s*������#�y�k��3�%�$8�9�9�r#�identityr�c	��Uc[U5eURS5nURS5n[US:�XS-
S:HURSUS-5S:HU[U5S-
:HSU;SU;/5(d[U5eg)	z�Check if the specified identity is valid.

This will raise an exception if the identity is not valid.

Args:
  identity: Identity string
  error_msg: Error message to use in exception
N�<�>r
� ���rh�
)r�find�allr9)r�r��email_start�	email_ends    r$�check_identityr��s�����#�I�.�.��-�-��%�K��
�
�d�#�I���1���1�_�%��0��M�M�$��a��0�B�6���X���*�*���!���!�
	
�	�	�$�I�.�.�	r#c�<�U[:�a[S[35eg)z�Check if the specified time is not prone to overflow error.

This will raise an exception if the time is not valid.

Args:
  time_seconds: time in seconds

zDate field should not exceed N)�MAX_TIMEr)�time_secondss r$�
check_timer��s$���h��#�&C�H�:�$N�O�O�r#c�*�SRU5S-$)z*Formats items into a space separated line.rgr�)rT)�itemss r$�git_liner��s���9�9�U��e�#�#r#c�B�\rSrSrSrSrS	SjrS\4SjrS\	4Sjr
Srg)
�FixedSha�zBSHA object that behaves like hashlib's but is given a fixed value.)�_hexsha�_sharGNc��[USS5bURS5n[U[5(d[	SU<35eXl[
U5Ulg)NrLrMzExpected bytes for hexsha, got )rPrLr@rAr?r�rFr�)�selfr;s  r$�__init__�FixedSha.__init__sP���6�8�T�*�6��]�]�7�+�F��&�%�(�(��=�f�Z�H�I�I����v�&��	r#c��UR$)zReturn the raw SHA digest.)r��r�s r$�digest�FixedSha.digests���y�y�r#c�8�URRS5$)zReturn the hex SHA digest.rM)r�rQr�s r$�	hexdigest�FixedSha.hexdigests���|�|�"�"�7�+�+r#r)rrrr r!�	__slots__r�rAr�rlr�r"rr#r$r�r��s'��L�#�I�'����,�3�,r#r�c	���\rSrSr%SrSr\\S'\\S'\	\S'\
\\\S'\\
SS	4\S
'\S\SS4S
j5rS6SjrS7S\	S\\4SjjrS7S\	S\4SjjrS\\4SjrS\4SjrS\4SjrS\	4SjrS\4SjrS8S\S\
\SS4SjjrS8S\\S\
\SS4Sjjr\S5rS6Sjr\ S\S\4Sj5r!\ S 5r"S6S!jr#S\\SS4S"jr$S\\4S#jr%\ S$5r&\ S%5r'\S8S&\S\
\SS4S'jj5r(\S8S\	S\\S\
\4S(jj5r)\ S)5r*S6S*jr+S6S+jr,S,r-S\	4S-jr.S9S.jr/S:S/jr0\1S05r2S\4S1jr3S\4S2jr4S\4S3jr5S\4S4jr6S\4S5jr7Sr8g);r�izA git SHA file.)�
_chunked_textrur�rurk�type_numr�Nrr��frGc��Sn[R"5nURU5nSnSnUS:aMURU5nXCRU5-
nX-
nUR	SU5n[U5nUS:aMMUSUnUR
SS5up�[U	5 [U5nU(d)[S	RURS
555eU"5$![an
[SU
35U
eSn
A
ff=f)z<Parse a legacy object, creating it but not reading the file.irr�rhNrgr
zObject size not an integer: zNot a known type: {}rM)
r-r.r/�readr�r9�split�intrBrri�formatrQ)�magicr��bufsize�decomp�header�start�end�extrark�sizerE�	obj_classs            r$�_parse_legacy_object_header�#ShaFile._parse_legacy_object_headers�����#�#�%���"�"�5�)�������A�g��F�F�7�O�E��'�'��.�.�F��N�E��+�+�e�U�+�C���K�E��A�g������ �,�,�t�Q�/��	�	W���I�!��+�	��'�&�-�-�i�.>�.>�w�.G�H��
��{����	W�'�*F�s�e�(L�M�SV�V��	W�s�C'�'
D�1D�Dc��[U5nURS5nUS:a[S5eURX#S-S5 g)z.Parse a legacy object, setting the raw string.rhrzInvalid object header, no \0r
N)r4r�r�set_raw_string)r��map�text�
header_ends    r$�_parse_legacy_object�ShaFile._parse_legacy_object7sE���3����Y�Y�u�%�
���>�'�(G�H�H����D�a��!1�2�3r#�compression_levelc#��# �[R"U5nURUR55v� UR	5HnURU5v� M UR5v� g7f)z\Return chunks representing the object in the experimental format.

Returns: List of strings
N)r-�compressobj�compress�_header�
as_raw_chunksr0)r�r��compobj�chunks    r$�as_legacy_object_chunks�ShaFile.as_legacy_object_chunks?s_���
�"�"�#4�5�����t�|�|�~�.�.��'�'�)�E��"�"�5�)�)�*��m�m�o��s�A5A7c�>�SRURUS95$)zAReturn string representing the object in the experimental format.r#)r�)rTr�)r�r�s  r$�as_legacy_object�ShaFile.as_legacy_objectJs%���x�x��(�(�;L�(�M�
�	
r#c��UR(a#SUlUR5UlSUlUR$)zhReturn chunks with serialization of the object.

Returns: List of strings, not necessarily one per line
NF)rur��
_serializer�r�s r$r��ShaFile.as_raw_chunksPs7��
�$�$��D�I�!%���!2�D��(-�D�%��!�!�!r#c�@�SRUR55$)zLReturn raw string with serialization of the object.

Returns: String object
r#)rTr�r�s r$�
as_raw_string�ShaFile.as_raw_string[s��
�x�x��*�*�,�-�-r#c�"�UR5$)z/Return raw string serialization of this object.�r�r�s r$�	__bytes__�ShaFile.__bytes__bs���!�!�#�#r#c�,�[UR5$)z#Return unique hash for this object.)�hash�idr�s r$�__hash__�ShaFile.__hash__fs���D�G�G�}�r#c�B�UR5RSS5$)z:Return a string representing this object, fit for display.�utf-8�replace)r�rQr�s r$�as_pretty_string�ShaFile.as_pretty_stringjs���!�!�#�*�*�7�I�>�>r#r�r:c�r�[U[5(d[SU<35eURU/U5 g)z9Set the contents of this object from a serialized string.zExpected bytes for text, got N)r@rAr?�set_raw_chunks)r�r�r:s   r$r��ShaFile.set_raw_stringns4���$��&�&��;�D�8�D�E�E����T�F�C�(r#�chunksc�v�XlURU5 UcSUlO[U5UlSUlg)z6Set the contents of this object from a list of chunks.NF)r��_deserializer�r�ru)r�r�r:s   r$r��ShaFile.set_raw_chunksts7��$�����&�!��;��D�I� ��
�D�I�$)��!r#c�x�[USS5S-	S-n[U5nU(d[SU35eU"5$)z?Parse a new style object, creating it but not reading the file.rr
��zNot a known type )�ordrir)r�r�rcr�s    r$�_parse_object_header�ShaFile._parse_object_header�sE����a��
�O�q�(�A�-�� ��*�	��'�*;�H�:�(F�G�G��{�r#c��[USS5nSnUS-S:wa [XUS-5nUS-
nUS-S:waM XSnUR[U55 g)z-Parse a new style object, setting self._text.rr
�N)r�r�r4)r�r��byte�used�raws     r$�
_parse_object�ShaFile._parse_object�sl���3�q��8�}�����d�{�q� ��s�$��(�+�,�D��A�I�D��d�{�q� ��%�j�����K��,�-r#r�c�x�[USS5n[USS5nUS-U-nUS-S:H=(a US-S:H$)Nrr
rN���)r�)rmr��b0�b1�words     r$�_is_legacy_object�ShaFile._is_legacy_object�sJ��
��q���_��
��q���_���a��2�~���T�	�d�"�7��r�	�a�'7�7r#c��UR5nU(d[S5eURU5(a$URX!5nUR	U5 U$URX!5nUR
U5 U$)NzCorrupted empty file detected)r�rrr�r�r�r�)rmr�r�rvs    r$�_parse_file�ShaFile._parse_file�sw���f�f�h���$�%D�E�E�� � ��%�%��1�1�#�9�C��$�$�S�)��
��*�*�3�2�C����c�"��
r#c�.�SUl/UlSUlg)zDon't call this directly.NT)r�r�rur�s r$r��ShaFile.__init__�s����	����$(��!r#c�,�[UR5er,)�NotImplementedErrorr��r�r�s  r$r��ShaFile._deserialize�s��!�$�"3�"3�4�4r#c�,�[UR5er,)rr�r�s r$r��ShaFile._serialize�s��!�$�/�/�2�2r#c�r�[US5nURU5sSSS5 $!,(df   g=f)zOpen a SHA file from disk.�rbN)r�	from_file)rmrSr�s   r$�	from_path�ShaFile.from_path�s(���T�4�
 �A��=�=��#�!�
 �
 �s�(�
6c��URU5nSUlU$![[4an[	S5UeSnAff=f)z'Get the contents of a SHA file on disk.Nzinvalid object header)rr��
IndexErrorrBr)rmr�rvrEs    r$r�ShaFile.from_file�sG��	J��/�/�!�$�C��C�H��J���J�'�	J�'�(?�@�c�I��	J�s��=�8�=r1c�n�[U5nUc[SU35eU"5nURX5 U$)z�Creates an object of the indicated type from the raw string given.

Args:
  type_num: The numeric type of the object.
  string: The raw uncompressed contents.
  sha: Optional known sha for the object
rf)rirjr�)r�r1r:rmrvs     r$�from_raw_string�ShaFile.from_raw_string��@���8�$���;� �#?��z�!J�K�K��e�����6�'��
r#c�n�[U5nUc[SU35eU"5nURX5 U$)z�Creates an object of the indicated type from the raw chunks given.

Args:
  type_num: The numeric type of the object.
  chunks: An iterable of the raw uncompressed contents.
  sha: Optional known sha for the object
rf)rirjr�)r�r�r:rmrvs     r$�from_raw_chunks�ShaFile.from_raw_chunks�rr#c�6�U"5nURU5 U$)zCreate a ShaFile from a string.�r�)rmr1rvs   r$�from_string�ShaFile.from_string�s���e�����6�"��
r#c�4�[XS5c[U5eg)aCheck that the object has a given member variable.

Args:
  member: the member variable to check for
  error_msg: the message for an error if the member is missing
Raises:
  ObjectFormatException: with the given error_msg if member is
    missing or is None
N)rPr)r��memberr�s   r$�_check_has_member�ShaFile._check_has_member�s!���4��&�.�'�	�2�2�/r#c���URnURUR55 SUlURnX:wa[
X!5eg![an[U5UeSnAff=f)z�Check this object for internal consistency.

Raises:
  ObjectFormatException: if the object is malformed in some way
  ChecksumMismatch: if the object was created with a SHA that does
    not match its contents
N)r�r�r�r��	Exceptionrr)r��old_sha�new_sharEs    r$�check�
ShaFile.check�sp���'�'��	6����d�0�0�2�3��D�I��g�g�G���"�7�4�4����	6�'��,�#�5��	6�s�2A�
A,�A'�'A,c�J�[URUR55$r,)rnr��
raw_lengthr�s r$r��ShaFile._headers���T�]�]�D�O�O�,=�>�>r#c�P�[[[UR555$)z4Returns the length of the raw string of this object.)�sumr�r9r�r�s r$r/�ShaFile.raw_lengths���3�s�D�.�.�0�1�2�2r#c��URbUR(aW[5nURUR	55 UR5HnURU5 M XlUR$)z0The SHA1 object that is the name of this object.)r�rur�updater�r�)r�r+r�s   r$r:�ShaFile.shas[���9�9��� 9� 9��f�G��N�N�4�<�<�>�*��+�+�-�����u�%�.��I��y�y�r#c���[UR5nUc[SUR35eURURUR	5UR
5$)z:Create a new copy of this SHA1 object from its raw string.zinvalid type num )rir�rjrr�r�)r�r�s  r$�copy�ShaFile.copy&sS�� ����/�	��� �#4�T�]�]�O�!D�E�E��(�(�����8J�8J�8L�d�g�g�V�Vr#c�\�UR5R5RS5$)zThe hex SHA of this object.rM)r:r�rLr�s r$r��
ShaFile.id-s$���x�x�z�#�#�%�,�,�W�5�5r#c�P�SURRSURS3$)N�<r��>)�	__class__rr�r�s r$�__repr__�ShaFile.__repr__2s&���4�>�>�*�*�+�1�T�W�W�I�Q�7�7r#c�l�[U[5(+=(d URUR:g$)z3Check whether this object does not match the other.�r@r�r��r��others  r$�__ne__�ShaFile.__ne__5s$���e�W�-�-�D����E�H�H�1D�Dr#c�b�[U[5=(a URUR:H$)z1Return True if the SHAs of the two objects match.rCrDs  r$�__eq__�ShaFile.__eq__9s!���%��)�A�d�g�g����.A�Ar#c�j�[U[5(d[eURUR:$)z9Return whether SHA of this object is less than the other.�r@r�r?r�rDs  r$�__lt__�ShaFile.__lt__=s'���%��)�)��O��w�w����!�!r#c�j�[U[5(d[eURUR:*$)zDCheck whether SHA of this object is less than or equal to the other.rLrDs  r$�__le__�ShaFile.__le__Cs'���%��)�)��O��w�w�%�(�(�"�"r#r)r�r,)rGr)rGr�)9rrrr r!r��bool�__annotations__rAr�r�listrr��staticmethodr
r�r�rr�r�r�r�r�r�rlr��ObjectIDr�r�r�r��classmethodrrr�r�r�rrrrr"r&r,r�r/r:r8r�r�r@rFrIrMrPr"rr#r$r�r�s����A�I������M��D��K�(�(�
��$��&�
'�'���h��9����44�	��	�h�u�o�	�
�#�
�u�
�	"�t�E�{�	"�.�u�.�$�5�$��#��?�#�?�)�5�)�x��/A�)�T�)�>B�
*��5�k�
*�(0��(:�
*�	
�
*�����
.��8�e�8��8��8�����)�5�4��;�5�4�5�3�D��K�3��$��$�
�J��J��;?����&.�x�&8��	����"�FJ����#�E�{��19�(�1C����"����3�5�,?�3�C�3�	�W��6��6�8�#�8�E�t�E�B�t�B�"�t�"�#�t�#r#c��^�\rSrSr%SrSrSrSr\\	\
S'SU4S	jjrS
rSSjr
\"\\
SS
9rSrS\\	SS4SjrSrSSjr\"\\SS
9r\S5rSU4SjjrS\\	4SjrSrU=r$)�BlobiJzA Git Blob object.rsblob�r�rGNc�>>�[TU]5 /UlSUlg�NF)�superr�r�ru�r�r?s �r$r��
Blob.__init__Ts���
�������$)��!r#c�"�UR5$r,r�r�s r$�	_get_data�Blob._get_dataYs���!�!�#�#r#c�&�URU5 gr,r!)r��datas  r$�	_set_data�Blob._set_data\s�����D�!r#z*The text contained within the blob object.r}c��UR$r,�r�r�s r$�_get_chunked�Blob._get_chunkedc����!�!�!r#r�c��Xlgr,rhr
s  r$�_set_chunked�Blob._set_chunkedf���#�r#c��UR$r,rhr�s r$r��Blob._serializeirkr#c��Xlgr,rhr
s  r$r��Blob._deserializelror#z>The text in the blob object, as chunks (not necessarily lines)c�f�[RU5n[X 5(d[U5eU$r,)r�rr@r)rmrS�blobs   r$r�Blob.from_pathus-��� � ��&���$�$�$��t�$�$��r#c�">�[TU]5 g)�uCheck this object for internal consistency.

Raises:
  ObjectFormatException: if the object is malformed in some way
N)r]r,r^s �r$r,�
Blob.check|s���	��
�r#c���URnU(d/$[U5S:XaUSRS5$Sn/nUH�nURS5n[U5S:�a;URU=(d SUS-5 UR	USS5 USnM^[U5S:XdMoUcUR5nM�X%R5-
nM� UbURU5 U$)zNReturn list of lines in this blob.

This preserves the original line endings.
r
rTNr#r�)�chunkedr9�
splitlines�append�extend�pop)r�r��	remaining�retr��liness      r$r|�Blob.splitlines�s���
������I��v�;�!���!�9�'�'��-�-��	����E��$�$�T�*�E��5�z�A�~��
�
�I�,���a��8�9��
�
�5��2�;�'�!�"�I�	��U��q���$� %�	�	��I�����,�I��� ��J�J�y�!��
r#)r�rur)rrrr r!r�rkr�rTrArSr�rarer�rdrirmr�r�r{rWrr,r|r"�
__classcell__�r?s@r$rYrYJs������I��I��H���;��*�
$�"���9�"N��D�"�$�4��;�$�4�$�"�$����L��G�������D��K��r#rYr��NNc#�t# �[SRU55nSnSnSnSnUHLnURS5(a	X6SS-
nM"UbX%"U54v� US:Xa O,URSS5up#MN SnUbX%"U54v� S	v� U(dSUR	54v� UR5 g7f)
a9Parse a message with a list of fields and a body.

Args:
  chunks: the raw chunks of the tag or commit object.
Returns: iterator of tuples of (field, value), one per header line, in the
    order read from the text, possibly including duplicates. Includes a
    field named None for the freeform tag/commit text.
r#NFc�J�U(aURS5(aUSS$U$)z"Strip the last newline from value.r�Nr�)�endswith)rws r$�_strip_last_newline�+_parse_message.<locals>._strip_last_newline�s$���U�^�^�E�*�*���"�:���r#rgr
r�Tr�)rrT�
startswithr�r��close)r�r��k�v�eofr��lines       r$�_parse_messager��s����	����� �!�A��A��A�
�C�����?�?�4� � �
�a�b��M�A��}��-�a�0�1�1��u�}���Z�Z��a�(�F�Q���"���=��)�!�,�-�-�����Q�V�V�X����G�G�I�s�B6B8c#�# �UH<up#URS5n[X$S5v� USSH
nSU-S-v� M M> Sv� U(aUv� gg7f)Nr�rr
rg)r�r�)�headers�body�fieldrwr�r�s      r$�_format_messager��sa���������E�"���u�A�h�'�'��!�"�I�D���+��%�%�� �
�K���
��s�AAc�X^�\rSrSr%SrSrSrSr\\	\
S'S"U4S	jjr\S
5r
S"U4SjjrSrS"S
jrSrS"Sjr\"\\5r\"SS5r\"SS5r\"SS5r\"SS5r\"SS5r\"SS5rS#S\\SS4SjjrS\	4SjrS#S\\\SS4S jjr S!r!U=r"$)$�Tagi�zA Git Tag object.rr�)	�_message�_name�
_object_class�_object_sha�
_signature�	_tag_time�
_tag_timezone�_tag_timezone_neg_utc�_taggerr�rGNc�h>�[TU]5 SUlSUlSUlSUlSUlgr\)r]r�r�r�r�r�r�r^s �r$r��Tag.__init__�s3���
����������!���%*��"�+/��r#c�f�[RU5n[X 5(d[U5eU$r,)r�rr@r)rmr]�tags   r$r�
Tag.from_path�s-������)���#�#�#��h�'�'��
r#c��>�[TU]5 URceURSS5 URSS5 URSS5 UR(d[S5e[
URS	5 URb[URS
5 URSS5 [UR5 Sn[UR5H|up#U[:XaUb[S
5eU[:XaU[:wa[S5eU[:XaU[:wa[S5eU[ :XaU[:wa[S5eUnM~ g)rxNr�zmissing object shar�zmissing object typer�zmissing tag namezempty tag namezinvalid object shazinvalid taggerr�zmissing tag timezunexpected objectzunexpected typezunexpected tag namezunexpected tagger)r]r,r�r&r�rr�r�r�r�r�r�r��_OBJECT_HEADER�_TYPE_HEADER�_TAG_HEADER�_TAGGER_HEADER)r��lastr�rsr?s    �r$r,�	Tag.checks8���	��
���!�!�-�-�-����}�.B�C�����0E�F����w�(:�;��z�z�'�(8�9�9��T�%�%�';�<��<�<�#��4�<�<�)9�:����{�,>�?��4�>�>�"���&�t�'9�'9�:�H�E���&�4�+;�+�,?�@�@��,�&�4�>�+A�+�,=�>�>��+�%�$�,�*>�+�,A�B�B��.�(�T�[�-@�+�,?�@�@��D�;r#c	��/nUR[UR45 UR[URR
45 UR[UR45 UR(a{URc"UR[UR45 OLUR[[URURURUR4545 URcURcSnO+UR=(d SUR=(d S-n[![#X55$)Nr#)r}r�r�r�r�rkr�r�r�r�r��format_time_entryr�r��messager�rTr�)r�r�r�s   r$r��Tag._serialize)s����������(8�(8�9�:�����d�&8�&8�&B�&B�C�D�����T�Z�Z�0�1��<�<��~�~�%��������=�>����&�)� �L�L� �N�N�!�/�/��1K�1K�L���	��<�<��D�O�O�$;��D��L�L�'�C�D�O�O�,B�s�C�D��O�G�2�3�3r#c��SUlSUlSUlSUl[	U5GHup#U[
:XaX0lMU[:Xa@[U[5(de[U5nU(d[SU<35eX@lMbU[:XaX0lMtU[:Xa([!U5uUlUluUlUlM�Uc>UcSUlSUlM�UR'[(5nUSUUlX5SUlM�[SUR-SS535e g![*a X0lSUlGM#f=f)z&Grab the metadata attached to the tag.NFzNot a known type: zUnknown field rMr�)r�r�r�r�r�r�r�r�r@rArirr�r�r�r��parse_time_entryr�r��index�BEGIN_PGP_SIGNATURErBrQ)r�r�r�rwr��sig_idxs      r$r��Tag._deserializeCsC��������!���%*��"�*�6�2�L�E���&�#(� ��,�&�!�%��/�/�/�/�(��/�	� �/�2D�U�I�0N�O�O�%.�"��+�%�"�
��.�(�
%�U�+�	��L��N�D�T�'��)C����=�$(�D�M�&*�D�O�:�"'�+�+�.A�"B��
).�h�w���
�*/��/���+�$�U�\�\�'�9�%E�$F�G���?3��0&�/�(-�
�*.����/�s�%D0�0E�Ec�2�URUR4$)zOGet the object pointed to by this tag.

Returns: tuple of (object class, sha).
)r�r�r�s r$�_get_object�Tag._get_objectls��
�"�"�D�$4�$4�5�5r#c�0�UuUlUlSUlg�NT)r�r�ru�r�rws  r$�_set_object�Tag._set_objectss��16�.��	�T�-�$(��!r#rozThe name of this tag�taggerz3Returns the name of the person who created this tag�tag_timezLThe creation timestamp of the tag.  As the number of seconds since the epoch�tag_timezonez!The timezone that tag_time is in.r�z the message attached to this tag�	signaturezOptional detached GPG signature�keyidc��SSKnURSS9nUbzURU5nURSU/S9nURUR	5UR
RRRS9uUl	nSSS5 ONURUR	5UR
RRRS9uUl	nSSS5 g!,(df   N=f!,(df   g=f�NrT)�armor)r��signers)�mode)
�gpg�Context�get_key�signr��	constants�sigr��DETACHr��r�r�r��c�key�ctx�
unused_results       r$r��Tag.sign�s����
�[�[�t�[�
$��� ��i�i��&���[�[�t�c�U�[�;�s�47�H�H��*�*�,� �]�]�.�.�3�3�:�:�5=�5�1�D�N�M�<�;�12����&�&�(�s�}�}�/@�/@�/E�/E�/L�/L�17�1�-���
�%�
$�<�;��%�
$��$�&C:�AC)�	AC:�)
C7	�3C:�:
Dc�z�UR5nUR(aUS[UR5*nU$)z�Return raw string serialization without the GPG/SSH signature.

self.signature is a signature for the returned raw byte string serialization.
N)r�r�r9)r�r�s  r$�raw_without_sig�Tag.raw_without_sig�s7��
� � �"���?�?��-��T�_�_�-�-�.�C��
r#�keyidsc��URcgSSKnUR5nURUR	5URS9upEU(a�UVs/sHocRU5PM nnUHXnUHOnURH<n	UR(dMURU	R:XdM2   SSS5 g MQ MZ URRXWXE4S9eSSS5 gs snf!,(df   g=f)a�Verify GPG signature for this tag (if it is signed).

Args:
  keyids: Optional iterable of trusted keyids for this tag.
    If this tag is not signed by any key in keyids verification will
    fail. If not specified, this function only verifies that the tag
    has a valid signature.

Raises:
  gpg.errors.BadSignatures: if GPG signature verification fails
  gpg.errors.MissingSignatures: if tag was not signed by a key
    specified in keyids
Nr�r���results)r�r�r��verifyr�r��
signatures�can_sign�fpr�errors�MissingSignatures�
r�r�r�r�rd�resultr��keys�subkeyr�s
          r$r��
Tag.verify�s����?�?�"���
�[�[�]�c��:�:��$�$�&��/�/�&��L�D��4:�;�F�S���C�(�F��;��C�"&��#)�#4�#4�C�%����6�:�:����3H� &��]�$5�#'� �
�j�j�2�2�6�$��2�X�X���]��<�
�]��/�6C=�C8�3*C=�!C=�=C=�	%C=�8C=�=
D)r�r�rur�r�r�r�r�r�r�r�rr,)#rrrr r!rkr�r�rrArSr�rWrr,r�r�r�r�r��objectr�ror�r�r�r�r�rlr�r�rr�r"r�r�s@r$r�r��s�����I��H�
�I��e�_��0�����!�F4�4'�R6�)��k�;�
/�F� ��)?�@�D�
"��G��F�%��	��H�
)��;��L�$�I�/Q�R�G�%�k�3T�U�I��(�3�-��4�� ���Y�X�h�s�m�4�Y��Y�Yr#r�c�&�\rSrSrSrS\4SjrSrg)�	TreeEntryi�z.Named tuple encapsulating a single tree entry.rSc���[UR[5(d[SU<35e[	[
R"XR5URUR5$)z:Return a copy of this entry with the given path prepended.zExpected bytes for path, got )	r@rSrAr?r��	posixpathrTr�r:)r�rSs  r$�in_path�TreeEntry.in_path�sJ���$�)�)�U�+�+��;�D�8�D�E�E������i�i�8�$�)�)�T�X�X�N�Nr#rN)rrrr r!rAr�r"rr#r$r�r��s��8�O�E�Or#r�)rSr�r:c#��# �Sn[U5nX#:a�URSU5nXUnU(a%URS5(a[SUS35e[	US5nURSU5nXS	-Un	US
-nXS	-Un
[U
5S:wa[S5e[
U
5nX�U4v� X#:aM�gg![
an[SUS35UeSnAff=f7f)
z�Parse a tree text.

Args:
  text: Serialized text to parse
Returns: iterator of tuples of (name, mode, sha)

Raises:
  ObjectFormatException: if the object was malformed in some way
rrg�0zInvalid mode '�'r�Nrhr
��zSha has invalid length)r9r�r�rr�rBr<)r��strict�countrd�mode_end�	mode_textr�rE�name_endror:r;s            r$�
parse_treer��s����
�E�
��Y�F�
�.��:�:�d�E�*���x�(�	��i�*�*�4�0�0�'�.���1�(E�F�F�	P��y�!�$�D��:�:�e�X�.���q�L�8�,���2�
���a�<�%�(���s�8�r�>�'�(@�A�A��C����6�"�"�!�.���	P�'�.���1�(E�F�C�O��	P�s1�AC�B=�$AC�;C�=
C�C�C�Cc#�x# �UH0upnUSRS5S-U-S-[U5-v� M2 g7f)z�Serialize the items in a tree to a text.

Args:
  items: Sorted iterable over (name, mode, sha) tuples
Returns: Serialized tree text as chunks
�04orMrgrhN)rLrF)r�ror�r;s    r$�serialize_treer�sF���$���F��S�z�"�"�7�+�d�2�T�9�E�A�J�v�DV�V�	
�$�s�8:�
name_orderc#�# �U(a[nO[n[UR5US9HFup4UupV[	U5n[U[5(d[SU<35e[X5U5v� MH g7f)a<Iterate over a tree entries dictionary.

Args:
  name_order: If True, iterate entries in order of their name. If
    False, iterate entries in tree order, that is, treat subtree entries as
    having '/' appended.
  entries: Dictionary mapping names to (mode, sha) tuples
Returns: Iterator over (name, mode, hexsha)
)r�zExpected bytes for SHA, got N)	�key_entry_name_order�	key_entry�sortedr�r�r@rAr?r�)�entriesr�key_funcro�entryr�r;s       r$�sorted_tree_itemsr
�sj����'�����g�m�m�o�8�<�������4�y���&�%�(�(��:�6�*�E�F�F���F�+�+�
=�s�A8A:r	c�T�Uunup#[R"U5(aUS-
nU$)z=Sort key for tree entry.

Args:
  entry: (name, value) tuple
�/)r&�S_ISDIR)r	ror�r�s    r$rrs-��!��T�<�D��|�|�D��������Kr#c��US$)z&Sort key for tree entry in name order.rr)r	s r$rrs����8�Or#c	��U[R-(aSnOSnSRUUURS5URUS55$)z�Pretty format tree entry.

Args:
  name: Name of the directory entry
  mode: Mode of entry
  hexsha: Hexsha of the referenced object
Returns: string describing the tree entry
�treeruz{:04o} {} {}	{}
rMr�)r&�S_IFDIRr�rQ)ror�r;�encoding�kinds     r$�pretty_format_tree_entryr#sM���d�l�l�������&�&����
�
�g�����H�i�(�	�r#c�"�\rSrSrSrSSjrSrg)�SubmoduleEncounteredi8z3A submodule was encountered while resolving a path.Nc��XlX lgr,�rSr:)r�rSr:s   r$r��SubmoduleEncountered.__init__;s���	��r#rr)rrrr r!r�r"rr#r$rr8s
��=�r#rc�
^�\rSrSrSrSrSrSrSU4Sjjr\	S5r
S\4S	jrS
r
SSjrSSjrS\4S
jrSrSSjrSS\\4SjjrS\\4SjrSSjrSU4SjjrSrS\4SjrS\\/\ 4S\!4Sjr"Sr#U=r$$)�Treei@zA Git tree object.rrN�_entriesrGc�0>�[TU]5 0Ulgr,)r]r�rr^s �r$r��
Tree.__init__Hs���
����8:��
r#c�f�[RU5n[X 5(d[U5eU$r,)r�rr@r)rmr]rs   r$r�Tree.from_pathLs-��� � ��*���$�$�$��x�(�(��r#c��XR;$r,�r�r�ros  r$�__contains__�Tree.__contains__Ss���}�}�$�$r#c� �URU$r,r"r#s  r$�__getitem__�Tree.__getitem__Vs���}�}�T�"�"r#c�:�Uup4X44URU'SUlg)z�Set a tree entry by name.

Args:
  name: The name of the entry, as a string.
  value: A tuple of (mode, hexsha), where mode is the mode of the
    entry as an integral type and hexsha is the hex SHA of the entry as
    a string.
TN�rru)r�rorwr�r;s     r$�__setitem__�Tree.__setitem__Ys#�����#�n��
�
�d��$(��!r#c�,�URU	SUlgr�r*r#s  r$�__delitem__�Tree.__delitem__fs���M�M�$��$(��!r#c�,�[UR5$r,)r9rr�s r$�__len__�Tree.__len__js���4�=�=�!�!r#c�,�[UR5$r,)�iterrr�s r$�__iter__�
Tree.__iter__ms���D�M�M�"�"r#c�2�X#4URU'SUlg)z�Add an entry to the tree.

Args:
  mode: The mode of the entry as an integral type. Not all
    possible modes are supported by git; see check() for details.
  name: The name of the entry, as a string.
  hexsha: The hex SHA of the entry as a string.
TNr*)r�ror�r;s    r$�add�Tree.addps��#�l��
�
�d��$(��!r#c�.�[URU5$)z�Iterate over entries.

Args:
  name_order: If True, iterate in name order instead of tree
    order.
Returns: Iterator over (name, mode, sha) tuples
)r
r)r�rs  r$�	iteritems�Tree.iteritems|s��!����
�;�;r#c�4�[UR55$)zUReturn the sorted entries in this tree.

Returns: List with (name, mode, sha) tuples
)rTr;r�s r$r��
Tree.items�s��
�D�N�N�$�%�%r#c���[SRU55nUVVVs0sH	upEodXV4_M snnnUlg![an[U5UeSnAff=fs snnnf)zGrab the entries in the tree.r#N)r�rTrBrr)r�r��parsed_entriesrE�nr)�ss       r$r��Tree._deserialize�s_��	6�'�����(8�9�N�3A�A�.�w�q�Q�Q�F��.�A��
���	6�'��,�#�5��	6��
Bs�=�A�
A�A�Ac	�>�[TU]5 URceSn[RS-[RS-[R
[R[[RS-4n[SRUR5S5H�up4n[USU35 SU;dUS	;a*[S
RURSS555eXB;a[S
US35eX4U44nU(a9[U5[U5:�a[S5eX1S:Xa[SU35eUnM� g)rxNi�i�i�r#Tzinvalid sha r)r#�.s..s.gitzinvalid name {}r�r�z
invalid mode �06ozentries not sortedrzduplicate entry )r]r,r�r&�S_IFREG�S_IFLNKrr(r�rTr�rr�rQr)r�r��
allowed_modesror�r:r	r?s       �r$r,�
Tree.check�s7���	��
���!�!�-�-�-����L�L�5� ��L�L�5� ��L�L��L�L���L�L�5� �
�
� *�#�(�(�4�3E�3E�*F��M�O�D�����S�E�2�3��t�|�t�'B�B�+�%�,�,�T�[�[��)�-L�M����(�+�m�D��:�,F�G�G��#�;�'�E���T�?�Y�u�%5�5�/�0D�E�E���7�?�/�2B�4�&�0I�J�J��D�! Nr#c�F�[[UR555$r,)rTrr;r�s r$r��Tree._serialize�s���N�4�>�>�#3�4�5�5r#c��/nUR5H!up#nUR[X#U55 M# SRU5$)N�)r;r}rrT)r�r�ror�r;s     r$r��Tree.as_pretty_string�s?����"&�.�.�"2��D���K�K�0��V�D�E�#3��w�w�t�}�r#�
lookup_objrSc�>�URS5nURnSn[U5HmupgU(dMUb.[U5(a[	SRUSU5U5eU"U5n[
U[5(d[U5eX�upTMo XT4$)z�Look up an object in a Git tree.

Args:
  lookup_obj: Callback for retrieving object by SHA1
  path: Path to lookup
Returns: A tuple of (mode, SHA) of the resulting path.
rN)	r�r��	enumerater*rrTr@rr)	r�rPrS�partsr:r��i�prvs	         r$�lookup_path�Tree.lookup_path�s����
�
�4� ���g�g�����e�$�D�A�����K��$5�$5�*�4�9�9�U�2�A�Y�+?��E�E��S�/�C��c�4�(�(�"�3�'�'���I�D�#�%��y�r#r*r�F)%rrrr r!rkr�r�r�rWrrRr$r'r+r.r�r1r5r8rr�r;rTr�r�r,r�rlr�rrVr�rArVr"r�r�s@r$rr@s������I��H��I�;�����%�D�%�#�)�)�"��"�#�
)�<�X�i�-@�<�&�t�I��&�	B�"�H6��#���h��z�7�/B�&C��5��r#rc�<�USS;a#[SR"S0[5D65eUSSn[USS5nUS:XaU*nUS:�=(a US:HnUS:=(a S=(d Sn[	U5n[US-5nUS-nXES	-US
---U4$)z�Parse a timezone text fragment (e.g. '+0100').

Args:
  text: Text to parse.
Returns: Tuple with timezone as seconds difference to UTC
    and a boolean indicating whether this was a UTC timezone
    prefixed with a negative sign (-0000).
rs+-z(Timezone must start with + or - ({text})Nr
�-r��d��<r)rBr��varsr��abs)r�r��offset�unnecessary_negative_timezone�signum�hours�minutess       r$�parse_timezonere�s����A�w�e���C�J�J�T�T�V�T�U�U����8�D�
��a�b��]�F��t�|����$*�a�K�$@�D�D�L�!���z�!�r�
'�a�F�
��[�F������E��s�l�G��$�,��2��-�.�%��r#c��US-S:wa[S5eUS:dU(aSnU*nOSnSX S-US-S-4-RS5$)	z�Format a timezone for Git serialization.

Args:
  offset: Timezone offset as seconds difference to UTC
  unnecessary_negative_timezone: Whether to use a minus sign for
    UTC or positive timezones (-0000 and --700 rather than +0000 / +0700).
r]rz#Unable to handle non-minute offset.�-�+z
%c%02d%02dr\rM)rBrL)r`rar�s   r$�format_timezoneri�s_����{�a���>�?�?�
��z�2���������D�4�-�&�2�+��1C�D�D�L�L�W�U�Ur#c��URS5nUSUS-nXS-SnURSS5upE[U5n[	U5upxX&Xx44$![a USS4s$f=f![an	[U	5U	eSn	A	ff=f)z�Parse event.

Args:
  value: Bytes representing a git commit/tag line
Raises:
  ObjectFormatException in case of parsing error (malformed
  field date)
Returns: Tuple of (author, time, (timezone, timezone_neg_utc))
s> Nr\rr
rNrg)�rindexrBr[r�rer)
rwr\�personra�timetext�timezonetext�time�timezone�timezone_neg_utcrEs
          r$r�r�s���,��l�l�5�!��2��q�3��7�#���1�W�Y���!%���T�1�!5����8�}��%3�L�%A�"���(�5�5�5���,��t�]�+�+�,���2�#�C�(�c�1��2�s(�A�;A)�A&�%A&�)
B�3A?�?Bc�t�Uup4SRU[U5RS5[X45/5$)zFormat an event.rgrM)rTrlrLri)rlro�
timezone_inforprqs     r$r�r�$s9��#0� �X��9�9�	��T��!�!�'�*�O�H�,W�X��r#c	��[R"S[5 /n/nSnSnSnSn/nSnSn	[U5H�up�U
[:XaUnMU
[
:XaUR
U5 M0U
[:Xa
[U5nMGU
[:Xa
[U5nM^U
[:XaUnMlU
[:Xa)UR
[RUS-55 M�U
[:XaUn	M�U
cUnM�UR
X�45 M� UUUUUUU	UU4	$)z�Parse a commit object from chunks.

Args:
  chunks: Chunks to parse
Returns: Tuple of (tree, parents, author_info, commit_info,
    encoding, mergetag, gpgsig, message, extra)
z$parse_commit will be removed in 0.22N�NNr�r�)�warnings�warn�DeprecationWarningr��_TREE_HEADER�_PARENT_HEADERr}�_AUTHOR_HEADERr��_COMMITTER_HEADER�_ENCODING_HEADER�_MERGETAG_HEADERr�r"�_GPGSIG_HEADER)r��parentsr�r�author_info�commit_infor�mergetagr��gpgsigr�rws            r$�parse_commitr�,s��
�M�M�8�:L�M��G��E��D�,�K�,�K��H��H��G�
�F�&�v�.����L� ��D�
�n�
$��N�N�5�!�
�n�
$�*�5�1�K�
�'�
'�*�5�1�K�
�&�
&��H�
�&�
&��O�O�C�O�O�E�E�M�:�;�
�n�
$��F�
�]��G��L�L�%��(�'/�*	
��������
�
�
r#c�^�\rSrSrSrSrSrSrS/U4Sjjr\	S	5r
S/S
jrS/U4SjjrS0S\
\SS4S
jjrS\4SjrS0S\
\\SS4SjjrSr\"SS5rSrS/Sjr\"\\SS9rSr\"\SS9r\"SS5r\"SS5r\"SS5r\"S S!5r \"S"S#5r!\"S$S%5r"\"S&S'5r#\"S(S)5r$\"S*S+5r%\"S,S-5r&S.r'U=r($)1�Commiti`zA git commit object.scommitr
)�_author�_author_time�_author_timezone�_author_timezone_neg_utc�_commit_time�_commit_timezone�_commit_timezone_neg_utc�
_committer�	_encoding�_extra�_gpgsig�	_mergetagr��_parents�_treerGNc�>�[TU]5 /UlSUl/UlSUl/UlSUlSUlgr\)	r]r�r�r�r�r�r�r�r�r^s �r$r��Commit.__init__xsA���
����%'��
�*.���$&���(,���;=���8=��%�8=��%r#c�f�[RU5n[X 5(d[U5eU$r,)r�rr@r)rmrS�commits   r$r�Commit.from_path�s-���"�"�4�(���&�&�&� ��&�&��
r#c��/Ul/UlSUlSnSnSUl/UlSUlSUl[U5H�upEU[:XaXPlMU[:Xa"UceURRU5 MCU[:Xa
[U5nMZU[:Xa
[U5nMqU[:XaXPlM�U[:Xa8UceURR[ R#US-55 M�U[$:XaXPlM�UcXPlM�URRXE45 GM UuUlUluUlUlUuUlUluUlUlg)Nrur�)r�r�r�r�r�r�r�r�ryrzr}r{r�r|r}r~r�r"rr�r�r�r�r�r�r�r�)r�r�r�r�r�rws      r$r��Commit._deserialize�sW����
������
�0��0����������
����*�6�2�L�E���$�"�
��.�(��(�(�(��
�
�$�$�U�+��.�(�.�u�5���+�+�.�u�5���*�*�!&���*�*��(�(�(����%�%�c�o�o�e�e�m�&D�E��.�(�$���� %�
����"�"�E�>�2�+3�6
�		
��L���B�T�
"�D�$A�
�		
��O���B�T�
"�D�$Ar#c�>�[TU]5 URceURSS5 URSS5 URSS5 URSS	5 URS
S5 URHn[US5 M [URS
5 [URS5 [URS5 [UR5 [UR5 Sn[UR5H�up4U[:XaUb[S5eU[ :XaU[ [4;a[S5eU[":XaU[[ 4;a[S5eU[$:XaU[":wa[S5eU[&:XaU[$:wa[S5eUnM� g)rxNr�zmissing treer�zmissing authorr�zmissing committerr�zmissing author timer�zmissing commit timezinvalid parent shazinvalid tree shazinvalid authorzinvalid committerzunexpected treezunexpected parentzunexpected authorzunexpected committerzunexpected encoding)r]r,r�r&r�r�r�r�r�r�r�r�r�r�ryrrzr{r|r})r��parentr�r�rsr?s     �r$r,�Commit.check�s����	��
���!�!�-�-�-����w��7����y�*:�;����|�-@�A����~�/D�E����~�/D�E��m�m�F���!5�6�$��T�Z�Z�!3�4��t�|�|�%5�6��t���(;�<��4�$�$�%��4�$�$�%���&�t�'9�'9�:�H�E���$��)9�+�,=�>�>��.�(�T���:�.�,�,?�@�@��.�(�T���:�.�,�,?�@�@��+�+���0F�+�,B�C�C��*�*�t�7H�/H�+�,A�B�B��D�#;r#r�c��SSKnURSS9nUbzURU5nURSU/S9nURUR	5UR
RRRS9uUl	nSSS5 ONURUR	5UR
RRRS9uUl	nSSS5 g!,(df   N=f!,(df   g=fr�)
r�r�r�r�r�r�r�r�r�r�r�s       r$r��Commit.sign�s����
�[�[�t�[�
$��� ��i�i��&���[�[�t�c�U�[�;�s�14����*�*�,� �]�]�.�.�3�3�:�:�2:�2�.�D�K��<�;�./�V�V��&�&�(�s�}�}�/@�/@�/E�/E�/L�/L�.4�.�*���]�%�
$�<�;��%�
$�r�c��UR5n[U[5(deSUlSUlUR5$)z�Return raw string serialization without the GPG/SSH signature.

self.gpgsig is a signature for the returned raw byte string serialization.
N)r8r@r�r�r�r�)r��tmps  r$r��Commit.raw_without_sig�s?��
�i�i�k���#�v�&�&�&�&������
�� � �"�"r#r�c��URcgSSKnUR5nURUR	5URS9upEU(a�UVs/sHocRU5PM nnUHXnUHOnURH<n	UR(dMURU	R:XdM2   SSS5 g MQ MZ URRXWXE4S9eSSS5 gs snf!,(df   g=f)a�Verify GPG signature for this commit (if it is signed).

Args:
  keyids: Optional iterable of trusted keyids for this commit.
    If this commit is not signed by any key in keyids verification will
    fail. If not specified, this function only verifies that the commit
    has a valid signature.

Raises:
  gpg.errors.BadSignatures: if GPG signature verification fails
  gpg.errors.MissingSignatures: if commit was not signed by a key
    specified in keyids
Nrr�r�)r�r�r�r�r�r�r�r�r�r�r�r�s
          r$r��
Commit.verify�s����<�<����
�[�[�]�c��:�:��$�$�&��,�,�&��L�D��4:�;�F�S���C�(�F��;��C�"&��#)�#4�#4�C�%����6�:�:����3H� &��]�$5�#'� �
�j�j�2�2�6�$��2�X�X���]��<�
�]�r�c	���/n[UR[5(aURROURnUR	[
U45 URHnUR	[U45 M UR	[[URURURUR4545 UR	[[URUR UR"UR$4545 UR&(a!UR	[(UR&45 UR*H+nUR	[,UR/5SS45 M- UR1UR25 UR4(a!UR	[6UR445 [9[;XR<55$)Nr�)r@r�rr�r}ryr�rzr{r�r�r�r�r�r|r�r�r�r�rr}r�r~r�r~r�r�rrTr�r�)r�r��
tree_bytesrUr�s     r$r��Commit._serialize sk����&0����T�&B�&B�T�Z�Z�]�]��
�
�
�����j�1�2����A��N�N�N�A�.�/������!��L�L��%�%��*�*�D�,I�,I�J��
�		
�	���!�!��O�O��%�%��*�*�D�,I�,I�J��
�		
��=�=��N�N�,�d�m�m�<�=��
�
�H��N�N�,�h�.D�.D�.F�s��.K�L�M�&����t�{�{�#��;�;��N�N�N�D�K�K�8�9��O�G�]�]�;�<�<r#rz%Tree that is the state of this commitc��UR$)z(Return a list of parents of this commit.)r�r�s r$�_get_parents�Commit._get_parentsEs���}�}�r#c��SUlXlg)z%Set a list of parents of this commit.TN)rur�r�s  r$�_set_parents�Commit._set_parentsIs��$(��!��
r#z&Parents of this commit, by their SHA1.r}c�N�[R"S[SS9 UR$)z%Return extra settings of this commit.z6Commit.extra is deprecated. Use Commit._extra instead.rN)�
stacklevel)rvrwrxr�r�s r$�
_get_extra�Commit._get_extraTs#���
�
�D���	
�
�{�{�r#z�Extra header fields not understood (presumably added in a newer version of git). Kept verbatim so the object can be correctly reserialized. For private commit metadata, use pseudo-headers in Commit.message, rather than this field.�authorz$The name of the author of the commit�	committerz'The name of the committer of the commitr�zThe commit message�commit_timezFThe timestamp of the commit. As the number of seconds since the epoch.�commit_timezonezThe zone the commit time is in�author_timezOThe timestamp the commit was written. As the number of seconds since the epoch.�author_timezonez'Returns the zone the author time is in.rzEncoding of the commit message.r�zAssociated signed tag.r�zGPG Signature.)r�r�r�r�r�r�r�r�r�r�r�r�r�rur�r�r�rr,))rrrr r!rkr�r�r�rWrr�r,rrlr�rAr�rr�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�rr�r�r"r�r�s@r$r�r�`sl�����I��H��I�$>�����+�Z*�\�(�3�-��4�� 	#��	#�Y�X�h�s�m�4�Y��Y�B!=�F!��)P�Q�D���
���4��G��
��
D�
�E�#�8�-S�
T�F�%��>��I�$�I�/C�D�G�'��S��K�
,��;��O�(��	#��K�,��D��O�%�Z�1R�S�H�$�Z�1I�J�H�
"�8�-=�
>�Fr#r�r�)r�)r
r,rrX)r�)jr!r7rRr�r&rvr-�collectionsr�collections.abcrrr�hashlibr�ior�typingr	r
rrr�rrrrrrrrVr�_hashlibr�ZERO_SHAryrzr{r|r}r~rr�r�r�r�r(r�r�rArVrr*r4r<rFrRrJrWrbr�rnrlr�rOrir�r�r�r�r�r�rY�tupler�r�r�r�r�rr
rrrr)rrrerir�r�r�r��OBJECT_CLASSESr��dictrSrmrkr��_parse_tree_py�_sorted_tree_items_py�dulwich._objects�_parse_tree_rs�_sorted_tree_items_rs�ImportErrorrr#r$�<module>r�sH��."��	�����"�8�8������������������� ��������������������6����6�,�6�)���/����
)�
�F�C�F��F��F�
-��
-���
�
-�%�u�U�C�Z�(�%�X�d�9�o�-F�%�
:�/�X�e�_�/��/��/�4P�$�
,�,�,v#�v#�r	S�7�S�l5��U�O�5�
�e�E�*�%�u�X�e�_�e�-C�'D�D�E�F�5�p�_Y�'�_Y�DO�
�;�(?�@�O�#�>

�,�4�,�.	�U�5�%��X�
�"6�6�7�	�E�	���e�U�3��=�-A�&A� B��u��
�c��*�9��Y�7�Y�x�:V�$6�2�1�hd?�W�d?�P	����	��57�	�4��e�S�j�!�4��=�0�1�6��C�"�I�c�m�m��!�I�c�l�l�����)��.��� �J�-���	�	��	�s�H�H%�$H%

Youez - 2016 - github.com/yon3zu
LinuXploit