
    q&f6                        U d Z ddlZddlZddlmZ ddlZddlmZ ddl	m
Z ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZ ddlmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) ejT                  d   dk\  Z+dejX                  v Z-dZ. e/       sddlZej\                  Z.e%e e%e0e0f      e e0   f   Z1 e'd      Z2 e'd      Z3 e'd	      Z4 e'd
d      Z5d Z6ejn                  Z7de2de2fdZ8d Z9d Z:ejv                  dk(  r ejx                          ejz                  Z=ej|                  Z>ej~                  j                  d      ZAe0eBd<   ej                  j                  d      ZDe0eBd<   ejv                  j                  d      ZEe0eBd<   ej                  j                  d      ZGe0eBd<   ej                  j                  d      ZIe0eBd<   ej                  j                  d      ZKe0eBd<   ej                  rej                  j                  d      ndZMe#e0   eBd<   ej                  j                  d      ZOe0eBd<   ej                  j                  d      ZQe0eBd<   ej                  r ejz                  ej                        ndZSe0eBd<   e.r<e)d ee2ge4f   d!ee2   de e4   fd"       ZTe)d ee2e3ge4f   d#ee2   d$ee3   de e4   fd%       ZTd& ZTde eU   fd'ZVd( ZWeXZYej                  Z[eUZ\ ej                  ed)d      dg Z^e e0   eBd*<   ejv                  dk(  r+ej                  D  cg c]  } | j                  d+d,       c} Z^n ej                  D  cg c]
  }  e=|        c} Z^ ej                  d-      j                  Zbd.j                  Zd G d/ de0      Zed0eeU   dee0   fd1Zfe.re)d0e0deefd2       Zge)d0e2de2fd3       Zgd4 Zgd0ede0fd5Zhd0edeifd6Zjd7edeifd8Zkd7ede0fd9Zld:emde"fd;Znd<eode#e0   fd=Zpej                  Zqej                  Z]ej                  Zrej                  Zsej                  ZueiZv	 	 	 dcd>ed?eUd@e#ei   defdAZwej                  ZxdBe$e0   dCe0dDe$e0   de1fdEZydFe!e0e2f   deeie2f   fdGZzdFe!eie2f   dee0e2f   fdHZ{	 ddd0e0dIe|dJe|de e0   fdKZ}dL Z~dM Zej                   ZeQj                  dN      Ze|eBdO<   eQj                  dP      Ze|eBdQ<   eQj                  dR      Ze|eBdS<   eEdTk(  Ze|eBdU<   eEdVk(  Ze|eBdW<   dBe$e0   dCe0dDe$e0   de1fdXZdBe$e0   dCe0dDe$e0   de1fdYZ	 dedZe0d[e0d\e#e0   de0fd]Z	 dedZe0d[e0d\e#e0   de%eUe0f   fd^Zdfd>e#e0   defd_Z	 	 	 	 	 	 dgd>e0d`eUdZe0d[e0d\e#e0   dae|fdbZyc c} w c c} w )hzwMercurial portability shim for python 3.

This contains aliases to hide python version-specific details from the core.
    N)AnyAnyStrBinaryIOCallableDictIterableIteratorListMappingNoReturnOptionalSequenceTupleTypeTypeVarcastoverload   __pypy__F_T0_T1_S	_Tbytestrbytestr)boundc                 ,    | j                  |d          y )Nr   )set_exception)fexc_infos     4/usr/lib/python3/dist-packages/mercurial/pycompat.pyfuture_set_exception_infor!   B   s    OOHQK     areturnc                     | S N r#   s    r    identityr)   I   s    Hr"   c                      ||S t        |t        t        t        f      r t	        |       fd|D              S t        |t
              r( t	        |       fd|j                         D              S   |      S )Nc              3   6   K   | ]  }t        |        y wr&   _rapply).0xr   s     r    	<genexpr>z_rapply.<locals>.<genexpr>R   s     2!12s   c              3   T   K   | ]  \  }}t        |      t        |      f ! y wr&   r,   )r.   kvr   s      r    r0   z_rapply.<locals>.<genexpr>T   s&     N41aA16Ns   %()
isinstancelistsettupletypedictitemsr   xss   ` r    r-   r-   M   se    	z	"tS%()tBx2r222"dtBxN288:NNNR5Lr"   c                 .    | t         u r|S t        | |      S )a  Apply function recursively to every item preserving the data structure

    >>> def f(x):
    ...     return 'f(%s)' % x
    >>> rapply(f, None) is None
    True
    >>> rapply(f, 'a')
    'f(a)'
    >>> rapply(f, {'a'}) == {'f(a)'}
    True
    >>> rapply(f, ['a', 'b', None, {'c': 'd'}, []])
    ['f(a)', 'f(b)', None, {'f(c)': 'f(d)'}, []]

    >>> xs = [object()]
    >>> rapply(identity, xs) is xs
    True
    )r)   r-   r;   s     r    rapplyr>   X   s    $ 	H}	1b>r"   ntasciioscurdir	oslineseposname	ospathsepospardirosseposaltsep	osdevnullsysplatformr"   sysexecutabler   argc                      y r&   r'   )r   rK   s     r    maplistrM          r"   arg1arg2c                      y r&   r'   )r   rO   rP   s      r    rM   rM      s     	r"   c                 ,    t        t        | g|       S r&   )r5   map)r   argss     r    rM   rM      s    Ar"   c                  $    t        t        |        S r&   )r5   rangerT   s    r    	rangelistrX      s    tr"   c                  $    t        t        |        S r&   )r5   ziprW   s    r    ziplistr[      s    T
r"   argvsysargvmbcsignorez>Bs   %rc                   l    e Zd ZdZer	ddeddfdZddee   dedefdZ	de
fdZdee
   fd	Zdefd
Zy)r   a#  A bytes which mostly acts as a Python 2 str

    >>> bytestr(), bytestr(bytearray(b'foo')), bytestr(u'ascii'), bytestr(1)
    ('', 'foo', 'ascii', '1')
    >>> s = bytestr(b'foo')
    >>> assert s is bytestr(s)

    __bytes__() should be called if provided:

    >>> class bytesable:
    ...     def __bytes__(self):
    ...         return b'bytes'
    >>> bytestr(bytesable())
    'bytes'

    ...unless the argument is the bytes *type* itself: it gets a
    __bytes__() method in Python 3.11, which cannot be used as in an instance
    of bytes:

    >>> bytestr(bytes)
    "<class 'bytes'>"

    There's no implicit conversion from non-ascii str as its encoding is
    unknown:

    >>> bytestr(chr(0x80)) # doctest: +ELLIPSIS
    Traceback (most recent call last):
      ...
    UnicodeEncodeError: ...

    Comparison between bytestr and bytes should work:

    >>> assert bytestr(b'foo') == b'foo'
    >>> assert b'foo' == bytestr(b'foo')
    >>> assert b'f' in bytestr(b'foo')
    >>> assert bytestr(b'f') in b'foo'

    Sliced elements should be bytes, not integer:

    >>> s[1], s[:2]
    (b'o', b'fo')
    >>> list(s), list(reversed(s))
    ([b'f', b'o', b'o'], [b'o', b'o', b'f'])

    As bytestr type isn't propagated across operations, you need to cast
    bytes to bytestr explicitly:

    >>> s = bytestr(b'foo').upper()
    >>> t = bytestr(s)
    >>> s[0], t[0]
    (70, b'F')

    Be careful to not pass a bytestr object to a function which expects
    bytearray-like behavior.

    >>> t = bytes(t)  # cast to bytes
    >>> assert type(t) is bytes
    sr$   Nc                      y r&   r'   )selfra   s     r    __init__zbytestr.__init__   s    r"   clsc                     t        |t              r|S t        |t        t        f      s@t        |t              st        j                  |d      st        |      j                  d      }t        j                  | |      S )N	__bytes__r@   )
r4   r   bytes	bytearrayr8   builtinshasattrstrencode__new__)re   ra   s     r    rn   zbytestr.__new__  s]    a!H!eY/0q$##A|4Ag&A}}S!$$r"   c                 h    t         j                  | |      }t        |t               st        |      }|S r&   )rh   __getitem__r4   bytechr)rc   keyra   s      r    rp   zbytestr.__getitem__  s,    dC(!U#
Ar"   c                 >    t        t        j                  |             S r&   )iterbytestrrh   __iter__rc   s    r    ru   zbytestr.__iter__  s    5>>$/00r"   c                 2    t         j                  |       dd  S )N   )rh   __repr__rv   s    r    ry   zbytestr.__repr__  s    ~~d#AB''r"   )r"   )__name__
__module____qualname____doc__TYPE_CHECKINGobjectrd   r   r   rn   rh   rp   r	   ru   rl   ry   r'   r"   r    r   r      sf    9~ 	f 	t 	%T)_ % %) %% 1(5/ 1(# (r"   ra   c                 "    t        t        |       S )z4Iterate bytes as if it were a str object of Python 2)rS   rq   ra   s    r    rt   rt     s    w?r"   c                      y r&   r'   r   s    r    maybebytestrr   $  rN   r"   c                      y r&   r'   r   s    r    r   r   (  rN   r"   c                 <    t        | t              rt        |       S | S )zPromote bytes to bytestr)r4   rh   r   r   s    r    r   r   -  s    !UqzHr"   c                 H    t        | t              r| S | j                  d      S )zConvert an internal str (e.g. keyword, __doc__) back to bytes

    This never raises UnicodeEncodeError, but only ASCII characters
    can be round-trip by sysstr(sysbytes(s)).
    zutf-8)r4   rh   rm   r   s    r    sysbytesr   4  s"     !U88Gr"   c                 \    t        | t        j                        r| S | j                  d      S )a$  Return a keyword str to be passed to Python functions such as
    getattr() and str.encode()

    This never raises UnicodeDecodeError. Non-ascii characters are
    considered invalid and mapped to arbitrary but unique code points
    such that 'sysstr(a) != sysstr(b)' for all 'a != b'.
    latin-1)r4   rj   rl   decoder   s    r    sysstrr   ?  s&     !X\\"88Ir"   urlc                 H    t        | t              r| j                  d      S | S )z Converts a bytes url back to strr@   )r4   rh   r   r   s    r    strurlr   L  s     #uzz'""Jr"   c                 H    t        | t              r| j                  d      S | S )z0Converts a str url to bytes by encoding in asciir@   )r4   rl   rm   r   s    r    bytesurlr   S  s     #szz'""Jr"   excc                 $    | j                  |      )z(Raise exception with the given traceback)with_traceback)r   tbs     r    raisewithtbr   Z  s    


R
  r"   objc                 N    t        j                  | dd      }||S t        |      S )zPGet docstring as bytes; may be None so gettext() won't confuse it
    with _('')r}   N)rj   getattrr   )r   docs     r    getdocr   _  s,     

3	4
0C
{
C=r"   mode	bufferingencodingc                 D    t        j                  | t        |      ||      S r&   )rj   openr   )namer   r   r   s       r    r   r   q  s     ==vd|YAAr"   rT   	shortlistnamelistc                    |D cg c]  }|j                  d       }}|j                  d      }|D cg c]  }|j                  d       }} | |||      \  }}|D cg c]*  }|d   j                  d      |d   j                  d      f, }}|D cg c]  }|j                  d       }}||fS c c}w c c}w c c}w c c}w )z
    Takes bytes arguments, converts them to unicode, pass them to
    getopt.getopt(), convert the returned values back to bytes and then
    return them for Python 3 compatibility as getopt.getopt() don't accepts
    bytes on Python 3.
    r   r   rx   )r   rm   )origrT   r   r   r#   optss         r    _getoptbwrapperr   ~  s     *..AAHHY.D.  +I-56#6H6dIx0JD$FJKQqT[[#QqT[[%;<KDK)-.AAHHY.D.: /6K.s   B2B7/B<Cdicc                 v    | j                         D ci c]  \  }}|j                  d      | } }}| S c c}}w )z
    Converts the keys of a python dictonary to str i.e. unicodes so that
    they can be passed as keyword arguments as dictionaries with bytes keys
    can't be passed as keyword arguments to functions on Python 3.
    r   )r:   r   r   r2   r3   s      r    	strkwargsr     s9     /2iik
:da188I!
:C
:J ;   5c                 v    | j                         D ci c]  \  }}|j                  d      | } }}| S c c}}w )z
    Converts keys of python dictionaries to bytes as they were converted to
    str to pass that dictonary as a keyword argument on Python 3.
    r   )r:   rm   r   s      r    byteskwargsr     s9    
 /2iik
:da188I!
:C
:J ;r   commentsposixc                     t        j                  | j                  d      ||      }|D cg c]  }|j                  d       c}S c c}w )z
    Takes bytes argument, convert it to str i.e. unicodes, pass that into
    shlex.split(), convert the returned value to bytes and return that for
    Python 3 compatibility as shelx.split() don't accept bytes on Python 3.
    r   )shlexsplitr   rm   )ra   r   r   retr#   s        r    
shlexsplitr     s<     ++ahhy)8U
;C),-AAHHY---s   Ac                 "    | j                         S r&   )r:   r/   s    r    <lambda>r     s    aggi r"   c                 "    | j                         S r&   )valuesr   s    r    r   r     s    qxxz r"   s   javaisjythons   darwinisdarwins   linuxislinuxs   posixisposixs   nt	iswindowsc                 :    t        t        j                  | ||      S r&   )r   getoptrT   r   r   s      r    getoptbr     s     6==$	8DDr"   c                 :    t        t        j                  | ||      S r&   )r   r   
gnu_getoptr   s      r    
gnugetoptbr     s     6,,dIxHHr"   suffixprefixdirc                 0    t        j                  | ||      S r&   )tempfilemkdtempr   r   r   s      r    r   r          FFC00r"   c                 0    t        j                  | ||      S r&   )r   mkstempr   s      r    r   r     r   r"   c                 |    | d} nt        |       } d| v sJ t        t        t        j                  | g|i |      S )Nzw+bb)r   r   r   r   TemporaryFile)r   rT   kwargss      r    unnamedtempfiler     sC    |d|$;;(00GGGHHr"   bufsizedeletec                 Z    t        |       } d| v sJ t        j                  | |||||      S )Nr   )r   r   r   r   )r   r   NamedTemporaryFile)r   r   r   r   r   r   s         r    namedtempfiler     s9     $<D$;;&&gfVV r"   )   rN)FT)r"      tmpNr&   )s   w+br   r"   r   NT)r}   rj   codecsconcurrent.futuresfuturesr   http.clientclienthttplibhttp.cookiejar	cookiejar	cookielibinspectiojsonosqueuer   socketserverstructsysr   xmlrpc.client	xmlrpclibtypingr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   version_infoispy3builtin_module_namesispypyr~   globalsrh   _GetOptResultr   r   r   r   r!   FileNotFoundErrorr)   r-   r>   r   _enablelegacywindowsfsencodingfsencodefsdecodecurdirrm   rA   __annotations__lineseprB   rC   pathseprD   pardirrE   seprF   altseprG   devnullrH   platformrI   
executablerJ   rM   intrX   r[   inputrawinputgetfullargspec
getargspeclongr   r]   r\   Structpackrq   __mod__bytereprr   rt   r   r   rl   r   r   r   BaseExceptionr   r   r   delattrrk   setattrrV   xrangeunicoder   safehasattrr   r   r   boolr   	iteritems
itervaluesloads
json_loads
startswithr   r   r   r   r   r   r   r   r   r   r   r(   s   0r    <module>r     s^     $   "  	  	     
  !    ( 	q 	s//	/y((Md5./e<=enenT]Ky1	! ..   0 77e
 'C&&(;;;;))""7+% +::$$W-	5 -w' '::$$W-	5 -))""7+% +vv}}W%u %9;BII,,W5(5/ L::$$W-	5 -\\((1U 169nn{r{{3>>2#u M 8SE2I& Xc] tBx   S#JN#+3C=@H	b S	  ##

8C&2 GT%[	ww%7:xx@!188FH-@(+118A;1
&--

"
"==](e ](@8C= Xe_ 
  '       5 
f 
 
 3 & U !] !8 !
 8E?  










	

 "	B
B B sm	B
 	B ,1=Ee_$75#:& 4S> WS#X& 4s
+;  59	.	.	.-1	.	%[	.  	!
ZZ
''0$ 0''	2$ 2&&x0 0(" "E/	4 !E
5/E&+E7?EEI
5/I&+I7?II IM11!&16>uo1
1 IM11!&16>uo1
3:1I(5/ Ih I 
  	
 
% ]	 A1s   0VV