U
    BªShŠ  ã                   @   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mZ d dlZeZddd	„ZG d
d„ deejƒZdS )é    )ÚlogN)Úiglob)Úordered_seté   )Úsdist_add_defaultsÚ c                 c   s,   t  d¡D ]}| ¡ | ƒD ]
}|V  qq
dS )z%Find all files under revision controlzsetuptools.file_findersN)Úpkg_resourcesÚiter_entry_pointsÚload)ÚdirnameÚepÚitem© r   úK/root/rtd-docs/venv/lib/python3.8/site-packages/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‡ 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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¡¡ |  ¡  |  	¡ D ]}|   |¡ qD|  
¡  t| jdg ƒ}| jD ] }dd|f}||krp| |¡ qpd 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Úformatsr/   r   r   r   r.   D   s    
zsdist._default_to_gztarc              	   C   s$   |   ¡  tj | ¡ W 5 Q R X dS )z%
        Workaround for #516
        N)Ú_remove_os_linkr,   r   r#   r/   r   r   r   r#   J   s    
zsdist.make_distributionc               
   c   s^   G dd„ dƒ} t td| ƒ}zt`W n tk
r6   Y nX z
dV  W 5 || 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   ÚNoValueX   s   r;   ÚlinkN)r$   r   r<   Ú	ExceptionÚsetattr)r;   Zorig_valr   r   r   r7   Q   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   r@   f   s    
zsdist._add_defaults_optionalc                 C   s8   | j  ¡ r4|  d¡}| 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&   rD   r   r   r   Ú_add_defaults_pythonk   s    

zsdist._add_defaults_pythonc                 C   s   | j jrd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   )r%   Zinclude_package_dataÚ
data_filesrI   r   r   r   rH   r   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 r+   )r   r   r    )r   Ú_Úsrc_dirÚ	filenamesÚnamer   r   r   r   €   s   
 þz(sdist._add_data_files.<locals>.<genexpr>N)r   rF   )r&   rK   r   r   r   rG   |   s    þzsdist._add_data_filesc                    s2   zt ƒ  ¡  W n tk
r,   t d¡ Y nX d S )Nz&data_files contains unexpected objects)r?   Ú_add_defaults_data_filesÚ	TypeErrorr   Úwarnr/   rB   r   r   rP   †   s    zsdist._add_defaults_data_filesc                 C   s8   | j D ]}tj |¡r d S q|  dd | j ¡ ¡ d S )Nz,standard file not found: should have one of z, )ÚREADMESr   r   ÚexistsrR   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.cfgr<   r   )r,   r   Úmake_release_treer   r   r    ÚhasattrrT   ÚunlinkÚ	copy_filer   Zsave_version_info)r&   Úbase_dirÚfilesÚdestr   r   r   rV   –   s    
zsdist.make_release_treec              	   C   s@   t j | j¡sdS t | jd¡}| ¡ }W 5 Q R X |d ¡ kS )NFÚrbz+# file GENERATED by distutils, do NOT edit
)r   r   rA   Ú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ƒ}|D ]^}z| d¡}W n& tk
rV   t  d| ¡ Y qY nX | ¡ }| d¡s|spq| j	 
|¡ q| ¡  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'r]   zUTF-8z"%r not UTF-8 decodable -- skippingú#N)r   Úinfor^   r`   ÚdecodeÚUnicodeDecodeErrorrR   ÚstripÚ
startswithr   r   Úclose)r&   r^   Úliner   r   r   Úread_manifest­   s    
zsdist.read_manifestc                 C   s  | j  d¡}t ¡ }z| j jj}W n& tk
rH   t d¡ t ¡ }Y nX t	|tjƒrZ|nt |¡}d|krˆt d¡ | 
|d d ¡ d|krœd|krœd}|D ]V}t|ƒD ]H}| d¡rÈt d	|¡ q¬||kr¬tj |¡r¬t d
||¡ | |¡ q¬q | j t|ƒ¡ dS )zvChecks if license_file' or 'license_files' is configured and adds any
        valid paths to 'self.filelist'.
        Úmetadataz,warning: 'license_files' option is malformedZlicense_filezMwarning: the 'license_file' option is deprecated, use 'license_files' insteadr   Úlicense_files)zLICEN[CS]E*zCOPYING*zNOTICE*zAUTHORS*ú~z4ignoring license file '%s' as it looks like a backupz/adding license file '%s' (matched pattern '%s')N)r%   Úget_option_dictr   Z
OrderedSetro   rp   rQ   r   rR   Ú
isinstancer   r   ÚendswithÚdebugr   r   rA   rg   Úaddr   rF   Úsorted)r&   Úoptsr[   rp   ÚpatternsÚpatternr   r   r   r   Úcheck_licenseÂ   sB    
ÿÿ
þ þzsdist.check_license)r8   r9   r:   Ú__doc__Úuser_optionsÚnegative_optZREADME_EXTENSIONSÚtuplerS   r*   r-   r.   r#   ÚstaticmethodÚ
contextlibÚcontextmanagerr7   r@   rJ   rH   rG   rP   r!   rV   re   rn   r{   Ú__classcell__r   r   rB   r   r      s2   ú



r   )r   )Ú	distutilsr   Zdistutils.command.sdistÚcommandr   r,   r   r4   r_   r   Úglobr   Zsetuptools.externr   Z
py36compatr   r   ÚlistZ_default_revctrlr   r   r   r   r   Ú<module>   s   
