o
    Wi	                     @  s   d dl mZ d dlZd dlmZ d dlmZ d dlm	Z	 G dd de
ZdddZdddddZdddddZdddddZdS )    )annotationsN)Mapping)NoReturn)parse_shebang_from_filec                   @  s   e Zd ZdddZdS )ExecutableNotFoundErrorreturntuple[int, bytes, None]c                 C  s   d| j d  d fS )N   r   )argsencode)self r   L/home/ubuntu/.local/lib/python3.10/site-packages/pre_commit/parse_shebang.py	to_output      z!ExecutableNotFoundError.to_outputN)r   r   )__name__
__module____qualname__r   r   r   r   r   r   
   s    r   filenamestrr   tuple[str, ...]c                 C  s   t j| sdS t| S )Nr   )ospathexistsr   )r   r   r   r   parse_filename   s   r   envexer   Mapping[str, str] | None
str | Nonec                  s   t j  t j v r S |d ur|nt j}d|v r1|d t j}t fdd|D  f }n f}|ddt jD ]!}|D ]}t j	||}t j
|r^t |t jr^|    S qBq>d S )NPATHEXTc                 3  s    | ]	}  | V  qd S )Nr   ).0extr   r   r   	<genexpr>!   s    z"find_executable.<locals>.<genexpr>PATH )r   r   normpathsepenvironsplitpathseptuplegetjoinisfileaccessX_OK)r   r   r)   extspossible_exe_namesr   possible_exe_namejoinedr   r#   r   find_executable   s    
r6   origc                  s   d fdd}t j vr$t jrt j vr$t |d}|d u r"|d |S t j r0|d	 d S t j s<|d d S t  t jsI|d
 d S  S )Nmsgr   r   r   c                   s   t d  d|  )NzExecutable `z` )r   )r8   r7   r   r   _error/   r   znormexe.<locals>._errorr   z	not foundzis a directoryzis not executable)r8   r   r   r   )	r   r(   altsepr6   r   isdirr/   r0   r1   )r7   r   r:   r   r   r9   r   normexe.   s   r=   cmdc                C  sL   t | d |d}t||f | dd  } t | d |d}|f| dd  S )zFixes for the following issues on windows
    - https://bugs.python.org/issue8557
    - windows does not parse shebangs

    This function also makes deep-path shebangs work just fine
    r   r   r	   N)r=   r   )r>   r   r   r   r   r   normalize_cmdA   s   r?   )r   r   r   r   )r   r   r   r   r   r   )r7   r   r   r   r   r   )r>   r   r   r   r   r   )
__future__r   os.pathr   collections.abcr   typingr   identify.identifyr   OSErrorr   r   r6   r=   r?   r   r   r   r   <module>   s    
