o
    Zhy                     @   s   d Z ddlZddlZddlZddlmZmZmZ ddlm	Z	 e
eZedZdee dee fdd	ZG d
d de	ddZejddddedefddZdS )z-Fetch information about any current git repo.    N)ListOptionalTypeVar)	TypedDictTcommandreturnc                 C   s4   zt jdg|  dt jd W S  ty   Y d S w )Ngitzutf-8)encodingstderr)
subprocesscheck_outputDEVNULLstripBaseException)r    r   I/var/www/html/lang_env/lib/python3.10/site-packages/langsmith/env/_git.pyexec_git   s   r   c                   @   sz   e Zd ZU ee ed< ee ed< ee ed< ee ed< ee ed< ee ed< ee ed< ee ed< ee ed	< d
S )GitInfo	repo_name
remote_urlcommitbranchauthor_nameauthor_emailcommit_timedirtytagsN)__name__
__module____qualname__r   str__annotations__boolr   r   r   r   r      s   
 r   F)total   )maxsizeoriginremotec                 C   s   t ddgstdddddddddd	S t dd| gt ddgt g dt g d	t g d
t ddgdkt g dt g dt ddgpEddd d	S )z)Get information about the git repository.	rev-parsez--is-inside-work-treeN)	r   r   r   r   r   r   r   r   r   r(   zget-urlHEAD)log-1z--format=%ct)r)   z--abbrev-refr*   )Zdescribez--tagsz--exact-matchz--alwaysz--dirtystatusz--porcelain )r+   r,   z--format=%an)r+   r,   z--format=%aez--show-toplevel/)	r   r   r   r   r   r   r   r   r   )r   r   split)r(   r   r   r   get_git_info$   s0   




r2   )r'   )__doc__	functoolsloggingr   typingr   r   r   typing_extensionsr   	getLoggerr   loggerr   r!   r   r   	lru_cacher2   r   r   r   r   <module>   s    
	
