3
yYði7  ã               @   s~   d dl mZ d dljj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 jdƒD ] }x|jƒ | ƒ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-build-ue6tjl93/setuptools/setuptools/command/sdist.pyÚwalk_revctrl   s    r   c                   sô   e Zd ZdZd0d2d3g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d4k p®d5ej  ko�d6k n  p®d7ej  koªd8k 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‡  ZS )9Úsdistz=Smart sdist that finds anything supported by revision controlúformats=Nú6formats for source distribution (comma-separated list)ú	keep-tempÚkz1keep the distribution tree around after creating zarchive file(s)ú	dist-dir=ÚdúFdirectory to put the source distribution archive(s) in [default: dist]r   z.rstz.txtz.mdc             c   s   | ]}d j |ƒV  qdS )z	README{0}N)Úformat)Ú.0Úextr   r   r   ú	<genexpr>)   s    zsdist.<genexpr>c             C   sž   | j dƒ | jdƒ}|j| _| jjtjj|jdƒƒ | jƒ  x| j	ƒ D ]}| j |ƒ qFW | j
ƒ  t| jdg ƒ}x*| jD ] }dd|f}||krv|j|ƒ 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j| ƒ | jƒ  d S )N)Úorigr   Úinitialize_optionsÚ_default_to_gztar)r*   r   r   r   r0   >   s    zsdist.initialize_optionsc             C   s   t jdkrd S dg| _d S )Né   é   r   Úbetar   Úgztar)r2   r3   r   r4   r   )ÚsysÚversion_infoÚformats)r*   r   r   r   r1   C   s    
zsdist._default_to_gztarc          	   C   s$   | j ƒ � tj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   r=   ÚlinkN)r(   r"   r>   Ú	ExceptionÚsetattr)r=   Zorig_valr   r   r   r9   P   s    
zsdist._remove_os_linkc             C   sL   yt jj| ƒ W n6 tk
rF   tjƒ \}}}|jjjd j	ƒ  ‚ Y nX d S )NÚtemplate)
r/   r   Úread_templater?   r6   Úexc_infoÚtb_nextÚtb_frameÚf_localsÚclose)r*   Ú_Útbr   r   r   Z__read_template_hacke   s    zsdist.__read_template_hacké   é   r2   r   r   é   c                sb   | j jƒ r^| jdƒ}| jj|jƒ ƒ | j js^x0|jD ]&\}‰ }}| jj‡ fdd„|D ƒƒ q4W dS )zgetting python filesÚbuild_pyc                s   g | ]}t j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*   rM   rH   Ú	filenamesr   )rO   r   Ú_add_defaults_python|   s    

zsdist._add_defaults_pythonc                sD   y t jrtj| ƒ n
tƒ jƒ  W n tk
r>   tj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   rW   Š   s    zsdist._add_defaults_data_filesc             C   s:   x4| j D ]}tjj|ƒrd S qW | jddj| j ƒ ƒ d S )Nz,standard file not found: should have one of z, )ÚREADMESr"   r#   ÚexistsrZ   r$   )r*   Úfr   r   r   r%   “   s    zsdist.check_readmec             C   s^   t jj| ||ƒ tjj|dƒ}ttdƒrJtjj|ƒrJtj|ƒ | j	d|ƒ | j
dƒj|ƒ d S )Nz	setup.cfgr>   r   )r/   r   Úmake_release_treer"   r#   r$   Úhasattrr]   ÚunlinkÚ	copy_filer   Zsave_version_info)r*   Úbase_dirÚfilesÚdestr   r   r   r_   �   s    
zsdist.make_release_treec          	   C   s@   t jj| jƒsdS tj| jdƒ�}|jƒ }W d Q R X |djƒ 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 jd| jƒ t| jdƒ}xl|D ]d}tjr^y|jdƒ}W n$ tk
r\   t jd| ƒ w Y nX |j	ƒ }|j
dƒs | rxq | jj|ƒ q W |jƒ  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'rf   zUTF-8z"%r not UTF-8 decodable -- skippingú#N)r   Úinforh   rj   r   ÚPY3ÚdecodeÚUnicodeDecodeErrorrZ   ÚstripÚ
startswithr    r!   rG   )r*   rh   Úliner   r   r   Úread_manifest´   s    
zsdist.read_manifest)r   Nr   ú@keep the distribution tree around after creating archive file(s))r   r   ry   )r   r   r   )rJ   rK   rJ   )r2   r   )r2   r   rL   )r2   rJ   )r2   rJ   r   )r:   r;   r<   Ú__doc__Úuser_optionsÚnegative_optZREADME_EXTENSIONSÚtupler\   r.   r0   r1   r'   ÚstaticmethodÚ
contextlibÚcontextmanagerr9   Z_sdist__read_template_hackr6   r7   Zhas_leaky_handlerB   rU   rW   r%   r_   ro   rx   Ú__classcell__r   r   )r[   r   r      s:       
	

r   )r   )Ú	distutilsr   Zdistutils.command.sdistÚcommandr   r/   r"   r6   ri   r   Zsetuptools.externr   Z
py36compatr   r   ÚlistZ_default_revctrlr   r   r   r   r   Ú<module>   s   
