a 9êdg=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ÚsortÚ print_help)rrÚformatsÚformat©rú3/usr/local/lib/python3.9/distutils/command/sdist.pyÚ show_formatss     ÿÿrc@seZdZdZdd„Zgd¢Zgd¢ZdddefgZd d d œZ d efgZ d Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zedd„ƒZdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Z d6d7„Z!d8d9„Z"dS):Ú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])ú use-defaultsNzRinclude the default file set in the manifest [default; disable with --no-defaults])ú 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])úno-pruneNz$don't automatically exclude anything)ú manifest-onlyÚozEjust regenerate the manifest and then stop (implies --force-manifest))úforce-manifestÚfzkforcibly regenerate the manifest and carry on as usual. Deprecated: now the manifest is always regenerated.)rNz6formats for source distribution (comma-separated list))ú 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])ú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 formatsr#r%)r$r&Úcheck)ZREADMEz README.txtz README.rstcCsTd|_d|_d|_d|_d|_d|_dg|_d|_d|_d|_ d|_ d|_ d|_ dS)NérÚgztar) ÚtemplateÚmanifestÚ use_defaultsr%Ú manifest_onlyZforce_manifestrÚ keep_tempÚdist_dirÚ archive_filesrÚownerÚgrouprrrrÚinitialize_optionseszsdist.initialize_optionscCsZ|jdurd|_|jdur d|_| d¡t |j¡}|rFtd|ƒ‚|jdurVd|_dS)NZMANIFESTz MANIFEST.inrzunknown archive format '%s'Údist)r5r4Zensure_string_listrZcheck_archive_formatsrr r9)rZ bad_formatrrrÚfinalize_options|s    ÿ zsdist.finalize_optionscCs>tƒ|_| ¡D]}| |¡q| ¡|jr2dS| ¡dSr)r ÚfilelistZget_sub_commandsZ run_commandÚ get_file_listr7Úmake_distribution)rZcmd_namerrrÚrunŒs  z sdist.runcCs*tdtƒ|j d¡}| ¡| ¡dS)Nzadistutils.command.sdist.check_metadata is deprecated, use the check command insteadr1)rÚPendingDeprecationWarningÚ distributionZget_command_objZensure_finalizedrC)rr1rrrÚ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Úisfiler4Ú_manifest_is_not_generatedÚ read_manifestr@rZremove_duplicatesrÚfindallr6Ú add_defaultsÚ read_templater%Úprune_file_listÚwrite_manifest)rZtemplate_existsrrrrAª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_scriptsrrrrrMÒszsdist.add_defaultscCs:tj |¡sdStj |¡}tj |¡\}}|t |¡vS)NF)rGrHÚexistsÚabspathÚsplitÚlistdir)ÚfspathrYZ 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) ÚREADMESrEZ script_nameÚ isinstanceÚtupler^r@rrÚjoin)rZ standardsÚfnZaltsZgot_itrrrrQùs"   ÿ zsdist._add_defaults_standardscCs4ddg}|D]"}ttjjt|ƒƒ}|j |¡q dS)Nz test/test*.pyz setup.cfg)ÚfilterrGrHrIrr@Úextend)rZoptionalÚpatternÚfilesrrrrRszsdist._add_defaults_optionalcCs\| d¡}|j ¡r$|j | ¡¡|jD],\}}}}|D]}|j tj   ||¡¡q:q*dS)NÚbuild_py) Úget_finalized_commandrEZhas_pure_modulesr@reÚget_source_filesÚ data_filesrrGrHrb)rrhZpkgZsrc_dirZ build_dirÚ filenamesr]rrrrSs   zsdist._add_defaults_pythoncCsz|j ¡rv|jjD]b}t|tƒrBt|ƒ}tj |¡rt|j   |¡q|\}}|D]$}t|ƒ}tj |¡rN|j   |¡qNqdSr) rEZhas_data_filesrkr`Ústrr rGrHrIr@r)rÚitemÚdirnamerlr*rrrrT$s     zsdist._add_defaults_data_filescCs(|j ¡r$| d¡}|j | ¡¡dS)NÚ build_ext)rEZhas_ext_modulesrir@rerj)rrprrrrU5s  zsdist._add_defaults_extcCs(|j ¡r$| d¡}|j | ¡¡dS)NÚ build_clib)rEZhas_c_librariesrir@rerj)rrqrrrrV:s  zsdist._add_defaults_c_libscCs(|j ¡r$| d¡}|j | ¡¡dS)NÚ build_scripts)rEZ has_scriptsrir@rerj)rrrrrrrW?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'r2)Zstrip_commentsZ skip_blanksZ join_linesZ lstrip_wsZ rstrip_wsZ collapse_joinz%s, line %d: %s) r Úinfor4rÚreadliner@Zprocess_template_liner Ú ValueErrorrr]Z current_lineÚclose)rr4ÚlineÚmsgrrrrNDs" þ þ"zsdist.read_templatecCsz| d¡}|j ¡}|jjd|jd|jjd|dtjdkrFd}nd}gd¢}d|d |¡|f}|jj|d d dS) NÚbuild)ÚprefixÚwin32z/|\\ú/)ÚRCSÚCVSz\.svnz\.hgz\.gitz\.bzrÚ_darcsz(^|%s)(%s)(%s).*ú|r2)Zis_regex) rirEÚ get_fullnamer@Zexclude_patternZ build_baseÚsysÚplatformrb)rryÚbase_dirÚsepsZvcs_dirsZvcs_ptrnrrrrOas   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') rJr rsr5r@rgÚinsertZexecuterZ write_file)rZcontentrrrrPysÿ ÿzsdist.write_manifestcCsDtj |j¡sdSt|jƒ}z| ¡}W| ¡n | ¡0|dkS)NFz+# file GENERATED by distutils, do NOT edit )rGrHrIr5Úopenrtrv)rÚfpZ first_linerrrrJˆ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 rsr5r‡ÚstripÚ startswithr@r)rr5rwrrrrK”s zsdist.read_manifestcCs®| |¡tj|||jdttdƒr4d}d|}n d}d|}|sPt d¡n t |¡|D]<}tj   |¡s|t d|¡q^tj   ||¡}|j |||dq^|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ÚhasattrrGr rrsrHrIrbZ copy_filerEÚmetadataZwrite_pkg_info)rr„rgrŽrxÚ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||jddS)NÚtar)r„r;r<rÚrŒ)rErrGrHrbr9r“r@rgrrÚpopÚindexÚ make_archiver;r<Z dist_filesr:r8rZ remove_treer)rr„Ú base_namer:Úfmtr‘rrrrBÌs    ÿ zsdist.make_distributioncCs|jSr)r:rrrrÚget_archive_filesêszsdist.get_archive_files)#Ú__name__Ú __module__Ú __qualname__Ú descriptionr Z user_optionsZboolean_optionsrZ help_optionsZ negative_optZ sub_commandsr_r=r?rCrFrArMÚ staticmethodr^rQrRrSrTrUrVrWrNrOrPrJrKr“rBr›rrrrr$sH'ÿÿÿ (  *r)rGr‚rÚwarningsrZdistutils.corerZ distutilsrrrZdistutils.text_filerZdistutils.filelistr r Zdistutils.utilr Zdistutils.errorsr r rrrrrrÚs