o
    b                     @  sX  d 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
mZ ddl
mZ ddlmZ ddlmZ ddlmZ dd	lmZ erPd
dlmZ eejdZe dkZG dd deZdJddZdJddZdddKdd ZdLd$d%ZdMd+d,Z dNdOd.d/Z!dNdPd2d3Z"dQd5d6Z#dRd:d;Z$dSdTdAdBZ%dUdCdDZ&	dVdWdHdIZ'dS )Xz
utils
    )annotationsN)CodeType)FunctionType)Iterator)Mapping)
NamedTuple)TYPE_CHECKING   )_typesZSETUPTOOLS_SCM_DEBUGWindowsc                   @  s&   e Zd ZU ded< ded< ded< dS )
_CmdResultstrouterrint
returncodeN)__name__
__module____qualname____annotations__ r   r   8usr/lib/python3.10/site-packages/setuptools_scm/utils.pyr      s   
 r   envMapping[str, str]returndict[str, str]c                 C  s8   |   D ]\}}|drt|| qdd |   D S )NGIT_c                 S  s(   i | ]\}}| d r|dv r||qS )r   )GIT_EXEC_PATHGIT_SSHGIT_SSH_COMMAND)
startswith.0kvr   r   r   
<dictcomp>/   s    zno_git_env.<locals>.<dictcomp>)itemsr    trace)r   r#   r$   r   r   r   
no_git_env"   s   


r(   c                 C  sH   dd |   D }d|vr|S tjdd |d tjD |d< |S )z
    pip build isolation can break Mercurial
    (see https://github.com/pypa/pip/issues/10635)

    pip uses PYTHONNOUSERSITE and a path in PYTHONPATH containing "pip-build-env-".
    c                 S  s   i | ]\}}|d kr||qS )PYTHONNOUSERSITEr   r!   r   r   r   r%   >   s    z'avoid_pip_isolation.<locals>.<dictcomp>
PYTHONPATHc                 S  s   g | ]}d |vr|qS )zpip-build-env-r   )r"   pathr   r   r   
<listcomp>C   s
    z'avoid_pip_isolation.<locals>.<listcomp>)r&   ospathsepjoinsplit)r   new_envr   r   r   avoid_pip_isolation7   s   r2   Findentr#   objectr4   boolNonec                 G  sR   t r'| rt|dkr|d ftdd |dd  D  }t|tjdd d S d S )Nr	   r   c                 s  s     | ]}t t|d V  qdS )z    N)textwrapr4   r   )r"   sr   r   r   	<genexpr>O   s    ztrace.<locals>.<genexpr>T)fileflush)DEBUGlentupleprintsysstderr)r4   r#   r   r   r   r'   L   s
   $r'   str_or_bytesstr | bytesr   c                 C  s"   t | tr	|  S | dd S )Nutf-8surrogateescape)
isinstancer   stripdecode)rC   r   r   r   ensure_stripped_strS   s   
rJ   cmd_t.CMD_TYPEcwd_t.PathT subprocess.CompletedProcess[str]c              
   C  s.   t j| dt|ttttjddddddS )NTC 1)LC_ALLLANGUAGEHGPLAIN)capture_outputrM   r   text)
subprocessrunr   dictr2   r(   r-   environ)rK   rM   r   r   r   _runZ   s   r\   .c                 C  s   t rt| ts
| }n
ddd | D }td|dd td| tjdkr1t| ttfs1t	| } t
| |}|jrAtd	|jdd |jrLtd
|jdd |jrUtd|j tt|jt|j|jS )N c                   s2   g | ] t  fd ddD r nd  dqS )c                 3  s    | ]}| vV  qd S Nr   )r"   cr9   r   r   r:   q   s    z#do_ex.<locals>.<listcomp>.<genexpr>z {[:")all)r"   r   ra   r   r,   q   s   2 zdo_ex.<locals>.<listcomp>z
----
cmd:
Tr3   z in:posixzout:
zerr:
zret:)r=   rG   listr/   r'   r-   namer?   shlexr0   r\   stdoutrB   r   r   rJ   )rK   rM   cmd_4_traceresr   r   r   do_exk   s&   


rk   list[str] | strstr | _t.PathTc                 C  s$   t | |\}}}|rtst| |S r_   )rk   r=   r@   )rK   rM   r   r   retr   r   r   do   s   ro   r+   c                 C  sf   t | dd}| }W d    n1 sw   Y  tdt| tdd | D }td| |S )NrE   )encodingcontentc                 s  s$    | ]}d |v r| d dV  qdS )z: r	   N)r0   )r"   xr   r   r   r:      s   " z!data_from_mime.<locals>.<genexpr>data)openreadr'   reprrZ   
splitlines)r+   fprq   rs   r   r   r   data_from_mime   s   

ry   fnobject | FunctionTypeargnamec                 C  s   t | tsJ | j}||jv S r_   )rG   r   __code__co_varnames)rz   r|   coder   r   r   function_has_arg   s   
r   Trf   argslist[str] | Nonewarnc                 C  sr   z|d u r	| dgn| g|}t |d}W n ty%   tt   d}Y nw |j }|s7|r7tjd|  td |S )Nhelpr]   F%r was not found)category)	r\   OSErrorr'   rA   exc_infor   warningsr   RuntimeWarning)rf   r   r   rK   prj   r   r   r   has_command   s   r   c                 C  s   t | ddstd|  d S )NF)r   r   )r   r   )rf   r   r   r   require_command   s   r   group
str | NoneIterator[_t.EntrypointProtocol]c                 C  s   ddl m} || |S )Nr	   )iter_entry_points)_entrypointsr   )r   rf   r   r   r   r   r      s   
r   )r   r   r   r   )r#   r5   r4   r6   r   r7   )rC   rD   r   r   )rK   rL   rM   rN   r   rO   )r]   )rK   rL   rM   rN   r   r   )rK   rl   rM   rm   r   r   )r+   rN   r   r   )rz   r{   r|   r   r   r6   )NT)rf   r   r   r   r   r6   r   r6   )rf   r   r   r7   r_   )r   r   rf   r   r   r   )(__doc__
__future__r   r-   platformrg   rX   rA   r8   r   typesr   r   typingr   r   r   r   rQ   r
   Z_tr6   r[   getr=   system
IS_WINDOWSr   r(   r2   r'   rJ   r\   rk   ro   ry   r   r   r   r   r   r   r   r   <module>   sB    







