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

mEdg���v�SrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJ	r	J
r
 SSKJr SSK
JrJr SSKJrJrJrJrJrJr SSKJr SSKJr SS	KJrJrJrJr \(aSSK r SSK!r!S
SK"J#r#J$r$J%r% S
SK&J'r'J(r(J)r) S
S
K*J+r+J,r,J-r-J.r. S
SK/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQJRrRJSrSJTrTJUrUJVrVJWrWJXrXJYrYJZrZ S
SK[J\r\J]r]J^r^J_r_J`r`JaraJbrbJcrc S
SKdJere SS/rf\grh\R�"\j5rk"SS\l5rm"SS\l5rn"SS\l5roSrpSrq\9\=/rr\?\7\8\</\rQrs\;\3/\rQrt"SS5ruS\v4SjrwSrxS\y\z\g\g4\z\g\g4\z\g\g444S jr{S\y\z\g\g4\|\g44S!jr}"S"S#5r~"S$S%5rS&r�"S'S(5r�S)\	\gS\
\y\v\g44S*jr�S+r�S,r�S\0S4S-\|\gS.\\g/S4S/\\\g/S4SS4S0jjr�S1r�"S2S35r�SbS4jr�S5r�"S6S7\�5r�"S8S9\�5r�"S:S;5r�S\�\�4S<jr�"S=S>\�5r�"S?S@\�5r�\�r�"SASB5r�"SCSD\l5r�"SESF\�5r�"SGSH\�5r�SIr�\�r�"SJSK\�5r�SLr�ScS\SM4SNjjr�S\�4SOjr�"SPSQ\�5r�SRr�"SSST\�5r�\�r�S\�4SUjr�SdSV\�SW\\#SX\\�S\y\�\�44SYjjr�SZr�S[\�S\y\\�\�\�44S\jr�SdS[\�SW\\#SX\\�S\y\�\�44S]jjr�\GRNGRQS^5\%"S_S`5/r�S\�4Sajr�g)ea1Client side support for the Git protocol.

The Dulwich client supports the following capabilities:

 * thin-pack
 * multi_ack_detailed
 * multi_ack
 * side-band-64k
 * ofs-delta
 * quiet
 * report-status
 * delete-refs
 * shallow

Known capabilities that are not supported:

 * no-progress
 * include-tag
�N)�Iterable�Iterator)�closing)�BufferedReader�BytesIO)�IO�
TYPE_CHECKING�Callable�ClassVar�Optional�Union)�quote)�unquote)�urljoin�urlparse�
urlunparse�
urlunsplit�)�Config�apply_instead_of�get_xdg_config_home_path)�GitProtocolError�NotGitRepository�
SendPackError)�PACK_SPOOL_FILE_MAX_SIZE�PackChunkGenerator�UnpackedObject�write_pack_from_container)+�	_RBUFSIZE�CAPABILITIES_REF�CAPABILITY_AGENT�CAPABILITY_DELETE_REFS�CAPABILITY_FETCH�CAPABILITY_FILTER�CAPABILITY_INCLUDE_TAG�CAPABILITY_MULTI_ACK�CAPABILITY_MULTI_ACK_DETAILED�CAPABILITY_OFS_DELTA�CAPABILITY_QUIET�CAPABILITY_REPORT_STATUS�CAPABILITY_SHALLOW�CAPABILITY_SIDE_BAND_64K�CAPABILITY_SYMREF�CAPABILITY_THIN_PACK�COMMAND_DEEPEN�COMMAND_DONE�COMMAND_HAVE�COMMAND_SHALLOW�COMMAND_UNSHALLOW�COMMAND_WANT�"DEFAULT_GIT_PROTOCOL_VERSION_FETCH�!DEFAULT_GIT_PROTOCOL_VERSION_SEND�GIT_PROTOCOL_VERSIONS�KNOWN_RECEIVE_CAPABILITIES�KNOWN_UPLOAD_CAPABILITIES�SIDE_BAND_CHANNEL_DATA�SIDE_BAND_CHANNEL_FATAL�SIDE_BAND_CHANNEL_PROGRESS�TCP_GIT_PORT�ZERO_SHA�HangupException�
PktLineParser�Protocol�agent_string�capability_agent�extract_capabilities�extract_capability_names�filter_ref_prefix�parse_capability�pkt_line�pkt_seq)�PEELED_TAG_SUFFIX�Ref�_import_remote_refs�_set_default_branch�	_set_head�_set_origin_head�read_info_refs�split_peeled_refs)�Repo�HEADsrefs/c�"�\rSrSrSrSSjrSrg)�InvalidWants�zInvalid wants.Nc�8�[RUSU<35 g)Nz-requested wants not in server provided refs: )�	Exception�__init__)�self�wantss  �0/usr/lib/python3/dist-packages/dulwich/client.pyrY�InvalidWants.__init__�s������A�%��K�	
����returnN��__name__�
__module__�__qualname__�__firstlineno__�__doc__rY�__static_attributes__r_r^r\rUrU�s
���
r^rUc�"�\rSrSrSrSSjrSrg)�HTTPUnauthorized�z!Raised when authentication fails.Nc�H�[RUS5 XlX lg)NzNo valid credentials provided)rXrY�www_authenticate�url)rZrmrns   r\rY�HTTPUnauthorized.__init__�s�����4�!@�A� 0���r^)rnrmr`rbr_r^r\rjrj�s
��+�r^rjc�"�\rSrSrSrSSjrSrg)�HTTPProxyUnauthorized�z'Raised when proxy authentication fails.Nc�H�[RUS5 XlX lg)Nz#No valid proxy credentials provided)rXrY�proxy_authenticatern)rZrtrns   r\rY�HTTPProxyUnauthorized.__init__�s�����4�!F�G�"4���r^)rtrnr`rbr_r^r\rqrq�s
��1�r^rqc�T�[[R"U///S5S5S:�$)z'Check if a file descriptor is readable.r)�len�select)�filenos r\�_fileno_can_readrz�s(���v�}�}�f�X�r�2�q�1�!�4�5��9�9r^c
��SSKJnJnJn UR	5nUR	5nUR
R
USSSU"U5U"U55nU(d[UR55eUR$)zCWrapper around PeekNamedPipe to check how many bytes are available.r)�byref�windll�wintypesN)
�ctypesr|r}r~�DWORD�kernel32�
PeekNamedPipe�OSError�GetLastError�value)�handler|r}r~�c_avail�	c_message�successs       r\�_win32_peek_availr��sm��.�.��n�n��G���� �I��o�o�+�+���a��u�W�~�u�Y�/?��G���h�+�+�-�.�.��=�=�r^c�2�\rSrSrSrSSjrSrSSjrSrg)	�ReportStatusParser��zEHandle status as reported by servers with 'report-status' capability.Nc�.�SUlSUl/Ulg�NF��_done�_pack_status�
_ref_statuses�rZs r\rY�ReportStatusParser.__init__�s����
� ���*,��r^c#�^# �URS;a[UR5eURHcnURSS5upUS:Xa*URSS5up4X4RS54v� MHUS:XaUS4v� MV[
SU<35e g![a Muf=f7f)	z�Check if there were any errors and, if so, raise exceptions.

Raises:
  SendPackError: Raised when the server could not unpack
Returns:
  iterator over refs
)s	unpack okN� rsng�utf-8sokNzinvalid ref status )r�rr��split�
ValueError�decoder)rZ�status�rest�ref�errors     r\�check�ReportStatusParser.check�s�������$8�8��� 1� 1�2�2��(�(�F�
�%�|�|�D�!�4������!�Z�Z��a�0�
���<�<��0�0�0��5���D�j� �&�)<�V�J�'G�H�H�)���
��
�s)�5B-�B�AB-�
B*�&B-�)B*�*B-c���UR(a[S5eUcSUlgURcUR5UlgUR5nURRU5 g)zgHandle a packet.

Raises:
  GitProtocolError: Raised when packets are received after a flush
  packet.
z&received more data after status reportNT)r�rr��stripr��append)rZ�pkt�
ref_statuss   r\�
handle_packet� ReportStatusParser.handle_packet�s_���:�:�"�#K�L�L��;��D�J�����$� #�	�	��D������J����%�%�j�1r^r�r`)	rcrdrerfrgrYr�r�rhr_r^r\r�r��s��O�-�
I�02r^r�rac�v�UR5nUbUR5S:XagURU5 g)Ns	version 2�r)�
read_pkt_liner��unread_pkt_line)�protor�s  r\�negotiate_protocol_versionr�s6��
�
�
�
�C�
��3�9�9�;�,�6��	���#��r^c�P�/nUHnURU5 M [U5$�N)r��set)rI�server_capabilitiesr�s   r\�read_server_capabilitiesr�
s,�������"�"�3�'���"�#�#r^c�V�0n0n0nUH�nURS5RS5nUSnUS:XaSnUSnUSSHXnURS5(a	USSX7'M"URS	5(a	US
SX''MA[R"SU5 MZ XaU'M� XU4$)N�
r�rsunbornrr�speeled:�ssymref-target:�zunknown part in pkt-ref: %s)�rstripr��
startswith�logging�warning)	rI�refs�symrefs�peeledr��parts�shar��parts	         r\�read_pkt_refs_v2r�s����D��G�
�F����
�
�5�!�'�'��-���A�h���)���C��A�h���!�"�I�D����z�*�*�"�1�2�h������!2�3�3�#�B�C�y������ =�t�D�
��S�	���&� � r^c�J�Sn0nUH[nURS5RSS5upEUS:Xa[URSS55eUc
[	U5upQXBU'M] [U5S:Xa0[
54$U[[0:Xa0nUceU[
U54$)Nr�rsERRr��replacer)	r�r�rr�rDrwr�r r>)rIr�r�r�r�r�s      r\�read_pkt_refs_v1r�*s�����
�D����Z�Z��&�,�,�T�1�5�
���&�=�"�3�:�:�g�y�#A�B�B��&�)=�c�)B�&�S��S�	�
��4�y�A�~��3�5�y��� �(�+�+����*�*�*���(�)�)�)r^c�^�\rSrSr%Sr1Skr\\\\	S'SSSjjr
SSjrSrS\
4S	jrS
rS\4SjrSrU4S
jrS\4SjrSrU=r$)�FetchPackResulti>z�Result of a fetch-pack operation.

Attributes:
  refs: Dictionary with all remote refs
  symrefs: Dictionary with remote symrefs
  agent: User agent string
>�get�pop�copy�keys�clear�items�update�values�popitem�fromkeys�viewkeys�	viewitems�
setdefault�
viewvalues�_FORWARDED_ATTRSrac�@�XlX lX0lX@lXPlgr�)r�r��agent�new_shallow�
new_unshallow)rZr�r�r�r�r�s      r\rY�FetchPackResult.__init__Xs���	����
�&��*�r^c�6�SSKnURS[SS9 g)Nrz!Use FetchPackResult.refs instead.���
stacklevel��warnings�warn�DeprecationWarning�rZr�s  r\�_warn_deprecated� FetchPackResult._warn_deprecatedas����
�
�/���	�	
r^c��[U[5(aUR5 URU:H$URUR:H=(a9 URUR:H=(a UR
UR
:H$r�)�
isinstance�dictr�r�r�r��rZ�others  r\�__eq__�FetchPackResult.__eq__jsi���e�T�"�"��!�!�#��9�9��%�%��I�I����#�
*�����
�
�-�
*��
�
�e�k�k�)�	
r^c�>�UR5 XR;$r��r�r��rZ�names  r\�__contains__�FetchPackResult.__contains__t��������y�y� � r^c�@�UR5 URU$r�r�r�s  r\�__getitem__�FetchPackResult.__getitem__x��������y�y���r^c�L�UR5 [UR5$r��r�rwr�r�s r\�__len__�FetchPackResult.__len__|��������4�9�9�~�r^c�L�UR5 [UR5$r��r��iterr�r�s r\�__iter__�FetchPackResult.__iter__���������D�I�I��r^c�>�U[U5R;a&UR5 [URU5$[
TU]U5$r���typer�r��getattrr��super�__getattribute__�rZr��	__class__s  �r\r	� FetchPackResult.__getattribute__��B����4��:�.�.�.��!�!�#��4�9�9�d�+�+��w�'��-�-r^c��URRSUR<SUR<SUR<S3$�N�(z, �))rrcr�r�r�r�s r\�__repr__�FetchPackResult.__repr__�s:���.�.�)�)�*�!�D�I�I�=��4�<�<�:J�"�T�Z�Z�N�Z[�\�\r^)r�r�r�r�r��NNr`�rcrdrerfrgr�rr��str�__annotations__rYr�r��boolr�r��intr�rr	rrh�
__classcell__�rs@r\r�r�>sy����,��h�s�3�x�(��$EI�+�	
�+�
�
�!�D�!������.�]�#�]�]r^r�c�^�\rSrSr%Sr1Skr\\\\	S'SSSjjr
SSjrSrS\
4S	jrS
rS\4SjrSrU4S
jrS\4SjrSrU=r$)�SendPackResulti�z�Result of a upload-pack operation.

Attributes:
  refs: Dictionary with all remote refs
  agent: User agent string
  ref_status: Optional dictionary mapping ref name to error message (if it
    failed to update), or None if it was updated successfully
>r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rac�(�XlX lX0lgr�)r�r�r�)rZr�r�r�s    r\rY�SendPackResult.__init__�s���	��
�$�r^c�6�SSKnURS[SS9 g)Nrz Use SendPackResult.refs instead.r�r�r�r�s  r\r��SendPackResult._warn_deprecated�s����
�
�.���	�	
r^c���[U[5(aUR5 URU:H$URUR:H=(a URUR:H$r�)r�r�r�r�r�r�s  r\r��SendPackResult.__eq__�sO���e�T�"�"��!�!�#��9�9��%�%��y�y�E�J�J�&�D�4�:�:����+D�Dr^c�>�UR5 XR;$r�r�r�s  r\r��SendPackResult.__contains__�r�r^c�@�UR5 URU$r�r�r�s  r\r��SendPackResult.__getitem__�r�r^c�L�UR5 [UR5$r�r�r�s r\r��SendPackResult.__len__�r�r^c�L�UR5 [UR5$r�r�r�s r\r�SendPackResult.__iter__�rr^c�>�U[U5R;a&UR5 [URU5$[
TU]U5$r�rr
s  �r\r	�SendPackResult.__getattribute__�r
r^c�l�URRSUR<SUR<S3$r)rrcr�r�r�s r\r�SendPackResult.__repr__�s.���.�.�)�)�*�!�D�I�I�=��4�:�:�.��J�Jr^)r�r�r�rr`rrs@r\rr�sk����,��h�s�3�x�(��"%�

�E�!�D�!������.�K�#�K�Kr^rc�x�[5n[5nUH�nUS:XaMURSS5upEU[:Xa!URUR
55 MKU[:Xa!URUR
55 Mv[SU35e X4$![a [SU35ef=f)Ns
shallow-info
r�rzunknown command )r�r�r�rr2�addr�r3)rIr�r�r��cmdr�s      r\�_read_shallow_updatesr3�s����%�K��E�M����#�#��	=��y�y��q�)�H�C��/�!��O�O�C�I�I�K�(�
�%�
%����c�i�i�k�*�"�%5�c�U�#;�<�<��
�'�'���	=�"�%5�c�U�#;�<�<�	=�s�B � B9c�*�\rSrSrSSjrSrSrSrg)�_v1ReceivePackHeaderi�Nc�\�/Ul/UlURXU5UlSUlgr�)�want�have�_handle_receive_pack_head�_it�sent_capabilities)rZ�capabilities�old_refs�new_refss    r\rY�_v1ReceivePackHeader.__init__�s,��!#��	�!#��	��1�1�,�(�S���!&��r^c��UR$r�)r:r�s r\r�_v1ReceivePackHeader.__iter__�s���x�x�r^c#�0# �UR5Vs/sHoD[:XaMUPM snUlUGHQn[U[5(d[SU<35eUR
U[5n[U[5(d[SU<SU<35eUR
U[5n[U[5(d[SU<SU<35eXg:wan[RSXVU5 UR(aUS-U-S-U-v� O5US-U-S-U-S-SR[U55-v� SUl	XpR;dGM)U[:wdGM6URRU5 GMT S	v� g	s snf7f)
z�Handle the head of a 'git-receive-pack' request.

Args:
  capabilities: List of negotiated capabilities
  old_refs: Old refs, as received from the server
  new_refs: Refs to change

Returns:
  (have, want) tuple
zrefname is not a bytestring: z
old sha1 for z is not a bytestring: z is not a bytestring z Sending updated ref %r: %r -> %rr��TN)r�r>r8r��bytes�	TypeErrorr��logger�debugr;�join�sortedr7r�)rZr<r=r>�x�refname�old_sha1�new_sha1s        r\r9�._v1ReceivePackHeader._handle_receive_pack_head�s����!)��� 1�G� 1�1�h��Q� 1�G��	��G��g�u�-�-��"?��{� K�L�L��|�|�G�X�6�H��h��.�.��#�G�;�.D�X�L�Q��� �|�|�G�X�6�H��h��.�.��#�G�;�.C�H�<�P����#����6��8���)�)�"�T�/�H�4�t�;�g�E�E�!���"�#���"�	"�
 � ��)�)�F�<�$8�9�
:��.2�D�*��y�y�(�X��-A��	�	� � ��*�A �B�
��GH�s!�F�
F�F�D.F�F�,*F)r:r8r;r7r`)rcrdrerfrYrr9rhr_r^r\r5r5�s��'��.r^r5rIc#�J# �UHn[USS5nX!SS4v� M g7f)zrRead per-channel data.

This requires the side-band-64k capability.

Args:
  pkt_seq: Sequence of packets to read
Nr)�ord)rIr��channels   r\�_read_side_band64k_datarR%s/������c�"�1�g�,���1�2�w����s�!#c�|�UH6n[U5upEXA:waMU(aX%RS5;aM4Us $ g)Nr�)rGr�)r<�keyr��
capability�k�vs      r\�find_capabilityrX2s9��"�
��
�+����8���U�'�'�$�-�/����
#r^c��[U[5(a[US[5(de[S-US-nUc[nUS:wa USSR[
U55--
nUS-
nURU5 USSH!nUR[S-U-S-5 M# US;d[USS5(a�US:Xa&[U[[5(d[S	5eO[U;a[S	5eURH!n	UR[S-U	-S-5 M# Ub6UR[S-[!U5R#S
5-S-5 US:XaURS5 US:waURS5 US;a#Ub[%UR'55up�OS=p�O[)5=p�[+U5nU(a�UR[,S-U-S-5 Ub~U"5(arUR/5n
U
R1S5R3S5nUSS:Xa9UR5US5 USS;aOUSS
:XaO%[7USS35e[+U5nU(aM�UR[8S-5 US:XaURS5 X�4$)a�Handle the head of a 'git-upload-pack' request.

Args:
  proto: Protocol object to read from
  capabilities: List of negotiated capabilities
  graph_walker: GraphWalker instance to call .ack() on
  wants: List of commits to fetch
  can_read: function that returns a boolean that indicates
whether there is extra graph data to read on proto
  depth: Depth for request
  protocol_version: Neogiated Git protocol version.
rr�Nr�r�r)rN�shallowz=server does not support shallow capability required for depth�ascii�ACK)�continue�common�readyz& not in ('continue', 'ready', 'common))r��listrDr4r6rHrI�write_pkt_linerrXr#r+rrZr2r/r�encoder3�read_pkt_seqr��nextr1r�r�r��ack�AssertionErrorr0)r�r<�graph_walkerr[�can_read�depth�protocol_version�wantcmdr7r�r�r�r8r�r�s               r\�_handle_upload_pack_headrl<s���*�e�T�"�"�z�%��(�E�'B�'B�B�B��T�!�E�!�H�,�G���<���1���4�$�)�)�F�<�$8�9�9�9���u��G�	����!��a�b�	��
���\�D�0�4�7�%�?�@���I����y�$�!G�!G��q� �"�<�1A�CU�V�V�&�V���W� �|�
3�"�R��
� �'�'�C�� � ��4�!7�#�!=��!E�F�(���� � ���%��E�
�(9�(9�'�(B�B�U�J�
��q� �� � ��&��1��
���T�"��I����+@��AS�AS�AU�+V�(�[�-�*.�.�K�-�&)�e�+�����D�
�
���\�D�0�4�7�%�?�@���H�J�J��%�%�'�C��J�J�u�%�+�+�D�1�E��Q�x�6�!�� � ��q��*���8�7�7���1�X��)��(� ��8�*�$J�K����L�!���$� 
�����-�.��1��
���T�"��'�'r^r<�	pack_data�progressc��UR5nU(a�URS5RS5nUS:Xa
USS:waOhUSS:XaURUS5 USS:XaUR	5 [U5S	:d	USS
;aOUR5nU(aM�[U;dUS:Xa_UcSSjn[UR55H9up�U	[:Xa
U"U
5 MU	[:Xa
U"U
5 M-[S
U	35e gURU5n
U
S:XagU"U
5 M")asHandle the tail of a 'git-upload-pack' request.

Args:
  proto: Protocol object to read from
  capabilities: List of negotiated capabilities
  graph_walker: GraphWalker instance to call .ack() on
  pack_data: Function to call with pack data
  progress: Optional progress reporting function
  rbufsize: Read buffer size
  protocol_version: Neogiated Git protocol version.
r�r�r�r�packfiler\rsNAKr�)r_r]r^Nc��gr�r_�rJs r\rn�*_handle_upload_pack_tail.<locals>.progress����r^�Invalid sideband channel r^r`)
r�r�r�re�nakrwr,rRrcr:r<rf�read)r�r<rgrmrn�rbufsizerjr�r��chan�datas           r\�_handle_upload_pack_tailr{�sE��(�
�
�
�C�

��
�
�5�!�'�'��-���q� �U�1�X��%;���Q�x�6�!�� � ��q��*��Q�x�6�!�� � �"��5�z�A�~��q��2�"�
��!�!�#���#�  �<�/�3C�q�3H���
�2�%�2D�2D�2F�G�J�D��-�-��$���3�3����$�'@���%G�H�H�
H���:�:�h�'�D��s�{���d�O�	r^c��0nSnUH@n[U5upEU[:XaURSS5upgXqU'U[:XdM>UnMB X4$)zyExtract symrefs and agent from capabilities.

Args:
 capabilities: List of capabilities
Returns:
 (symrefs, agent) tuple
N�:r)rGr-r�r!)r<r�r�rUrVrW�src�dsts        r\�_extract_symrefs_and_agentr��s_���G��E�"�
��
�+����!�!�����q�)�J�S��C�L�� � ��E�
#�
��r^c��\rSrSrSrS#S$SjjrS\4Sjr\S%Sj5r	S&S\S	\
\\\\\
/\\\\44S\4S
jjrS'S\
S
\
S\\S\\\S\\S\4SjjrS(S\S\S\\
\\\4\\/\\4S\\
\/S4S\\S\\\S\\S\\S\4SjjrSSSSSS.S\S\\
\/S4S\\S\\\S\\S\4SjjrS)S\\S\\\S\\\44Sjjr\S5r Sr!S&S\"S\\S\\
\/S4S\\\\\44Sjjr#Sr$S*S$S jjr%\S$S!j5r&S"r'g)+�	GitClienti�zGit smart server client.Nrac���X lSUl[[5UlURR[
55 [[5UlURR[
55 U(aURR[5 U(dURR[5 U(aURR[5 SUl
g)z�Create a new GitClient instance.

Args:
  thin_packs: Whether or not thin packs should be retrieved
  report_activity: Optional callback for reporting transport
    activity.
  include_tags: send annotated tags when sending the objects they point
    to
Nr)�_report_activity�_report_status_parserr��UPLOAD_CAPABILITIES�_fetch_capabilitiesr1rC�RECEIVE_CAPABILITIES�_send_capabilitiesr)�remover.r%rj)rZ�
thin_packs�report_activity�quiet�include_tags�kwargss      r\rY�GitClient.__init__�s���"!0��CG��"�#&�':�#;�� �� � �$�$�%5�%7�8�"%�&:�";������#�#�$4�$6�7���#�#�'�'�(8�9���$�$�+�+�,@�A���$�$�(�(�)?�@� !��r^c�,�[UR5e)zrRetrieves full url to given path.

Args:
  path: Repository path (as string)

Returns:
  Url to path (as string)

)�NotImplementedError�get_url�rZ�paths  r\r��GitClient.get_urls��"�$�,�,�/�/r^c�,�[UR5e)z�Create an instance of this client from a urlparse.parsed object.

Args:
  parsedurl: Result of urlparse()

Returns:
  A `GitClient` object
)r��from_parsedurl��cls�	parsedurlr�s   r\r��GitClient.from_parsedurls��"�#�"4�"4�5�5r^r��generate_pack_datac�,�[UR5e)aUpload a pack to a remote repository.

Args:
  path: Repository path (as bytestring)
  update_refs: Function to determine changes to remote refs. Receive
    dict with existing remote refs, returns dict with
    changed refs (name -> sha, where sha=ZERO_SHA for deletions)
  generate_pack_data: Function that can return a tuple
    with number of objects and list of pack data to include
  progress: Optional progress function

Returns:
  SendPackResult object

Raises:
  SendPackError: if server rejects the pack data

)r��	send_pack)rZr��update_refsr�rns     r\r��GitClient.send_packs��6"�$�.�.�1�1r^�origin�mkdir�bare�
ref_prefixrjc

�:�U(a[R"U5 Sn
U(d[R"U5n
UcSnO(U(a[	S5e[R
"U5n
[
U[[45(aURS5nO URU5RS5nU
ceUb}U
R5nURSURS54SU5 URSURS54SSURS5-S	-5 UR5 S
U-nURUU
UU	U
UUS9nUb [U
R UUR US9 UR"R%S
5nUR R%S
5nUbU(aU(dUU
R S
'UnOo['U
R URS5U5 [)U
R URS5UUU5nU(a[+U
R UU5nOSnU(aUbU
R-5 U
$![.a1 W
bU
R15 U(aSSKnUR5U5 ef=f)zClone a repository.NTz"checkout and bare are incompatibler�sremotesurlsfetchs+refs/heads/*:refs/remotes/s/*sclone: from �rnrir��filter_specrj)�messagerSr)�osr�rR�initr��	init_barer��LocalGitClient�SubprocessGitClientrbr��
get_configr��
write_to_path�fetchrLr�r�r�rOrMrN�reset_index�
BaseException�close�shutil�rmtree)rZr��target_pathr�r�r��checkout�branchrnrir�r�rj�target�encoded_path�
target_config�ref_message�result�origin_head�
origin_sha�head�head_refr�s                       r\�clone�GitClient.clone8sa�� ��H�H�[�!�L	��F�����;�/���#�#�H���$�%I�J�J�����4���$��1D� E�F�F�#�{�{�7�3��#�|�|�D�1�8�8��A���%�%�%��!� &� 1� 1� 3�
��!�!���
�
�g� 6�7�����!�!���
�
�g� 6�7��2�V�]�]�7�5K�K�e�S��
�+�+�-�)�L�8�K��Z�Z���!��%�'�!1� ��F��!�#��K�K�����k��!�.�.�,�,�W�5�K�������1�J��~�*�[�'1����G�$�!�� ����f�m�m�G�.D�k�R�.��K�K��M�M�'�*�������$�V�[�[�(�K�H�D��D��D�,��"�"�$��
���	��!��������
�
�k�*��	�s�H>I�;Jr��determine_wantsrnrir�c	�^^^
�UcTRRn[UR;a:SSKJn	 U	"[S[TRSS5S9m
S
U
UU4Sjjn
S
U
4SjjnOTRR5um
p�URUUTR5T
RTUUUUS	9	nU
"5 TRURUR5 U$![a	 U"5 ef=f)a|Fetch into a target repository.

Args:
  path: Path to fetch from (as bytestring)
  target: Target repository to fetch into
  determine_wants: Optional function to determine what refs to fetch.
    Receives dictionary of name->sha, should return
    list of shas to fetch. Defaults to all shas.
  progress: Optional progress function
  depth: Depth to fetch at
  ref_prefix: List of prefixes of desired references, as a list of
    bytestrings. Filtering is done by the server if supported, and
    client side otherwise.
  filter_spec: A git-rev-list-style object filter spec, as bytestring.
    Only used if the server supports the Git protocol-v2 'filter'
    feature, and ignored otherwise.
  protocol_version: Desired Git protocol version. By default the highest
    mutually supported protocol version will be used.

Returns:
  Dictionary with all remote refs (not just those fetched)

Nr)�SpooledTemporaryFilez	incoming-r�)�max_size�prefix�dirc�>�TR5(a6TRS5 TRRTRSTS9 TR5 g)Nr�rn)�tell�seek�object_store�
add_thin_packrwr�)�frnr�s���r\�commit�GitClient.fetch.<locals>.commit�sA����6�6�8�8��F�F�1�I��'�'�5�5�a�f�f�d�X�5�V����	r^c�&>�TR5 gr��r�)r�s�r\�abort�GitClient.fetch.<locals>.abort�s������	r^r�r`)r��determine_wants_allr.r��tempfiler�rr�add_pack�
fetch_pack�get_graph_walker�writer��update_shallowr�r�)rZr�r�r�rnrir�r�rjr�r�r�r�r�s  ` `        @r\r��GitClient.fetch�s���H�"�$�1�1�E�E�O��4�#;�#;�;�5�/�1�"��F�/�/���>��A�
�
�
�
� &�2�2�;�;�=��A�v�	��_�_����'�'�)����!��%�'�!1�%�
�F�
�H����f�0�0�&�2F�2F�G��
��
�	��G��	�s�	/C'�'C:r�c�,�[UR5e)�Retrieve a pack from a git smart server.

Args:
  path: Remote path to fetch from
  determine_wants: Function determine what refs
    to fetch. Receives dictionary of name->sha, should return
    list of shas to fetch.
  graph_walker: Object with next() and ack().
  pack_data: Callback called for each bit of data in the pack
  progress: Callback for progress reports (strings)
  depth: Shallow fetch depth
  ref_prefix: List of prefixes of desired references, as a list of
    bytestrings. Filtering is done by the server if supported, and
    client side otherwise.
  filter_spec: A git-rev-list-style object filter spec, as bytestring.
    Only used if the server supports the Git protocol-v2 'filter'
    feature, and ignored otherwise.
  protocol_version: Desired Git protocol version. By default the highest
    mutually supported protocol version will be used.

Returns:
  FetchPackResult object

)r�r�)
rZr�r�rgrmrnrir�r�rjs
          r\r��GitClient.fetch_pack�s��J"�$�/�/�2�2r^c�,�[UR5e)zrRetrieve the current refs from a git smart server.

Args:
  path: Path to the repo to fetch from. (as bytestring)
)r��get_refs)rZr�rjr�s    r\r��GitClient.get_refss��"�$�-�-�0�0r^c�B�[SUR555$)Nc3�2# �UH
o[:gv� M g7fr�)r>)�.0r�s  r\�	<genexpr>�.GitClient._should_send_pack.<locals>.<genexpr>s���@�.?�s�(�?�.?�s�)�anyr�)r>s r\�_should_send_pack�GitClient._should_send_packs���@�h�o�o�.?�@�@�@r^c�d�URU-n[U5up4[U5[-
 X#4$r�)r�r�rEr8)rZr��negotiated_capabilitiesr��_symrefss     r\�$_negotiate_receive_pack_capabilities�.GitClient._negotiate_receive_pack_capabilities!s:��"&�"9�"9�<O�"O��6�7J�K���	!�"5�	6�9S�	S�&�-�-r^r�r<c��[U;dURS:Xa�UcSSjn[U;a.URce[	URR
5n[
UR55HNupVU[:Xa[U;aWRU5 M,M.U[:Xa
U"U5 MB[SU35e OO[U;aEUR(deUR5HnURRU5 M  URb#[URR55$g)a;Handle the tail of a 'git-receive-pack' request.

Args:
  proto: Protocol object to read from
  capabilities: List of negotiated capabilities
  progress: Optional progress reporting function

Returns:
  dict mapping ref name to:
    error message if the ref failed to update
    None if it was updated successfully
r�Nc��gr�r_rrs r\rn�5GitClient._handle_receive_pack_tail.<locals>.progress=s��r^rur`)r,rjr*r�r@r�rRrcr:�parser<rfr�r�)rZr�r<rn�pktline_parserryrzr�s        r\�_handle_receive_pack_tail�#GitClient._handle_receive_pack_tail(s#��$$�|�3�t�7L�7L�PQ�7Q����(�<�7��1�1�=�=�=�!.�t�/I�/I�/W�/W�!X��5�e�6H�6H�6J�K�
���1�1�/�<�?�&�,�,�T�2�@��7�7��T�N�(�+D�T�F�)K�L�L�L�(�<�7��1�1�1�1� �-�-�/�C��.�.�<�<�S�A�0��%�%�1���2�2�8�8�:�;�;�r^c�"�[U5[-
 SnUH�n[U5upEURS:XdM"U[:XdM.[n/nUR5R
S5nSU;aUR[5 SU;aUR[5 [[U55HnUS:XaUS-
nOUS-
nX&U-
nM M� [U5up�URU-n
U(aU
RU5 X�U	4$)Nr�r�sshallowsfilterr�=)rEr9rGrjr#r�r�r�r+r$�rangerwr�r�r1)rZr��
fetch_caparUrVrW�fetch_features�ir�r�r�s           r\�#_negotiate_upload_pack_capabilities�-GitClient._negotiate_upload_pack_capabilitiesUs��	!�"5�	6�9R�	R��
�-�J�#�J�/�D�A��$�$��)�a�3C�.C�-�
�!#���G�G�I�O�O�D�)����?�"�)�)�*<�=���>�"�)�)�*;�<��s�>�2�3�A��A�v�"�d�*�
�"�d�*�
���"3�3�J�4�.�"6�6I�J���"&�":�":�=P�"P���#�'�'�
�3�'�%�8�8r^c	�,�[UR5e)z*Retrieve an archive of the specified tree.)r��archive)	rZr��
committish�
write_datarn�write_error�format�subdirsr�s	         r\r�GitClient.archiveqs��"�$�,�,�/�/r^c�8�SSKnURS[5 g)Nrz3object filtering not recognized by server, ignoring)r�r��UserWarning)r�s r\�_warn_filter_objects�GitClient._warn_filter_objectss����
�
�A��	
r^)r�r�r�r�rj)TNFFr`)rar�r�)
TFr�NNNNNNN�NNNNNNr�NNNNN)(rcrdrerfrgrYrr��classmethodr�r
r�rDr�tuplerrrrr�rr`rKrRr�r�r�r�r��ObjectIDr��staticmethodr�r�rAr�rrrrhr_r^r\r�r��s7��"�����"�
�"�>
0�s�
0��	6��	6�$�2��2�%�
��Z��U��T�*�E�#�x��7O�2O�,P�P�
�	2�
�2�B�� (�����*.��*.�`��	`�
�`���
�
`��T�#�Y�'�`�#�3�-�`�
�`�P
�6:�#�*.�'+�*.�L��L��L�"��d�5�%�<�(�(�3�-�8�$�u�+�E�F�
�	L��8�U�G�T�M�2�3�L���}�L��T�#�Y�'�L��e�_�L�#�3�-�L�
�L�j7;�#�*.��*.�%3��%3��8�U�G�T�M�2�3�%3���}�%3��T�#�Y�'�%3�#�3�-�%3�
�%3�T+/�*.�	1�#�3�-�1��T�#�Y�'�	1�

�c�8�m�	�1��A��A�.�7;�	+��+��%�j�+��8�U�G�T�M�2�3�	+�

�$�u�h�s�m�+�,�	-�+�Z9�B�����0�
�0��
��
r^r�c���[U5UR5VVs1sH#up#UR[5(aM!UiM% snn-
nU(a[	U5egs snnf)zyCheck that a set of wants is valid.

Args:
  wants: Set of object SHAs to fetch
  refs: Refs dictionary to check against
N)r�r��endswithrJrU)r[r�rVrW�missings     r\�check_wantsr�sW���%�j��
�
���$�f�q�A�J�J�7H�,I�����G���7�#�#���s� A!�A!c�(�Uc
[5$UR5Vs/sHoRS5PM nnUHBnURS5(dM[	U[S5SR
SS55s $ [U5$s snf)Nr�sERROR: r�r�)r?�	readlinesr�r�rrwr�)�stderr�line�liness   r\�_remote_error_from_stderrr�s���
�~�� � �,2�,<�,<�,>�?�,>�D�[�[��
�,>�E�?����?�?�:�&�&�#�D��Z��):�$;�$B�$B�7�I�$V�W�W���5�!�!��	
@s�Bc�^�\rSrSrSrSr\4SU4SjjjrSS\S\\	\4S\
\S\\
\/\4\
\\44S	jjrSS
jrSS\
\\S\
\4SjjrSS\
\S\
\\4S
jjrSSSjjrSrU=r$)�TraditionalGitClienti�zTraditional Git client.r�rac�2>�Xl[TU]"S0UD6 g�Nr_)�_remote_path_encodingrrY)rZ�
path_encodingr�rs   �r\rY�TraditionalGitClient.__init__�s���%2�"�
���"�6�"r^r2r�rjc��[e)a&Create a connection to the server.

This method is abstract - concrete implementations should
implement their own variant which connects to the server and
returns an initialized Protocol object with the service ready
for use and a can_read function which may be used to see if
reads would block.

Args:
  cmd: The git service name to which we should connect.
  path: The path we should pass to the service. (as bytestirng)
  protocol_version: Desired Git protocol version. By default the highest
    mutually supported protocol version will be used.
)r�)rZr2r�rjs    r\�_connect�TraditionalGitClient._connect�s
��("�!r^c��[UlURSU5upVnU [UR	55up�URU	5unn[U;a[5Ul
URn
U"[U55=p�[UR55R![UR555(a$URS5 [#X�0S9sSSS5 $[$U	;af[U5nUR5HGunnU[&:XdM[U;a(U
R(R+SU-S-5 SU
lUU	MI Uc$URS5 [#X�0S9sSSS5 $[/U5S:XaJU(aCURS5 U
b[U
R155nOSn[#X�US9sSSS5 $[3X�U5nUHnURU5 M U"UR4UR6[8U;US9unnUR;U5(a#[=UUUS	9HnUR?U5 M URAX[U5n[#X�US9sSSS5 $![
an
[
U5U
eSn
A
ff=f![a URS5 ef=f!,(df   g=f)
a
Upload a pack to a remote repository.

Args:
  path: Repository path (as bytestring)
  update_refs: Function to determine changes to remote refs.
    Receive dict with existing remote refs, returns dict with
    changed refs (name -> sha, where sha=ZERO_SHA for deletions)
  generate_pack_data: Function that can return a tuple with
    number of objects and pack data to upload.
  progress: Optional callback called with progress updates

Returns:
  SendPackResult

Raises:
  SendPackError: if server rejects the pack data

sreceive-packN�r�r�sng s& remote does not support deleting refsFr)�	ofs_deltarnr�)!r6rjr&r�rcr?rr�r*r�r�r�r�rar�r��issubsetrr"r>r�r��_ref_status_okrwr�r5r8r7r(r�rr�r�)rZr�r�r�rnr��unused_can_readrr=r��excr�r��report_status_parserr>�
orig_new_refsr�r�r��header_handlerr��pack_data_countrm�chunks                        r\r��TraditionalGitClient.send_pack�s���&!B���)-�����)M�&���
�
A�0@��AS�AS�AU�0V�-���9�9�:M�N�
�'��'�+B�B�-?�-A��*�#'�#=�#=� �
�+6�t�H�~�+F�F��
�8�>�>�#�$�-�-�c�(�.�.�2B�.C�D�D��$�$�T�*�%�h��K�+�U�.&�-@�@��
�.�� -� 3� 3� 5�H�C���h��3�7N�N�0�>�>�E�E� &���/X� X��CH�0�?�$�S�M�!6����$�$�T�*�%�h��K�K�U�N�8�}��!�m��$�$�T�*�'�3�!%�&:�&@�&@�&B�!C�J�!%�J�%�h�
�S�]�U�`2�'�8��N�&���$�$�S�)�&�*<��#�#��#�#�/�3J�J�!�	*�&�O�Y��%�%�h�/�/�/�#�Y���E��K�K��&��
�7�7����J�"�(�J�O�O�U��#�
A�/��7�S�@��
A��!�
��$�$�T�*��
���U�sb�K
�J�9K
�:J-�AK
�43K
�+AK
�AK
�$B!K
�
J*�J%�%J*�*K
�-K
�
K
�
Kr�c
��U	bU	[;a[SU	35eURSX5up�n[U
5n
U
[;a[SU
S35eU	(aX�:�a[SU
S35eX�lU
 URS:Xa�[U
R
55nURU5unnnU
RS5 U
RS5 U
RS	5 U
RS
5 Uc[nUHnU
RSU-5 M U
RS5 [U
R
55unnnOA[U
R
55unnURU5unnnUb[UU5nUc'U
RS5 [!UUU5sSSS5 $UbU"UUS9nO	U"U5nUbUVs/sHnU[$:wdMUPM nnU(d'U
RS5 [!UUU5sSSS5 $URS:XayU
RS
5 U
RS5 ['U[([*5(a%U(aU
R[-SU-55 O/U(aUR/5 OU(aUR/5 [1U
UUUUUURS9unn[3U
UUUUURS9 [!UUUUU5sSSS5 $![an[U5UeSnAff=f![an[U5UeSnAff=f!["a U
RS5 ef=fs snf!,(df   g=f)r�N�unknown Git protocol version �upload-pack� used by server�bad Git protocol version r��command=ls-refs
�0001�symrefs�peel�ref-prefix �ri�command=fetch
�
filter %s
)rirj�rj)r7r�r&r�rjr�rcr?rrrar��DEFAULT_REF_PREFIXr�r�rFr�r�r>rXr#r$rHrrlr{)rZr�r�rgrmrnrir�r�rjr�rhr�server_protocol_versionr�r.r�r�r�r�r��_peeledr[�cidr�r�s                          r\r��TraditionalGitClient.fetch_packs���J
�(� �(=�=��<�=M�<N�O�P�P�"&�-�-���"W����"<�U�"C��"�*?�?��/�0G�/H��X��
�� 7� J��+�,C�+D�O�T��
�!8��
��$�$��)�E�*B�5�CU�CU�CW�*X�'��<�<�=P�Q�	�+����$�$�%9�:����G�$��$�$�Z�0��$�$�W�-��%�!3�J�(�F��(�(��&�)@�A�)��$�$�T�*�)9�%�:L�:L�:N�)O�&��g�w�E�0@��AS�AS�AU�0V�-�D�-��<�<�=P�Q�	�+����)�,�T�:�>�D��|��$�$�T�*�&�t�W�e�<�M�U�P
��$�+�D��>�E�+�D�1�E�� �(-�A���������A���$�$�T�*�&�t�W�e�<�i�U�j�$�$��)��$�$�%7�8����G�$�#�/�1A�CT���$��K�K���+�)E� F�G� ��-�-�/����)�)�+�+C��'�����!%�!6�!6�,�(�[�-�
%��'����!%�!6�!6�

�#�4��%��m�T�i�U��'�E�3�F�;��D��E��*'�E�3�F�;��D��E��(!�
��$�$�T�*��
��B�c�U�s��8M-�
L�#B.M-�L*�.AM-�=
M�M-�M�M-�M(�*M(�0&M-� C"M-�
L'�L"�"L'�'M-�*
M�4M�M�M-�M%�%M-�-
M;c�^�UbU[;a[SU35eURSX5upEn[U5nU[;a[SUS35eU(aXr:�a[SUS35eXplURS:Xa�[UR
55nURS5 URS5 URS	5 URS
5 Uc[nUHn	URSU	-5 M URS5 U [UR
55up�nURS5 UR5Hup�X�U[-'M U
sSSS5 $U [UR
55up�URS5 [!U5unnUb[#X�5n
U
sSSS5 $![an
[U5U
eSn
A
ff=f!,(df   g=f![an
[U5U
eSn
A
ff=f!,(df   g=f)�2Retrieve the current refs from a git smart server.Nr6r7r8r9r�r:r;r<r=r>)r7r�r&r�rjr�rcrar�rCr�r?rr�rJr�r�rF)rZr�rjr�r��_rrDr�r�r�r�r�r.rK�refvalue�_agents                 r\r��TraditionalGitClient.get_refs�s1��
�(� �(=�=��<�=M�<N�O�P�P��=�=���P���&�"<�U�"C��"�*?�?��/�0G�/H��X��
�� 7� J��+�,C�+D�O�T��
�!8��� � �A�%�":�5�;M�;M�;O�"P��� � �!5�6��K�K�� �� � ��,�� � ��)��!�/�
�$���$�$�^�f�%<�=�%�� � ��&��E�-=�e�>P�>P�>R�-S�*�D�F��$�$�T�*�)/����%�G�8@��#4�4�5�*8�����E�0@��AS�AS�AU�0V�-�D��$�$�T�*�%?�@S�%T�"��6��)�,�T�>�D�����'�E�3�F�;��D��E�����'�E�3�F�;��D��E����s`�G/�G�:6G/�<H�>H�.H�
G,�G'�'G,�,G/�/
G=�
H�
H�H�H�
H,c	��URSU5up�nU	 UbU	RSU-5 U	RSU-5 UbUHnU	RSU-5 M UbU	RSU-5 U	RS5 U	R5n
U
S:XdU
S:Xa
SSS5 gU
S:XdU
S:XaORU
RS	5(a-[
U
S
SRS5RSS
55e[SU
<35eU	R5nUb[S5e[U	R55HNunnU[:Xa
U"U5 MU[:Xa
U"U5 M.U[:Xa
U"U5 MB[SU35e SSS5 g![an[	U5UeSnAff=f!,(df   g=f)Nsupload-archivesargument --format=s	argument sargument --prefix=sNACK
sNACKsACK
r\sERR �r�r�r�zinvalid response zexpected pkt tailru)r&rar�r?rr�rr�r�rfrRrcr:r<r;)rZr�rrrnrrrr�r�rhr�subdirr�r.�retryrzs                  r\r�TraditionalGitClient.archive�s���#'�-�-�0A�4�"H����
��!��$�$�%:�V�%C�D�� � ��
�!:�;��"�%�F��(�(���)>�?�&��!��$�$�%:�V�%C�D�� � ��&�
A��)�)�+���i��3�'�>���U� ���C�6�M������(�(�&�s�1�2�w�~�~�e�'<�'C�'C�G�Y�'W�X�X�$�'8���%@�A�A��%�%�'�C���$�%8�9�9�5�e�6H�6H�6J�K�
��d��1�1��t�$��7�7��T�N��4�4���%�(�+D�T�F�)K�L�L�L�3�U��#�
A�/��7�S�@��
A���U�s7�A4G�
F$�
G�3C(G�$
F?�.F:�:F?�?G�
G)r"r�rjr`r�rr)rcrdrerfrg�DEFAULT_ENCODINGrYrDr
rrrrrAr
rrr&r�r`rKr�r�rrhrrs@r\rr�s���!���%5�#�#�+/�	"�
�"��C��J��"�#�3�-�	"�

�x��"�d�(�+�X�b��i�-@�@�	A�"�,\P�H��*.��*.�HU��T�#�Y�'�HU�#�3�-�HU�Z+/�*.�	6�#�3�-�6��T�#�Y�'�	6�z�����-M�
�-M�-Mr^rc�^�\rSrSrSrSS
U4Sjjjr\S5rSrSS\	S\
\\	4S	\\
S\\\/\4\\\	44S
jjrSrU=r$)�TCPGitClientiz8A Git Client that works over TCP directly (i.e. git://).rac�P>�Uc[nXlX l[TU]"S0UD6 gr!)r=�_host�_portrrY)rZ�host�portr�rs    �r\rY�TCPGitClient.__init__s'����<��D��
��
�
���"�6�"r^c�@�U"UR4SUR0UD6$)NrZ)�hostnamerZr�s   r\r��TCPGitClient.from_parsedurls!���9�%�%�E�I�N�N�E�f�E�Er^c��URnURb&UR[:waUSUR3-
n[SX!SS45$)N�:�git�)rWrXr=r�rZr��netlocs   r\r��TCPGitClient.get_urlsI�������:�:�!�d�j�j�L�&@���$�*�*��&�&�F��5�&��B�7�8�8r^r2r�rjc�^^^�[U[5(d[U5e[U[5(dURUR5n[
R"URUR[
R[
R5nSm[SUR35nUH_upgp�n
[
R
"XgU5mTR[
R[
RS5 TRU
5  O TcUeTR#SS5mTR#SS5mSUUU4Sjjn[%TR&TR(UUR*S9n
UR-S	5(aUSSnUS
:XaUc[.UlOX0lO[2UlUS
:Xa UR0S:XaSUR0-nOS
nU
R5SU-USURRS5-U-5 U
U4SjS4$![a#nUnTbTR!5 SmSnAGM�SnAff=f)Nzno address found for r�rb����wbrc�f>�TR5 TR5 TR5 gr�r�)�rfile�s�wfiles���r\r��$TCPGitClient._connect.<locals>.closeEs����K�K�M��K�K�M�
�G�G�Ir^�r�s/~r7r�s
version=%dr^�git-shost=r[c�>�[T5$r�)rz)rls�r\�<lambda>�'TCPGitClient._connect.<locals>.<lambda>fs���.�q�1r^r`)r�rDrErbr"�socket�getaddrinforWrX�	AF_UNSPEC�SOCK_STREAMr��
setsockopt�IPPROTO_TCP�TCP_NODELAY�connectr��makefilerArwr�r�r�r5rjr6�send_cmd)rZr2r�rj�	sockaddrs�err�family�socktype�protof�	canonname�sockaddr�er�r��version_strrkrlrms               @@@r\r&�TCPGitClient._connect$s����#�u�%�%��C�.� ��$��&�&��;�;�t�9�9�:�D��&�&��J�J��
�
�F�$4�$4�f�6H�6H�
�	�
���-�d�j�j�\�:�;��=F�9�F�f���
�
�f��7�A�
�L�L��+�+�V�-?�-?��C�
��	�	�(�#��>G�
�9��I��
�
�4��$���
�
�4��#��	�	�
��J�J��K�K�� �1�1�	
���?�?�5�!�!����8�D��.� ��'�(J��%�(8�%�$E�D�!��.� �T�%:�%:�a�%?�
.��0E�0E�E�K��K�
����c�M�4��D�J�J�,=�,=�g�,F�!F��!T�	
��1�4�7�7��[�
����=��G�G�I����	
�s�H!�!
I�+I	�	I)rWrXrjr�r`)rcrdrerfrgrYrr�r�rDr
rrrrrAr
rrr&rhrrs@r\rUrUs����B�#�#��F��F�9�+/�	B8�
�B8��C��J��B8�#�3�-�	B8�

�x��"�d�(�+�X�b��i�-@�@�	A�B8�B8r^rUc�B�\rSrSrSrS	Sjr\S5rSrS	Sjr	Sr
g)
�SubprocessWrapperiiz:A socket-like object that talks to a subprocess via pipes.Nc��Xl[UR5RUlURR
Ulgr�)�procr�stdoutrw�stdinr�)rZr�s  r\rY�SubprocessWrapper.__init__ls.���	�"�4�;�;�/�4�4��	��Z�Z�%�%��
r^c�.�URR$r�)r�rr�s r\r�SubprocessWrapper.stderrqs���y�y���r^c��[RS:Xa>SSKJn U"URR
R
55n[U5S:g$[URR
R
55$)N�win32r)�
get_osfhandle)	�sys�platform�msvcrtr�r�r�ryr�rz)rZr�r�s   r\rh�SubprocessWrapper.can_readus\���<�<�7�"�,�"�4�9�9�#3�#3�#:�#:�#<�=�F�$�V�,��1�1�#�D�I�I�$4�$4�$;�$;�$=�>�>r^c�F�URRR5 URRR5 URR(a$URRR5 URR5 gr�)r�r�r�r�r�waitr�s r\r��SubprocessWrapper.close~s]���	�	�������	�	����� ��9�9����I�I���"�"�$��	�	���r^)r�rwr�r`)rcrdrerfrgrY�propertyrrhr�rhr_r^r\r�r�is(��D�&�
� �� �?�r^r�c���[RS:Xa SSKnSSKnUR	S5up#U/$S/$!UR
a /SQs$f=f![a /SQs$f=f)z3Find command to run for system Git (usually C Git).r�rNra)r2z/cra)r�r��
pywintypes�win32api�FindExecutabler��ImportError)r�r�r�ras    r\�find_git_commandr��ss��
�|�|�w��
	,���
,�&�5�5�e�<����u���w����#�#�
,�+�+�
,��
�	(�'�'�	(�s �A�8�A�A�A#�"A#c�~�\rSrSrSr\S5rSrSS\S\	\\
4S\\S\
\\/\4\\\44S	jjrS
rg)r�i�z5Git client that talks to a server using a subprocess.c��U"S0UD6$r!r_r�s   r\r��"SubprocessGitClient.from_parsedurl�����}�V�}�r^N�servicer�rjrac�.�[U[5(d[U5e[U[5(aURUR5nUR
c
[
5n/WQURS5PUPn[R"US[R[R[RS9n[U5n[URURURURS9UR UR"4$)Nr[r��bufsizer�r�rro)r�rDrEr�r"�git_commandr��
subprocess�Popen�PIPEr�rArwr�r�r�rhr)rZr�r�rjr��argv�p�pws        r\r&�SubprocessGitClient._connect�s����'�5�)�)��G�$�$��d�E�"�"��;�;�t�9�9�:�D����#�*�,�K�<��<�g�n�n�W�5�<�t�<��������/�/��?�?��?�?�
���q�
!������������ $� 5� 5�	
�
�K�K�
�H�H�	
�		
r^r_r�)rcrdrerfrgrr�r�rDr
rrrrrAr
rrr&rhr_r^r\r�r��s~��?������K�+/�	
��
��E�3�J��
�#�3�-�	
�

�x��"�d�(�+�X�b��i�-@�@�	A�
�
r^r�c�n�\rSrSrSrSS\S\\SS4SjjrSr	\
S	5r\
S
5rSSjr
SS\S
\S\\\\\4\\/\\4S\\\/S4S\\S\\\S\\S\\4SjjrSS\\\S\\S\\S\4SjjrSS\\S\\\4SjjrSrg)r�i�z5Git Client that just uses a local on-disk repository.Nr��configrac��X lg)z�Create a new LocalGitClient instance.

Args:
  thin_packs: Whether or not thin packs should be retrieved
  report_activity: Optional callback for reporting transport
    activity.
N�r�)rZr�r�r�s    r\rY�LocalGitClient.__init__�s
��!0�r^c�"�[SSUSS45$)N�filerb)rr�s  r\r��LocalGitClient.get_url�s���6�2�t�R��4�5�5r^c��U"S0UD6$r!r_r�s   r\r��LocalGitClient.from_parsedurl�r�r^c��[U[5(d[R"U5n[	[U55$r�)r�rr��fsdecoderrR)r�r�s  r\�
_open_repo�LocalGitClient._open_repo�s,���$��$�$��;�;�t�$�D��t�D�z�"�"r^c	���U(dS
SjnURU5nUR5nU"[U55nUR5Vs/sHo�[:wdMUPM n	n/n
UR5H0up�X�;dMX�;dMU[:wdMU
R
U5 M2 U
(dW[UR55R[UR555(a[U0S9sSSS5 $URR"U"X�SS96 0n
UR5H�up�URU[5nU[:wa9URRX�U5(dSUSU3nU"U5 X�U'M\M^URRX�5(aM�U"SU35 S	X�'M� SSS5 [WW
S9$s snf!,(df   N=f)a�Upload a pack to a local on-disk repository.

Args:
  path: Repository path (as bytestring)
  update_refs: Function to determine changes to remote refs.
    Receive dict with existing remote refs, returns dict with
    changed refs (name -> sha, where sha=ZERO_SHA for deletions)
    with number of items and pack data to upload.
  progress: Optional progress function

Returns:
  SendPackResult

Raises:
  SendPackError: if server rejects the pack data

Nc��gr�r_rrs r\rn�*LocalGitClient.send_pack.<locals>.progress�rtr^)r�T�r*zunable to set z to zunable to remove zunable to remover`)r�r�r�r�r>r�r�r�r+rr��
add_pack_datar�r��
set_if_equals�remove_if_equals)rZr�r�r�rnr�r=r>�sha1r8r7rKrMr�rL�msgs                r\r��LocalGitClient.send_pack�s���$�
��_�_�T�
"�f����(�H�"�4��>�2�H�%-�_�_�%6�K�%6�T�(�:J�D�%6�D�K��D�%-�^�^�%5�!���(� �,� �H�,��K�K��)�
&6��C���� 0�1�:�:�3�x�~�~�?O�;P�Q�Q�%�h�2�>�#�
"�"
���-�-�#�D�$�?�
��J�%-�^�^�%5�!��#�<�<���:���x�'�!�;�;�4�4�W��Q�Q� .�w�i�t�H�:�F�� ��
�.1�7�+�R�
"�;�;�7�7��J�J� �#4�W�I�!>�?�.@�
�+�&6�/#�F�h�:�>�>��?L�	#�
"�sC�4G)�
G$�#G$�)G)�	G)�G)�A)G)�B,G)�?G)�$G)�)
G7r�r�r�rnrir�r�rjc	���URU5n
U
RUUUUS9n[X�RR	5[55sSSS5 $!,(df   g=f)a�Fetch into a target repository.

Args:
  path: Path to fetch from (as bytestring)
  target: Target repository to fetch into
  determine_wants: Optional function determine what refs
    to fetch. Receives dictionary of name->sha, should return
    list of shas to fetch. Defaults to all shas.
  progress: Optional progress function
  depth: Shallow fetch depth
  ref_prefix: List of prefixes of desired references, as a list of
    bytestrings. Filtering is done by the server if supported, and
    client side otherwise.
  filter_spec: A git-rev-list-style object filter spec, as bytestring.
    Only used if the server supports the Git protocol-v2 'filter'
    feature, and ignored otherwise.

Returns:
  FetchPackResult object

)r�rnriN)r�r�r�r��get_symrefsrB)rZr�r�r�rnrir�r�rjr��rr�s            r\r��LocalGitClient.fetchsY��F�_�_�T�
"�a��7�7�� /�!��	��D�#�4���);�);�)=�|�~�N�#�
"�
"�s�>A�
A(c
��URU5n
U
RX#XVS9nUR5n[U5n
U
RR5n[
5nU
c[SX�5sSSS5 $[XJRX�S9 [U
R5X�5sSSS5 $!,(df   g=f)aRetrieve a pack from a local on-disk repository.

Args:
  path: Remote path to fetch from
  determine_wants: Function determine what refs
    to fetch. Receives dictionary of name->sha, should return
    list of shas to fetch.
  graph_walker: Object with next() and ack().
  pack_data: Callback called for each bit of data in the pack
  progress: Callback for progress reports (strings)
  depth: Shallow fetch depth
  ref_prefix: List of prefixes of desired references, as a list of
    bytestrings. Filtering is done by the server if supported, and
    client side otherwise.
  filter_spec: A git-rev-list-style object filter spec, as bytestring.
    Only used if the server supports the Git protocol-v2 'filter'
    feature, and ignored otherwise.

Returns:
  FetchPackResult object

)rnriN)�other_haves)r��find_missing_objects�get_remote_hasr`r�r�rBr�rr�r�)rZr�r�rgrmrnrir�r�rjr��missing_objectsr��
object_idsr�r�s                r\r��LocalGitClient.fetch_packJs���D�_�_�T�
"�a��4�4���5��O�*�8�8�:�K��o�.�J��f�f�(�(�*�G� �N�E��!�&�t�W�<�#�
"�
&��>�>�:�
�#�1�:�:�<��@�!#�
"�
"�s�AB1�:-B1�1
B?c�z�URU5nUR5sSSS5 $!,(df   g=f)z:Retrieve the current refs from a local on-disk repository.N)r�r�)rZr�rjr�r�s     r\r��LocalGitClient.get_refs~s(���_�_�T�
"�f��?�?�$�#�
"�
"�s�,�
:r�)TNNr�rrr)rcrdrerfrgrrrrYr�rr�r�r�rrRr
r�rDrr`rKr�r�r�r�rhr_r^r\r�r��s���?� ��#'�	
0��
0��� �	
0�

�
0� 6������#��#�
:?�D
�6:�#�*.�'+�*.�*O��*O��*O�"��d�5�%�<�(�(�3�-�8�$�u�+�E�F�
�	*O��8�U�G�T�M�2�3�*O���}�*O��T�#�Y�'�*O��e�_�*O�#�3�-�*O�d��*.�'+�*.�2A��T�#�Y�'�2A��e�_�2A�#�3�-�2A�
�2A�n+/�*.�	%�#�3�-�%��T�#�Y�'�	%�%r^r�c�<�\rSrSrSrSS\\4SjjrSrg)�	SSHVendori�z!A client side SSH implementation.Nrjc	�,�[UR5e)aConnect to an SSH server.

Run a command remotely and return a file-like object for interaction
with the remote command.

Args:
  host: Host name
  command: Command to run (as argv array)
  username: Optional ame of user to log in as
  port: Optional SSH port to use
  password: Optional ssh password for login or private key
  key_filename: Optional path to private keyfile
  ssh_command: Optional SSH command
  protocol_version: Desired Git protocol version. By default the highest
    mutually supported protocol version will be used.
)r��run_command)	rZrY�command�usernamerZ�password�key_filename�ssh_commandrjs	         r\r��SSHVendor.run_command�s��6"�$�"2�"2�3�3r^r_r�	rcrdrerfrgrrr�rhr_r^r\r�r��s1��+��
����*.�4�#�3�-�4�4r^r�c�0^�\rSrSrSrSU4SjjrSrU=r$)�StrangeHostnamei�z,Refusing to connect to strange SSH hostname.c�$>�[TU]U5 gr�)rrY)rZr]rs  �r\rY�StrangeHostname.__init__�s���
����"r^r_r`)rcrdrerfrgrYrhrrs@r\r�r��s���6�#�#r^r�c�<�\rSrSrSrSS\\4SjjrSrg)�SubprocessSSHVendori�z6SSH vendor that shells out to the local 'ssh' command.Nrjc	�|�Ub[S5eU(a*SSKn	/U	RU[RS:gS9QSPn
OSS/n
U(aU
RS[
U5/5 U(aU
RS[
U5/5 Uc[nUS:�aU
RS	S
U3/5 U(aUSU3nURS5(a	[US
9eU
RU5 [R"/U
QUPS[R[R[RS9n[U5$)Nz6Setting password not supported by SubprocessSSHVendor.rr���posixz-x�sshz-p�-iz-ozSetEnv GIT_PROTOCOL=version=�@�-�r]r�)r��shlexr�r�r��extendrr5r�r�r�r�r�r�r�)rZrYr�r�rZr�r�r�rjr��argsr�s            r\r��SubprocessSSHVendor.run_command�s+����%�H��
���S�U�[�[��C�L�L�G�4K�[�L�S�d�S�D��4�=�D���K�K��s�4�y�)�*���K�K��s�<�0�1�2��#�A���a���K�K��!=�>N�=O�P�Q�R���Z�q���'�D��?�?�3���!�4�0�0����D������d��G����/�/��?�?��?�?�
��!��&�&r^r_rr�r_r^r\r�r��s1��@��
����*.�/'�#�3�-�/'�/'r^r�c�<�\rSrSrSrSS\\4SjjrSrg)�PLinkSSHVendori�z8SSH vendor that shells out to the local 'plink' command.Nrjc		�(�U(a*SSKn	/U	RU[RS:gS9QSPn
O[RS:XaSS/n
OSS/n
Ub1SSKnURS5 U
R
S[U5/5 U(aU
R
S	[U5/5 U(aU
R
S
[U5/5 U(aUSU3nURS5(a	[US
9eU
RU5 [R"[R5nUc[nUS:�aSU3US'[ R""/U
QUPS[ R$[ R$[ R$US9n
['U
5$)Nrr�r�z-sshz	plink.exe�plinkzHInvoking PLink with a password exposes the password in the process list.z-pwz-Pr�r�r�r�zversion=�GIT_PROTOCOL)r�r�r�r�env)r�r�r�r�r�r�r�rr�r�r�r��deepcopyr��environr5r�r�r�r�)rZrYr�r�rZr�r�r�rjr�r�r�r�r�s              r\r��PLinkSSHVendor.run_command�sj����U�U�[�[��C�L�L�G�4K�[�L�U�f�U�D�
�\�\�W�
$���(�D��V�$�D�����M�M� �
�
�K�K���H�
�.�/���K�K��s�4�y�)�*���K�K��s�<�0�1�2���Z�q���'�D��?�?�3���!�4�0�0����D���m�m�B�J�J�'���#�A���a��$,�-=�,>�"?�C�������d��G����/�/��?�?��?�?��

��!��&�&r^r_rr�r_r^r\r�r��s1��B��
����*.�<'�#�3�-�<'�<'r^r�c�R�SSKnURS[5 SSKJn U"S0UD6$)NrzDParamikoSSHVendor has been moved to dulwich.contrib.paramiko_vendor.r)�ParamikoSSHVendorr_)r�r�r��contrib.paramiko_vendorr�)r�r�r�s   r\r�r�,s*����M�M�N���;��&�v�&�&r^c�^�\rSrSrSS
U4SjjjrSr\S5rSrSS\	S\
\\	4S	\\
S\\\/\4\\\	44S
jjrSrU=r$)�SSHGitClienti<rac	�8>�XlX lX0lX`lXplU=(d= [
RRS[
RRS55Ul[T
U]("S0U	D6 0UlUbX@lg[5Ulg)N�GIT_SSH_COMMAND�GIT_SSHr_)rYrZr�r�r�r�r�r�r�rrY�alternative_paths�
ssh_vendor�get_ssh_vendor)rZrYrZr��vendorr�r�r�r�r�rs          �r\rY�SSHGitClient.__init__=s|����	��	� �
� �
�(��&�
�"�*�*�.�.��r�z�z�~�~�i�8�+
���	���"�6�"�57�����$�O�,�.�D�Or^c���URnURbUSUR3-
nURb[URS5S-U-n[	SX!SS45$)Nr`z@/:r�r�rb)rYrZr��urlquoterrcs   r\r��SSHGitClient.get_urlXsa�������9�9� ���$�)�)��o�%�F��=�=�$��d�m�m�U�3�c�9�F�B�F��5�&��B�7�8�8r^c�V�U"SURURURS.UD6$)N)rYrZr�r_)r]rZr�r�s   r\r��SSHGitClient.from_parsedurlbs7���
��#�#�����'�'�
��	
�	
r^c�r�URRUSU-5n[U[5(deU$)Nrp)rr�r�rD)rZr2s  r\�
_get_cmd_path�SSHGitClient._get_cmd_pathks6���$�$�(�(��g��m�<���#�u�%�%�%�%��
r^r2r�rjc��[U[5(d[U5e[U[5(aURUR5nURS5(aUSSnUR
U5RUR5S-U-S-n0nURbURUS'URbURUS'URbURUS'URR"URU4URURUS.UD6n[UR UR"UR$UR&S	9UR([+US
S54$)Nz/~rz '�'r�r�r�)rZr�rjror)r�rDrEr�r"r�rr�r�r�rr�rYrZr�rArwr�r�r�rhr)rZr2r�rjr�r��cons       r\r&�SSHGitClient._connectpsr���#�u�%�%��C�.� ��d�E�"�"��;�;�t�9�9�:�D��?�?�4� � ����8�D����s�#�*�*�4�+E�+E�F��
��
��
�	
����=�=�$�!%���F�:�����(�%)�%6�%6�F�>�"����'�$(�$4�$4�F�=�!��o�o�)�)��I�I��
�����]�]�-�
��

��
�����	�	��	�	� $� 5� 5�	
�
�L�L��C��4�(�	
�		
r^)rrYr�r�rZr�rr�)NNNNNNNr`r�)rcrdrerfrYr�rr�rrDr
rrrrrAr
rrr&rhrrs@r\rr<s�����������/�
�/�/�69��
��
��+/�	+
�
�+
��C��J��+
�#�3�-�	+
�

�x��"�d�(�+�X�b��i�-@�@�	A�+
�+
r^rc
��SRSR[RVs/sHn[	U5PM sn55$s snf)Nzgit/dulwich/{}�.)rrH�dulwich�__version__rrrs r\�default_user_agent_stringr�s<���"�"�3�8�8�W�=P�=P�,Q�=P��S��V�=P�,Q�#R�S�S��,Qs�A	)zurllib3.ProxyManagerzurllib3.PoolManagerc��S=pVS=pxUc1SH+n	[RRU	5nU(dM+ O U(a[U5(aSnUbOUcURSS5nURSS5nURSS5nURSS5nUc
[
5nS	U0n
S
U0nUSLaSUS'OUS
LaSUS'OSUS'URU5 SSKnUb�UcURn[U[5(dUR5n[U5n
U
Rb3UR"U
RSU
R =(d S3S9nO0nU"U4X�S.UD6nU$UcUR"nU"SSU
0UD6nU$![a GN7f=f![a GN5f=f![a SnGN5f=f![a SnGN5f=f)a�Return urllib3 connection pool manager.

Honour detected proxy configurations.

Args:
  config: `dulwich.config.ConfigDict` instance with Git configuration.
  override_kwargs: Additional arguments for `urllib3.ProxyManager`

Returns:
  Either pool_manager_cls (defaults to `urllib3.ProxyManager`) instance for
  proxy configurations, proxy_manager_cls
  (defaults to `urllib3.PoolManager`) instance otherwise

N)�https_proxy�
http_proxy�	all_proxyshttpsproxys	useragents	sslVerifyTs	sslCAInfoz
User-agent�ca_certs�
CERT_REQUIRED�	cert_reqsF�	CERT_NONErr`rb)�proxy_basic_auth)�
proxy_headers�headersr%r_)r�r�r��check_for_proxy_bypass�KeyError�get_booleanrr��urllib3�ProxyManagerr�rr�rr��make_headersr��PoolManager)r��pool_manager_cls�proxy_manager_cls�base_url�override_kwargs�proxy_server�
user_agentr�
ssl_verify�	proxynamer%r�r)�proxy_server_urlr$�managers                r\�default_urllib3_managerr7�sD��*!%�$�L� � �H���C�I��:�:�>�>�)�4�L��|��D�
�!�(�+�+��L�
����
�%�z�z�'�8�<��	����G�\�:�J�
	��+�+�G�\�B�J�	��z�z�'�<�8�H���.�0�
��Z�(�G�	�H��F��T��-��{��	�u�	�)��{��.��{��
�M�M�/�"�����$� '� 4� 4���,��,�,�'�.�.�0�L�#�L�1���$�$�0�#�0�0�$4�$=�$=�#>�a�@P�@Y�@Y�@_�]_�?`�!a��M��M�#��
�(5�
�JP�
���N�	�#�&�2�2��"�=�7�=�f�=���N��u�
��
���	��	���	��J�	��
�	��H�	�sH�F�.F(�F9�G�
F%�$F%�(
F6�5F6�9G	�G	�G�Gc�\�U(Ga[RRS5nU(a�[U5nURnU(a�SSKnUR
U5nURS5nUH�nUR5nU(dMUR5nURS5nU(aURUSS9nU(aXX;a gUS:Xa gX7:Xa gSU-nURU5(dM� g g![a SnN�f=f![a SnN_f=f)	N�no_proxyr�,rF)�strictT�*)r�r�r�rr]�	ipaddress�
ip_addressr�r�r��lower�lstrip�
ip_networkr)	r/�no_proxy_str�
parsed_urlr]r=�hostname_ip�no_proxy_values�no_proxy_value�no_proxy_value_networks	         r\r&r&	s9����z�z�~�~�j�1���"�(�+�J�!�*�*�H�� �'�"+�"6�"6�x�"@�K�#/�"4�"4�S�"9��&5�N�%3�%9�%9�%;�N�%�~�)7�)=�)=�)?��)7�)>�)>��*��'�>�9B�9M�9M�$2�5�:N�:"� 6�
 6�#.�#H�+/�)�S�0�#'�#�5�#'��.�0�'�$�,�,�^�<�<�#'�='6�>��G"�'�"&�K�'��$$.�>�9=� 6�>�s$�D
�;D�
D�D�D+�*D+c�,�\rSrSrSrSSSjjrSSjrSS\\S\\	\
S\\\
\
4\\\\\
\
4\\
\
444S	jjrS
rSSjrSS\\	\
S\\4SjjrSS\\S\\	\
4S
jjrSrSr\S5rS\4SjrSrg)�AbstractHttpGitClienti=	z�Abstract base class for HTTP Git Clients.

This is agonistic of the actual HTTP implementation.

Subclasses should provide an implementation of the
_http_request method.
raNc�p�URS5S-UlX l[R"U40UD6 g�N�/)r��	_base_url�dumbr�rY)rZr/rNr�s    r\rY�AbstractHttpGitClient.__init__F	s/��!����-��3����	����4�*�6�*r^c�,�[UR5e)anPerform HTTP request.

Args:
  url: Request URL.
  headers: Optional custom headers to override defaults.
  data: Request data.

Returns:
  Tuple (response, read), where response is an urllib3
  response object with additional content_type and
  redirect_location properties, and read is a consumable read
  method for the response data.

Raises:
  GitProtocolError
)r��
_http_request)rZrnr%rzs    r\rQ�#AbstractHttpGitClient._http_requestK	s��""�$�"4�"4�5�5r^rjr�c�^^^^�UbU[;a[SU35eTSS:XdeSnSS0nTRSLa`USRTR	S	55-
nTS
:Xa,Uc[
TlOUTlTRS:XaSUS
'O[Tl[TU5nTRXv5up�UR(a`URRU5(d[SUSURSU35e[XxRS[U5*5mURSL=(d  URRS5(+TlTR(Gd�UUUU4Sjn
[!U	S5n[#U5nU[;a[SUS35eU(aX�:�a[SUS35eUTlTRS:Xa=U
"U5up�p�[%UR'55up�nX�TUU4UR)5 $[+UR'55unUR-S5ST-:wa[SU<S35e[#U5nU[;a[SUS35eU(aX�:�a[SUS35eUTlTRS:Xa(U
"U5up�p�[%UR'55up�nOG[/UR'55unn
[1U5unn[3U
5unnTb[5UT5nX�TUU4UR)5 $STl[1[7U55unnTb[5UT5nU[95T0U4UR)5 $![an[S5UeSnAff=f!UR)5 f=f)Nr6rhrLz	info/refs�Acceptz*/*Tz?service={}r[�git-upload-packr��	version=2�Git-ProtocolzRedirected from URL z to URL z	 without zapplication/x-git-c�8>�[UR55nTc[mSS/nTHnURSU-5 M SR	[S5S[
U6/5nT	RT
RS5TU5upV[US5nXX`4$)Nr<r=r>r^r:r;r[)
r�rcrCr�rHrHrI�_smart_requestr�rA)r�r��pktsr��body�resprwr/r�rZr�s       ����r\�begin_protocol_v2�EAbstractHttpGitClient._discover_references.<locals>.begin_protocol_v2�	s����*B�5�CU�CU�CW�*X�'�!�)�%7�
�#���D�#-�����N�V�$;�<�#-��8�8�!�"6�7��'�4�.�Q��D�"&�!4�!4����w�/��4�"�J�D�%�T�4�0�E�.�d�A�Ar^r8r9z%unexpected number of packets receivedr�s
# service=zunexpected first line z from smart serverr)r7r�rNrr�r5rjr6rrQ�redirect_locationrrrw�content_typer�rAr�r�rcr�r`r�r�rQr�rFrPr�)rZr�r/rjr��tailr%rnr\rwr]r�rDr�r�r�r�r�r.r�s``` `               r\�_discover_references�*AbstractHttpGitClient._discover_references^	s���
�(� �(=�=��<�=M�<N�O�P�P���|�s�"�"�"����U�#���9�9�D� ��M�(�(�����)@�A�A�D��,�,�#�+�,N�D�)�,<�D�)��(�(�A�-�.9�G�N�+��(I��%��h��%���'�'��5�
���!�!��)�)�2�2�4�8�8�&�*�3�%�x��8N�8N�7O�y�Y]�X^�_����s�$:�$:�<�c�$�i�Z�$H�I�H�\	��)�)�T�1���9J�9J�9U�9U�$�:�6�D�I��9�9�9�B�B�.!��t�,��*D�U�*K�'�*�2G�G�$�7�8O�7P�P_�`���$�(?�(R�$�3�4K�3L�O�\���)@��%��(�(�A�-�=N�u�=U�:�'�t�.>�u�?Q�?Q�?S�.T�+�T�F��h���O�b
�J�J�L�]#� $�U�%7�%7�%9� :���
�z�z�%�(�]�W�-D�E�.�4�S�G�;M�N���
/I��.O�+�.�6K�K�(�;�<S�;T�Tc�d���(�,C�,V�(�7�8O�7P�P_�`���-D�D�)��,�,��1�AR�!�B�>�+�4�3C�5�CU�CU�CW�2X�/���
-�U�-?�-?�-A�B�� �/�):�4�)@���v�+E�/�,�(��%�&�1�#4�T�:�#F�D��h���O�
�J�J�L�
)*��%�!2�>�$�3G�!H���v��)�,�T�:�>�D��S�U�H�b�&�8��J�J�L��Y&�#�.�C��"�#��#��X
�J�J�L�s8�1C#N.�&N�C2N.�;N.�
N+�N&�&N+�+N.�.Oc�p�USS:Xde[X!5nSUS3nSUS3US.nURS:XaSUS	'[U[5(a[	[U55US
'UR
X%U5upgURRS5SU:wa[S
UR35eXg4$)zqSend a 'smart' HTTP request.

This is a simple wrapper around _http_request that sets
a couple of extra headers.
rhrLzapplication/x-z-resultz-request)�Content-TyperTr�rVrWzContent-Length�;rz"Invalid content-type from server: )
rrjr�rDrrwrQr`r�r)rZr�rnrz�result_content_typer%r\rws        r\rY�$AbstractHttpGitClient._smart_request�	s����2�w�#�~��~��c�#�� .�w�i�w�?��,�W�I�X�>�)�
��� � �A�%�&1�G�N�#��d�E�"�"�(+�C��I��G�$�%��'�'��d�;�
�����"�"�3�'��*�.A�A�"�4�T�5F�5F�4G�H��
��z�r^c��^^^^^�TRU5nTRSU5umpepxTRU5umn	TR[	55 [
T;a[
5TlU"[T55mTc[TU	0S9$[TR55R[TR555(a[TU	0S9$TR(a[TR5eUUUUU4Sjn
TR!SXZ"5S9up�[#US5n
TR%U
TU5n[TX�S9UR'5 $!UR'5 f=f)a�Upload a pack to a remote repository.

Args:
  path: Repository path (as bytestring)
  update_refs: Function to determine changes to remote refs.
    Receives dict with existing remote refs, returns dict with
    changed refs (name -> sha, where sha=ZERO_SHA for deletions)
  generate_pack_data: Function that can return a tuple
    with number of elements and pack data to upload.
  progress: Optional progress function

Returns:
  SendPackResult

Raises:
  SendPackError: if server rejects the pack data

sgit-receive-packNr)c3�># �[TTT5nUHn[U5v� M T"URUR[T;S9up#TRT5(a[
X#5Shv�N ggN7f)Nr�)r5rHr8r7r(r�r)	r1r�r2rmr�r�r>r=rZs	    �����r\�body_generator�7AbstractHttpGitClient.send_pack.<locals>.body_generator)
s~����1�'��8��N�&���s�m�#�&�);��#�#��#�#�/�3J�J�*�&�O�
�%�%�h�/�/�-�o�I�I�I�0�I�s�A-A9�0A7�1A9zgit-receive-pack)rz)�_get_urlrbr�r1rCr*r�r�r�rr�r�r+rNr�r�rYrAr�r�)rZr�r�r�rnrnr�r�r�r�rkr\rw�
resp_protor�r�r>r=s`  `           @@@r\r��AbstractHttpGitClient.send_pack
sV���&�m�m�D�!��>B�>W�>W���?
�;��%�G�
�5�5�6I�J�	
�#���#�#�$4�$6�7�#�'>�>�);�)=�D�&��t�H�~�.����!�(�%�B�G�G��x�~�~�� �)�)�#�h�n�n�.>�*?�@�@�!�(�%�B�G�G��9�9�%�d�o�o�6�6�	J�	J��(�(�);�S�~�GW�(�X�
��	�!�$��-�J��7�7��3�X��J�"�(�%�O��J�J�L��D�J�J�L�s�)(E"�"E4c

�Z�URU5n
URSU
U	US9up�p�nURU5unnnU
(d	U(aUn
UbU"X�S9nOU"U5nUbUVs/sHnU[:wdMUPM nnU(d[	X�U5$UR
(a[
UR5e[5n[SUR5n[UUUUSUURS9unnURS:Xal[S5S-n[U[[ 5(aU(aU[S	U-5-
nOU(aUR#5 UUR%5-
nO'U(aUR#5 UR%5nUR'S
U
U5unn[US5nUcUc[)UR+55unn[-UUUUUURS9 [	X�UUU5UR/5 $s snf!UR/5 f=f)a9Retrieve a pack from a git smart server.

Args:
  path: Path to fetch from
  determine_wants: Callback that returns list of commits to fetch
  graph_walker: Object with next() and ack().
  pack_data: Callback called for each bit of data in the pack
  progress: Callback for progress reports (strings)
  depth: Depth for request
  ref_prefix: List of prefixes of desired references, as a list of
    bytestrings. Filtering is done by the server if supported, and
    client side otherwise.
  filter_spec: A git-rev-list-style object filter spec, as bytestring.
    Only used if the server supports the Git protocol-v2 'filter'
    feature, and ignored otherwise.
  protocol_version: Desired Git protocol version. By default the highest
    mutually supported protocol version will be used.

Returns:
  FetchPackResult object

rU�rjr�Nr?)rhrirjr�r@r;rAzgit-upload-packrB)rmrbrr>r�rNr�r�rrAr�rlrjrHrXr#r$r�getvaluerYr3rcr{r�)rZr�r�rgrmrnrir�r�rjrnr�r�r�r�r��capa_symrefsr�r[rF�req_data�	req_protor�r�rzr\rwrns                            r\r�� AbstractHttpGitClient.fetch_packA
s3��D�m�m�D�!��:>�:S�:S���-�!�	;T�;
�7��3��
�4�4�5H�I�		
�#����<�"�G���#�D�6�E�#�D�)�E���$)�=�E�S�S�H�_�S�E�E�=��"�4�%�8�8��9�9�%�d�o�o�6�6��9���T�8�>�>�2�	�'?��#�����!�2�2�(
�$��m�� � �A�%��.�/�'�9�D��+�-=�?P��� ����+�!=�>�>����)�)�+��H�%�%�'�'�D���)�)�+��$�$�&�D��(�(�):�C��F�
��d�	�!�$��-�J��"�}�'<�/D��+�+�-�0�,��m�
%��'����!%�!6�!6�

�#�4�%��m�T��J�J�L��c>��b
�J�J�L�s�&H�8H�/AH�H*c��URU5nURSUUUS9un  pgUR5Hup�X�U[-'M U$)rIrUrq)rmrbr�rJ)
rZr�rjr�rnr�rJr�rKrKs
          r\r��AbstractHttpGitClient.get_refs�
sd���m�m�D�!�� $� 9� 9���-�!�	!:�!
���a��A�"(�����G�08��,�,�-�"0��r^c�B�URU5RS5$rK)rmr�r�s  r\r��AbstractHttpGitClient.get_url�
s���}�}�T�"�)�)�#�.�.r^c�R�[URU5RS5S-$rK)rrMr�r�s  r\rm�AbstractHttpGitClient._get_url�
s#���t�~�~�t�,�3�3�C�8�3�>�>r^c��URnUb[U5US'URnUb[U5US'U"[U540UD6$)Nr�r�)r��
urlunquoter�r)r�r�r�r�r�s     r\r��$AbstractHttpGitClient.from_parsedurl�
sW���%�%����!+�H�!5�F�:���%�%����!+�H�!5�F�:���:�i�(�3�F�3�3r^c�j�[U5RSUR<SUR<S3$)Nrz, dumb=r)rrcrMrNr�s r\r�AbstractHttpGitClient.__repr__�
s/���t�*�%�%�&�a����'9�����
�Q�O�Or^)rMr�rNrj)Fr`rr�r)rcrdrerfrgrYrQrrr`rKrr�rr�rDrrbrYr�r�r�r�rmrr�rrhr_r^r\rIrI=	s���+�
6�.+/�*.�H�#�3�-�	H�
�T�#�Y�'�H�
��S�(�]��S��Z��d�3��8�n�d�3��=�>Q�Q�
�
H�T�0?�N��*.��*.�f��T�#�Y�'�f�#�3�-�f�V+/�*.�	�#�3�-���T�#�Y�'�	�$/�?��4��4�P�#�Pr^rIc�$^^�SSKJm UU4SjnU$)Nr)�
ProtocolErrorc�\>�T"U0UD6$!Tan[[U55UeSnAff=fr�)rr)r�r�r�r��funcs   ��r\�wrapper�)_wrap_urllib3_exceptions.<locals>.wrapper�
s9���	:���(��(�(���	:�"�3�u�:�.�E�9��	:�s��+�&�+)�urllib3.exceptionsr�)r�r�r�s` @r\�_wrap_urllib3_exceptionsr��
s���0�:��Nr^c�L^�\rSrSrSSU4SjjjrSrSSjrSrU=r$)	�Urllib3HttpGitClienti�
c�(>�XPlX`lUc[XAS9UlOX0lUbRUSU=(d S3nSSKn	U	R
R
US9n
URRRU
5 X@l	[TU],"SXS.UD6 g)N)r/r`rbr)�
basic_auth)r/rNr_)�	_username�	_passwordr7�pool_manager�urllib3.util�utilr+r%r�r�rrY)rZr/rNr�r�r�r�r��credentialsr)r�rs           �r\rY�Urllib3HttpGitClient.__init__�
s����"��!���� 7�� R�D�� ,����&�J�a���B�'7�8�K�� ���2�2�k�2�J�J����%�%�,�,�Z�8���
���@�(�@��@r^c��[U[5(dURS5n[URU5RS5S-$)Nr�rL)r�rr�rrMr�r�s  r\rm�Urllib3HttpGitClient._get_url�
s@���$��$�$��;�;�w�'�D��t�~�~�t�,�3�3�C�8�3�>�>r^c��SSKnURRR5nUbUR	U5 SUS'UcURRSXSS9nOURRSXUSS9nURS	:Xa[eURS
:Xa%[URRS5U5eURS:Xa%[URRS
5U5eURS:wa[SURSU35eURRS5UlUR!5nX�:waUOSUlU[)UR*54$!URRan[[U55UeSnAff=f![$a UR'5UlNof=f)Nrzno-cache�Pragma�GETF)r%�preload_content�POST)r%r[r�i�i�zWWW-Authenticatei�zProxy-Authenticate��zunexpected http resp z for rerb)r�r�r%r�r��request�
exceptions�	HTTPErrorrrr�rrjr�rqr`�geturlr_�AttributeError�get_redirect_locationr�rw)	rZrnr%rzr)�req_headersr\r��resp_urls	         r\rQ�"Urllib3HttpGitClient._http_requests���!��'�'�/�/�4�4�6�������w�'� *��H��
	2��|��(�(�0�0��3�U�1����(�(�0�0��C�4�QV�1����;�;�#��"�"��;�;�#��"�4�<�<�#3�#3�4F�#G��M�M��;�;�#��'����(8�(8�9M�(N�PS�T�T��;�;�#��"�%:�4�;�;�-�u�S�E�#R�S�S� �L�L�,�,�^�<���	I��{�{�}�H�
2:��X�b�D�"��-�d�i�i�8�8�8��+�!�!�+�+�	2�"�3�q�6�*��1��	2�� �	B�%)�%?�%?�%A�D�"�	B�s0�F�"F�F7�F4�F/�/F4�7G�G)r�r�r�r�rr`r)	rcrdrerfrYrmrQrhrrs@r\r�r��
s:��������A�
�A�A�>?�&9�&9r^r�c��URS:XdeUupn  nUS:XdU(dSnOHU(a6[U5S:�a'USR5(aUSSS;aUSSnO[S	5eSS
KJn U"X#-5$)zNConvert a file: URL to a path.

https://datatracker.ietf.org/doc/html/rfc8089
r��	localhostrbr�rr)r`z:/Nz%Non-local file URLs are not supported)�url2pathname)�schemerw�isalphar��
nturl2pathr�)�parsedrJrdr�r�s     r\�_win32_url_to_pathr�.s���
�=�=�F�"�"�"�%��A�t�Q��1�
���F������K�1���1�I������1�Q�K�;�&������!�"I�J�J�'���
�&�&r^rnr��	operationc�>�Ub
[XUS:HS9n[U4XS.UD6$)avObtain a git client from a URL.

Args:
  url: URL to open (a unicode string)
  config: Optional config object
  operation: Kind of operation that'll be performed; "pull" or "push"
  thin_packs: Whether or not thin packs should be retrieved
  report_activity: Optional callback for reporting transport
    activity.

Returns:
  Tuple with client instance and relative path.

�push�r��r�r�)r� _get_transport_and_path_from_url)rnr�r�r�s    r\�get_transport_and_path_from_urlr�Is;��"���v�)�v�2E�G��+�����39��r^c�b�[U5nURS:Xa#[R"U40UD6UR4$URS;a#[
R"U40UD6UR4$URS;a%[R"U4SU0UD6UR4$URS:Xaa[RS:Xd[RS:Xa[S
0UD6[U54$[R"U40UD6UR4$[SURS	35e)Nra)zgit+sshr�)�http�httpsr�r�r��ntzunknown scheme 'rr_)rr�rUr�r�r�
HttpGitClientr�r�r�r��default_local_git_client_clsr�r�)rnr�r�r�r�s     r\r�r�bs��
�c�]�F�
�}�}����+�+�F�=�f�=�v�{�{�K�K�	���,�	,��*�*�6�<�V�<�f�k�k�I�I�	���+�	+��(�(��I��I�&�I��K�K�
�	
�
���&�	 ��<�<�7�"�b�g�g��o�/�9�&�9�;M�f�;U�U�U�(�7�7��I�&�I��K�K�
�	
�
�'��
�
��a�8�
9�9r^�locationc���SU;aSU;aURSS5upSnOESU;a4URSS5upBSU;aURSS5up1OSnUnO[S5eX1U4$)zParse a rsync-style URL.r`r�rNznot a valid rsync-style URL)r��rsplitr�)r�rYr��user�	user_hosts     r\�parse_rsync_urlr�xs��
�h��3�h�.��~�~�c�1�-�����	���"�.�.��a�0��	��)��"�)�)�#�q�1�J�D�$��D��D��6�7�7����r^c�\�Ub
[XUS:HS9n[U4XS.UD6$![a Of=f[RS:Xa.USR5(aUSSS:Xa
[
S
0UD6U4$[U5upEn[U4S	U0UD6U4$![a [
S
0UD6U4s$f=f)asObtain a git client from a URL.

Args:
  location: URL or path (a string)
  config: Optional config object
  operation: Kind of operation that'll be performed; "pull" or "push"
  thin_packs: Whether or not thin packs should be retrieved
  report_activity: Optional callback for reporting transport
    activity.

Returns:
  Tuple with client instance and relative path.

r�r�r�r�rrr�z:\r�r_)	rr�r�r�r�r�r�r�r)r�r�r�r�r�r]r�s       r\�get_transport_and_pathr��s���(��#�F�I��<O�Q��
�/��
�#�
�<B�
�	
���
��
���|�|�w��8�A�;�#6�#6�#8�#8�X�a��]�e�=S�+�5�f�5�x�?�?�I�%4�X�%>�"��T�
�H�B�x�B�6�B�D�H�H��	�@�+�5�f�5�x�?�?�@�s�
 �
-�-�3B�B+�*B+z~/.git-credentialsrar�c��UH�n[US5nUHxn[UR55nURU:XdM.URU:XdM@UbUR
U:XdMUUR
UR4s sSSS5 s $ SSS5 M� g!,(df   M�=f![a M�f=f)Nrg)�openrr�r�r]r�r��FileNotFoundError)r�r]r��fnames�fnamer�r�parsed_lines        r\�get_credentials_from_storer��s�����	��e�T�"�a��D�"*�4�:�:�<�"8�K�#�*�*�f�4�'�0�0�H�<�%�-��1E�1E��1Q�*�3�3�[�5I�5I�I�I�#�"��#�"��"�"��!�	��	�sL�B1�-B�B�B�+B�	B1�B�B1�
B.	�)B1�.B1�1
B?�>B?r`)NNNr)�rgr�r�r�rxrtr�r��collections.abcrr�
contextlibr�iorr�typingrr	r
rrr
�urllib.parserrrr~rrrrr)rr�rrr�errorsrrr�packrrrr�protocolrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBrCrDrErFrGrHrIr�rJrKrLrMrNrOrPrQ�reporRrCrDr�	getLoggerrcrFrXrUrjrqrzr��COMMON_CAPABILITIESr�r�r�rr�r�rr�r�r�r�r�rr3r5rRrXrlr{r�r�rrrrUr�r`rr�r�r�r�r�r�r�r�r�rrrr7rr&rIr�r�r�r�r�r�r�r�r��
expanduser�DEFAULT_GIT_CREDENTIALS_PATHSr�r_r^r\�<module>r�s���,�(��	�
�
��
�.��&���+�.�B�B����F�F�E�E���,�,�,�,�,�,�,�,�,�,�,�,�Z	�	�	���x�(����
�	�	�8�	$��
�9�
��y���I��:�
�,�-E�F����!��	�
���������02�02�f
��
�$�!�
�4��u���t�E�5�L�1�4��u��3E�E�F�!�2*��t�E�5�L�'9�3�u�:�'E�!F�*�(M]�M]�`FK�FK�R(�&8�8�v
�X�e�_�
��%��U�
�BS�9T�
��P(�p37�
��8��e�*�8�����
�&�	8�
�x����
�.�/�8�
�8�v�.e
�e
�P
$�"�lM�9�lM�^V8�'�V8�r��:�$�s�)��$'
�.�'
�TD%�Y�D%�P .��4�4�B#�i�#�2'�)�2'�j?'�Y�?'�D	'�%��_
�'�_
�DT���
�	`��8�9�
`�F3��3�lOP�I�OP�d	�M9�0�M9�`%�
�'�#�'�8KO��	���v�&��:B�3�-��
�9�c�>���2:�,�c��e�H�S�M�3��,C�&D��* $�#�)I��)I��V��)I���}�)I�
�9�c�>��)I�Z�G�G���+�,��U�M�2�!�� $�,I�r^

Youez - 2016 - github.com/yon3zu
LinuXploit