U ,a=J@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)DistutilsTemplateErrorDistutilsOptionErrorcCs`ddlm}ddlm}g}|D] }|d|d||dfq$|||ddS)Nr) FancyGetopt)ARCHIVE_FORMATSformats=z.List of available source distribution formats:)Zdistutils.fancy_getoptrZdistutils.archive_utilrkeysappendsortZ print_help)rrformatsformatrd?Zd@dAZdBdCZdDdEZ dFdGZ!dHdIZ"dS)Jsdistz6create a source distribution (tarball, zip file, etc.)cCs|jSN)metadata_checkselfrrrchecking_metadata(szsdist.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)pruneNzspecifically 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-onlyozEjust regenerate the manifest and then stop (implies --force-manifest))force-manifestfzkforcibly regenerate the manifest and carry on as usual. Deprecated: now the manifest is always regenerated.)rNz6formats for source distribution (comma-separated list)) 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])metadata-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]r"r$r&r(r*r-z help-formatsNz#list available distribution formats)r#r%check)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_filesrownergrouprrrrinitialize_optionseszsdist.initialize_optionscCsZ|jdkrd|_|jdkr d|_|dt|j}|rFtd||jdkrVd|_dS)NZMANIFESTz MANIFEST.inrzunknown archive format '%s'Zdist)r3r2Zensure_string_listrZcheck_archive_formatsrr r7)rZ bad_formatrrrfinalize_options|s     zsdist.finalize_optionscCs>t|_|D]}||q||jr2dS|dSr)r filelistZget_sub_commandsZ run_command get_file_listr5make_distribution)rZcmd_namerrrruns  z sdist.runcCs*tdt|jd}||dS)Nzadistutils.command.sdist.check_metadata is deprecated, use the check command insteadr0)rPendingDeprecationWarning distributionZget_command_objZensure_finalizedr@)rr0rrrcheck_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))ospathisfiler2_manifest_is_not_generated read_manifestr=rZremove_duplicatesrfindallr4 add_defaults read_templater$prune_file_listwrite_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_scriptsrrrrrJszsdist.add_defaultscCs:tj|sdStj|}tj|\}}|t|kS)NF)rDrEexistsabspathsplitlistdir)fspathrVZ directoryfilenamerrr_cs_path_existss  zsdist._cs_path_existscCs|j|jjg}|D]~}t|trj|}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 isinstancetupler[r=rrjoin)rZ standardsfnZaltsZgot_itrrrrNs"    zsdist._add_defaults_standardscCs4ddg}|D]"}ttjjt|}|j|q dS)Nz test/test*.pyz setup.cfg)filterrDrErFrr=extend)rZoptionalpatternfilesrrrrOszsdist._add_defaults_optionalcCs\|d}|jr$|j||jD],\}}}}|D]}|jtj ||q:q*dS)Nbuild_py) get_finalized_commandrBZhas_pure_modulesr=rbget_source_files data_filesrrDrEr_)rreZpkgZsrc_dirZ build_dir filenamesrZrrrrPs   zsdist._add_defaults_pythoncCsz|jrv|jjD]b}t|trBt|}tj|rt|j |q|\}}|D]$}t|}tj|rN|j |qNqdSr) rBZhas_data_filesrhr]strr rDrErFr=r)ritemdirnamerir)rrrrQ$s     zsdist._add_defaults_data_filescCs(|jr$|d}|j|dS)N build_ext)rBZhas_ext_modulesrfr=rbrg)rrmrrrrR5s  zsdist._add_defaults_extcCs(|jr$|d}|j|dS)N build_clib)rBZhas_c_librariesrfr=rbrg)rrnrrrrS:s  zsdist._add_defaults_c_libscCs(|jr$|d}|j|dS)N build_scripts)rBZ has_scriptsrfr=rbrg)rrorrrrT?s  zsdist._add_defaults_scriptsc Cstd|jt|jddddddd}zh|}|dkr:qz|j|Wq(tt fk r}z| d|j |j |fW5d}~XYq(Xq(W5|XdS)Nzreading manifest template '%s'r1)Zstrip_commentsZ skip_blanksZ join_linesZ lstrip_wsZ rstrip_wsZ collapse_joinz%s, line %d: %s) r infor2rclosereadliner=Zprocess_template_liner ValueErrorrrZZ current_line)rr2linemsgrrrrKDs&   zsdist.read_templatecCs|d}|j}|jjd|jd|jjd|dtjdkrFd}nd}dddd d d d g}d |d||f}|jj|dddS)Nbuild)prefixZwin32z/|\\/ZRCSZCVSz\.svnz\.hgz\.gitz\.bzrZ_darcsz(^|%s)(%s)(%s).*|r1)Zis_regex) rfrB get_fullnamer=Zexclude_patternZ build_basesysplatformr_)rrvbase_dirZsepsZvcs_dirsZvcs_ptrnrrrrLas    zsdist.prune_file_listcCsX|rtd|jdS|jjdd}|dd|tj |j|fd|jdS)Nz5not writing to manually maintained manifest file '%s'rz*# file GENERATED by distutils, do NOT editzwriting manifest file '%s') rGr rpr3r=rdinsertZexecuterZ write_file)rZcontentrrrrMys zsdist.write_manifestcCs<tj|jsdSt|j}z |}W5|X|dkS)NFz+# file GENERATED by distutils, do NOT edit )rDrErFr3openrqrr)rfpZ first_linerrrrGs   z sdist._manifest_is_not_generatedc CsVtd|jt|j4}|D](}|}|ds|s:q|j|qW5QRXdS)Nzreading manifest file '%s'#)r rpr3rstrip startswithr=r)rr3rtrrrrHs zsdist.read_manifestcCs||tj|||jdttdr4d}d|}n d}d|}|sPtdn t||D]<}tj |s|td|q^tj ||}|j |||dq^|j j|dS) Ndry_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_treerhasattrrDr rrprErFr_Z copy_filerBZmetadataZwrite_pkg_info)rr}rdrrufiledestrrrmake_release_trees      zsdist.make_release_treecCs|j}tj|j|}|||jjg}d|j krT|j |j |j d|j D]:}|j ||||j|jd}| ||jj dd|fqZ||_|jstj||jddS)NZtar)r}r9r:rr)rBrzrDrEr_r7rr=rdrrpopindexZ make_archiver9r:Z dist_filesr8r6rZ remove_treer)rr}Z base_namer8Zfmtrrrrr?s     zsdist.make_distributioncCs|jSr)r8rrrrget_archive_filesszsdist.get_archive_files)#__name__ __module__ __qualname__Z descriptionrZ user_optionsZboolean_optionsrZ help_optionsZ negative_optZ sub_commandsr\r;r<r@rCr>rJ staticmethodr[rNrOrPrQrRrSrTrKrLrMrGrHrr?rrrrrr$sp' (  *r)rDr{rwarningsrZdistutils.corerZ distutilsrrrZdistutils.text_filerZdistutils.filelistr r Zdistutils.utilr Zdistutils.errorsr r rrrrrrs