o
    b                     @  s   d dl m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 er^ddlmZ G dd deZd"d#ddZ	d"d$ddZd"d%d d!ZdS )&    )annotationsN)Path)TYPE_CHECKING   )Version)Configuration)Workdir)data_from_mime)do_ex)require_command)trace)meta)
ScmVersion)tag_to_version)_typesc                   @  sR   e 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dZ	d&ddZ
dS )'	HgWorkdirhgwd_t.PathTreturnHgWorkdir | Nonec                 C  s*   t | j td|\}}}|rd S | |S )Nzhg root)r   COMMANDr
   )clsr   rooterrret r   5usr/lib/python3.10/site-packages/setuptools_scm/hg.pyfrom_potential_worktree   s
   
z!HgWorkdir.from_potential_worktreeconfigr   ScmVersion | Nonec              
   C  s  |  ddd\}}}}| g dd\}}}tt|}	tjtt|	r(|n|d }
|dt	|krGt
d| j td||	||
d	S d
|d d  }| }d|v r\|d |rnt|d }|rnt||	||dS zM|  }|d u r}| d}n| |}|dks|d u rtd}t|d }nt||d}|d usJ | |s|	rt||||	|||
dW S t|||
dW S  ty } zt
d| W Y d }~d S d }~ww )N.z({node}
{tag}
{bookmark}
{date|shortdate}
)r   id-Tz+{branch}
{if(dirty, 1, 0)}
{date|shortdate}-0zinitial node0.0)r   dirtybranch	node_dateh   tipr   )r(   r)   r    nullr   r   )distancenoder(   r)   r   r*   )r   r*   error)hg_logsplitdoboolintdatetimedatemapcountlenr   pathr   remover   get_latest_normalizable_tagget_distance_revsr   check_changes_since_tag
ValueError)selfr   r2   tags_strbookmarknode_date_strr)   	dirty_str
dirty_dater(   r*   tagstagtag_strdister   r   r   get_meta#   sl   






zHgWorkdir.get_metarevsetstrtemplatec                 C  s   ddd|d|g}|  |S )Nr   logz-rr$   )r6   )rD   rP   rR   cmdr   r   r   r4   m   s   
zHgWorkdir.hg_log
str | Nonec                 C  s.   | j ddd }|sd S |d  d }|S )Nzancestors(.) and tag('re:\.')z{tags}{if(tags, '
', '')})rP   rR   )r4   r5   )rD   outlinesrK   r   r   r   r@   q   s   z%HgWorkdir.get_latest_normalizable_tagr!   rev1rev2r8   c                 C  s*   d| d| d}|  |d}t|d S )N(z::)r!   r   )r4   r=   )rD   rX   rY   rP   outr   r   r   rA   |   s   zHgWorkdir.get_distance_revsrK   r7   c                 C  s6   |dks|d u r
dS d|d|d}t | |dS )Nr'   Tz(branch(.) and tag(z>)::. and (merge() or file('re:^(?!\.hgtags).*$')) and not tag(z))r!   )r7   r4   )rD   rK   rP   r   r   r   rB      s   z!HgWorkdir.check_changes_since_tagN)r   r   r   r   )r   r   r   r    )rP   rQ   rR   rQ   r   rQ   )r   rU   )r!   )rX   rQ   rY   rQ   r   r8   )rK   rU   r   r7   )__name__
__module____qualname__r   classmethodr   rO   r4   r@   rA   rB   r   r   r   r   r      s    

J
r   r   r   r   Configuration | Noner   r    c                 C  s   |st | d}tjtj| drWtd| \}}}|sW|dD ]5}|drVt| d }|j	
ds<|d  rVdd	lm} dd
lm} || }	|	rV|||	  S q!t|j}
|
d u rcd S |
|S )N)r   z.hg/gitzhg pathr"   z	default =   z.gitr   )_git_parse_inner)GitWorkdirHgClient)r   osr>   existsjoinr
   r5   
startswithr   nameendswithgitrc   hg_gitrd   r   r   absolute_rootrO   )r   r   paths_r   liner>   rc   rd   wd_hggitr   r   r   r   parse   s&   



rr   datadict[str, str]r   c                 C  st   t d|  | ddd d }|rd| }d| v r!t| d |dS d| v r3t| d t| d	 ||d
S td||dS )Nrs   r2   r.      r+   rK   r0   	latesttaglatesttagdistance)r1   r2   r   r'   )r2   r   )r   getr   r8   )rs   r   r2   r   r   r   archival_to_version   s   

ry   c                 C  s"   t j| d}t|}t||dS )Nz.hg_archival.txtr0   )re   r>   rg   r	   ry   )r   r   archivalrs   r   r   r   parse_archival   s   r{   )N)r   r   r   ra   r   r    )rs   rt   r   ra   r   r   )r   r   r   ra   r   r   )
__future__r   r9   re   pathlibr   typingr   _version_clsr   r   r   scm_workdirr   utilsr	   r
   r   r   versionr   r   r   r.   r   Z_tr   rr   ry   r{   r   r   r   r   <module>   s,    {