B
    ià¿a  ã               @   sx   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ZeZd
dd„ZG dd	„ d	eejƒZdS )é    )ÚlogNé   )Ú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_resourcesZiter_entry_pointsÚload)ÚdirnameZepÚitem© r
   ú7lib/python3.7/site-packages/setuptools/command/sdist.pyÚwalk_revctrl   s    r   c                   sÆ   e Zd ZdZdd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‡ fdd„Zdd„ Zdd„ Zdd„ Z‡ f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])zowner=Úuz@Owner name used when creating a tar file [default: current user])zgroup=ÚgzAGroup name used when creating a tar file [default: current group]r   z.rstz.txtz.mdc             c   s   | ]}d   |¡V  qdS )z	README{0}N)Úformat)Ú.0Z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   )Zrun_commandÚget_finalized_commandÚfilelistÚappendÚosÚpathÚjoinr   Úcheck_readmeZget_sub_commandsÚmake_distributionÚgetattrÚdistributionZarchive_files)ÚselfZei_cmdZ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   Zbetar   Zgztar)ÚsysÚversion_infoZformats)r!   r
   r
   r   r'   E   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   K   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   ÚNoValueY   s   r0   ÚlinkN)r   r   r1   Ú	ExceptionÚsetattr)r0   Zorig_valr
   r
   r   r,   R   s    
zsdist._remove_os_linkc                s&   t ƒ  ¡  tj d¡r"| j d¡ d S )Nzpyproject.toml)ÚsuperÚ_add_defaults_optionalr   r   Úisfiler   r   )r!   )Ú	__class__r
   r   r5   g   s    
zsdist._add_defaults_optionalc             C   s8   | j  ¡ r4|  d¡}| j | ¡ ¡ |  |  |¡¡ dS )zgetting python filesÚbuild_pyN)r    Zhas_pure_modulesr   r   ÚextendZget_source_filesÚ_add_data_filesÚ_safe_data_files)r!   r8   r
   r
   r   Ú_add_defaults_pythonl   s    

zsdist._add_defaults_pythonc             C   s   |j S )að  
        Since the ``sdist`` class is also used to compute the MANIFEST
        (via :obj:`setuptools.command.egg_info.manifest_maker`),
        there might be recursion problems when trying to obtain the list of
        data_files and ``include_package_data=True`` (which in turn depends on
        the files included in the MANIFEST).

        To avoid that, ``manifest_maker`` should be able to overwrite this
        method and avoid recursive attempts to build/analyze the MANIFEST.
        )Ú
data_files)r!   r8   r
   r
   r   r;   s   s    zsdist._safe_data_filesc             C   s   | j  dd„ |D ƒ¡ dS )zA
        Add data files as found in build_py.data_files.
        c             s   s.   | ]&\}}}}|D ]}t j ||¡V  qqd S )N)r   r   r   )r   Ú_Zsrc_dirÚ	filenamesÚnamer
   r
   r   r   …   s   
z(sdist._add_data_files.<locals>.<genexpr>N)r   r9   )r!   r=   r
   r
   r   r:   €   s    zsdist._add_data_filesc                s2   yt ƒ  ¡  W n tk
r,   t d¡ Y nX d S )Nz&data_files contains unexpected objects)r4   Ú_add_defaults_data_filesÚ	TypeErrorr   Úwarn)r!   )r7   r
   r   rA   Š   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   ÚexistsrC   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.cfgr1   r   )r%   r   Úmake_release_treer   r   r   ÚhasattrrE   ÚunlinkZ	copy_filer   Zsave_version_info)r!   Zbase_dirÚfilesÚdestr
   r
   r   rG   š   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   r6   ÚmanifestÚioÚopenÚreadlineÚencode)r!   ÚfpZ
first_liner
   r
   r   Ú_manifest_is_not_generated§   s    z sdist._manifest_is_not_generatedc          	   C   sŒ   t  d| j¡ t| jdƒ}xd|D ]\}y| d¡}W n$ tk
rV   t  d| ¡ w Y nX | ¡ }| d¡s |spq | 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'rL   zUTF-8z"%r not UTF-8 decodable -- skippingú#N)r   ÚinforM   rO   ÚdecodeÚUnicodeDecodeErrorrC   ÚstripÚ
startswithr   r   Úclose)r!   rM   Úliner
   r
   r   Úread_manifest±   s    
zsdist.read_manifest)r-   r.   r/   Ú__doc__Zuser_optionsZnegative_optZREADME_EXTENSIONSÚtuplerD   r$   r&   r'   r   ÚstaticmethodÚ
contextlibÚcontextmanagerr,   r5   r<   r;   r:   rA   r   rG   rS   r\   Ú__classcell__r
   r
   )r7   r   r      s0   


r   )r   )Z	distutilsr   Zdistutils.command.sdistZcommandr   r%   r   r*   rN   r`   Z
py36compatr   r   ÚlistZ_default_revctrlr   r
   r
   r
   r   Ú<module>   s   
