o
    bF                     @  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 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dddZG dd deeZdS )    )annotationsN)suppress)date)datetime   )_types)
GitWorkdir)	HgWorkdir)
_CmdResultdo_ex)require_command)tracez<>hg git failed c                   @  s   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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 )-GitWorkdirHgClienthgwd_t.PathTreturnGitWorkdirHgClient | Nonec                 C  s.   t | j tddg|\}}}|rd S | |S )Nr   root)r   COMMANDr   )clsr   r   _ret r   9usr/lib/python3.10/site-packages/setuptools_scm/hg_git.pyfrom_potential_worktree   s
   
z*GitWorkdirHgClient.from_potential_worktreeboolc                 C  s   |  d\}}}t|S )Nzhg id -T "{dirty}")r   r   )selfoutr   r   r   r   is_dirty   s   zGitWorkdirHgClient.is_dirty
str | Nonec                 C  s$   |  d}|jrtd| d S |jS )Nzhg id -T "{bookmarks}"z
branch err)r   
returncoder   r    )r   resr   r   r   
get_branch#   s
   

zGitWorkdirHgClient.get_branchdate | Nonec                 C  s6   |  d\}}}|rtd||| d S t|d S )Nz"hg log -r . -T "{shortdate(date)}"zhead date errz%Y-%m-%d)r   r   r   strptimer   )r   	date_parterrr   r   r   r   get_head_date*   s
   z GitWorkdirHgClient.get_head_datec                 C  s   dS )NFr   r   r   r   r   
is_shallow1      zGitWorkdirHgClient.is_shallowNonec                 C  s   d S )Nr   r+   r   r   r   fetch_shallow4   r-   z GitWorkdirHgClient.fetch_shallowc                 C  s   |  d\}}}|s|S d S )Nzhg log -r . -T "{node}"r   )r   noder   r   r   r   r   get_hg_node7   s   zGitWorkdirHgClient.get_hg_nodehg_nodestrc              	   C  s   t tL ttj| jd)}|D ]}||v r0| \}}|  W  d    W  d    S qW d    n1 s;w   Y  W d    d S W d    d S 1 sSw   Y  d S )Nz.hg/git-mapfile)r   FileNotFoundErroropenospathjoinsplit)r   r2   Z	map_itemsitemgit_noder   r   r   _hg2git>   s$   


zGitWorkdirHgClient._hg2gitc                 C  sp   |   }|d u r
d S | |}|d u r2| d | |}|d u r2td| |dt| kr0d S |S |d d S )Nz
hg gexportz%Cannot get git node so we use hg node0   )r1   r<   r   r   len)r   r2   r;   r   r   r   r0   G   s   



zGitWorkdirHgClient.nodeintc                 C  s   |  g d\}}}t|S )N)r   log-rzancestors(.)-T.)r   r?   )r   revsr   r   r   r   count_all_nodes^   s   z"GitWorkdirHgClient.count_all_nodesr
   c                 C  s"  |  g d\}}}|rtS | }|stS ttj| jd}tdd |D }W d   n1 s4w   Y  |D ]
}||v rE|} n	q;td|| tS |  ddd	d
| dddg\}	}}|rdtS t	|	d }
| 
 }|dustJ | d|
 d| }|  r|d7 }td| t|ddS )zu
        Tentative to reproduce the output of

        `git describe --dirty --tags --long --match *[0-9]*`

        )r   rA   rB   z0(reverse(ancestors(.)) and tag(r're:v?[0-9].*'))rC   z{tags}{if(tags, ' ', '')}z.hg/git-tagsc                 s  s"    | ]}|  d d d V  qd S )N)r9   ).0liner   r   r   	<genexpr>{   s     z6GitWorkdirHgClient.default_describe.<locals>.<genexpr>Nztag not foundr   rA   rB   'z'::.rC   rD   r   -z-gz-dirtydescr   r   )r   _FAKE_GIT_DESCRIBE_ERRORr9   r5   r6   r7   r8   dictr   r?   r0   r!   r
   )r   Zhg_tags_strr   r   Zhg_tagsfpZgit_tagsZhg_tagtagr    distancer0   rM   r   r   r   default_describeb   s:   

$
z#GitWorkdirHgClient.default_describeN)r   r   r   r   )r   r   )r   r"   )r   r&   )r   r.   )r2   r3   r   r"   )r   r@   )r   r
   )__name__
__module____qualname__r   classmethodr   r!   r%   r*   r,   r/   r1   r<   r0   rF   rS   r   r   r   r   r      s    







	
r   )
__future__r   r6   
contextlibr   r   r   r   r   Z_tgitr   r   r	   utilsr
   r   r   r   rN   r   r   r   r   r   <module>   s    