
    ff)                    l   d dl mZ d dlZd dlZd dlZd dl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% ddl$m&Z& ddl$m'Z' erddlm(Z(  ejR                  e*      Z+ ejX                  d      Z-dZ.g dZ/ddd	 	 	 	 	 	 	 	 	 d*dZ0 G d de#      Z1d+d Z2d+d!Z3d+d"Z4d,d#Z5de2f	 	 	 	 	 	 	 	 	 d-d$Z6	 	 	 	 	 	 	 	 d.d%Z7	 	 d/	 	 	 	 	 	 	 	 	 d0d&Z8	 	 	 	 d1d'Z9	 	 	 	 	 	 d2d(Z:d3d)Z;y)4    )annotationsN)date)datetime)timezone)samefile)Path)TYPE_CHECKING)Callable)Sequence   )Configuration)_types)discover)CompletedProcess)require_command)run)data_from_mime)Workdir)
ScmVersion)meta)tag_to_version)hg_gitz(?<=\btag: )([^,]+)\bz
%(describe)gitdescribez--dirtyz--tagsz--longz--matchz*[0-9]*Fchecktimeoutc               0    t        dd|dz  g| |||      S )Nr   z	--git-dirz.git)cwdr   r   )_run)argsrepor   r   s       j/var/dept/share/cheung/public_html/OutSchool/python/env/lib/python3.12/site-packages/setuptools_scm/git.pyrun_gitr$   5   s-     	TF]2T2	     c                  b    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y)
GitWorkdir$experimental, may change at any timec                   t        |      j                         }t        ddg|      j                  t              }|y |d d }|st        j                  |      }nGt        j                  |      }|j                  dd      j                  |      sJ |d t        |        }t        j                  d|       t        ||      sy  | t        |            S )N	rev-parsez--show-prefixparse\/zreal root %s)r   resolver$   parse_successstrosfspathreplaceendswithlenlogdebugr   )clswdreal_wdstr_wds       r#   from_potential_worktreez"GitWorkdir.from_potential_worktreeG   s    "X;8"=KKRUKV?crlGiimGYYr]F>>$,55g>>> _G}-G		.'*$4=!!r%   c                \    t        g d| j                        j                  t        d      S )N)statusz--porcelainz--untracked-files=noF)r,   default)r$   pathr1   boolselfs    r#   is_dirtyzGitWorkdir.is_dirty_   s-    =tyy

-  
	
r%   c                    t        g d| j                        j                  t        d      xs- t        g d| j                        j                  t        d      S )N)r*   z--abbrev-refHEADzbranch err (abbrev-err)r,   	error_msg)zsymbolic-refz--shortrH   zbranch err (symbolic-ref))r$   rB   r1   r2   rD   s    r#   
get_branchzGitWorkdir.get_branchg   s`    1II
 -/  

 /II
 -1  
	
r%   c                h    dd}t        g ddd| j                        }|j                  |d      S )Nc                    d| v rt         j                  d|        y t        j                  dk  r| j	                  d      r| d d dz   } t        j                  |       j                         S )Nz%czgit too old -> timestamp is %r)      Zr-   z+00:00)r8   warningsysversion_infor6   r   fromisoformatr   )timestamp_texts    r#   parse_timestampz1GitWorkdir.get_head_date.<locals>.parse_timestampw   sb    ~%<nM')n.E.Ec.J!/!4x!?)).9>>@@r%   )z-czlog.showSignature=false)r8   z-n1rH   z--format=%cIz$logging the iso date for head failedrI   )rU   r2   returndate | Noner$   rB   r1   )rE   rV   ress      r#   get_head_datezGitWorkdir.get_head_datev   s\    	A 2+ 
 II
   !< ! 
 	
r%   c                T    | j                   j                  d      j                         S )Nz.git/shallow)rB   joinpathis_filerD   s    r#   
is_shallowzGitWorkdir.is_shallow   s     yy!!.199;;r%   c                :    t        ddg| j                  dd       y )Nfetchz--unshallowT   r   )r$   rB   rD   s    r#   fetch_shallowzGitWorkdir.fetch_shallow   s    -($))4Mr%   c                Z    dd}t        g d| j                        j                  |      S )Nc                    | d d S )N    )nodes    r#   _unsafe_short_nodez+GitWorkdir.node.<locals>._unsafe_short_node   s    8Or%   )r*   z--verifyz--quietrH   r+   )ri   r2   rX   r2   rZ   )rE   rj   s     r#   ri   zGitWorkdir.node   s1    	 8$))

-$  
	
r%   c                n    t        ddg| j                        }|j                  j                  d      dz   S )Nzrev-listrH   
r   )r$   rB   stdoutcount)rE   r[   s     r#   count_all_nodeszGitWorkdir.count_all_nodes   s1    z6*DII6zz%))r%   c                <    t        t        dd  | j                        S )Nr   )r$   DEFAULT_DESCRIBErB   rD   s    r#   default_describezGitWorkdir.default_describe   s    '+TYY77r%   N)r;   _t.PathTrX   GitWorkdir | None)rX   rC   )rX   z
str | None)rX   rY   )rX   None)rX   int)rX   _CompletedProcess)__name__
__module____qualname____doc__classmethodr>   rF   rK   r\   r`   rd   ri   ro   rr   rh   r%   r#   r'   r'   D   s@    ." ".


,<N
*8r%   r'   c                l    | j                         r$t        j                  d| j                   d       yy)r(   "z!" is shallow and may cause errorsN)r`   warningswarnrB   r;   s    r#   warn_on_shallowr      s*    	}}"''"CDE r%   c                    | j                         r4t        j                  d| j                   d       | j	                          yy)r(   r~   z," was shallow, git fetch was used to rectifyN)r`   r   r   rB   rd   r   s    r#   fetch_on_shallowr      s6    	}}"''"NOP
 r%   c                T    | j                         rt        | j                   d      y)r(   z8 is shallow, please correct with "git fetch --unshallow"N)r`   
ValueErrorrB   r   s    r#   fail_on_shallowr      s,    	}}wwiOP
 	
 r%   c                   | j                   rt        j                  | j                         S t        j                  || j
                        D ]  }t        j                  |      }||c S  t        j                  |      S )z8
    Return the working directory (``GitWorkdir``).
    )search_parents)parentr'   r>   r   walk_potential_rootssearch_parent_directories)configrootpotential_rootpotential_wds       r#   get_working_directoryr      sv    
 }}11&--@@"77V==   "99.I#  --d33r%   c                T    t        d       t        ||       }|rt        ||||      S y)zQ
    :param pre_parse: experimental pre_parse action, may change at any time
    r   )describe_command	pre_parseN)_require_commandr   _git_parse_inner)r   r   r   r   r;   s        r#   r,   r,      s7     U	vt	,B	B)9Y
 	
 r%   c                F   	 j                   j                   }|^t        |t              rt        j                  |      }|d   dk(  rt        |dd  | j                        }n't        || j                        }n| j                         }dfd}|j                  |      S )Nr   r   r   c                D    t        |       \  }}}}t        ||||      S )Ntagdistancedirtyri   r   )_git_parse_describer   )outputr   r   ri   r   r   s        r#   parse_describez-version_from_describe.<locals>.parse_describe   s)    %8%@"XtUhe$vVVr%   r+   )r   r2   rX   r   )
git_describe_command
isinstancer2   shlexsplitr$   rB   r    rr   r1   )r;   r   r   describe_resr   s    `   r#   version_from_describer      s    
 	"".!66#&,${{+;<A%'"#3AB#7AL 0"'':L**,W %%N%;;r%   c                   |r ||       t        || |      }|]| j                  d      }|j                         }|d}d}n%|j                         }d|z   }|j	                         }t        |||||       }|j                         }	|j                         xs1 t        j                  t        j                        j                         }
t        j                  ||	|
      S )N0.0r   Tgr   )branch	node_date)r   version_clsri   ro   rF   r   rK   r\   r   nowr   utcr   dataclassesr5   )r   r;   r   r   versionr   ri   r   r   r   r   s              r#   r   r      s     "#B0@AG  'wwy<HE))+H:DKKMEhe$v
 ]]_F  "Ghll8<<&@&E&E&GIwvKKr%   c                    | j                  d      rd}| d d } nd}| j                  dd      }t        |      dk  r| }d}d }n|\  }}}t        |      }||||fS )	Nz-dirtyTiF-   rN   r   )r6   rsplitr7   rv   )describe_outputr   r   r   numberri   number_s          r#   r   r     sx     ))#2.""3*E
5zA~"WdWe##r%   c                   t         j                  d|        | j                  dt              }t        |v rt	        j
                  d       nt        |      \  }}}}t        ||||      S t        j                  | j                  dd            D ]  }t        ||      }|t        ||      c S  | j                  d      }|y d	|j                         v rt	        j
                  d
       y t        d||      S )Nzdata %szdescribe-namez+git archive did not support describe output)r   r   ri   z	ref-names r   ri   z$FORMATz8unprocessed git archival found (no export subst applied)r   )ri   r   )r8   r9   getDESCRIBE_UNSUPPORTEDr   r   r   r   
REF_TAG_REfindallr   upper)	datar   archival_describer   r   ri   _refr   s	            r#   archival_to_versionr   1  s     IIi2FG00CD23DEVT1	
 	
 !!$((;";< 9 f-//9
 xx<$**,&MMTUD88r%   c                r    t         j                  j                  | d      }t        |      }t	        ||      S )Nz.git_archival.txtr   )r3   rB   joinr   r   )r   r   archivalr   s       r#   parse_archivalr   Q  s.    ww||D"56H(#DtF33r%   )
r!   z Sequence[str | os.PathLike[str]]r"   r   r   rC   r   z
int | NonerX   rw   )r;   r'   rX   ru   )r   r   r   rs   rX   rt   )
r   rs   r   r   r   zstr | list[str] | Noner   zCallable[[GitWorkdir], None]rX   ScmVersion | None)r;   &GitWorkdir | hg_git.GitWorkdirHgClientr   r   r   _t.CMD_TYPE | NonerX   r   )NN)
r   r   r;   r   r   z?None | Callable[[GitWorkdir | hg_git.GitWorkdirHgClient], None]r   r   rX   r   )r   r2   rX   z!tuple[str, int, str | None, bool])r   zdict[str, str]r   r   rX   r   )r   rs   r   r   rX   r   )<
__future__r   r   loggingr3   rer   rR   r   r   r   r   os.pathr   pathlibr   typingr	   r
   r   r   r   r   _tr   _run_cmdr   rw   r   r   r   r    integrationr   scm_workdirr   r   r   r   r   r   	getLoggerrx   r8   compiler   r   rq   r$   r'   r   r   r   r   r,   r   r   r   r   r   rh   r%   r#   <module>r      s   "   	 	  
              ; 9 ! '     #g!RZZ01
# 
  
*
 	
  ]8 ]8@F
4* 04.=	
 - ,	
 &<.<< )< 	<> TX+/	LL.L QL )	L
 L<$$&$29
9"/99@4r%   