o
    b#                     @  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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rBdd
lmZ eeZdddZdddZd ddZd!d"ddZdS )#    )annotationsN)IO)TYPE_CHECKING   )is_toplevel_acceptable)scm_find_files)do_ex)trace)_typespathstrreturn
str | Nonec                 C  s  zlt j| pd}tg d|d\}}}|dkr td W d S tg d|d\}}}|dkr2W d S | d d }|s?|}n|dd	|sRJ d
|d||d t	|  }t
d| t jt j| W S  tjyw   Y d S  ty   Y d S w )N.)git	rev-parseHEAD)cwdr   6listing git files failed - pretending there aren't any)r   r   z--show-prefix\/zcwd=z
out=zfind files toplevel)osr   abspathr   logerrorstripreplaceendswithlenr	   normcaserealpath
subprocessCalledProcessErrorOSError)r   r   outerrret r(   Busr/lib/python3.10/site-packages/setuptools_scm/file_finder_git.py_git_toplevel   s0   
&
r*   fd	IO[bytes]topleveltuple[set[str], set[str]]c                 C  s   t j| dd7}t }|h}| D ] }tj|jdtjj	}|j
t jkr-|| q|| q||fW  d    S 1 sAw   Y  d S )Nzr|*)fileobjmoder   )tarfileopenset
getmembersr   r   r    namer   septypeZDIRTYPEadd)r+   r-   Ztf	git_filesgit_dirsmemberr5   r(   r(   r)   _git_interpret_archive;   s   $r<   c                 C  s   ddd| t jj dg}tj|tj| tjd}|jd usJ zzt|j| W |j	  |
  W S |j	  |
  w  tyS   | dkrKtd t t f Y S w )Nr   archivez--prefixr   )stdoutr   stderrr   r   )r   r   r6   r"   PopenPIPEDEVNULLr>   r<   close	terminate	Exceptionwaitr   r   r3   )r-   cmdprocr(   r(   r)   _git_ls_files_and_dirsH   s"   



rI    _t.PathT	list[str]c                 C  sh   t t| }t|sg S |d usJ tjtj| }||s(td|| t	|\}}t
| ||S )Nztoplevel mismatch)r*   r   fspathr   r   r   normpath
startswithr	   rI   r   )r   r-   fullpathr9   r:   r(   r(   r)   git_find_files^   s   
rQ   )r   r   r   r   )r+   r,   r-   r   r   r.   )r-   r   r   r.   )rJ   )r   rK   r   rL   )
__future__r   loggingr   r"   r1   typingr   r   Zfile_finderr   r   utilsr   r	   rJ   r
   Z_t	getLogger__name__r   r*   r<   rI   rQ   r(   r(   r(   r)   <module>   s$    


%
