a
    åze=J  ã                   @   s´   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mZ d dlm	Z	 d dlm
Z
 d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZ dd„ ZG dd„ deƒZdS )é    N)Úglob)Úwarn)ÚCommand)Údir_util)Ú	file_util)Úarchive_util)ÚTextFile)ÚFileList)Úlog)Úconvert_path)ÚDistutilsTemplateErrorÚDistutilsOptionErrorc                  C   s`   ddl m}  ddlm} g }| ¡ D ] }| d| d || d f¡ q$| ¡  | |ƒ d¡ d S )Nr   )ÚFancyGetopt)ÚARCHIVE_FORMATSúformats=é   z.List of available source distribution formats:)Zdistutils.fancy_getoptr   Zdistutils.archive_utilr   ÚkeysÚappendÚsortÚ
print_help)r   r   ÚformatsÚformat© r   ú-/usr/lib/python3.9/distutils/command/sdist.pyÚshow_formats   s    
ÿÿr   c                   @   s  e Zd ZdZdd„ Zg d¢Zg d¢ZdddefgZd	d
dœZ	defgZ
dZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Z d6d7„ Z!d8d9„ Z"dS ):Úsdistz6create a source distribution (tarball, zip file, etc.)c                 C   s   | j S ©N)Úmetadata_check©Úselfr   r   r   Úchecking_metadata(   s    zsdist.checking_metadata))z	template=Útz5name of manifest template file [default: MANIFEST.in])z	manifest=Úmz)name of manifest file [default: MANIFEST])úuse-defaultsNzRinclude the default file set in the manifest [default; disable with --no-defaults])úno-defaultsNz"don't include the default file set)ÚpruneNz‰specifically exclude files/directories that should not be distributed (build tree, RCS/CVS dirs, etc.) [default; disable with --no-prune])úno-pruneNz$don't automatically exclude anything)úmanifest-onlyÚozEjust regenerate the manifest and then stop (implies --force-manifest))úforce-manifestÚfzkforcibly regenerate the manifest and carry on as usual. Deprecated: now the manifest is always regenerated.)r   Nz6formats for source distribution (comma-separated list))ú	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])úmetadata-checkNz[Ensure that all required elements of meta-data are supplied. Warn if any missing. [default])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#   r%   r'   r)   r+   r.   zhelp-formatsNz#list available distribution formatsr#   r%   )r$   r&   Úcheck)ZREADMEz
README.txtz
README.rstc                 C   sT   d | _ d | _d| _d| _d| _d| _dg| _d| _d | _d | _	d| _
d | _d | _d S )Né   r   Úgztar)ÚtemplateÚmanifestÚuse_defaultsr%   Úmanifest_onlyZforce_manifestr   Ú	keep_tempÚdist_dirÚarchive_filesr   ÚownerÚgroupr   r   r   r   Úinitialize_optionse   s    zsdist.initialize_optionsc                 C   sZ   | j d u rd| _ | jd u r d| _|  d¡ t | j¡}|rFtd| ƒ‚| jd u rVd| _d S )NZMANIFESTzMANIFEST.inr   zunknown archive format '%s'Údist)r5   r4   Zensure_string_listr   Zcheck_archive_formatsr   r   r9   )r   Z
bad_formatr   r   r   Úfinalize_options|   s    


ÿ
zsdist.finalize_optionsc                 C   s>   t ƒ | _|  ¡ D ]}|  |¡ q|  ¡  | jr2d S |  ¡  d S r   )r	   ÚfilelistZget_sub_commandsZrun_commandÚget_file_listr7   Úmake_distribution)r   Zcmd_namer   r   r   ÚrunŒ   s    z	sdist.runc                 C   s*   t dtƒ | j d¡}| ¡  | ¡  d S )Nzadistutils.command.sdist.check_metadata is deprecated,               use the check command insteadr1   )r   ÚPendingDeprecationWarningÚdistributionZget_command_objZensure_finalizedrC   )r   r1   r   r   r   Úcheck_metadata¢   s    ÿzsdist.check_metadatac                 C   s    t j | j¡}|s:|  ¡ r:|  ¡  | j ¡  | j ¡  d S |sN|  	d| j ¡ | j 
¡  | jrf|  ¡  |rr|  ¡  | jr€|  ¡  | j ¡  | j ¡  |  ¡  d S )Nz?manifest template '%s' does not exist (using default file list))ÚosÚpathÚisfiler4   Ú_manifest_is_not_generatedÚread_manifestr@   r   Zremove_duplicatesr   Úfindallr6   Úadd_defaultsÚread_templater%   Úprune_file_listÚwrite_manifest)r   Ztemplate_existsr   r   r   rA   ª   s(    

þ


zsdist.get_file_listc                 C   s<   |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  d S r   )Ú_add_defaults_standardsÚ_add_defaults_optionalÚ_add_defaults_pythonÚ_add_defaults_data_filesÚ_add_defaults_extÚ_add_defaults_c_libsÚ_add_defaults_scriptsr   r   r   r   rM   Ò   s    zsdist.add_defaultsc                 C   s:   t j | ¡sdS t j | ¡}t j |¡\}}|t  |¡v S )NF)rG   rH   ÚexistsÚabspathÚsplitÚlistdir)ÚfspathrY   Z	directoryÚfilenamer   r   r   Ú_cs_path_existsè   s
    
zsdist._cs_path_existsc                 C   s–   | j | jjg}|D ]~}t|tƒrj|}d}|D ]"}|  |¡r,d}| j |¡  qPq,|s|  dd 	|¡ ¡ q|  |¡r‚| j |¡ q|  d| ¡ qd S )NFTz,standard file not found: should have one of z, zstandard file '%s' not found)
ÚREADMESrE   Zscript_nameÚ
isinstanceÚtupler^   r@   r   r   Újoin)r   Z	standardsÚfnZaltsZgot_itr   r   r   rQ   ù   s"    

ÿ
zsdist._add_defaults_standardsc                 C   s4   ddg}|D ]"}t tjjt|ƒƒ}| j |¡ qd S )Nztest/test*.pyz	setup.cfg)ÚfilterrG   rH   rI   r   r@   Úextend)r   ZoptionalÚpatternÚfilesr   r   r   rR     s    zsdist._add_defaults_optionalc                 C   s\   |   d¡}| j ¡ r$| j | ¡ ¡ |jD ],\}}}}|D ]}| j tj	 
||¡¡ q:q*d S )NÚbuild_py)Úget_finalized_commandrE   Zhas_pure_modulesr@   re   Úget_source_filesÚ
data_filesr   rG   rH   rb   )r   rh   ZpkgZsrc_dirZ	build_dirÚ	filenamesr]   r   r   r   rS     s    

zsdist._add_defaults_pythonc                 C   sz   | j  ¡ rv| j jD ]b}t|tƒrBt|ƒ}tj |¡rt| j	 
|¡ q|\}}|D ]$}t|ƒ}tj |¡rN| j	 
|¡ qNqd S r   )rE   Zhas_data_filesrk   r`   Ústrr   rG   rH   rI   r@   r   )r   ÚitemÚdirnamerl   r*   r   r   r   rT   $  s    

zsdist._add_defaults_data_filesc                 C   s(   | j  ¡ r$|  d¡}| j | ¡ ¡ d S )NÚ	build_ext)rE   Zhas_ext_modulesri   r@   re   rj   )r   rp   r   r   r   rU   5  s    

zsdist._add_defaults_extc                 C   s(   | j  ¡ r$|  d¡}| j | ¡ ¡ d S )NÚ
build_clib)rE   Zhas_c_librariesri   r@   re   rj   )r   rq   r   r   r   rV   :  s    

zsdist._add_defaults_c_libsc                 C   s(   | j  ¡ r$|  d¡}| j | ¡ ¡ d S )NÚbuild_scripts)rE   Zhas_scriptsri   r@   re   rj   )r   rr   r   r   r   rW   ?  s    

zsdist._add_defaults_scriptsc              
   C   s¨   t  d| j¡ t| jddddddd}zr| ¡ }|d u r:qŽz| j |¡ W q( ttfyŠ } z$|  	d|j
|j|f ¡ W Y d }~q(d }~0 0 q(W | ¡  n
| ¡  0 d S )Nzreading manifest template '%s'r2   )Zstrip_commentsZskip_blanksZ
join_linesZ	lstrip_wsZ	rstrip_wsZcollapse_joinz%s, line %d: %s)r
   Úinfor4   r   Úreadliner@   Zprocess_template_liner   Ú
ValueErrorr   r]   Zcurrent_lineÚclose)r   r4   ÚlineÚmsgr   r   r   rN   D  s"    
þ
þ"zsdist.read_templatec                 C   sz   |   d¡}| j ¡ }| jjd |jd | jjd |d tjdkrFd}nd}g d¢}d|d |¡|f }| jj|d	d
 d S )NÚbuild)ÚprefixÚwin32z/|\\ú/)ÚRCSÚCVSz\.svnz\.hgz\.gitz\.bzrÚ_darcsz(^|%s)(%s)(%s).*ú|r2   )Zis_regex)	ri   rE   Úget_fullnamer@   Zexclude_patternZ
build_baseÚsysÚplatformrb   )r   ry   Úbase_dirÚsepsZvcs_dirsZvcs_ptrnr   r   r   rO   a  s    


zsdist.prune_file_listc                 C   sX   |   ¡ rt d| j ¡ d S | jjd d … }| dd¡ |  tj	| j|fd| j ¡ d S )Nz5not writing to manually maintained manifest file '%s'r   z*# file GENERATED by distutils, do NOT editzwriting manifest file '%s')
rJ   r
   rs   r5   r@   rg   ÚinsertZexecuter   Z
write_file)r   Zcontentr   r   r   rP   y  s    ÿÿzsdist.write_manifestc                 C   sD   t j | j¡sdS t| jƒ}z| ¡ }W | ¡  n
| ¡  0 |dkS )NFz+# file GENERATED by distutils, do NOT edit
)rG   rH   rI   r5   Úopenrt   rv   )r   ÚfpZ
first_liner   r   r   rJ   ˆ  s    

z sdist._manifest_is_not_generatedc                 C   sj   t  d| j¡ t| jƒ>}|D ](}| ¡ }| d¡s|s:q| j |¡ qW d   ƒ n1 s\0    Y  d S )Nzreading manifest file '%s'ú#)r
   rs   r5   r‡   ÚstripÚ
startswithr@   r   )r   r5   rw   r   r   r   rK   ”  s    zsdist.read_manifestc                 C   s®   |   |¡ tj||| jd ttdƒr4d}d| }nd }d| }|sPt d¡ n
t |¡ |D ]<}tj	 
|¡s|t d|¡ q^tj	 ||¡}| j|||d q^| jj |¡ d S )	N©Údry_runÚlinkZhardzmaking hard links in %s...zcopying files to %s...z)no files to distribute -- empty manifest?z#'%s' not a regular file -- skipping)rŽ   )Zmkpathr   Zcreate_treer   ÚhasattrrG   r
   r   rs   rH   rI   rb   Z	copy_filerE   ÚmetadataZwrite_pkg_info)r   r„   rg   rŽ   rx   ÚfileÚdestr   r   r   Úmake_release_tree¢  s     
	


zsdist.make_release_treec                 C   s¶   | j  ¡ }tj | j|¡}|  || jj¡ g }d| j	v rT| j	 
| j	 | j	 d¡¡¡ | j	D ]:}| j|||| j| jd}| 
|¡ | j j 
dd|f¡ qZ|| _| js²tj|| jd d S )NÚtar)r„   r;   r<   r   Ú rŒ   )rE   r   rG   rH   rb   r9   r“   r@   rg   r   r   ÚpopÚindexÚmake_archiver;   r<   Z
dist_filesr:   r8   r   Zremove_treer   )r   r„   Ú	base_namer:   Úfmtr‘   r   r   r   rB   Ì  s    




ÿ
zsdist.make_distributionc                 C   s   | j S r   )r:   r   r   r   r   Úget_archive_filesê  s    zsdist.get_archive_files)#Ú__name__Ú
__module__Ú__qualname__Údescriptionr    Zuser_optionsZboolean_optionsr   Zhelp_optionsZnegative_optZsub_commandsr_   r=   r?   rC   rF   rA   rM   Ústaticmethodr^   rQ   rR   rS   rT   rU   rV   rW   rN   rO   rP   rJ   rK   r“   rB   r›   r   r   r   r   r   $   sH   'ÿÿÿ
(
*r   )rG   r‚   r   Úwarningsr   Zdistutils.corer   Z	distutilsr   r   r   Zdistutils.text_filer   Zdistutils.filelistr	   r
   Zdistutils.utilr   Zdistutils.errorsr   r   r   r   r   r   r   r   Ú<module>   s   