ž «ÿfãEc@södZddlZddlZddlZddlTddlmZddlmZddlm Z ddl m Z m Z m Z mZddlmZddlTdd lmZdd l mZdd lmZd d „ZGdd„de ƒZdS(uadistutils.command.sdist Implements the Distutils 'sdist' command (create a source distribution).iN(u*(uglob(uwarn(uCommand(udir_utiludep_utilu file_utilu archive_util(uTextFile(uFileList(ulog(u convert_pathcCs€ddlm}ddlm}g}x6|jƒD](}|jd|d||dfƒq3W|jƒ||ƒjdƒdS(uoPrint all possible values for the 'formats' option (used by the "--help-formats" command-line option). i(u FancyGetopt(uARCHIVE_FORMATSuformats=iu.List of available source distribution formats:N( udistutils.fancy_getoptu FancyGetoptudistutils.archive_utiluARCHIVE_FORMATSukeysuappenduNoneusortu print_help(u FancyGetoptuARCHIVE_FORMATSuformatsuformat((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyu show_formatss  u show_formatscBsi|EeZdZdZdd„ZdGdHdIdJdKdLdMdNdOddddfdPdQg Zd ddddd!gZd#dFd$efgZ id d 6dd6Z id%d&6d'd(6Z d)efgZ d*d+„Z d,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„Zd:d;„Zd<d=„Zd>d?„Zd@dA„ZdBdC„ZdDdE„ZdFS(Rusdistu6create a source distribution (tarball, zip file, etc.)cCs|jS(uYCallable used for the check sub-command. Placed here so user_options can view it(umetadata_check(uself((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyuchecking_metadata&susdist.checking_metadatau template=utu5name of manifest template file [default: MANIFEST.in]u manifest=umu)name of manifest file [default: MANIFEST]u use-defaultsuRinclude the default file set in the manifest [default; disable with --no-defaults]u no-defaultsu"don't include the default file setupruneu‰specifically exclude files/directories that should not be distributed (build tree, RCS/CVS dirs, etc.) [default; disable with --no-prune]uno-pruneu$don't automatically exclude anythingu manifest-onlyuouEjust regenerate the manifest and then stop (implies --force-manifest)uforce-manifestufukforcibly regenerate the manifest and carry on as usual. Deprecated: now the manifest is always regenerated.uformats=u6formats for source distribution (comma-separated list)u keep-tempuku1keep the distribution tree around after creating uarchive file(s)u dist-dir=uduFdirectory to put the source distribution archive(s) in [default: dist]umetadata-checku[Ensure that all required elements of meta-data are supplied. Warn if any missing. [default]u help-formatsu#list available distribution formatsugztaruposixuzipuntucheckcCsgd|_d|_d|_d|_d|_d|_d|_d|_d|_ d|_ d|_ dS(Nii( uNoneutemplateumanifestu use_defaultsupruneu manifest_onlyuforce_manifestuformatsu keep_tempudist_diru archive_filesumetadata_check(uself((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyuinitialize_options`s          usdist.initialize_optionsc Csá|jdkrd|_n|jdkr6d|_n|jdƒ|jdkr—y|jtjg|_Wq—tk r“t dtjƒ‚Yq—Xnt j |jƒ}|rÂt d|ƒ‚n|j dkrÝd|_ ndS(NuMANIFESTu MANIFEST.inuformatsu<don't know how to create source distributions on platform %suunknown archive format '%s'udist(umanifestuNoneutemplateuensure_string_listuformatsudefault_formatuosunameuKeyErroruDistutilsPlatformErroru archive_utilucheck_archive_formatsuDistutilsOptionErrorudist_dir(uselfu bad_format((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyufinalize_optionsus$    usdist.finalize_optionscCsUtƒ|_x!|jƒD]}|j|ƒqW|jƒ|jrGdS|jƒdS(N(uFileListufilelistuget_sub_commandsu run_commandu get_file_listu manifest_onlyumake_distribution(uselfucmd_name((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyurunŒs   u sdist.runcCs7tdtƒ|jjdƒ}|jƒ|jƒdS(uDeprecated API.uadistutils.command.sdist.check_metadata is deprecated, use the check command insteaducheckN(uwarnuPendingDeprecationWarningu distributionuget_command_objuensure_finalizedurun(uselfucheck((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyucheck_metadata¢s   usdist.check_metadatacCsåtjj|jƒ}| rP|jƒrP|jƒ|jjƒ|jjƒdS|sq|j dd|jƒn|jj ƒ|j r”|j ƒn|r§|j ƒn|jr½|jƒn|jjƒ|jjƒ|jƒdS(uCFigure out the list of files to include in the source distribution, and put it in 'self.filelist'. This might involve reading the manifest template (and writing the manifest), or just reading the manifest, or just using the default file set -- it all depends on the user's options. Nu&manifest template '%s' does not exist u(using default file list)(uosupathuisfileutemplateu_manifest_is_not_generatedu read_manifestufilelistusorturemove_duplicatesuwarnufindallu use_defaultsu add_defaultsu read_templateupruneuprune_file_listuwrite_manifest(uselfutemplate_exists((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyu get_file_listªs(            usdist.get_file_listcCs d |jjg}xÂ|D]º}t|tƒr|}d}x:|D]2}tjj|ƒrAd}|j j |ƒPqAqAW|sÓ|j ddj |ƒƒqÓqtjj|ƒrÂ|j j |ƒq|j d|ƒqWddg}x9|D]1}t tjjt|ƒƒ}|j j|ƒqêW|jdƒ}|jjƒrV|j j|jƒƒnxM|jD]B\} } } } x-| D]%} |j j tjj | | ƒƒqyWq`W|jjƒr`x¨|jjD]—}t|tƒr t|ƒ}tjj|ƒrY|j j |ƒqYqÂ|\}} x?| D]7}t|ƒ}tjj|ƒr|j j |ƒqqWqÂWn|jjƒr—|jd ƒ}|j j|jƒƒn|jjƒrÎ|jd ƒ}|j j|jƒƒn|jjƒr|jd ƒ}|j j|jƒƒnd S(u9Add all the default files to self.filelist: - README or README.txt - setup.py - test/test*.py - all pure Python modules mentioned in setup script - all files pointed by package_data (build_py) - all files defined in data_files. - all files defined as scripts. - all C sources listed as part of extensions or C libraries in the setup script (doesn't catch C headers!) Warns if (README or README.txt) or setup.py are missing; everything else is optional. uREADMEu README.txtu,standard file not found: should have one of u, ustandard file '%s' not foundu test/test*.pyu setup.cfgubuild_pyu build_extu build_clibu build_scriptsN(uREADMEu README.txtFT(u distributionu script_nameu isinstanceutupleuFalseuosupathuexistsuTrueufilelistuappenduwarnujoinufilteruisfileuglobuextenduget_finalized_commanduhas_pure_modulesuget_source_filesu data_filesuhas_data_filesustru convert_pathuhas_ext_modulesuhas_c_librariesu has_scripts(uselfu standardsufnualtsugot_ituoptionalupatternufilesubuild_pyupkgusrc_diru build_diru filenamesufilenameuitemudirnameufu build_extu build_clibu build_scripts((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyu add_defaultsÒs\      '    usdist.add_defaultscCsàtjd|jƒt|jddddddddddddƒ}zˆx|jƒ}|d krhPny|jj|ƒWqLtt fk rÉ}z%|j d |j |j |fƒWYd d }~XqLXqLWd |j ƒXd S( uÈRead and parse manifest template file named by self.template. (usually "MANIFEST.in") The parsing and processing is done by 'self.filelist', which updates itself accordingly. ureading manifest template '%s'ustrip_commentsiu skip_blanksu join_linesu lstrip_wsu rstrip_wsu collapse_joinu%s, line %d: %sN(uloguinfoutemplateuTextFileureadlineuNoneufilelistuprocess_template_lineuDistutilsTemplateErroru ValueErroruwarnufilenameu current_lineuclose(uselfutemplateulineumsg((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyu read_template"s    %usdist.read_templatecCs¼|jdƒ}|jjƒ}|jjdd|jƒ|jjdd|ƒtjdkred}nd}dddd d d d g}d |dj |ƒ|f}|jj|ddƒdS(uvPrune off branches that might slip into the file list as created by 'read_template()', but really don't belong there: * the build tree (typically "build") * the release tree itself (only an issue if we ran "sdist" previously with --keep-temp, or it aborted) * any RCS, CVS, .svn, .hg, .git, .bzr, _darcs directories ubuilduprefixuwin32u/|\\u/uRCSuCVSu\.svnu\.hgu\.gitu\.bzru_darcsu(^|%s)(%s)(%s).*u|uis_regexiN( uget_finalized_commandu distributionu get_fullnameufilelistuexclude_patternuNoneu build_baseusysuplatformujoin(uselfubuildubase_dirusepsuvcs_dirsuvcs_ptrn((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyuprune_file_list?s  usdist.prune_file_listcCst|jƒr$tjd|jƒdS|jjdd…}|jddƒ|jtj |j|fd|jƒdS(u²Write the file list in 'self.filelist' (presumably as filled in by 'add_defaults()' and 'read_template()') to the manifest file named by 'self.manifest'. u5not writing to manually maintained manifest file '%s'Niu*# file GENERATED by distutils, do NOT edituwriting manifest file '%s'( u_manifest_is_not_generateduloguinfoumanifestufilelistufilesuinsertuexecuteu file_utilu write_file(uselfucontent((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyuwrite_manifestWs   usdist.write_manifestc CsPtjj|jƒsdSt|jƒ}z|jƒ}Wd|jƒX|dkS(Nu+# file GENERATED by distutils, do NOT edit F(uosupathuisfileumanifestuFalseuopenureadlineuclose(uselfufpu first_line((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyu_manifest_is_not_generatedfs u sdist._manifest_is_not_generatedcCsytjd|jƒt|jƒ}xF|D]>}|jƒ}|jdƒs)| rWq)n|jj|ƒq)W|jƒdS(uªRead the manifest file (named by 'self.manifest') and use it to fill in 'self.filelist', the list of files to include in the source distribution. ureading manifest file '%s'u#N( uloguinfoumanifestuopenustripu startswithufilelistuappenduclose(uselfumanifestuline((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyu read_manifestrs  usdist.read_manifestcCsô|j|ƒtj||d|jƒttdƒrHd}d|}nd}d|}|sntjdƒn tj |ƒx_|D]W}tj j |ƒs®tjd|ƒq‚tj j ||ƒ}|j ||d|ƒq‚W|jjj|ƒdS( uÆCreate the directory tree that will become the source distribution archive. All directories implied by the filenames in 'files' are created under 'base_dir', and then we hard link or copy (if hard linking is unavailable) those files into place. Essentially, this duplicates the developer's source tree, but in a directory named after the distribution, containing only the files to be distributed. udry_runulinkuhardumaking hard links in %s...ucopying files to %s...u)no files to distribute -- empty manifest?u#'%s' not a regular file -- skippingN(umkpathudir_utilu create_treeudry_runuhasattruosuNoneuloguwarnuinfoupathuisfileujoinu copy_fileu distributionumetadatauwrite_pkg_info(uselfubase_dirufilesulinkumsgufileudest((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyumake_release_trees      usdist.make_release_treecCs|jjƒ}tjj|j|ƒ}|j||jjƒg}d|j kr}|j j |j j |j j dƒƒƒnxR|j D]G}|j ||d|ƒ}|j |ƒ|jjj dd|fƒq‡W||_|jsýtj|d|jƒndS(u¯Create the source distribution(s). First, we create the release tree with 'make_release_tree()'; then, we create all required archive files (according to 'self.formats') from the release tree. Finally, we clean up by blowing away the release tree (unless 'self.keep_temp' is true). The list of archive files created is stored so it can be retrieved later by 'get_archive_files()'. utarubase_dirusdistuudry_runN(u distributionu get_fullnameuosupathujoinudist_dirumake_release_treeufilelistufilesuformatsuappendupopuindexu make_archiveu dist_filesu archive_filesu keep_tempudir_utilu remove_treeudry_run(uselfubase_diru base_nameu archive_filesufmtufile((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyumake_distribution«s +    usdist.make_distributioncCs|jS(uzReturn the list of archive files created when the command was run, or None if the command hasn't run yet. (u archive_files(uself((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyuget_archive_filesÈsusdist.get_archive_filesN(u template=utu5name of manifest template file [default: MANIFEST.in](u manifest=umu)name of manifest file [default: MANIFEST](u use-defaultsNuRinclude the default file set in the manifest [default; disable with --no-defaults](u no-defaultsNu"don't include the default file set(upruneNu‰specifically exclude files/directories that should not be distributed (build tree, RCS/CVS dirs, etc.) [default; disable with --no-prune](uno-pruneNu$don't automatically exclude anything(u manifest-onlyuouEjust regenerate the manifest and then stop (implies --force-manifest)(uforce-manifestufukforcibly regenerate the manifest and carry on as usual. Deprecated: now the manifest is always regenerated.(uformats=Nu6formats for source distribution (comma-separated list)(u dist-dir=uduFdirectory to put the source distribution archive(s) in [default: dist](umetadata-checkNu[Ensure that all required elements of meta-data are supplied. Warn if any missing. [default](u__name__u __module__u __qualname__u descriptionuchecking_metadatauNoneu user_optionsuboolean_optionsu show_formatsu help_optionsu negative_optudefault_formatu sub_commandsuinitialize_optionsufinalize_optionsurunucheck_metadatau get_file_listu add_defaultsu read_templateuprune_file_listuwrite_manifestu_manifest_is_not_generatedu read_manifestumake_release_treeumake_distributionuget_archive_files(u __locals__((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyusdist"sf            ( P     * usdist(u__doc__uosustringusysutypesuglobuwarningsuwarnudistutils.coreuCommandu distutilsudir_utiludep_utilu file_utilu archive_utiludistutils.text_fileuTextFileudistutils.errorsudistutils.filelistuFileListulogudistutils.utilu convert_pathu show_formatsusdist(((u</opt/alt/python33/lib64/python3.3/distutils/command/sdist.pyus    "