B
    ãUvgÜ  ã               @   s„   d dl mZ d dlm  m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ZeZddd„ZG d	d
„ d
eejƒZdS )é    )ÚlogN)Úsixé   )Úsdist_add_defaultsÚ c             c   s4   x.t  d¡D ] }x| ¡ | ƒD ]
}|V  qW qW dS )z%Find all files under revision controlzsetuptools.file_findersN)Úpkg_resourcesÚiter_entry_pointsÚload)ÚdirnameÚepÚitem© r   ú@/tmp/pip-install-r_9ig3yj/setuptools/setuptools/command/sdist.pyÚwalk_revctrl   s    r   c                   sü   e Zd ZdZdddgZi ZddddgZed	d
„ eD ƒƒZdd„ Z	dd„ Z
dd„ Zdd„ Zeejdd„ ƒƒZdd„ Zejdk p®dej  kodk n  p®dej  koªdk n  Zer¸eZdd„ Z‡ fdd„Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Z‡  ZS )*Úsdistz=Smart sdist that finds anything supported by revision control)zformats=Nz6formats for source distribution (comma-separated list))z	keep-tempÚkz@keep the distribution tree around after creating archive file(s))z	dist-dir=ÚdzFdirectory to put the source distribution archive(s) in [default: dist]r   z.rstz.txtz.mdc             c   s   | ]}d   |¡V  qdS )z	README{0}N)Úformat)Ú.0Úextr   r   r   ú	<genexpr>)   s    zsdist.<genexpr>c             C   sž   |   d¡ |  d¡}|j| _| j tj |jd¡¡ |  ¡  x|  	¡ D ]}|   |¡ qFW |  
¡  t| jdg ƒ}x*| jD ] }dd|f}||krv| |¡ qvW d S )NÚegg_infozSOURCES.txtÚ
dist_filesr   r   )Úrun_commandÚget_finalized_commandÚfilelistÚappendÚosÚpathÚjoinr   Úcheck_readmeÚget_sub_commandsÚmake_distributionÚgetattrÚdistributionZarchive_files)ÚselfZei_cmdÚcmd_namer   ÚfileÚdatar   r   r   Úrun+   s    


z	sdist.runc             C   s   t j | ¡ |  ¡  d S )N)Úorigr   Úinitialize_optionsÚ_default_to_gztar)r%   r   r   r   r+   >   s    zsdist.initialize_optionsc             C   s   t jdkrd S dg| _d S )N)é   é   r   Úbetar   Úgztar)ÚsysÚversion_infoÚformats)r%   r   r   r   r,   C   s    
zsdist._default_to_gztarc          	   C   s$   |   ¡  tj | ¡ W dQ R X dS )z%
        Workaround for #516
        N)Ú_remove_os_linkr*   r   r"   )r%   r   r   r   r"   I   s    
zsdist.make_distributionc           
   c   s^   G dd„ dƒ} t td| ƒ}yt`W n tk
r6   Y nX z
dV  W d|| k	rXttd|ƒ X dS )zG
        In a context, remove and restore os.link if it exists
        c               @   s   e Zd ZdS )z&sdist._remove_os_link.<locals>.NoValueN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚNoValueW   s   r8   ÚlinkN)r#   r   r9   Ú	ExceptionÚsetattr)r8   Zorig_valr   r   r   r4   P   s    
zsdist._remove_os_linkc             C   sL   yt j | ¡ W n6 tk
rF   t ¡ \}}}|jjjd  	¡  ‚ Y nX d S )NÚtemplate)
r*   r   Úread_templater:   r1   Úexc_infoÚtb_nextÚtb_frameÚf_localsÚclose)r%   Ú_Útbr   r   r   Z__read_template_hacke   s    zsdist.__read_template_hack)é   é   rE   )r-   r   )r-   r   é   )r-   rE   )r-   rE   r   c                sb   | j  ¡ r^|  d¡}| j | ¡ ¡ | j js^x0|jD ]&\}‰ }}| j ‡ fdd„|D ƒ¡ q4W dS )zgetting python filesÚbuild_pyc                s   g | ]}t j ˆ |¡‘qS r   )r   r   r   )r   Úfilename)Úsrc_dirr   r   ú
<listcomp>‡   s   z.sdist._add_defaults_python.<locals>.<listcomp>N)r$   Úhas_pure_modulesr   r   ÚextendZget_source_filesZinclude_package_dataÚ
data_files)r%   rH   rC   Ú	filenamesr   )rJ   r   Ú_add_defaults_python|   s    

zsdist._add_defaults_pythonc                sD   y t jrt | ¡ n
tƒ  ¡  W n tk
r>   t d¡ Y nX d S )Nz&data_files contains unexpected objects)r   ÚPY2r   Ú_add_defaults_data_filesÚsuperÚ	TypeErrorr   Úwarn)r%   )Ú	__class__r   r   rR   Š   s    zsdist._add_defaults_data_filesc             C   s:   x4| j D ]}tj |¡rd S qW |  dd | j ¡ ¡ d S )Nz,standard file not found: should have one of z, )ÚREADMESr   r   ÚexistsrU   r   )r%   Úfr   r   r   r    “   s    zsdist.check_readmec             C   s^   t j | ||¡ tj |d¡}ttdƒrJtj |¡rJt |¡ |  	d|¡ |  
d¡ |¡ d S )Nz	setup.cfgr9   r   )r*   r   Úmake_release_treer   r   r   ÚhasattrrX   ÚunlinkÚ	copy_filer   Zsave_version_info)r%   Úbase_dirÚfilesÚdestr   r   r   rZ      s    
zsdist.make_release_treec          	   C   s@   t j | j¡sdS t | jd¡}| ¡ }W d Q R X |d ¡ kS )NFÚrbz+# file GENERATED by distutils, do NOT edit
)r   r   ÚisfileÚmanifestÚioÚopenÚreadlineÚencode)r%   ÚfpÚ
first_liner   r   r   Ú_manifest_is_not_generatedª   s    z sdist._manifest_is_not_generatedc          	   C   s’   t  d| j¡ t| jdƒ}xj|D ]b}tjr^y| d¡}W n$ tk
r\   t  d| ¡ w Y nX | 	¡ }| 
d¡s |svq | j |¡ q W | ¡  dS )zªRead the manifest file (named by 'self.manifest') and use it to
        fill in 'self.filelist', the list of files to include in the source
        distribution.
        zreading manifest file '%s'ra   zUTF-8z"%r not UTF-8 decodable -- skippingú#N)r   Úinforc   re   r   ÚPY3ÚdecodeÚUnicodeDecodeErrorrU   ÚstripÚ
startswithr   r   rB   )r%   rc   Úliner   r   r   Úread_manifest´   s    
zsdist.read_manifestc             C   s^   | j  d¡}| dd¡\}}|dkr2t d¡ dS tj |¡sNt d|¡ dS | j	 
|¡ dS )zyChecks if license_file' is configured and adds it to
        'self.filelist' if the value contains a valid path.
        ÚmetadataÚlicense_file)NNNz''license_file' option was not specifiedz8warning: Failed to find the configured license file '%s')r$   Úget_option_dictÚgetr   Údebugr   r   rX   rU   r   r   )r%   ÚoptsrC   ru   r   r   r   Úcheck_licenseÊ   s    
zsdist.check_license)r5   r6   r7   Ú__doc__Úuser_optionsÚnegative_optZREADME_EXTENSIONSÚtuplerW   r)   r+   r,   r"   ÚstaticmethodÚ
contextlibÚcontextmanagerr4   Z_sdist__read_template_hackr1   r2   Zhas_leaky_handler=   rP   rR   r    rZ   rj   rs   rz   Ú__classcell__r   r   )rV   r   r      s4   
	

r   )r   )Ú	distutilsr   Zdistutils.command.sdistÚcommandr   r*   r   r1   rd   r€   Zsetuptools.externr   Z
py36compatr   r   ÚlistZ_default_revctrlr   r   r   r   r   Ú<module>   s   
