o
    Wi                     @  s>  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 d d	lmZ d d
lmZ d dlmZ d dlmZ edZedZd6ddZd7d8ddZd6ddZd9ddZG dd deZ	d7d:d%d&Z ej!d;d)d*Z"d+d,e d-d<d4d5Z#dS )=    )annotationsN)Callable)	Generator)Iterable)MutableMapping)Sequence)Any)TypeVar)parse_shebang)cmd_output_b)cmd_output_pTArgTRetreturnintc                   C  sD   zt tdW S  ty   Y nw zt W S  ty!   Y dS w )Nr      )lenossched_getaffinityAttributeErrormultiprocessing	cpu_countNotImplementedError r   r   D/home/ubuntu/.local/lib/python3.10/site-packages/pre_commit/xargs.pyr      s   
r   _envMutableMapping[str, str] | Nonec                 C  sT   | d ur| nt tdtj}dt| }| D ]\}}|t|t| d 7 }q|S )Nenvironb      )getattrr   environr   items)r   r!   sizekvr   r   r   _environ_size)   s
   r&   c                  C  sD   t jdkrt dd t  } tt| dd} | S t jdkr dS dS )Nposix
SC_ARG_MAXi   i   i   nti x  )r   namesysconfr&   maxmin)maximumr   r   r   _get_platform_max_length1   s   

r/   cmdstrc                  G  s8   d | }tjdkrt|dd S t|t S )N win32zutf-16ler   )joinsysplatformr   encodegetfilesystemencoding)r0   full_cmdr   r   r   _command_length=   s   

r:   c                   @  s   e Zd ZdS )ArgumentTooLongErrorN)__name__
__module____qualname__r   r   r   r   r;   H   s    r;   Sequence[str]varargstarget_concurrency_max_length
int | Nonetuple[tuple[str, ...], ...]c           
      C  s   |pt  }tdtt|| }t| } g }g }tt|}t|  d }|re|	 }t|d }	||	 |krGt||k rG|
| ||	7 }n|sMt||
| t|  g }t|  d }|
| |s'|
| t|  t|S )N   r   )r/   r,   mathceilr   tuplelistreversedr:   popappendr;   )
r0   r@   rA   rB   max_argsretret_cmdtotal_lengtharg
arg_lengthr   r   r   	partitionL   s.   



rS   maxsizeNGenerator[Callable[[Callable[[TArg], TRet], Iterable[TArg]], Iterable[TRet]],]c                 c  sN    | dkr
t V  d S tj| }|j V  W d    d S 1 s w   Y  d S )Nr   )map
concurrentfuturesThreadPoolExecutor)rT   exr   r   r   _thread_mapperx   s   

"r[   Fr   )colorrA   rB   tuple[str, ...]r\   boolkwargsr   tuple[int, bytes]c             
     s0  |rt nt d}d}zt| } W n tjy, } z| dd W  Y d}~S d}~ww tjdkrL| d  	drLt
d}	dt|	 td	 d
 }t| |||}
d fdd}tt|
|}t|&}|||
}|D ]\}}}t|t|kr}|}||7 }qnW d   ||fS 1 sw   Y  ||fS )zA simplified implementation of xargs.

    color: Make a pty if on a platform that supports it
    target_concurrency: Target number of partitions to run concurrently
    r       Nr   r3   )z.batz.cmdzcmd.exei    z /c i   run_cmdr]   r   tuple[int, bytes, bytes | None]c                   s    | dt jdS )NF)checkstderr)
subprocessSTDOUT)rb   cmd_fnr_   r   r   run_cmd_partition   s
   z xargs.<locals>.run_cmd_partition)rb   r]   r   rc   )r   r   r
   normalize_cmdExecutableNotFoundError	to_outputr5   r6   lowerendswithfind_executabler   rS   r-   r[   abs)r0   r@   r\   rA   rB   r_   retcodestdoutecmd_exe
partitionsrj   threads
thread_mapresultsproc_retcodeproc_out_r   rh   r   xargs   s8   





r}   )r   r   )N)r   r   r   r   )r0   r1   r   r   )
r0   r?   r@   r?   rA   r   rB   rC   r   rD   )rT   r   r   rU   )r0   r]   r@   r?   r\   r^   rA   r   rB   r   r_   r   r   r`   )$
__future__r   concurrent.futuresrW   
contextlibrF   r   r   rf   r5   collections.abcr   r   r   r   r   typingr   r	   
pre_commitr
   pre_commit.utilr   r   r   r   r   r&   r/   r:   RuntimeErrorr;   rS   contextmanagerr[   r}   r   r   r   r   <module>   sB    


,