
    ff7                    <   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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r4d dlZej&                  dk\  rd dl
mZ d dl
mZ nd dlmZ d dlmZ  ed      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!dZ"dZ#dZ$ G d de      Z%	 	 	 	 	 	 d6dZ&d7dZ'	 	 	 	 	 	 d8dZ(d9dZ)ejT                   G d d             Z+	 	 	 	 	 	 	 	 d:d Z,d d!dd!ddd"	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d;d#Z-d<d$Z.d=d%Z/	 d>	 	 	 	 	 	 	 d?d&Z0d=d'Z1d=d(Z2d=d)Z3d=d*Z4d=d+Z5 ejl                  d,ejn                        Z8d@d-Z9	 	 	 dA	 	 	 	 	 	 	 	 	 dBd.Z:d=d/Z;d=d0Z<d=d1Z=d=d2Z>d=d3Z?d=d4Z@d=d5ZAy)C    )annotationsN)date)datetime)timezone)TYPE_CHECKING)Any)Callable)Match   )_entrypoints)_modify_version)   
   )Concatenate)	ParamSpec_P)	TypedDict)_config)_version_cls)Version)	_VersionT   r   c                  ,    e Zd ZU ded<   ded<   ded<   y)_TagDictstrversionprefixsuffixN)__name__
__module____qualname____annotations__     n/var/dept/share/cheung/public_html/OutSchool/python/env/lib/python3.12/site-packages/setuptools_scm/version.pyr   r   /   s    LKKr$   r   c                N   |j                   j                  t        |             }|rt        |j	                               dk(  rdnd}|j                  d      }t        j                  d| |j                   |       t        j                  d||j                         |j	                         |       t        |j                  |      |d |j                  |       ||j                  |      d        }t        j                  d| |       |d   sJ |S t        j                  d|        y )	Nr   r   r   z%r %r %szkey %s data %s, %s, %r)r   r   r   ztag %r parsed to %rztag %r did not parse)	tag_regexmatchr   lengroupsgrouplogdebug	groupdictr   startend)tagconfigr(   keyfullresults         r%   _parse_version_tagr6   5   s     ""3s8,E!%,,.1Q6I{{1~		*c6#3#3U;		$c5??+<ellnd	
 KK$*%++c*+		#()
 			'f5i   		(#.r$   c                    t         j                  d| |       t        |      r|S ddlm}  || |      D ]3  }t         j                  d|j
                         |j                         c S  y )Nzep %r %rr   )iter_entry_pointszep found: %s)r,   r-   callabler   r8   nameload)r+   callable_or_namer8   eps       r%   callable_or_entrypointr>   P   sZ    IIj%!12 !/'78 		."''*wwyr$   c                   t         j                  d|        t        | |      }||j                  dd      st	        j
                  d| d       y|d   }t         j                  d|       |j                  dd      x}rt	        j
                  d| d	|       |j                  |      }t         j                  d
|       |S )z[
    take a tag that might be prefixed with a keyword and return only the version part
    ztag %sNr   ztag z no version foundzversion pre parse %sr    z  will be stripped of its suffix z
version=%r)r,   r-   r6   getwarningswarnversion_cls)r1   r2   tag_dictversion_strr   r   s         r%   tag_to_versionrG   \   s     IIh!#v.Hx||It<SG#4569%KII$k2h++v+SG#CF:NO++K8GIIlG$Nr$   c                     dt         j                  v r@t        t         j                  d         } t        j                  | t
        j                        S t        j                  t
        j                        S )NSOURCE_DATE_EPOCH)osenvironintr   fromtimestampr   utcnow)
date_epochs    r%   _source_epoch_or_utc_nowrQ   u   sL    bjj($789
%%j(,,??||HLL))r$   c                     e Zd ZU dZded<   	 ded<   	 dZded<   	 d	Zd
ed<   	 dZded<   	 dZded<   	 d	Z	d
ed<   	 d	Z
ded<   	  ej                  e      Zded<   	 edd       ZddZddZddZ	 d	 	 	 	 	 	 	 	 	 d dZy	)!
ScmVersionz$represents a parsed version from scmz*_v.Version | _v.NonNormalizedVersion | strr1   _config.Configurationr2   r   rL   distanceN
str | NonenodeFbooldirtypreformattedbranchdate | None	node_date)default_factoryr   timec                >    | j                   dk(  xr | j                   S )zDreturns true checked out exactly on a tag and no local changes applyr   )rU   rY   selfs    r%   exactzScmVersion.exact   s     }}!4$**n4r$   c                    d| j                    d| j                   d| j                   d| j                   d| j                   dS )Nz<ScmVersion z dist=z node=z dirty=z branch=>)r1   rU   rW   rY   r[   ra   s    r%   __repr__zScmVersion.__repr__   sF    488*F4==/ :II;gdjj\$++aI	
r$   c                     |j                   d| j                  | j                  | j                  | j                  | j
                  | j                  | j                  d|S )z;format a given format string with attributes of this object)r_   r1   rU   rW   rY   r[   r]   r#   )formatr_   r1   rU   rW   rY   r[   r]   )rb   fmtkws      r%   format_withzScmVersion.format_with   sU    szz 	
]]**;;nn	
 	
 		
r$   c                D     | j                   | j                  r|n|fi |S )zxgiven `clean_format` and `dirty_format`

        choose one based on `self.dirty` and format it using `self.format_with`)rk   rY   )rb   clean_formatdirty_formatrj   s       r%   format_choicezScmVersion.format_choice   s%    
  t

SPRSSr$   c                @     || g|i |}| j                  ||      S )N)guessedrk   )rb   
guess_nextri   krj   rq   s         r%   format_next_versionzScmVersion.format_next_version   s.     T,A,,W55r$   )returnrX   )rv   r   )ri   r   rj   objectrv   r   )rm   r   rn   r   rj   rw   rv   r   )z{guessed}.dev{distance})
rs   z*Callable[Concatenate[ScmVersion, _P], str]ri   r   rt   z_P.argsrj   z	_P.kwargsrv   r   )r   r    r!   __doc__r"   rU   rW   rY   rZ   r[   r]   dataclassesfieldrQ   r_   propertyrc   rf   rk   ro   ru   r#   r$   r%   rS   rS   }   s    .	338!!5Hc-D*E4:L$5FJ !I{!-&[&&7OPD(P
 5 5

T -6>6 6 	6
 6 
6r$   rS   c                ^    |r| S t        | |j                        st        | |      }|J |S | S N)
isinstancerD   rG   )r1   rZ   r2   r   s       r%   
_parse_tagr      s>     
V//0 f-"""
r$   F)rU   rY   rW   rZ   r[   r]   c          
         t        | ||      }t        j                  d| |       |
J d| z         t        ||||||||      S )Nzversion %s -> %szCan't parse version %s)rU   rW   rY   rZ   r[   r2   r]   )r   r,   inforS   )	r1   rU   rY   rW   rZ   r[   r2   r]   parsed_versions	            r%   metar      s_      \6:NHHn5%E'?#'EE%!	 	r$   c                    t        j                  t        | j                              }t        j                  |      xs t        j
                  |      S r}   )r   strip_localr   r1   	_bump_dev_bump_regex)tag_versionr   s     r%   guess_next_versionr      s<    ))#koo*>?G$$W-U1L1LW1UUr$   c                f    | j                   r| j                  d      S | j                  t              S N{tag})rc   rk   ru   r   r   s    r%   guess_next_dev_versionr      s,    }}""7++**+=>>r$   c                d   t        | j                  t        j                        r#t	        | j                  j
                  d |       }n>	 t        | j                        j                  d      d | D cg c]  }t        |       }}t        |      |k  r |j                  d       t        |      |k  r |r|dxx   dz  cc<   t        |      t        k  r$|j                  d       t        |      t        k  r$dj                  d |D              S c c}w # t        $ r t        |  d      d w xY w)N.z# can't be parsed as numeric versionr   r   c              3  2   K   | ]  }t        |        y wr}   )r   ).0is     r%   	<genexpr>z+guess_next_simple_semver.<locals>.<genexpr>  s     *qCF*s   )r~   r1   _vr   listreleaser   splitrL   
ValueErrorr)   append
SEMVER_LENjoin)r   retain	incrementpartsr   s        r%   guess_next_simple_semverr      s    '++rzz*W[[((&12	X%(%5%;%;C%@&%IJSVJEJ e*v
Q e*v
b	Q	
e*z
!Q e*z
!88*E*** K 	Xy(KLMSWW	Xs   	)D 2DD D D/c                    | j                   rt        | t        d      S | j                  )d| j                  v r| j	                  t        t
              S | j	                  t        t              S )NF)r   r   featurer   )rc   r   r   r[   ru   SEMVER_MINORSEMVER_PATCHr   s    r%   simplified_semver_versionr     si    }}'
eTT>>%)w~~*E..( /   ..( /  r$   c                   | j                   r| j                  d      S | j                  t        | j                  j	                  d      d   | j
                        }|o|d   }|d   dk(  r|dd  }t        | j                        j	                  d      d t         }|j	                  d      d t         }||k(  r| j                  t              S | j                  t        t        	      S )
Nr   /r   r   r   vr   r   r   )rc   rk   r[   r6   r   r2   r   r1   r   ru   r   r   )r   branch_ver_data
branch_vertag_ver_up_to_minorbranch_ver_up_to_minors        r%   release_branch_semver_versionr     s    }}""7++~~!,NN  %b)7>>
 &(3J!}#'^
 #&gkk"2"8"8"=m|"L%/%5%5c%:=L%I"%)<<223EFF&&'?&UUr$   c                P    t        j                  dt        d       t        |       S )Nzprelease_branch_semver is deprecated and will be removed in the future. Use release_branch_semver_version insteadr   )category
stacklevel)rB   rC   DeprecationWarningr   r   s    r%   release_branch_semverr   .  s&    MM	4#	 )11r$   c                $    | j                  d      S r   rr   r   s    r%   only_versionr   8  s    w''r$   c                z    | j                   r| j                  d      S | j                  t        j                        S r   )rc   rk   ru   r   _dont_guess_next_versionr   s    r%   no_guess_dev_versionr   <  s1    }}""7++**?+S+STTr$   z|
    ^(?P<date>
        (?P<prefix>[vV]?)
        (?P<year>\d{2}|\d{4})(?:\.\d{1,2}){2})
        (?:\.(?P<patch>\d*))?$
    c                ,    t         j                  |       S r}   )_DATE_REGEXr(   )vers    r%   date_ver_matchr   N  s    S!!r$   c                   t        t        | j                              }|t        j                  |  d       |Od}nL|!t        |j                  d            dk(  rdnd}|j                  d      x}r|j                  |      s||z   }| j                  j                         }|xs |}||}nQt        j                  |j                  d      |      j                  t        j                        j                         }||k(  r(|d	n|j                  d
      xs d	}	t        |	      dz   }	n%||kD  r|t        j                  d| d| d       d}	dj!                  |||	      }
|t"        }t         ||
            }
|
S )z\
    same-day -> patch +1
    other-day -> today

    distance is always added as .devX
    zH does not correspond to a valid versioning date, assuming legacy versionz%y.%m.%dyear   z%Y.%m.%dr   r   )tzinfo0patchr   zyour previous tag  (z) is ahead your node date ()r   z{node_date:{date_fmt}}.{patch})r]   date_fmtr   )r   r   r1   rB   rC   r)   r+   
startswithr_   r   r   strptimereplacer   rN   rL   rh   
PkgVersion)r   r]   r   rD   r(   r   today	head_datetag_dater   next_versions              r%   guess_next_date_verr   R  s    3w{{+,E}i & &	
 !H %(V)<%=%Bz
H[[**6*&&v.!H,LLE"UI} ekk&18<WHLLW)TV 	
 9}5;;w+?+F3E
QiE$5MM&xj 1--6Kq: 3::he ; L  {<01Lr$   c                   | j                   r| j                  s| j                  d      S | j                  c| j                  j	                  d      rHt        | j                  j                  d      d   | j                        }||d   }t        |      }|r|S | j                  t        | j                  | j                  j                        S )Nr   zrelease--r   r   )r]   rD   )rc   rY   rk   r[   r   r6   r   r2   r   ru   r   r]   rD   )r   r   r   r(   s       r%   calver_by_dater     s    }}W]]""7++~~!gnn&?&?
&K'(<(<S(A"(Ew~~V
!Y'C"3'E
&&##NN.. '  r$   c                0    t        j                  | d      S )Nz%Y%m%dtime_formatr   _format_local_with_timer   s    r%   get_local_node_and_dater     s    227QQr$   c                0    t        j                  | d      S )Nz%Y%m%d%H%M%Sr   r   r   s    r%   get_local_node_and_timestampr     s    227WWr$   c                &    | j                  dd      S )Nr@   z+dirty)ro   r   s    r%   get_local_dirty_tagr     s      X..r$   c                     y)Nr@   r#   r   s    r%   get_no_local_noder     s    r$   c                ^    | j                   r| j                  d      S | j                  d      S )Nr   z{tag}.post{distance})rc   rk   r   s    r%   postrelease_versionr     s,    }}""7++""#9::r$   c                   t         j                  d|        t         j                  d| j                         | j                  r(t	        | j
                  t              sJ | j
                  S t        j                  | d| j                  j                  d       }t         j                  d|       |J t        j                  | d| j                  j                  d      }t         j                  d|       ||z   S )Nzscm version %sz	config %szsetuptools_scm.version_schemez
version %szsetuptools_scm.local_schemez+unknownzlocal_version %s)r,   r-   r2   rZ   r~   r1   r   r   _call_version_schemeversion_schemelocal_scheme)r   main_versionlocal_versions      r%   format_versionr     s    II(IIk7>>*'++s+++{{440'..2O2OQUL IIlL)### 55.0K0KZM II -0-''r$   )r1   zstr | objectr2   rT   rv   z_TagDict | None)r+   r   r<   z	str | Anyrv   r   )r1   _VersionT | strr2   rT   rv   z_VersionT | None)rv   r   )r1   r   rZ   rX   r2   rT   rv   r   )r1   zstr | _VersionTrU   rL   rY   rX   rW   rV   rZ   rX   r[   rV   r2   rT   r]   r\   rv   rS   )r   rS   rv   r   )r   rS   rv   r   )T)r   rS   r   rL   r   rX   rv   r   )r   r   rv   zMatch[str] | None)NNN)
r   rS   r]   r\   r   rV   rD   ztype | Nonerv   r   )B
__future__r   ry   loggingrJ   rerB   r   r   r   typingr   r   r	   r
   r@   r   r   sysversion_infor   r   typing_extensionsr   r   r   r   r   r   r   r   	getLoggerr   r,   r   r   r   r   r6   r>   rG   rQ   	dataclassrS   r   r   r   r   r   r   r   r   r   r   compileVERBOSEr   r   r   r   r   r   r   r   r   r   r#   r$   r%   <module>r      so   "   	 	           
7"&$1/	4B     / #g! 
y 	46		"72* @6 @6 @6F
	
(,
6K

  !	  	
    "  4V
? 9=++!$+15++&V22(U bjj JJ" "#	999 9 	9
 	9x$RX/;(r$   