a XC?h=J�@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�DistutilsOptionErrorcCs`ddlm}ddlm}g}|��D] }|�d|d||df�q$|��||��d�dS)Nr)� FancyGetopt)�ARCHIVE_FORMATS�formats=�z.List of available source distribution formats:)Zdistutils.fancy_getoptrZdistutils.archive_utilr�keys�append�sortZ print_help)rr�formats�format�r�t�|_|��D]}|�|�q|��|jr2dS|��dSr)r �filelistZget_sub_commandsZ run_command� get_file_listr5�make_distribution)rZcmd_namerrr�run�s  z sdist.runcCs*tdt�|j�d�}|��|��dS)Nzadistutils.command.sdist.check_metadata is deprecated, use the check command insteadr0)r�PendingDeprecationWarning� distributionZget_command_objZensure_finalizedr@)rr0rrr�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�isfiler2�_manifest_is_not_generated� read_manifestr=rZremove_duplicatesr�findallr4� add_defaults� read_templater$�prune_file_list�write_manifest)rZtemplate_existsrrrr>�s(   �   zsdist.get_file_listcCs<|��|��|��|��|��|��|��dSr)�_add_defaults_standards�_add_defaults_optional�_add_defaults_python�_add_defaults_data_files�_add_defaults_ext�_add_defaults_c_libs�_add_defaults_scriptsrrrrrJ�szsdist.add_defaultscCs:tj�|�sdStj�|�}tj�|�\}}|t�|�vS)NF)rDrE�exists�abspath�split�listdir)�fspathrVZ directory�filenamerrr�_cs_path_exists�s  zsdist._cs_path_existscCs�|j|jjg}|D]~}t|t�rj|}d}|D]"}|�|�r,d}|j�|�qPq,|s�|�dd� |��q|�|�r�|j�|�q|�d|�qdS)NFTz,standard file not found: should have one of z, zstandard file '%s' not found) �READMESrBZ script_name� isinstance�tupler[r=rr�join)rZ standards�fnZaltsZgot_itrrrrN�s"   � zsdist._add_defaults_standardscCs4ddg}|D]"}ttjjt|��}|j�|�q dS)Nz test/test*.pyz setup.cfg)�filterrDrErFrr=�extend)rZoptional�pattern�filesrrrrOszsdist._add_defaults_optionalcCs\|�d�}|j��r$|j�|���|jD],\}}}}|D]}|j�tj � ||��q:q*dS)N�build_py) �get_finalized_commandrBZhas_pure_modulesr=rb�get_source_files� data_filesrrDrEr_)rreZpkgZsrc_dirZ build_dir� filenamesrZrrrrPs   zsdist._add_defaults_pythoncCsz|j��rv|jjD]b}t|t�rBt|�}tj�|�rt|j � |�q|\}}|D]$}t|�}tj�|�rN|j � |�qNqdSr) rBZhas_data_filesrhr]�strr rDrErFr=r)r�item�dirnamerir)rrrrQ$s     zsdist._add_defaults_data_filescCs(|j��r$|�d�}|j�|���dS)N� build_ext)rBZhas_ext_modulesrfr=rbrg)rrmrrrrR5s  zsdist._add_defaults_extcCs(|j��r$|�d�}|j�|���dS)N� build_clib)rBZhas_c_librariesrfr=rbrg)rrnrrrrS:s  zsdist._add_defaults_c_libscCs(|j��r$|�d�}|j�|���dS)N� build_scripts)rBZ has_scriptsrfr=rbrg)rrorrrrT?s  zsdist._add_defaults_scriptsc Cs�t�d|j�t|jddddddd�}zr|��}|dur:q�z|j�|�Wq(ttfy�}z$|� d|j |j |f�WYd}~q(d}~00q(W|� �n |� �0dS)Nzreading manifest template '%s'r1)Zstrip_commentsZ skip_blanksZ join_linesZ lstrip_wsZ rstrip_wsZ collapse_joinz%s, line %d: %s) r �infor2r�readliner=Zprocess_template_liner � ValueErrorrrZZ current_line�close)rr2�line�msgrrrrKDs" � �"zsdist.read_templatecCsz|�d�}|j��}|jjd|jd�|jjd|d�tjdkrFd}nd}gd�}d|d�|�|f}|jj|d d �dS) N�build)�prefixZwin32z/|\\�/)ZRCSZCVSz\.svnz\.hgz\.gitz\.bzrZ_darcsz(^|%s)(%s)(%s).*�|r1)Zis_regex) rfrB� get_fullnamer=Zexclude_patternZ build_base�sys�platformr_)rrv�base_dirZsepsZvcs_dirsZvcs_ptrnrrrrLas   zsdist.prune_file_listcCsX|��rt�d|j�dS|jjdd�}|�dd�|�tj |j|fd|j�dS)Nz5not writing to manually maintained manifest file '%s'rz*# file GENERATED by distutils, do NOT editzwriting manifest file '%s') rGr rpr3r=rd�insertZexecuterZ write_file)rZcontentrrrrMys� �zsdist.write_manifestcCsDtj�|j�sdSt|j�}z|��}W|��n |��0|dkS)NFz+# file GENERATED by distutils, do NOT edit )rDrErFr3�openrqrs)r�fpZ first_linerrrrG�s  z sdist._manifest_is_not_generatedcCsjt�d|j�t|j��>}|D](}|��}|�d�s|s:q|j�|�qWd�n1s\0YdS)Nzreading manifest file '%s'�#)r rpr3r�strip� startswithr=r)rr3rtrrrrH�s zsdist.read_manifestcCs�|�|�tj|||jd�ttd�r4d}d|}n d}d|}|sPt�d�n t�|�|D]<}tj � |�s|t�d|�q^tj � ||�}|j |||d�q^|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��hasattrrDr rrprErFr_Z copy_filerB�metadataZwrite_pkg_info)rr}rdr�ru�file�destrrr�make_release_tree�s      zsdist.make_release_treecCs�|j��}tj�|j|�}|�||jj�g}d|j vrT|j � |j � |j � d���|j D]:}|j ||||j|jd�}|� |�|jj� dd|f�qZ||_|js�tj||jd�dS)NZtar)r}r9r:r�r�)rBrzrDrEr_r7r�r=rdrr�pop�indexZ make_archiver9r:Z dist_filesr8r6rZ remove_treer�)rr}Z base_namer8Zfmtr�rrrr?�s    � zsdist.make_distributioncCs|jSr)r8rrrr�get_archive_files�szsdist.get_archive_files)#�__name__� __module__� __qualname__Z descriptionrZ user_optionsZboolean_optionsrZ help_optionsZ negative_optZ sub_commandsr\r;r<r@rCr>rJ� staticmethodr[rNrOrPrQrRrSrTrKrLrMrGrHr�r?r�rrrrr$sH'��� (  *r)rDr{r�warningsrZdistutils.corerZ distutilsrrrZdistutils.text_filerZdistutils.filelistr r Zdistutils.utilr Zdistutils.errorsr r rrrrrr�s