3

g                 @   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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ordered_set   )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-unpacked-wheel-2ahgb425/setuptools/command/sdist.pywalk_revctrl   s    r   c                   s  e Zd ZdZd8d: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 pd=ej  kod>k n  pd?ej  kod@k n  ZereZ fd$d%Zd&d' Zd(d) Zd*d+ Z fd,d-Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Z  Z S )Asdistz=Smart sdist that finds anything supported by revision controlformats=N6formats for source distribution (comma-separated list)	keep-tempkz1keep the distribution tree around after creating zarchive file(s)	dist-dir=dFdirectory 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   r1   >   s    zsdist.initialize_optionsc             C   s   t jdkrd S dg| _d S )N      r   betar   gztar)r3   r4   r   r5   r   )sysversion_infoformats)r+   r   r   r   r2   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_linkr0   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   r:   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)
r0   r   read_templater@   r7   exc_infotb_nexttb_framef_localsclose)r+   _tbr   r   r   Z__read_template_hacke   s    zsdist.__read_template_hack      r3   r   r      c                s8   t jrtj|  n
t j  tjjdr4| jj	d d S )Nzpyproject.toml)
r   PY2r   _add_defaults_optionalsuperr#   r$   isfiler!   r"   )r+   )	__class__r   r   rO   |   s
    
zsdist._add_defaults_optionalc             C   s8   | j j r4| jd}| jj|j  | j| j| dS )zgetting python filesbuild_pyN)r*   has_pure_modulesr    r!   extendZget_source_files_add_data_files_safe_data_files)r+   rS   r   r   r   _add_defaults_python   s    

zsdist._add_defaults_pythonc             C   s   | j jrf S |jS )z
        Extracting data_files from build_py is known to cause
        infinite recursion errors when `include_package_data`
        is enabled, so suppress it in that case.
        )r*   Zinclude_package_data
data_files)r+   rS   r   r   r   rW      s    zsdist._safe_data_filesc             C   s   | j jdd |D  dS )zA
        Add data files as found in build_py.data_files.
        c             s   s.   | ]&\}}}}|D ]}t jj||V  qqd S )N)r#   r$   r%   )r   rI   src_dir	filenamesnamer   r   r   r      s   
z(sdist._add_data_files.<locals>.<genexpr>N)r!   rU   )r+   rY   r   r   r   rV      s    zsdist._add_data_filesc                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   rN   r   _add_defaults_data_filesrP   	TypeErrorr   warn)r+   )rR   r   r   r]      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$   existsr_   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   )r0   r   make_release_treer#   r$   r%   hasattrra   unlink	copy_filer    Zsave_version_info)r+   base_dirfilesdestr   r   r   rc      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$   rQ   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s^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 )zRead 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'rj   zUTF-8z"%r not UTF-8 decodable -- skipping#N)r   infork   rm   r   rN   decodeUnicodeDecodeErrorr_   strip
startswithr!   r"   rH   )r+   rk   liner   r   r   read_manifest   s    
zsdist.read_manifestc             C   s   t j }| jjd}|jdd\}}|dkr8tjd n
|j| y|j| jj	j
 W n tk
rt   tjd Y nX x.|D ]&}tjj|s|tjd| |j| q|W | jj| dS )zvChecks if license_file' or 'license_files' is configured and adds any
        valid paths to 'self.filelist'.
        metadatalicense_fileNz''license_file' option was not specifiedz,warning: 'license_files' option is malformedz8warning: Failed to find the configured license file '%s')NN)r   Z
OrderedSetr*   get_option_dictgetr   debugaddupdater{   Zlicense_filesr^   r_   r#   r$   ra   remover!   rU   )r+   rh   optsrI   r|   rb   r   r   r   check_license   s"    

zsdist.check_license)r   Nr   @keep the distribution tree around after creating archive file(s))r   r   r   )r   r   r   )rK   rL   rK   )r3   r   )r3   r   rM   )r3   rK   )r3   rK   r   )!r;   r<   r=   __doc__user_optionsnegative_optZREADME_EXTENSIONStupler`   r/   r1   r2   r(   staticmethod
contextlibcontextmanagerr:   Z_sdist__read_template_hackr7   r8   Zhas_leaky_handlerC   rO   rX   rW   rV   r]   r&   rc   rr   rz   r   __classcell__r   r   )rR   r   r      sB       


	

r   )r   )	distutilsr   Zdistutils.command.sdistcommandr   r0   r#   r7   rl   r   Zsetuptools.externr   r   Z
py36compatr   r   listZ_default_revctrlr   r   r   r   r   <module>   s   
