B YI~d7J�@s�ddlZddlZddlmZddlmZddlmZddlmZddlm Z ddlm Z ddl m Z dd l mZdd lmZdd lmZdd lmZmZd d�ZGdd�de�ZdS)�N)�glob)�warn)�Command)�dir_util)� file_util)� archive_util)�TextFile)�FileList)�log)� convert_path)�DistutilsTemplateError�DistutilsOptionErrorcCsdddlm}ddlm}g}x,|��D] }|�d|d||df�q&W|��||��d�dS)Nr)� FancyGetopt)�ARCHIVE_FORMATSzformats=�z.List of available source distribution formats:)Zdistutils.fancy_getoptrZdistutils.archive_utilr�keys�append�sort� print_help)rr�formats�format�r�d?�Zd@dA�ZdBdC�ZdDdE�Z dFdG�Z!dHdI�Z"dS)J�sdistz6create a source distribution (tarball, zip file, etc.)cCs|jS)N)�metadata_check)�selfrrr�checking_metadata(szsdist.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])zno-pruneNz$don't automatically exclude anything)z manifest-only�ozEjust regenerate the manifest and then stop (implies --force-manifest))zforce-manifest�fzkforcibly regenerate the manifest and carry on as usual. Deprecated: now the manifest is always regenerated.)zformats=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])zmetadata-checkNz[Ensure that all required elements of meta-data are supplied. Warn if any missing. [default])zowner=�uz@Owner name used when creating a tar file [default: current user])zgroup=�gzAGroup name used when creating a tar file [default: current group]z use-defaultsr z manifest-onlyzforce-manifestz keep-tempzmetadata-checkz help-formatsNz#list available distribution formats)z no-defaultszno-prune�check)ZREADMEz README.txtz README.rstcCsTd|_d|_d|_d|_d|_d|_dg|_d|_d|_d|_ d|_ d|_ d|_ dS)N�rZgztar) �template�manifest� use_defaultsr � manifest_onlyZforce_manifestr� keep_temp�dist_dir� archive_filesr�owner�group)rrrr�initialize_optionseszsdist.initialize_optionscCsZ|jdkrd|_|jdkr d|_|�d�t�|j�}|rFtd|��|jdkrVd|_dS)NZMANIFESTz MANIFEST.inrzunknown archive format '%s'Zdist)r*r)Zensure_string_listrZcheck_archive_formatsrr r.)rZ bad_formatrrr�finalize_options|s      zsdist.finalize_optionscCsBt�|_x|��D]}|�|�qW|��|jr6dS|��dS)N)r �filelistZget_sub_commandsZ run_command� get_file_listr,�make_distribution)rZcmd_namerrr�run�sz sdist.runcCs*tdt�|j�d�}|��|��dS)Nzadistutils.command.sdist.check_metadata is deprecated, use the check command insteadr')r�PendingDeprecationWarning� distributionZget_command_objZensure_finalizedr7)rr'rrr�check_metadata�s  zsdist.check_metadatacCs�tj�|j�}|s:|��r:|��|j��|j��dS|sN|� d|j�|j� �|j rf|� �|rr|� �|jr�|��|j��|j��|��dS)Nz?manifest template '%s' does not exist (using default file list))�os�path�isfiler)�_manifest_is_not_generated� read_manifestr4rZremove_duplicatesr�findallr+� add_defaults� read_templater �prune_file_list�write_manifest)rZtemplate_existsrrrr5�s&       zsdist.get_file_listcCs<|��|��|��|��|��|��|��dS)N)�_add_defaults_standards�_add_defaults_optional�_add_defaults_python�_add_defaults_data_files�_add_defaults_ext�_add_defaults_c_libs�_add_defaults_scripts)rrrrrA�szsdist.add_defaultscCs:tj�|�sdStj�|�}tj�|�\}}|t�|�kS)NF)r;r<�exists�abspath�split�listdir)�fspathrMZ directory�filenamerrr�_cs_path_exists�s  zsdist._cs_path_existscCs�|j|jjg}x�|D]�}t|t�rn|}d}x(|D] }|�|�r0d}|j�|�Pq0W|s�|�dd� |��q|�|�r�|j�|�q|�d|�qWdS)NFTz,standard file not found: should have one of z, zstandard file '%s' not found) �READMESr9Z script_name� isinstance�tuplerRr4rr�join)rZ standards�fnZaltsZgot_itrrrrE�s       zsdist._add_defaults_standardscCs8ddg}x*|D]"}ttjjt|��}|j�|�qWdS)Nz test/test*.pyz setup.cfg)�filterr;r<r=rr4�extend)rZoptional�pattern�filesrrrrFs zsdist._add_defaults_optionalcCsd|�d�}|j��r$|j�|���x:|jD]0\}}}}x"|D]}|j�tj � ||��q>Wq,WdS)N�build_py) �get_finalized_commandr9Zhas_pure_modulesr4rY�get_source_files� data_filesrr;r<rV)rr\ZpkgZsrc_dirZ build_dir� filenamesrQrrrrGs    zsdist._add_defaults_pythoncCs�|j��r~xr|jjD]f}t|t�rDt|�}tj�|�rz|j � |�q|\}}x,|D]$}t|�}tj�|�rR|j � |�qRWqWdS)N) r9Zhas_data_filesr_rT�strr r;r<r=r4r)r�item�dirnamer`r"rrrrH$s     zsdist._add_defaults_data_filescCs(|j��r$|�d�}|j�|���dS)N� build_ext)r9Zhas_ext_modulesr]r4rYr^)rrdrrrrI5s  zsdist._add_defaults_extcCs(|j��r$|�d�}|j�|���dS)N� build_clib)r9Zhas_c_librariesr]r4rYr^)rrerrrrJ:s  zsdist._add_defaults_c_libscCs(|j��r$|�d�}|j�|���dS)N� build_scripts)r9Z has_scriptsr]r4rYr^)rrfrrrrK?s  zsdist._add_defaults_scriptsc Cs�t�d|j�t|jddddddd�}zlxf|��}|dkrr rgr*r4r[�insertZexecuterZ write_file)rZcontentrrrrDys  zsdist.write_manifestcCs<tj�|j�sdSt|j�}z |��}Wd|��X|dkS)NFz+# file GENERATED by distutils, do NOT edit )r;r<r=r*�openrhrj)r�fpZ first_linerrrr>�s   z sdist._manifest_is_not_generatedcCsVt�d|j�t|j�}x0|D](}|��}|�d�s|s:q|j�|�qW|��dS)Nzreading manifest file '%s'�#) r rgr*rx�strip� startswithr4rrj)rr*rkrrrr?�s  zsdist.read_manifestcCs�|�|�tj|||jd�ttd�r4d}d|}n d}d|}|sPt�d�n t�|�xD|D]<}tj � |�s~t�d|�q`tj � ||�}|j |||d�q`W|j j�|�dS) N)�dry_run�linkZhardzmaking hard links in %s...zcopying files to %s...z)no files to distribute -- empty manifest?z#'%s' not a regular file -- skipping)r~)ZmkpathrZ create_treer}�hasattrr;r rrgr<r=rVZ copy_filer9ZmetadataZwrite_pkg_info)rrur[r~rl�file�destrrr�make_release_tree�s       zsdist.make_release_treecCs�|j��}tj�|j|�}|�||jj�g}d|j krT|j � |j � |j � d���xD|j D]:}|j ||||j|jd�}|� |�|jj� dd|f�q\W||_|js�tj||jd�dS)NZtar)rur0r1r�)r})r9rrr;r<rVr.r�r4r[rr�pop�indexZ make_archiver0r1Z dist_filesr/r-rZ remove_treer})rruZ base_namer/Zfmtr�rrrr6�s     zsdist.make_distributioncCs|jS)N)r/)rrrr�get_archive_files�szsdist.get_archive_files)#�__name__� __module__� __qualname__� descriptionrZ user_optionsZboolean_optionsrZ help_optionsZ negative_optZ sub_commandsrSr2r3r7r:r5rA� staticmethodrRrErFrGrHrIrJrKrBrCrDr>r?r�r6r�rrrrr$s^  (  *r)r;rsr�warningsrZdistutils.corerZ distutilsrrrZdistutils.text_filerZdistutils.filelistr r Zdistutils.utilr Zdistutils.errorsr r rrrrrr�s