o
    ™Ìb=$  ã                   @  s°  d dl m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 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r†d
dlmZ d dlm Z  e !d¡Z"dZ#g d¢Z$G dd„ deƒZ%dHdd „Z&dHd!d"„Z'dHd#d$„Z(dId(d)„Z)de&dfdJd2d3„Z*		dKdLd8d9„Z+dMd<d=„Z,dNd@dA„Z-	dOdPdDdE„Z.	dOdQdFdG„Z/dS )Ré    )ÚannotationsN)Údate)Údatetime)Úisfile)Újoin)Úsamefile)ÚCallable)ÚTYPE_CHECKINGé   )ÚConfiguration)ÚWorkdir)Ú
_CmdResult)Údata_from_mime)Údo_ex)Úrequire_command)Útrace)Úmeta)Ú
ScmVersion)Útags_to_versions)Ú_types)ÚGitWorkdirHgClientz(?<=\btag: )([^,]+)\bz
%(describe)ÚgitÚdescribez--dirtyz--tagsz--longz--matchz*[0-9]*c                   @  s|   e Zd ZdZdZed$dd„ƒZd%dd„Zd&dd„Zd'dd„Z	d(dd„Z
d&dd„Zd)dd„Zd'dd„Zd*dd „Zd+d!d"„Zd#S ),Ú
GitWorkdirú$experimental, may change at any timer   Úwdú_t.PathTÚreturnúGitWorkdir | Nonec                 C  s    t | jƒ tj |¡}t|dƒ}tdd|ddg|ƒ\}}}|d d… }|r'd S |s,|}n| dd¡ |¡s7J ‚|d t	|ƒ … }t
d	|ƒ t||ƒsLd S | |ƒS )
Nú.gitr   ú	--git-dirú	rev-parsez--show-prefixéÿÿÿÿú\ú/z	real root)r   ÚCOMMANDÚosÚpathÚabspathr   r   ÚreplaceÚendswithÚlenr   r   )Úclsr   Úgit_dirÚreal_wdÚ_Úret© r1   ú6usr/lib/python3.10/site-packages/setuptools_scm/git.pyÚfrom_potential_worktree4   s"   


ÿ

z"GitWorkdir.from_potential_worktreeÚcmdú	list[str]r   c                 C  s   |   ddt| jdƒg| ¡S )Nr   r    r   )r   r   r'   )Úselfr4   r1   r1   r2   Ú	do_ex_gitM   s   zGitWorkdir.do_ex_gitÚboolc                 C  s   |   g d¢¡\}}}t|ƒS )N)Ústatusz--porcelainz--untracked-files=no)r7   r8   )r6   Úoutr/   r1   r1   r2   Úis_dirtyP   s   zGitWorkdir.is_dirtyú
str | Nonec                 C  sT   |   g d¢¡\}}}|r(td|||ƒ |   g d¢¡\}}}|r(td|||ƒ d S |S )N)r!   z--abbrev-refÚHEADz
branch err)zsymbolic-refz--shortr=   zbranch err (symbolic-ref))r7   r   )r6   ÚbranchÚerrr0   r1   r1   r2   Ú
get_branchT   s   zGitWorkdir.get_branchúdate | Nonec                 C  s^   |   g d¢¡\}}}|rtd|||ƒ d S | d¡d }d|v r'td|ƒ d S t |d¡ ¡ S )N)z-czlog.showSignature=falseÚlogz-nÚ1r=   z--format=%cIztimestamp errÚTr   z%czgit too old -> timestamp is z%Y-%m-%d)r7   r   Úsplitr   Ústrptimer   )r6   Ú	timestampr?   r0   Ú	date_partr1   r1   r2   Úget_head_date^   s   
ÿ
zGitWorkdir.get_head_datec                 C  s   t t| jdƒƒS )Nz.git/shallow)r   r   r'   ©r6   r1   r1   r2   Ú
is_shallowl   s   zGitWorkdir.is_shallowÚNonec                 C  s   |   ddg¡ d S )NÚfetchz--unshallow©r7   rJ   r1   r1   r2   Úfetch_shallowo   s   zGitWorkdir.fetch_shallowc                 C  s(   |   g d¢¡\}}}|s|d d… S d S )N)r!   z--verifyz--quietr=   é   rN   )r6   Únoder/   r0   r1   r1   r2   rQ   r   s   zGitWorkdir.nodeÚintc                 C  s"   |   ddg¡\}}}| d¡d S )Nzrev-listr=   Ú
r
   )r7   Úcount)r6   Úrevsr/   r1   r1   r2   Úcount_all_nodesy   s   zGitWorkdir.count_all_nodesc                 C  s2   t | jdƒ}|  td d… d|g tdd …  ¡S )Nr   r
   r    )r   r'   r   ÚDEFAULT_DESCRIBE)r6   r-   r1   r1   r2   Údefault_describe}   s   ÿzGitWorkdir.default_describeN)r   r   r   r   )r4   r5   r   r   )r   r8   )r   r<   )r   rA   )r   rL   )r   rR   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   Úclassmethodr3   r7   r;   r@   rI   rK   rO   rQ   rV   rX   r1   r1   r1   r2   r   /   s    








r   r   r   rL   c                 C  s$   |   ¡ rt d| j› d¡ dS dS )r   ú"z!" is shallow and may cause errorsN)rK   ÚwarningsÚwarnr'   ©r   r1   r1   r2   Úwarn_on_shallow„   s   ÿrb   c                 C  s,   |   ¡ rt d| j› d¡ |  ¡  dS dS )r   r^   z," was shallow, git fetch was used to rectifyN)rK   r_   r`   r'   rO   ra   r1   r1   r2   Úfetch_on_shallowŠ   s   þrc   c                 C  s   |   ¡ rt| j› dƒ‚dS )r   z8 is shallow, please correct with "git fetch --unshallow"N)rK   Ú
ValueErrorr'   ra   r1   r1   r2   Úfail_on_shallow‘   s
   
ÿÿre   Úconfigr   r   c                 C  s.   | j r	t | j ¡S | jrt| jƒS t | j¡S )z8
    Return the working directory (``GitWorkdir``).
    )Úparentr   r3   Úsearch_parent_directoriesÚsearch_parentÚabsolute_root©rf   r1   r1   r2   Úget_working_directory™   s
   
rl   ÚrootÚstrÚdescribe_commandústr | list[str] | NoneÚ	pre_parseúCallable[[GitWorkdir], None]úConfiguration | NoneúScmVersion | Nonec                 C  s.   |st | d}t|ƒ}|rt||||dS dS )zQ
    :param pre_parse: experimental pre_parse action, may change at any time
    )rm   )ro   rq   N)r   rl   Ú_git_parse_inner)rm   ro   rq   rf   r   r1   r1   r2   Úparse§   s   	
ÿrv   úGitWorkdir | GitWorkdirHgClientú8None | Callable[[GitWorkdir | GitWorkdirHgClient], None]ú_t.CMD_TYPE | Noner   c              	   C  sÎ   |r||ƒ | j d ur| j }|d ur| |¡\}}}n| ¡ \}}}|dkr7t|ƒ\}}}	}
|dkr6|
s6d }nd}| ¡ }	|	d u rDd}n| ¡ }d|	 }	| ¡ }
| ¡ }| ¡ p[t	 
¡ }t|||	|||
| dS )Nr   ú0.0Úg)r>   rQ   Ú	node_dateÚdistanceÚdirtyrf   )Úgit_describe_commandr   rX   Ú_git_parse_describerQ   rV   r;   r@   rI   r   Útodayr   )rf   r   rq   ro   r:   r/   r0   Útagr}   rQ   r~   r>   r|   r1   r1   r2   ru   ¼   s<   
€ùru   Údescribe_outputútuple[str, int, str, bool]c                 C  sB   |   d¡rd}| d d… } nd}|  dd¡\}}}|t|ƒ||fS )Nz-dirtyTiúÿÿÿFú-é   )r*   ÚrsplitrR   )rƒ   r~   r‚   ÚnumberrQ   r1   r1   r2   r€   ë   s   
r€   Údirnamer   c                 C  sb   t j | ¡}|r/zt |¡}W n ty   d}Y nw |dur!|S t j |¡\}}|s-dS |sdS )zu
    Walk up the path to find the `.git` directory.
    :param dirname: Directory from which to start searching.
    N)r&   r'   r(   r   r3   Ú	ExceptionrE   )r‰   Úcurpathr   Útailr1   r1   r2   ri   ù   s   	ÿóri   Údataúdict[str, str]c                 C  sÄ   t d| ƒ |  dt¡}t|v rt d¡ nt|ƒ\}}}}t|||dkr)d |dS ||dS tt 	|  dd¡¡ƒ}|rCt|d |dS |  d	¡}|d u rNd S d
| 
¡ v r[t d¡ d S td||dS )Nr   zdescribe-namez+git archive did not support describe outputr   )rf   r}   rQ   z	ref-namesÚ rk   rQ   z$FORMATzunexported git archival foundrz   )rQ   rf   )r   ÚgetÚDESCRIBE_UNSUPPORTEDr_   r`   r€   r   r   Ú
REF_TAG_REÚfindallÚupper)r   rf   Úarchival_describer‚   rˆ   rQ   r/   Úversionsr1   r1   r2   Úarchival_to_version  s0   

üü

r—   c                 C  s"   t j | d¡}t|ƒ}t||dS )Nz.git_archival.txtrk   )r&   r'   r   r   r—   )rm   rf   Úarchivalr   r1   r1   r2   Úparse_archival3  s   r™   )r   r   r   rL   )rf   r   r   r   )
rm   rn   ro   rp   rq   rr   rf   rs   r   rt   )NN)
rf   r   r   rw   rq   rx   ro   ry   r   r   )rƒ   rn   r   r„   )r‰   r   r   r   )N)r   rŽ   rf   rs   r   rt   )rm   r   rf   rs   r   rt   )0Ú
__future__r   r&   Úrer_   r   r   Úos.pathr   r   r   Útypingr   r	   rf   r   Úscm_workdirr   Úutilsr   r   r   r   r   Úversionr   r   r   r   r   Z_tZsetuptools_scm.hg_gitr   Úcompiler’   r‘   rW   r   rb   rc   re   rl   rv   ru   r€   ri   r—   r™   r1   r1   r1   r2   Ú<module>   sZ    

U


üü
/
ÿÿ