B
    Õ¹`÷b  ã               @   sÎ  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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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mZmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z) ddlm*Z* dd„ Z+G dd„ dƒZ,G dd„ de,eƒZ-G dd„ deƒZG dd„ deƒZ.dd„ Z/dd„ Z0dd„ Z1d d!„ Z2d"d#„ Z3d$d%„ Z4d&d'„ Z5d(d)„ Z6d3d+d,„Z7d-d.„ Z8d/d0„ Z9G d1d2„ d2e*ƒZ:dS )4zUsetuptools.command.egg_info

Create a distribution's .egg-info directory and contentsé    )ÚFileList)ÚDistutilsInternalError)Úconvert_path)ÚlogN)ÚCommand)Úsdist)Úwalk_revctrl)Úedit_config)Ú	bdist_egg)Úparse_requirementsÚ	safe_nameÚparse_versionÚsafe_versionÚyield_linesÚ
EntryPointÚiter_entry_pointsÚto_filename)Úglob)Ú	packaging)ÚSetuptoolsDeprecationWarningc             C   sî  d}|   tjj¡}t tj¡}d|f }x¤t|ƒD ]–\}}|t|ƒd k}|dkrv|rd|d7 }q4|d||f 7 }q4d}t|ƒ}	x:||	k r¾|| }
|
dkr°||d 7 }n|
d	krÂ||7 }nò|
d
kr¦|d }||	k rð|| dkrð|d }||	k r|| dkr|d }x&||	k r6|| dkr6|d }qW ||	krR|t |
¡7 }nR||d |… }d}|d dkr„d}|dd… }|t |¡7 }|d|f 7 }|}n|t |
¡7 }|d7 }q†W |s4||7 }q4W |d7 }tj|tj	tj
B dS )zö
    Translate a file path glob like '*.txt' in to a regular expression.
    This differs from fnmatch.translate which allows wildcards to match
    directory separators. It also knows about '**/' which matches any number of
    directories.
    Ú z[^%s]é   z**z.*z
(?:%s+%s)*r   Ú*ú?ú[ú!ú]ú^Nz[%s]z\Z)Úflags)ÚsplitÚosÚpathÚsepÚreÚescapeÚ	enumerateÚlenÚcompileÚ	MULTILINEÚDOTALL)r   ÚpatÚchunksr"   Z
valid_charÚcÚchunkÚ
last_chunkÚiZ	chunk_lenÚcharZinner_iÚinnerÚ
char_class© r3   úC/tmp/pip-install-4tin_oll/setuptools/setuptools/command/egg_info.pyÚtranslate_pattern#   sV    




r5   c               @   s@   e Zd ZdZdZedd„ ƒZdd„ Zdd„ Zdd	„ Z	ee	ƒZ
dS )
Ú
InfoCommonNc             C   s   t | j ¡ ƒS )N)r   ÚdistributionÚget_name)Úselfr3   r3   r4   Únamez   s    zInfoCommon.namec             C   s   t |  | j ¡ ¡ƒS )N)r   Ú
_maybe_tagr7   Úget_version)r9   r3   r3   r4   Útagged_version~   s    zInfoCommon.tagged_versionc             C   s    | j r| | j ¡r|S || j  S )z
        egg_info may be called more than once for a distribution,
        in which case the version string already contains all tags.
        )ÚvtagsÚendswith)r9   Úversionr3   r3   r4   r;      s    zInfoCommon._maybe_tagc             C   s,   d}| j r|| j 7 }| jr(|t d¡7 }|S )Nr   z-%Y%m%d)Ú	tag_buildÚtag_dateÚtimeÚstrftime)r9   r@   r3   r3   r4   Útags‹   s    
zInfoCommon.tags)Ú__name__Ú
__module__Ú__qualname__rA   rB   Úpropertyr:   r=   r;   rE   r>   r3   r3   r3   r4   r6   v   s   
r6   c               @   sŽ   e Zd ZdZddddgZdgZddiZdd	„ Zed
d„ ƒZ	e	j
dd„ ƒZ	dd„ Zdd„ Zddd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS ) Úegg_infoz+create a distribution's .egg-info directory)z	egg-base=ÚezLdirectory containing .egg-info directories (default: top of the source tree))ztag-dateÚdz0Add date stamp (e.g. 20050528) to version number)z
tag-build=Úbz-Specify explicit tag to add to version number)zno-dateÚDz"Don't include date stamp [default]ztag-datezno-datec             C   s"   d | _ d | _d | _d | _d| _d S )NF)Úegg_baseÚegg_namerJ   Úegg_versionÚbroken_egg_info)r9   r3   r3   r4   Úinitialize_options¥   s
    zegg_info.initialize_optionsc             C   s   d S )Nr3   )r9   r3   r3   r4   Útag_svn_revision¯   s    zegg_info.tag_svn_revisionc             C   s   d S )Nr3   )r9   Úvaluer3   r3   r4   rT   ³   s    c             C   s0   t  ¡ }|  ¡ |d< d|d< t|t|dƒ dS )z³
        Materialize the value of date into the
        build tag. Install build keys in a deterministic order
        to avoid arbitrary reordering on subsequent builds.
        rA   r   rB   )rJ   N)ÚcollectionsÚOrderedDictrE   r	   Údict)r9   ÚfilenamerJ   r3   r3   r4   Úsave_version_info¸   s    zegg_info.save_version_infoc          
   C   sT  | j | _|  ¡ | _t| jƒ}y6t|tjjƒ}|r4dnd}t	t
|| j| jf ƒƒ W n< tk
rŽ } ztj d| j| jf ¡|‚W d d }~X Y nX | jd kr¶| jj}|p¨i  dtj¡| _|  d¡ t| jƒd | _| jtjkrðtj | j| j¡| _d| jkr|  ¡  | j| jj_| jj}|d k	rP|j| j ¡ krP| j|_t| jƒ|_ d | j_d S )Nz%s==%sz%s===%sz2Invalid distribution name or version syntax: %s-%sr   rO   z	.egg-infoú-)!r:   rP   r=   rQ   r   Ú
isinstancer   r@   ÚVersionÚlistr   Ú
ValueErrorÚ	distutilsÚerrorsÚDistutilsOptionErrorrO   r7   Úpackage_dirÚgetr    ÚcurdirÚensure_dirnamer   rJ   r!   ÚjoinÚcheck_broken_egg_infoÚmetadataZ_patched_distÚkeyÚlowerÚ_versionÚ_parsed_version)r9   Úparsed_versionZ
is_versionÚspecrK   ÚdirsÚpdr3   r3   r4   Úfinalize_optionsÅ   s8    



zegg_info.finalize_optionsFc             C   sL   |r|   |||¡ n4tj |¡rH|dkr>|s>t d||¡ dS |  |¡ dS )a¹  Write `data` to `filename` or delete if empty

        If `data` is non-empty, this routine is the same as ``write_file()``.
        If `data` is empty but not ``None``, this is the same as calling
        ``delete_file(filename)`.  If `data` is ``None``, then this is a no-op
        unless `filename` exists, in which case a warning is issued about the
        orphaned file (if `force` is false), or deleted (if `force` is true).
        Nz$%s not set in setup(), but %s exists)Ú
write_filer    r!   Úexistsr   ÚwarnÚdelete_file)r9   ÚwhatrY   ÚdataÚforcer3   r3   r4   Úwrite_or_delete_fileö   s    	
zegg_info.write_or_delete_filec             C   s>   t  d||¡ | d¡}| js:t|dƒ}| |¡ | ¡  dS )zªWrite `data` to `filename` (if not a dry run) after announcing it

        `what` is used in a log message to identify what is being written
        to the file.
        zwriting %s to %szutf-8ÚwbN)r   ÚinfoÚencodeÚdry_runÚopenÚwriteÚclose)r9   rw   rY   rx   Úfr3   r3   r4   rs   
  s    


zegg_info.write_filec             C   s    t  d|¡ | jst |¡ dS )z8Delete `filename` (if not a dry run) after announcing itzdeleting %sN)r   r|   r~   r    Úunlink)r9   rY   r3   r3   r4   rv     s    zegg_info.delete_filec             C   s–   |   | j¡ t | jd ¡ | jj}x@tdƒD ]4}|j|d | ¡ }|| |j	tj
 | j|j	¡ƒ q,W tj
 | jd¡}tj
 |¡rŠ|  |¡ |  ¡  d S )Nzegg_info.writers)Ú	installerznative_libs.txt)ÚmkpathrJ   r    Úutimer7   Zfetch_build_eggr   ÚrequireÚresolver:   r!   rg   rt   rv   Úfind_sources)r9   r„   ÚepÚwriterÚnlr3   r3   r4   Úrun  s     
zegg_info.runc             C   s4   t j | jd¡}t| jƒ}||_| ¡  |j| _dS )z"Generate SOURCES.txt manifest filezSOURCES.txtN)	r    r!   rg   rJ   Úmanifest_makerr7   Úmanifestr   Úfilelist)r9   Zmanifest_filenameÚmmr3   r3   r4   r‰   -  s
    
zegg_info.find_sourcesc             C   sT   | j d }| jtjkr&tj | j|¡}tj |¡rPt d|| j	¡ | j	| _
|| _	d S )Nz	.egg-infoaB  ------------------------------------------------------------------------------
Note: Your current .egg-info directory has a '-' in its name;
this will not work correctly with "setup.py develop".

Please rename %s to %s to correct this problem.
------------------------------------------------------------------------------)rP   rO   r    re   r!   rg   rt   r   ru   rJ   rR   )r9   Zbeir3   r3   r4   rh   5  s    

zegg_info.check_broken_egg_infoN)F)rF   rG   rH   ÚdescriptionÚuser_optionsÚboolean_optionsÚnegative_optrS   rI   rT   ÚsetterrZ   rr   rz   rs   rv   r   r‰   rh   r3   r3   r3   r4   rJ   •   s$   
1
rJ   c               @   s|   e Z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dd„ Zdd„ Zdd„ Zdd„ ZdS )r   c          	   C   s  |   |¡\}}}}| j| j| j| jt | j|¡t | j|¡| j	| j
dœ}dddddddd	dœ}y|| }W n$ tk
rŽ   td
j|dƒ‚Y nX | d¡}	|dkr¨|g}|	r²|fnd}
|| }|  d |g|	rÔ|gng  | ¡¡ x&|D ]}||ƒsètj||f|
žŽ  qèW d S )N)ÚincludeÚexcludezglobal-includezglobal-excludezrecursive-includezrecursive-excludeÚgraftÚprunez%warning: no files found matching '%s'z9warning: no previously-included files found matching '%s'z>warning: no files found matching '%s' anywhere in distributionzRwarning: no previously-included files matching '%s' found anywhere in distributionz:warning: no files found matching '%s' under directory '%s'zNwarning: no previously-included files matching '%s' found under directory '%s'z+warning: no directories found matching '%s'z6no previously-included directories found matching '%s'z/this cannot happen: invalid action '{action!s}')Úactionz
recursive->   r™   rš   r3   ú )Z_parse_template_liner—   r˜   Úglobal_includeÚglobal_excludeÚ	functoolsÚpartialÚrecursive_includeÚrecursive_excluder™   rš   ÚKeyErrorr   ÚformatÚ
startswithÚdebug_printrg   r   ru   )r9   Úliner›   ÚpatternsÚdirZdir_patternZ
action_mapZlog_mapZprocess_actionZaction_is_recursiveZextra_log_argsZlog_tmplÚpatternr3   r3   r4   Úprocess_template_lineH  sJ    



zFileList.process_template_linec             C   sV   d}xLt t| jƒd ddƒD ]2}|| j| ƒr|  d| j|  ¡ | j|= d}qW |S )z†
        Remove all files from the file list that match the predicate.
        Return True if any matching files were removed
        Fr   éÿÿÿÿz
 removing T)Úranger&   Úfilesr¦   )r9   Ú	predicateÚfoundr/   r3   r3   r4   Ú_remove_files•  s    zFileList._remove_filesc             C   s$   dd„ t |ƒD ƒ}|  |¡ t|ƒS )z#Include files that match 'pattern'.c             S   s   g | ]}t j |¡s|‘qS r3   )r    r!   Úisdir)Ú.0r‚   r3   r3   r4   ú
<listcomp>¤  s    z$FileList.include.<locals>.<listcomp>)r   ÚextendÚbool)r9   rª   r°   r3   r3   r4   r—   ¢  s    
zFileList.includec             C   s   t |ƒ}|  |j¡S )z#Exclude files that match 'pattern'.)r5   r±   Úmatch)r9   rª   r·   r3   r3   r4   r˜   ¨  s    zFileList.excludec             C   s8   t j |d|¡}dd„ t|ddD ƒ}|  |¡ t|ƒS )zN
        Include all files anywhere in 'dir/' that match the pattern.
        z**c             S   s   g | ]}t j |¡s|‘qS r3   )r    r!   r²   )r³   r‚   r3   r3   r4   r´   ²  s    z.FileList.recursive_include.<locals>.<listcomp>T)Ú	recursive)r    r!   rg   r   rµ   r¶   )r9   r©   rª   Zfull_patternr°   r3   r3   r4   r¡   ­  s    
zFileList.recursive_includec             C   s    t tj |d|¡ƒ}|  |j¡S )zM
        Exclude any file anywhere in 'dir/' that match the pattern.
        z**)r5   r    r!   rg   r±   r·   )r9   r©   rª   r·   r3   r3   r4   r¢   ·  s    zFileList.recursive_excludec             C   s$   dd„ t |ƒD ƒ}|  |¡ t|ƒS )zInclude all files from 'dir/'.c             S   s"   g | ]}t j |¡D ]}|‘qqS r3   )r`   r   Úfindall)r³   Z	match_dirÚitemr3   r3   r4   r´   Á  s   z"FileList.graft.<locals>.<listcomp>)r   rµ   r¶   )r9   r©   r°   r3   r3   r4   r™   ¾  s    
zFileList.graftc             C   s   t tj |d¡ƒ}|  |j¡S )zFilter out files from 'dir/'.z**)r5   r    r!   rg   r±   r·   )r9   r©   r·   r3   r3   r4   rš   È  s    zFileList.prunec                sJ   | j dkr|  ¡  ttj d|¡ƒ‰ ‡ fdd„| j D ƒ}|  |¡ t|ƒS )z“
        Include all files anywhere in the current directory that match the
        pattern. This is very inefficient on large file trees.
        Nz**c                s   g | ]}ˆ   |¡r|‘qS r3   )r·   )r³   r‚   )r·   r3   r4   r´   Õ  s    z+FileList.global_include.<locals>.<listcomp>)Úallfilesr¹   r5   r    r!   rg   rµ   r¶   )r9   rª   r°   r3   )r·   r4   r   Í  s    

zFileList.global_includec             C   s   t tj d|¡ƒ}|  |j¡S )zD
        Exclude all files anywhere that match the pattern.
        z**)r5   r    r!   rg   r±   r·   )r9   rª   r·   r3   r3   r4   rž   Ù  s    zFileList.global_excludec             C   s8   |  d¡r|d d… }t|ƒ}|  |¡r4| j |¡ d S )Núr¬   )r?   r   Ú
_safe_pathr®   Úappend)r9   rº   r!   r3   r3   r4   r¾   à  s
    

zFileList.appendc             C   s   | j  t| j|ƒ¡ d S )N)r®   rµ   Úfilterr½   )r9   Úpathsr3   r3   r4   rµ   è  s    zFileList.extendc             C   s   t t| j| jƒƒ| _dS )zÜ
        Replace self.files with only safe paths

        Because some owners of FileList manipulate the underlying
        ``files`` attribute directly, this method must be called to
        repair those paths.
        N)r^   r¿   r½   r®   )r9   r3   r3   r4   Ú_repairë  s    zFileList._repairc          	   C   sš   d}t  |¡}|d kr(t d| ¡ dS t  |d¡}|d krNt ||d¡ dS y tj |¡shtj |¡rldS W n& tk
r”   t ||t	 
¡ ¡ Y nX d S )Nz!'%s' not %s encodable -- skippingz''%s' in unexpected encoding -- skippingFzutf-8T)Úunicode_utilsÚfilesys_decoder   ru   Z
try_encoder    r!   rt   ÚUnicodeEncodeErrorÚsysÚgetfilesystemencoding)r9   r!   Zenc_warnZu_pathZ	utf8_pathr3   r3   r4   r½   õ  s    
zFileList._safe_pathN)rF   rG   rH   r«   r±   r—   r˜   r¡   r¢   r™   rš   r   rž   r¾   rµ   rÁ   r½   r3   r3   r3   r4   r   E  s   M


r   c               @   sd   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	e
dd„ ƒZdd„ Zdd„ Zdd„ ZdS )rŽ   zMANIFEST.inc             C   s   d| _ d| _d| _d| _d S )Nr   )Zuse_defaultsrš   Zmanifest_onlyZforce_manifest)r9   r3   r3   r4   rS     s    z!manifest_maker.initialize_optionsc             C   s   d S )Nr3   )r9   r3   r3   r4   rr     s    zmanifest_maker.finalize_optionsc             C   sl   t ƒ | _tj | j¡s|  ¡  |  ¡  tj | j¡r<|  	¡  |  
¡  |  ¡  | j ¡  | j ¡  |  ¡  d S )N)r   r   r    r!   rt   r   Úwrite_manifestÚadd_defaultsÚtemplateZread_templateÚadd_license_filesÚprune_file_listÚsortZremove_duplicates)r9   r3   r3   r4   r     s    

zmanifest_maker.runc             C   s   t  |¡}| tjd¡S )Nú/)rÂ   rÃ   Úreplacer    r"   )r9   r!   r3   r3   r4   Ú_manifest_normalize&  s    
z"manifest_maker._manifest_normalizec                sB   ˆ j  ¡  ‡ fdd„ˆ j jD ƒ}dˆ j }ˆ  tˆ j|f|¡ dS )zo
        Write the file list in 'self.filelist' to the manifest file
        named by 'self.manifest'.
        c                s   g | ]}ˆ   |¡‘qS r3   )rÏ   )r³   r‚   )r9   r3   r4   r´   2  s    z1manifest_maker.write_manifest.<locals>.<listcomp>zwriting manifest file '%s'N)r   rÁ   r®   r   Úexecuters   )r9   r®   Úmsgr3   )r9   r4   rÇ   *  s    

zmanifest_maker.write_manifestc             C   s   |   |¡st | |¡ d S )N)Ú_should_suppress_warningr   ru   )r9   rÑ   r3   r3   r4   ru   6  s    
zmanifest_maker.warnc             C   s   t  d| ¡S )z;
        suppress missing-file warnings from sdist
        zstandard file .*not found)r#   r·   )rÑ   r3   r3   r4   rÒ   :  s    z'manifest_maker._should_suppress_warningc             C   sŒ   t  | ¡ | j | j¡ | j | j¡ ttƒ ƒ}|rB| j |¡ nt	j
 | j¡rX|  ¡  t	j
 d¡rp| j d¡ |  d¡}| j |j¡ d S )Nzsetup.pyrJ   )r   rÈ   r   r¾   rÉ   r   r^   r   rµ   r    r!   rt   Zread_manifestÚget_finalized_commandr™   rJ   )r9   ZrcfilesZei_cmdr3   r3   r4   rÈ   A  s    


zmanifest_maker.add_defaultsc             C   s8   | j jjpg }x|D ]}t d|¡ qW | j |¡ d S )Nzadding license file '%s')r7   ri   Úlicense_filesr   r|   r   rµ   )r9   rÔ   Úlfr3   r3   r4   rÊ   S  s
    
z manifest_maker.add_license_filesc             C   sZ   |   d¡}| j ¡ }| j |j¡ | j |¡ t tj	¡}| jj
d| d | dd d S )NÚbuildz(^|z)(RCS|CVS|\.svn)r   )Zis_regex)rÓ   r7   Úget_fullnamer   rš   Ú
build_baser#   r$   r    r"   Zexclude_pattern)r9   rÖ   Úbase_dirr"   r3   r3   r4   rË   Z  s    

zmanifest_maker.prune_file_listN)rF   rG   rH   rÉ   rS   rr   r   rÏ   rÇ   ru   ÚstaticmethodrÒ   rÈ   rÊ   rË   r3   r3   r3   r4   rŽ     s   rŽ   c          	   C   s8   d  |¡}| d¡}t| dƒ}| |¡ W dQ R X dS )z{Create a file with the specified name and write 'contents' (a
    sequence of strings without line terminators) to it.
    Ú
zutf-8r{   N)rg   r}   r   r€   )rY   Úcontentsr‚   r3   r3   r4   rs   d  s    

rs   c          	   C   s|   t  d|¡ | jsx| jj}| j|j |_}| j|j |_}z| 	| j
¡ W d || |_|_X t| jdd ƒ}t | j
|¡ d S )Nz
writing %sZzip_safe)r   r|   r~   r7   ri   rQ   r@   rP   r:   Úwrite_pkg_inforJ   Úgetattrr
   Zwrite_safety_flag)ÚcmdÚbasenamerY   ri   ZoldverZoldnameÚsafer3   r3   r4   rÝ   q  s    rÝ   c             C   s   t j |¡rt d¡ d S )NzsWARNING: 'depends.txt' is not used by setuptools 0.6!
Use the install_requires/extras_require setup() args instead.)r    r!   rt   r   ru   )rß   rà   rY   r3   r3   r4   Úwarn_depends_obsolete„  s    râ   c             C   s,   t |pdƒ}dd„ }t||ƒ}|  |¡ d S )Nr3   c             S   s   | d S )NrÛ   r3   )r§   r3   r3   r4   Ú	append_cr  s    z&_write_requirements.<locals>.append_cr)r   ÚmapÚ
writelines)ÚstreamÚreqsÚlinesrã   r3   r3   r4   Ú_write_requirementsŒ  s    
ré   c             C   sn   | j }t ¡ }t||jƒ |jp"i }x2t|ƒD ]&}| djf t	ƒ Ž¡ t||| ƒ q.W |  
d|| ¡ ¡ d S )Nz
[{extra}]
Úrequirements)r7   ÚioÚStringIOré   Zinstall_requiresÚextras_requireÚsortedr€   r¤   Úvarsrz   Úgetvalue)rß   rà   rY   Údistrx   rí   Úextrar3   r3   r4   Úwrite_requirements•  s    
ró   c             C   s,   t  ¡ }t|| jjƒ |  d|| ¡ ¡ d S )Nzsetup-requirements)rë   rì   ré   r7   Zsetup_requiresrz   rð   )rß   rà   rY   rx   r3   r3   r4   Úwrite_setup_requirements   s    rô   c             C   s:   t  dd„ | j ¡ D ƒ¡}|  d|d t|ƒ¡d ¡ d S )Nc             S   s   g | ]}|  d d¡d ‘qS )Ú.r   r   )r   )r³   Úkr3   r3   r4   r´   ©  s   z(write_toplevel_names.<locals>.<listcomp>ztop-level namesrÛ   )rX   Úfromkeysr7   Ziter_distribution_namesrs   rg   rî   )rß   rà   rY   Úpkgsr3   r3   r4   Úwrite_toplevel_names¦  s    rù   c             C   s   t | ||dƒ d S )NT)Ú	write_arg)rß   rà   rY   r3   r3   r4   Úoverwrite_arg°  s    rû   Fc             C   sH   t j |¡d }t| j|d ƒ}|d k	r4d |¡d }|  ||||¡ d S )Nr   rÛ   )r    r!   ÚsplitextrÞ   r7   rg   rz   )rß   rà   rY   ry   ÚargnamerU   r3   r3   r4   rú   ´  s
    rú   c             C   s¤   | j j}t|tƒs|d kr |}np|d k	rg }xXt| ¡ ƒD ]H\}}t|tƒspt ||¡}d tt	t| 
¡ ƒƒ¡}| d||f ¡ q:W d |¡}|  d||d¡ d S )NrÛ   z	[%s]
%s

r   zentry pointsT)r7   Úentry_pointsr\   Ústrrî   Úitemsr   Úparse_grouprg   rä   Úvaluesr¾   rz   )rß   rà   rY   rŠ   rx   ÚsectionrÜ   r3   r3   r4   Úwrite_entries¼  s    

r  c           	   C   s^   t  dt¡ tj d¡rZt d¡2} x*| D ]"}t 	d|¡}|r*t
| d¡ƒS q*W W dQ R X dS )zd
    Get a -r### off of PKG-INFO Version in case this is an sdist of
    a subversion revision.
    z$get_pkg_info_revision is deprecated.zPKG-INFOzVersion:.*-r(\d+)\s*$r   Nr   )Úwarningsru   ÚEggInfoDeprecationWarningr    r!   rt   rë   r   r#   r·   ÚintÚgroup)r‚   r§   r·   r3   r3   r4   Úget_pkg_info_revisionÍ  s    
r	  c               @   s   e Zd ZdZdS )r  z?Deprecated behavior warning for EggInfo, bypassing suppression.N)rF   rG   rH   Ú__doc__r3   r3   r3   r4   r  Ý  s   r  )F);r
  Údistutils.filelistr   Z	_FileListÚdistutils.errorsr   Údistutils.utilr   r`   r   rŸ   r    r#   rÅ   rë   r  rC   rV   Ú
setuptoolsr   Zsetuptools.command.sdistr   r   Zsetuptools.command.setoptr	   Zsetuptools.commandr
   Úpkg_resourcesr   r   r   r   r   r   r   r   Zsetuptools.unicode_utilsrÂ   Zsetuptools.globr   Zsetuptools.externr   r   r5   r6   rJ   rŽ   rs   rÝ   râ   ré   ró   rô   rù   rû   rú   r  r	  r  r3   r3   r3   r4   Ú<module>   sV   (S 1 IW	

