3
׾(^                  @   sn  d dl mZ d dlZd dlZd dlZd dlmZmZmZ ddl	m
Z
 ddlmZmZ d dlmZ d dlmZ d	Zd
Zd
Zd@ddZdd Zdd Ze ZG dd deZejdedd dd Zdd ZdAddZdBddZG dd de Z!d d! Z"dCd#d$Z#d%d& Z$d'd( Z%d)d* Z&d+d, Z'd-d. Z(dDd/d0Z)d1d2 Z*d3d4 Z+d5d6 Z,dEd8d9Z-d:d; Z.d<d= Z/d>d? Z0dS )F    )print_functionN)chainrepeatislice   )Configuration)tracestring_types)iter_entry_points)parse_version      c             C   s   t | t|}tt||S )N)r   r   listr   )iterablesizepaddingpadded r   H/home/birch/.local/lib/python3.6/site-packages/setuptools_scm/version.py_pad   s    r   c             C   s   t | ts| nt| }|jj|}d }|r~t|j dkr@d}nd}|j||jdd |j| |jd|j	|d  d}t
dj| | |S )Nr   versionr   )r   prefixsuffixztag '{}' parsed to {})
isinstancer	   str	tag_regexmatchlengroupsgroupstartendr   format)tagconfig	tagstringr   resultkeyr   r   r   _parse_version_tag   s    r(   c              C   s"   t d} t| trd S t| S d S )Nz1.0)pkg_parse_versionr   tupletype)modern_versionr   r   r   _get_version_class-   s    
r-   c               @   s   e Zd ZdS )SetuptoolsOutdatedWarningN)__name__
__module____qualname__r   r   r   r   r.   8   s   r.   errorT)appendc               C   s   t d krtjdt d S )Nz your setuptools is too old (<12))VERSION_CLASSwarningswarnr.   r   r   r   r   _warn_if_setuptools_outdated@   s    r7   c             C   sD   t d| |f t|r|S x$t| |D ]}t d|j |j S W d S )Nepz	ep found:)r   callabler
   nameload)r   callable_or_namer8   r   r   r   callable_or_entrypointE   s    r=   c             C   s   t d|  |st }t| |}t|t s8|jdd rLtjdj|  dS |d }t d| |jddrtjdj| |d  t	dk	rt
|}t dt| |S )	z
    take a tag that might be prefixed with a keyword and return only the version part
    :param config: optional configuration object
    r#   r   Nztag {!r} no version foundzversion pre parser    z,tag {!r} will be stripped of its suffix '{}')r   r   r(   r   dictgetr5   r6   r"   r4   r)   repr)r#   r$   tagdictr   r   r   r   tag_to_versionP   s"    


rC   c             C   s0   g }x&| D ]}t ||d}|r
|j| q
W |S )z
    take tags that might be prefixed with a keyword and return only the version part
    :param tags: an iterable of tags
    :param config: optional configuration object
    )r$   )rC   r3   )tagsr$   r&   r#   r   r   r   tags_to_versionsp   s    
rE   c               @   sP   e Zd ZdddZedd Zedd Zd	d
 Zdd Zdd Z	dddZ
dS )
ScmVersionNFc             K   sX   |rt d| || _|r$|d kr$d}|| _|| _tjj | _|| _|| _|| _	|| _
d S )Nzunknown argsr   )r   r#   distancenodedatetimenowtime_extradirtypreformattedbranch)selftag_versionrG   rH   rM   rN   rO   kwr   r   r   __init__   s    

zScmVersion.__init__c             C   s   t jdtdd | jS )Nz<ScmVersion.extra is deprecated and will be removed in futurer   )category
stacklevel)r5   r6   DeprecationWarningrL   )rP   r   r   r   extra   s
    zScmVersion.extrac             C   s
   | j d kS )N)rG   )rP   r   r   r   exact   s    zScmVersion.exactc             C   s
   | j dS )Nz=<ScmVersion {tag} d={distance} n={node} d={dirty} b={branch}>)format_with)rP   r   r   r   __repr__   s    zScmVersion.__repr__c          	   K   s*   |j f | j| j| j| j| j| jd|S )N)rK   r#   rG   rH   rM   rO   )r"   rK   r#   rG   rH   rM   rO   )rP   fmtrR   r   r   r   rY      s    zScmVersion.format_withc             K   s   | j | jr|n|f|S )N)rY   rM   )rP   clean_formatdirty_formatrR   r   r   r   format_choice   s    zScmVersion.format_choice{guessed}.dev{distance}c             K   s   || j f|}| j||dS )N)guessed)r#   rY   )rP   
guess_nextr[   rR   r`   r   r   r   format_next_version   s    zScmVersion.format_next_version)NNFFN)r_   )r/   r0   r1   rS   propertyrW   rX   rZ   rY   r^   rb   r   r   r   r   rF   ~   s       
	rF   c             C   s*   |r| S t d kst| t  r&t| |} | S )N)r4   r   rC   )r#   rN   r$   r   r   r   
_parse_tag   s
    
rd   Fc             K   sP   |st jd t| ||}td| d| |d k	s<td|  t|||||f|S )NzNmeta invoked without explicit configuration, will use defaults where required.r   z->zcant parse version %s)r5   r6   rd   r   AssertionErrorrF   )r#   rG   rM   rH   rN   r$   rR   parsed_versionr   r   r   meta   s    rg   c             C   s   t t| }t|pt|S )N)_strip_localr   	_bump_dev_bump_regex)rQ   r   r   r   r   guess_next_version   s    rk   c             C   s   | j d\}}}|S )N+)	partition)version_stringpublicseplocalr   r   r   rh      s    rh   c             C   s0   d| krd S | j dd\}}|dks,td|S )Nz.devr   0zown dev numbers are unsupported)rsplitre   )r   r   tailr   r   r   ri      s
    ri   c             C   s(   t jd| j \}}d|t|d f S )Nz(.*?)(\d+)$z%s%dr   )rer   r   int)r   r   rt   r   r   r   rj      s    rj   c             C   s   | j r| jdS | jtS d S )Nz{tag})rX   rY   rb   rk   )r   r   r   r   guess_next_dev_version   s    
rw   c             C   sP   t tt| jd}t||d}|r4|d  d7  < t|td}djt t|S )N.r   r   )maprv   r   splitr   
SEMVER_LENjoin)r   retain	incrementpartsr   r   r   guess_next_simple_semver   s    r   c             C   sJ   | j rt| jtddS | jd k	r8d| jkr8| jttdS | jttdS d S )NF)r~   r   feature)r~   )rX   r   r#   r|   rO   rb   SEMVER_MINORSEMVER_PATCH)r   r   r   r   simplified_semver_version   s    
r   c             C   s4   | j s| jd kr | jdd|dS | jdd|dS d S )Nr>   z+d{time:{time_format}})time_formatz+{node}z+{node}.d{time:{time_format}})rX   rH   r^   )r   r   r   r   r   _format_local_with_time  s
    r   c             C   s   t | ddS )Nz%Y%m%d)r   )r   )r   r   r   r   get_local_node_and_date  s    r   %Y%m%d%H%M%Sc             C   s   t | |dS )N)r   )r   )r   r[   r   r   r   get_local_node_and_timestamp  s    r   c             C   s   | j ddS )Nr>   z+dirty)r^   )r   r   r   r   get_local_dirty_tag  s    r   c             C   s   | j r| jdS | jdS d S )Nz{tag}z{tag}.post{distance})rX   rY   )r   r   r   r   postrelease_version  s    
r   c             K   sp   t d|  t d| | jr | jS td|d }td|d }|| }t d| || }t d| || ||  S )	Nzscm versionr$   zsetuptools_scm.version_schemeversion_schemezsetuptools_scm.local_schemelocal_schemer   local_version)r   rN   r#   r=   )r   r$   r   r   main_versionr   r   r   r   format_version&  s    



r   )N)N)N)NFNFN)T)r   )1
__future__r   rI   r5   ru   	itertoolsr   r   r   r$   r   utilsr   r	   pkg_resourcesr
   r   r)   r   r   r|   r   r(   r-   r4   Warningr.   simplefilterr7   r=   rC   rE   objectrF   rd   rg   rk   rh   ri   rj   rw   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sJ   

 
=	
	
	
