B YI~d7J@sddlZddlZddlmZddlmZddlmZddlmZddlm Z ddlm Z ddl m Z dd l mZdd lmZdd lmZdd lmZmZd dZGdddeZdS)N)glob)warn)Command)dir_util) file_util) archive_util)TextFile)FileList)log) convert_path)DistutilsTemplateErrorDistutilsOptionErrorcCsdddlm}ddlm}g}x,|D] }|d|d||dfq&W|||ddS)Nr) FancyGetopt)ARCHIVE_FORMATSzformats=z.List of available source distribution formats:)Zdistutils.fancy_getoptrZdistutils.archive_utilrkeysappendsort print_help)rrformatsformatrd?Zd@dAZdBdCZdDdEZ dFdGZ!dHdIZ"dS)Jsdistz6create a source distribution (tarball, zip file, etc.)cCs|jS)N)metadata_check)selfrrrchecking_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)pruneNzspecifically 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-onlyozEjust regenerate the manifest and then stop (implies --force-manifest))zforce-manifestfzkforcibly 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-tempkz@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-prunecheck)ZREADMEz README.txtz README.rstcCsTd|_d|_d|_d|_d|_d|_dg|_d|_d|_d|_ d|_ d|_ d|_ dS)NrZgztar) templatemanifest use_defaultsr manifest_onlyZforce_manifestr keep_tempdist_dir archive_filesrownergroup)rrrrinitialize_optionseszsdist.initialize_optionscCsZ|jdkrd|_|jdkr d|_|dt|j}|rFtd||jdkrVd|_dS)NZMANIFESTz MANIFEST.inrzunknown archive format '%s'Zdist)r*r)Zensure_string_listrZcheck_archive_formatsrr r.)rZ bad_formatrrrfinalize_options|s      zsdist.finalize_optionscCsBt|_x|D]}||qW||jr6dS|dS)N)r filelistZget_sub_commandsZ run_command get_file_listr,make_distribution)rZcmd_namerrrrunsz sdist.runcCs*tdt|jd}||dS)Nzadistutils.command.sdist.check_metadata is deprecated, use the check command insteadr')rPendingDeprecationWarning distributionZget_command_objZensure_finalizedr7)rr'rrrcheck_metadatas  zsdist.check_metadatacCstj|j}|s:|r:||j|jdS|sN| d|j|j |j rf| |rr| |jr||j|j|dS)Nz?manifest template '%s' does not exist (using default file list))ospathisfiler)_manifest_is_not_generated read_manifestr4rZremove_duplicatesrfindallr+ add_defaults read_templater prune_file_listwrite_manifest)rZtemplate_existsrrrr5s&       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)rrrrrAszsdist.add_defaultscCs:tj|sdStj|}tj|\}}|t|kS)NF)r;r<existsabspathsplitlistdir)fspathrMZ directoryfilenamerrr_cs_path_existss  zsdist._cs_path_existscCs|j|jjg}x|D]}t|trn|}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 isinstancetuplerRr4rrjoin)rZ standardsfnZaltsZgot_itrrrrEs       zsdist._add_defaults_standardscCs8ddg}x*|D]"}ttjjt|}|j|qWdS)Nz test/test*.pyz setup.cfg)filterr;r<r=rr4extend)rZoptionalpatternfilesrrrrFs zsdist._add_defaults_optionalcCsd|d}|jr$|j|x:|jD]0\}}}}x"|D]}|jtj ||q>Wq,WdS)Nbuild_py) get_finalized_commandr9Zhas_pure_modulesr4rYget_source_files data_filesrr;r<rV)rr\ZpkgZsrc_dirZ build_dir filenamesrQrrrrGs    zsdist._add_defaults_pythoncCs|jr~xr|jjD]f}t|trDt|}tj|rz|j |q|\}}x,|D]$}t|}tj|rR|j |qRWqWdS)N) r9Zhas_data_filesr_rTstrr r;r<r=r4r)ritemdirnamer`r"rrrrH$s     zsdist._add_defaults_data_filescCs(|jr$|d}|j|dS)N build_ext)r9Zhas_ext_modulesr]r4rYr^)rrdrrrrI5s  zsdist._add_defaults_extcCs(|jr$|d}|j|dS)N build_clib)r9Zhas_c_librariesr]r4rYr^)rrerrrrJ:s  zsdist._add_defaults_c_libscCs(|jr$|d}|j|dS)N build_scripts)r9Z has_scriptsr]r4rYr^)rrfrrrrK?s  zsdist._add_defaults_scriptsc Cstd|jt|jddddddd}zlxf|}|dkrr rgr*r4r[insertZexecuterZ write_file)rZcontentrrrrDys  zsdist.write_manifestcCs<tj|jsdSt|j}z |}Wd|X|dkS)NFz+# file GENERATED by distutils, do NOT edit )r;r<r=r*openrhrj)rfpZ first_linerrrr>s   z sdist._manifest_is_not_generatedcCsVtd|jt|j}x0|D](}|}|ds|s:q|j|qW|dS)Nzreading manifest file '%s'#) r rgr*rxstrip startswithr4rrj)rr*rkrrrr?s  zsdist.read_manifestcCs||tj|||jdttdr4d}d|}n d}d|}|sPtdn t|xD|D]<}tj |s~td|q`tj ||}|j |||dq`W|j j|dS) N)dry_runlinkZhardzmaking 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~rlfiledestrrrmake_release_trees       zsdist.make_release_treecCs|j}tj|j|}|||jjg}d|j krT|j |j |j dxD|j D]:}|j ||||j|jd}| ||jj dd|fq\W||_|jstj||jddS)NZtar)rur0r1r)r})r9rrr;r<rVr.rr4r[rrpopindexZ make_archiver0r1Z dist_filesr/r-rZ remove_treer})rruZ base_namer/Zfmtrrrrr6s     zsdist.make_distributioncCs|jS)N)r/)rrrrget_archive_filesszsdist.get_archive_files)#__name__ __module__ __qualname__ descriptionrZ user_optionsZboolean_optionsrZ help_optionsZ negative_optZ sub_commandsrSr2r3r7r:r5rA staticmethodrRrErFrGrHrIrJrKrBrCrDr>r?rr6rrrrrr$s^  (  *r)r;rsrwarningsrZdistutils.corerZ distutilsrrrZdistutils.text_filerZdistutils.filelistr r Zdistutils.utilr Zdistutils.errorsr r rrrrrrs