B
    v9a7J  ã               @   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   sd   ddl m}  ddlm} g }x,| ¡ D ] }| d| d || d f¡ q&W | ¡  | |ƒ d¡ d S )Nr   )ÚFancyGetopt)ÚARCHIVE_FORMATSz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.7/sdist.pyÚshow_formats   s    r   c               @   s"  e Zd ZdZdd„ Zdddddd	d
dddddddgZddddddg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d0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Zd>d?„ Zd@dA„ ZdBdC„ ZdDdE„ Z dFdG„ Z!dHdI„ Z"dS )JÚ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])zuse-defaultsNzRinclude the default file set in the manifest [default; disable with --no-defaults])z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])zno-pruneNz$don't automatically exclude anything)zmanifest-onlyÚozEjust regenerate the manifest and then stop (implies --force-manifest))zforce-manifestÚfzkforcibly regenerate the manifest and carry on as usual. Deprecated: now the manifest is always regenerated.)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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]zuse-defaultsr    zmanifest-onlyzforce-manifestz	keep-tempzmetadata-checkzhelp-formatsNz#list available distribution formats)zno-defaultszno-pruneÚ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   Zgztar)ÚtemplateÚmanifestÚuse_defaultsr    Úmanifest_onlyZforce_manifestr   Ú	keep_tempÚdist_dirÚarchive_filesr   ÚownerÚgroup)r   r   r   r   Úinitialize_optionse   s    zsdist.initialize_optionsc             C   sZ   | j d krd| _ | jd kr d| _|  d¡ t | j¡}|rFtd| ƒ‚| jd krVd| _d S )NZMANIFESTzMANIFEST.inr   zunknown archive format '%s'Zdist)r*   r)   Zensure_string_listr   Zcheck_archive_formatsr   r   r.   )r   Z
bad_formatr   r   r   Úfinalize_options|   s    




zsdist.finalize_optionsc             C   sB   t ƒ | _x|  ¡ D ]}|  |¡ qW |  ¡  | jr6d S |  ¡  d S )N)r	   ÚfilelistZget_sub_commandsZrun_commandÚget_file_listr,   Ú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 insteadr'   )r   ÚPendingDeprecationWarningÚdistributionZget_command_objZensure_finalizedr7   )r   r'   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Úisfiler)   Ú_manifest_is_not_generatedÚread_manifestr4   r   Zremove_duplicatesr   Úfindallr+   Úadd_defaultsÚread_templater    Úprune_file_listÚwrite_manifest)r   Ztemplate_existsr   r   r   r5   ª   s&    





zsdist.get_file_listc             C   s<   |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  d S )N)Ú_add_defaults_standardsÚ_add_defaults_optionalÚ_add_defaults_pythonÚ_add_defaults_data_filesÚ_add_defaults_extÚ_add_defaults_c_libsÚ_add_defaults_scripts)r   r   r   r   rA   Ò   s    zsdist.add_defaultsc             C   s:   t j | ¡sdS t j | ¡}t j |¡\}}|t  |¡kS )NF)r;   r<   ÚexistsÚabspathÚsplitÚlistdir)ÚfspathrM   Z	directoryÚfilenamer   r   r   Ú_cs_path_existsè   s
    
zsdist._cs_path_existsc             C   sœ   | j | jjg}xˆ|D ]€}t|tƒrn|}d}x(|D ] }|  |¡r0d}| j |¡ P q0W |s”|  dd 	|¡ ¡ q|  |¡r†| j |¡ q|  d| ¡ qW d S )NFTz,standard file not found: should have one of z, zstandard file '%s' not found)
ÚREADMESr9   Zscript_nameÚ
isinstanceÚtuplerR   r4   r   r   Újoin)r   Z	standardsÚfnZaltsZgot_itr   r   r   rE   ù   s     




zsdist._add_defaults_standardsc             C   s8   ddg}x*|D ]"}t tjjt|ƒƒ}| j |¡ qW d S )Nztest/test*.pyz	setup.cfg)Úfilterr;   r<   r=   r   r4   Úextend)r   ZoptionalÚpatternÚfilesr   r   r   rF     s    
zsdist._add_defaults_optionalc             C   sd   |   d¡}| j ¡ r$| j | ¡ ¡ x:|jD ]0\}}}}x"|D ]}| j tj	 
||¡¡ q>W q,W d S )NÚbuild_py)Úget_finalized_commandr9   Zhas_pure_modulesr4   rY   Úget_source_filesÚ
data_filesr   r;   r<   rV   )r   r\   ZpkgZsrc_dirZ	build_dirÚ	filenamesrQ   r   r   r   rG     s    


zsdist._add_defaults_pythonc             C   s‚   | j  ¡ r~xr| j jD ]f}t|tƒrDt|ƒ}tj |¡rz| j	 
|¡ q|\}}x,|D ]$}t|ƒ}tj |¡rR| j	 
|¡ qRW qW d S )N)r9   Zhas_data_filesr_   rT   Ústrr   r;   r<   r=   r4   r   )r   ÚitemÚdirnamer`   r"   r   r   r   rH   $  s    


zsdist._add_defaults_data_filesc             C   s(   | j  ¡ r$|  d¡}| j | ¡ ¡ d S )NÚ	build_ext)r9   Zhas_ext_modulesr]   r4   rY   r^   )r   rd   r   r   r   rI   5  s    

zsdist._add_defaults_extc             C   s(   | j  ¡ r$|  d¡}| j | ¡ ¡ d S )NÚ
build_clib)r9   Zhas_c_librariesr]   r4   rY   r^   )r   re   r   r   r   rJ   :  s    

zsdist._add_defaults_c_libsc             C   s(   | j  ¡ r$|  d¡}| j | ¡ ¡ d S )NÚbuild_scripts)r9   Zhas_scriptsr]   r4   rY   r^   )r   rf   r   r   r   rK   ?  s    

zsdist._add_defaults_scriptsc          
   C   s¢   t  d| j¡ t| jddddddd}zlxf| ¡ }|d kr<P y| j |¡ W q* ttfk
rŠ } z|  	d|j
|j|f ¡ W d d }~X Y q*X q*W W d | ¡  X d S )Nzreading manifest template '%s'r(   )Zstrip_commentsZskip_blanksZ
join_linesZ	lstrip_wsZ	rstrip_wsZcollapse_joinz%s, line %d: %s)r
   Úinfor)   r   Úreadliner4   Zprocess_template_liner   Ú
ValueErrorr   rQ   Zcurrent_lineÚclose)r   r)   ÚlineÚmsgr   r   r   rB   D  s     

$zsdist.read_templatec             C   s„   |   d¡}| j ¡ }| jjd |jd | jjd |d tjdkrFd}nd}dddd	d
ddg}d|d |¡|f }| jj|dd d S )NÚbuild)ÚprefixÚwin32z/|\\ú/ZRCSZCVSz\.svnz\.hgz\.gitz\.bzrZ_darcsz(^|%s)(%s)(%s).*ú|r(   )Zis_regex)	r]   r9   Úget_fullnamer4   Zexclude_patternZ
build_baseÚsysÚplatformrV   )r   rm   Úbase_dirÚsepsZvcs_dirsZvcs_ptrnr   r   r   rC   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')
r>   r
   rg   r*   r4   r[   ÚinsertZexecuter   Z
write_file)r   Zcontentr   r   r   rD   y  s    
zsdist.write_manifestc             C   s<   t j | j¡sdS t| jƒ}z| ¡ }W d | ¡  X |dkS )NFz+# file GENERATED by distutils, do NOT edit
)r;   r<   r=   r*   Úopenrh   rj   )r   ÚfpZ
first_liner   r   r   r>   ˆ  s    

z sdist._manifest_is_not_generatedc             C   sV   t  d| j¡ t| jƒ}x0|D ](}| ¡ }| d¡s|s:q| j |¡ qW | ¡  d S )Nzreading manifest file '%s'ú#)	r
   rg   r*   rx   ÚstripÚ
startswithr4   r   rj   )r   r*   rk   r   r   r   r?   ”  s    

zsdist.read_manifestc             C   s²   |   |¡ tj||| jd ttdƒr4d}d| }nd }d| }|sPt d¡ n
t |¡ xD|D ]<}tj	 
|¡s~t d|¡ q`tj	 ||¡}| j|||d q`W | 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}   Úhasattrr;   r
   r   rg   r<   r=   rV   Z	copy_filer9   ZmetadataZwrite_pkg_info)r   ru   r[   r~   rl   ÚfileÚdestr   r   r   Úmake_release_tree£  s     
	



zsdist.make_release_treec             C   sº   | j  ¡ }tj | j|¡}|  || jj¡ g }d| j	krT| j	 
| j	 | j	 d¡¡¡ xD| j	D ]:}| j|||| j| jd}| 
|¡ | j j 
dd|f¡ q\W || _| js¶tj|| jd d S )NZtar)ru   r0   r1   r   Ú )r}   )r9   rr   r;   r<   rV   r.   r‚   r4   r[   r   r   ÚpopÚindexZmake_archiver0   r1   Z
dist_filesr/   r-   r   Zremove_treer}   )r   ru   Z	base_namer/   Zfmtr€   r   r   r   r6   Í  s    




zsdist.make_distributionc             C   s   | j S )N)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_commandsrS   r2   r3   r7   r:   r5   rA   ÚstaticmethodrR   rE   rF   rG   rH   rI   rJ   rK   rB   rC   rD   r>   r?   r‚   r6   r†   r   r   r   r   r   $   s^   

(*r   )r;   rs   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   