
    ff                        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  ej.                  e      Z eddd      Z G d dee      Zy)    )annotationsN)suppress)date)Path   )_types)CompletedProcess)require_command)run)
GitWorkdir)	HgWorkdirzfake git describe output for hgz<>hg git failed to describec                  r    e Zd ZdZedd       ZddZddZddZddZ	ddZ
ddZdd	Zdd
ZddZddZy)GitWorkdirHgClienthgc                t    t        d       t        ddg|      j                  t              }|y  | |      S )Nr   rootcwd)parse)r
   _runparse_successr   )clswdress      m/var/dept/share/cheung/public_html/OutSchool/python/env/lib/python3.12/site-packages/setuptools_scm/hg_git.pyfrom_potential_worktreez*GitWorkdirHgClient.from_potential_worktree   s9    D&>r*88t8D;3x    c                `    t        g d| j                  d      }t        |j                        S )N)r   id-Tz{dirty}T)r   check)r   pathboolstdoutselfr   s     r   is_dirtyzGitWorkdirHgClient.is_dirty%   s$    0diitLCJJr   c                    t        g d| j                        }|j                  rt        j	                  d|       y |j
                  S )N)r   r   r    z{bookmarks}r   zbranch err %s)r   r"   
returncodeloginfor$   r%   s     r   
get_branchzGitWorkdirHgClient.get_branch)   s5    4$))D>>HH_c*zzr   c                n    t        d| j                        j                  t        j                  d      S )Nz"hg log -r . -T "{shortdate(date)}"r   zhead date err)r   	error_msg)r   r"   r   r   fromisoformatr&   s    r   get_head_datez GitWorkdirHgClient.get_head_date0   s2    8diiHVV$$ W 
 	
r   c                     y)NF r0   s    r   
is_shallowzGitWorkdirHgClient.is_shallow5   s    r   c                     y )Nr3   r0   s    r   fetch_shallowz GitWorkdirHgClient.fetch_shallow8   s    r   c                b    t        d| j                        }|j                  ry |j                  S )Nzhg log -r . -T "{node}"r   )r   r"   r)   r$   r%   s     r   get_hg_nodezGitWorkdirHgClient.get_hg_node;   s'    ,$))<>>::r   c                F   t        t              5  t        t        j                  j                  | j                  d            5 }|D ]/  }||v s|j                         \  }}|c cd d d        cd d d        S  	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz.hg/git-mapfile)r   FileNotFoundErroropenosr"   joinsplit)r&   hg_node	map_itemsitemgit_nodes        r   _hg2gitzGitWorkdirHgClient._hg2gitB   s    '( 	(bggll499.?@A (Y% (D$,0JJL)''	( (	( 	(((	( ( (	( s5   4B
BB%	B8B:BB	BB c                   | j                         }|y | j                  |      }|Vt        ddg| j                         | j                  |      }|*t        j                  d|       |dt        |      z  k(  ry |S |d d S )Nr   gexportr   z(Cannot get git node so we use hg node %s0   )r8   rC   r   r"   r*   debuglen)r&   r?   rB   s      r   nodezGitWorkdirHgClient.nodeK   s    ""$?<<($	"		2||G,H		DgNcCL00|r   c                ^    t        g d| j                        }t        |j                        S )N)r   r*   -rzancestors(.)r    .r   )r   r"   rI   r$   r%   s     r   count_all_nodesz"GitWorkdirHgClient.count_all_nodesb   s!    AtyyQ3::r   c                   t        g d| j                        }|j                  rt        S |j                  j                         }|st        S | j                  j                  d      j                         5 }t        d |D              }ddd       |D ]
  }|v s|} n t        j                  d|       t        S t        ddd	d
| dddg| j                        }|j                  rt        S t        |j                        dz
  }| j                         }|J | d| d| }	| j                         r|	dz  }	t        j                  d|	       t!        g dd|	d      S # 1 sw Y   xY w)zu
        Tentative to reproduce the output of

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

        )r   r*   rL   z0(reverse(ancestors(.)) and tag(r're:v?[0-9].*'))r    z{tags}{if(tags, ' ', '')}r   z.hg/git-tagsc              3  H   K   | ]  }|j                         d d d     y w)N)r>   ).0lines     r   	<genexpr>z6GitWorkdirHgClient.default_describe.<locals>.<genexpr>   s     +N4DJJL2,>+Ns    "Nztag not found hg=%s git=%sr   r*   rL   'z'::.r    rM   r   -z-gz-dirtyzfaked describe %r)zsetuptools-scmfakeddescriber    )r)   r$   stderr)r   r"   r)   _FAKE_GIT_DESCRIBE_ERRORr$   r>   joinpathr;   dictloggingwarningrI   rJ   r'   r*   rH   _CompletedProcess)
r&   r   hg_tagsfpgit_tagshg_tagtagdistancerJ   descs
             r   default_describez#GitWorkdirHgClient.default_describef   sr     		

 >>++ ZZ--/++YY/446 	O"'++N2+N'NH	O  	,F!	,
 OO8'8L++D%3%t}dC@diiP>>++szz?Q&yy{azD6*==?HD		%t, 3	
 	
1	O 	Os   7E##E,N)r   z_t.PathTreturnzGitWorkdirHgClient | None)ri   r#   )ri   
str | None)ri   zdate | None)ri   None)r?   strri   rj   )ri   int)ri   r`   )__name__
__module____qualname__COMMANDclassmethodr   r'   r,   r1   r4   r6   r8   rC   rJ   rN   rh   r3   r   r   r   r      sK    G  

.6
r   r   )
__future__r   r^   r<   
contextlibr   datetimer   pathlibr   rY   r   _t_run_cmdr	   r`   r
   r   r   gitr   r   r   	getLoggerrn   r*   r[   r   r3   r   r   <module>r{      s_    "  	     ; % !  g!,%! B
Y B
r   