o
     JAf=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   sb   	 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.10/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   ó   	 | j S ©N)Úmetadata_check©Úselfr   r   r   Úchecking_metadata(   ó   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-   r0   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   s^   | j d u rd| _ | jd u rd| _|  d¡ t | j¡}|r#td| ƒ‚| jd u r-d| _d S d S )NZMANIFESTzMANIFEST.inr   zunknown archive format '%s'Údist)r7   r6   Zensure_string_listr   Zcheck_archive_formatsr   r   r;   )r    Z
bad_formatr   r   r   Úfinalize_options|   s   


ÿ

ÿzsdist.finalize_optionsc                 C   s>   t ƒ | _|  ¡ D ]}|  |¡ q|  ¡  | jrd S |  ¡  d S r   )r	   ÚfilelistZget_sub_commandsZrun_commandÚget_file_listr9   Ú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 insteadr3   )r   ÚPendingDeprecationWarningÚdistributionZget_command_objZensure_finalizedrE   )r    r3   r   r   r   Úcheck_metadata¢   s   ÿzsdist.check_metadatac                 C   s¢   	 t j | j¡}|s|  ¡ r|  ¡  | j ¡  | j ¡  d S |s(|  	d| j ¡ | j 
¡  | jr4|  ¡  |r:|  ¡  | jrA|  ¡  | j ¡  | j ¡  |  ¡  d S )Nz?manifest template '%s' does not exist (using default file list))ÚosÚpathÚisfiler6   Ú_manifest_is_not_generatedÚread_manifestrB   r   Zremove_duplicatesr   Úfindallr8   Úadd_defaultsÚread_templater'   Úprune_file_listÚwrite_manifest)r    Ztemplate_existsr   r   r   rC   ª   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   rO   Ò   s   zsdist.add_defaultsc                 C   s<   	 t j | ¡s	dS t j | ¡}t j |¡\}}|t  |¡v S )NF)rI   rJ   ÚexistsÚabspathÚsplitÚlistdir)Úfspathr[   Z	directoryÚfilenamer   r   r   Ú_cs_path_existsè   s   zsdist._cs_path_existsc                 C   s–   | j | jjg}|D ]?}t|tƒr5|}d}|D ]}|  |¡r'd}| j |¡  nq|s4|  dd 	|¡ ¡ q	|  |¡rA| j |¡ q	|  d| ¡ q	d S )NFTz,standard file not found: should have one of z, zstandard file '%s' not found)
ÚREADMESrG   Zscript_nameÚ
isinstanceÚtupler`   rB   r   r   Újoin)r    Z	standardsÚfnZaltsZgot_itr   r   r   rS   ù   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)ÚfilterrI   rJ   rK   r   rB   Úextend)r    ZoptionalÚpatternÚfilesr   r   r   rT     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_commandrG   Zhas_pure_modulesrB   rg   Úget_source_filesÚ
data_filesr   rI   rJ   rd   )r    rj   ZpkgZsrc_dirZ	build_dirÚ	filenamesr_   r   r   r   rU     s   

ÿÿzsdist._add_defaults_pythonc                 C   s~   | j  ¡ r;| j jD ]3}t|tƒr!t|ƒ}tj |¡r | j	 
|¡ q	|\}}|D ]}t|ƒ}tj |¡r9| j	 
|¡ q'q	d S d S r   )rG   Zhas_data_filesrm   rb   Ústrr   rI   rJ   rK   rB   r   )r    ÚitemÚdirnamern   r,   r   r   r   rV   $  s    

€€ýözsdist._add_defaults_data_filesc                 C   ó,   | j  ¡ r|  d¡}| j | ¡ ¡ d S d S )NÚ	build_ext)rG   Zhas_ext_modulesrk   rB   rg   rl   )r    rs   r   r   r   rW   5  ó   

þzsdist._add_defaults_extc                 C   rr   )NÚ
build_clib)rG   Zhas_c_librariesrk   rB   rg   rl   )r    ru   r   r   r   rX   :  rt   zsdist._add_defaults_c_libsc                 C   rr   )NÚbuild_scripts)rG   Zhas_scriptsrk   rB   rg   rl   )r    rv   r   r   r   rY   ?  rt   zsdist._add_defaults_scriptsc              
   C   sª   	 t  d| j¡ t| jddddddd}z;	 | ¡ }|d u rn*z| j |¡ W n  ttfyG } z|  	d|j
|j|f ¡ W Y d }~nd }~ww qW | ¡  d S | ¡  w )Nzreading manifest template '%s'r4   )Zstrip_commentsZskip_blanksZ
join_linesZ	lstrip_wsZ	rstrip_wsZcollapse_joinTz%s, line %d: %s)r
   Úinfor6   r   ÚreadlinerB   Zprocess_template_liner   Ú
ValueErrorr   r_   Zcurrent_lineÚclose)r    r6   ÚlineÚmsgr   r   r   rP   D  s.   
þ
þ€ÿözsdist.read_templatec                 C   s|   	 |   d¡}| j ¡ }| jjd |jd | jjd |d tjdkr$d}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).*ú|r4   )Zis_regex)	rk   rG   Úget_fullnamerB   Zexclude_patternZ
build_baseÚsysÚplatformrd   )r    r}   Úbase_dirÚsepsZvcs_dirsZvcs_ptrnr   r   r   rQ   a  s   


zsdist.prune_file_listc                 C   sZ   	 |   ¡ 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')
rL   r
   rw   r7   rB   ri   ÚinsertZexecuter   Z
write_file)r    Zcontentr   r   r   rR   y  s   ÿÿzsdist.write_manifestc                 C   sB   t j | j¡s	dS t| jƒ}z| ¡ }W | ¡  |dkS | ¡  w )NFz+# file GENERATED by distutils, do NOT edit
)rI   rJ   rK   r7   Úopenrx   rz   )r    ÚfpZ
first_liner   r   r   rL   ˆ  s   


ÿz sdist._manifest_is_not_generatedc                 C   sn   	 t  d| j¡ t| jƒ }|D ]}| ¡ }| d¡s|sq| j |¡ qW d   ƒ d S 1 s0w   Y  d S )Nzreading manifest file '%s'ú#)r
   rw   r7   r‹   ÚstripÚ
startswithrB   r   )r    r7   r{   r   r   r   rM   ”  s   û"ÿzsdist.read_manifestc                 C   s°   	 |   |¡ tj||| jd ttdƒrd}d| }nd }d| }|s)t d¡ nt |¡ |D ]}tj	 
|¡s?t d|¡ q0tj	 ||¡}| j|||d q0| 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‘   ÚhasattrrI   r
   r   rw   rJ   rK   rd   Z	copy_filerG   ZmetadataZwrite_pkg_info)r    rˆ   ri   r’   r|   Ú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 r+| j	 
| j	 | j	 d¡¡¡ | j	D ]}| j|||| j| jd}| 
|¡ | j j 
dd|f¡ q.|| _| js\tj|| jd d S d S )NÚtar)rˆ   r=   r>   r   Ú r   )rG   r…   rI   rJ   rd   r;   r–   rB   ri   r   r   ÚpopÚindexÚmake_archiver=   r>   Z
dist_filesr<   r:   r   Zremove_treer‘   )r    rˆ   Ú	base_namer<   Úfmtr”   r   r   r   rD   Ì  s"   
	


ÿ
ÿzsdist.make_distributionc                 C   r   r   )r<   r   r   r   r   Úget_archive_filesê  r"   zsdist.get_archive_files)#Ú__name__Ú
__module__Ú__qualname__Údescriptionr!   Zuser_optionsZboolean_optionsr   Zhelp_optionsZnegative_optZsub_commandsra   r?   rA   rE   rH   rC   rO   Ústaticmethodr`   rS   rT   rU   rV   rW   rX   rY   rP   rQ   rR   rL   rM   r–   rD   rž   r   r   r   r   r   $   sJ    'ÿÿÿ
(
*r   )rI   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     