MRe7@sdZddlZddlZddlZddlmZddlZddlmZddl m Z ddl m Z ddlm Z ddlmZdd lmZdd lmZmZmZmZmZmZmZmZdd l mZGd d d eZGdddeZGddde ZddZddZ ddZ!ddZ"ddZ#ddZ$ddd Z%d!d"Z&d#d$Z'dS)%zUsetuptools.command.egg_info Create a distribution's .egg-info directory and contentsN)Command)log)sdist) basestring) svn_utils) convert_path)FileList)parse_requirements safe_name parse_version safe_version yield_lines EntryPointiter_entry_points to_filename) walk_revctrlc@seZdZdZd.d/d0d1d2d3gZddgZidd6dd6ZddZddZddZ dddZ ddZ dd Z d!d"Z d#d$Zd%d&Zed'd(Zd)d*Zd+d,Zd-S)4egg_infoz+create a distribution's .egg-info directory egg-base=eLdirectory containing .egg-info directories (default: top of the source tree)tag-svn-revisionr,Add subversion revision ID to version numbertag-dated0Add date stamp (e.g. 20050528) to version number tag-build=b-Specify explicit tag to add to version numberno-svn-revisionR*Don't add subversion revision ID [default]no-dateD"Don't include date stamp [default]cCsUd|_d|_d|_d|_d|_d|_d|_d|_d|_dS)NrF) egg_name egg_versionegg_baser tag_buildtag_svn_revisiontag_datebroken_egg_infovtags)selfr.6/tmp/pip-l4uy7dan-build/setuptools/command/egg_info.pyinitialize_options)s        zegg_info.initialize_optionsc CsKddlm}tdtddddd|j}|||dS)Nr) edit_configrr)r*r()Zsetuptools.command.setoptr1dicttags)r-filenamer1valuesr.r.r/save_version_info4szegg_info.save_version_infoc Cst|jj|_|j|_|j|_y$tt d|j|jfWn4t k rt j j d|j|jfYnX|jdkr|jj}|pijdtj|_n|jdt|jd|_|jtjkr#tjj|j|j|_nd|jkr?|jn|j|jj_|jj}|dk r|j|jjkr|j|_t|j|_ d|j_ndS)Nz%s==%sz2Invalid distribution name or version syntax: %s-%sr'z .egg-info-)!r distributionget_namer%r3r,tagged_versionr&listr ValueError distutilserrorsDistutilsOptionErrorr' package_dirgetoscurdirensure_dirnamerrpathjoincheck_broken_egg_infometadataversionZ _patched_distkeylower_versionr _parsed_version)r-dirspdr.r.r/finalize_options?s2!   ! !  $ zegg_info.finalize_optionsFcCsl|r|j|||nLtjj|rh|dkrX| rXtjd||dS|j|ndS)aWrite `data` to `filename` or delete if empty If `data` is non-empty, this routine is the same as ``write_file()``. If `data` is empty but not ``None``, this is the same as calling ``delete_file(filename)`. If `data` is ``None``, then this is a no-op unless `filename` exists, in which case a warning is issued about the orphaned file (if `force` is false), or deleted (if `force` is true). Nz$%s not set in setup(), but %s exists) write_filerCrFexistsrwarn delete_file)r-whatr4dataforcer.r.r/write_or_delete_filegs  zegg_info.write_or_delete_filecCsjtjd||tjdkr4|jd}n|jsft|d}|j||jndS)zWrite `data` to `filename` (if not a dry run) after announcing it `what` is used in a log message to identify what is being written to the file. zwriting %s to %szutf-8wbN)rZ) rinfosys version_infoencodedry_runopenwriteclose)r-rVr4rWfr.r.r/rR{s  zegg_info.write_filecCs-tjd||js)tj|ndS)z8Delete `filename` (if not a dry run) after announcing itz deleting %sN)rr\r`rCunlink)r-r4r.r.r/rUs zegg_info.delete_filecCsE|jj}|jr4|j|jr4t|St||jS)N)r9 get_versionr,endswithr )r-rJr.r.r/r;s zegg_info.tagged_versioncCs|j|j|jj}xNtdD]@}|jd|}|||jtjj |j|jq)Wtjj |jd}tjj |r|j |n|j dS)Nzegg_info.writers installerznative_libs.txt) mkpathrr9Zfetch_build_eggrloadnamerCrFrGrSrU find_sources)r-rhepwriternlr.r.r/runs ,z egg_info.runcCsd}|jr||j7}n|jrctjjdsLtjjdrc|d|j7}n|jrddl}||jd7}n|S)Nr7z.svnzPKG-INFOz-r%srz-%Y%m%d) r(r)rCrFrSget_svn_revisionr*timestrftime)r-rJrrr.r.r/r3s  $  z egg_info.tagscCsttjjtjjS)N)strrZSvnInforjrCrD get_revisionr.r.r.r/rqszegg_info.get_svn_revisioncCsJtjj|jd}t|j}||_|j|j|_dS)z"Generate SOURCES.txt manifest filez SOURCES.txtN) rCrFrGrmanifest_makerr9manifestrpfilelist)r-Zmanifest_filenamemmr.r.r/rls   zegg_info.find_sourcescCs|jd}|jtjkr:tjj|j|}ntjj|rtjddddd||j |j |_ ||_ ndS)Nz .egg-infor8Nz Note: Your current .egg-info directory has a '-' in its name; this will not work correctly with "setup.py develop". Please rename %s to %s to correct this problem. ) r%r'rCrDrFrGrSrrTrr+)r-Zbeir.r.r/rHs   zegg_info.check_broken_egg_infoN)rrr)rrr)rrr)rrr)rr r!)r"r#r$)__name__ __module__ __qualname__ description user_optionsboolean_options negative_optr0r6rQrYrRrUr;rpr3 staticmethodrqrlrHr.r.r.r/rs0      (      rc@s"eZdZdZddZdS)rz@File list that accepts only existing, platform-independent pathsc Cs |jdr"|dd}nt|}tjdkryDtjj|smtjj|jdr|jj |nWqt k rtjj|jdr|jj |nt j d|tj YqXn%tjj|r|jj |ndS)N rZzutf-8z!'%s' not %s encodable -- skipping)rZ)rgrr]r^rCrFrSr_filesappendUnicodeEncodeErrorrrTgetfilesystemencoding)r-itemrFr.r.r/rs -  zFileList.appendN)r{r|r}__doc__rr.r.r.r/rs rc@sjeZdZdZddZddZddZdd Zd d Zd d Z ddZ dS)rvz MANIFEST.incCs(d|_d|_d|_d|_dS)Nr)Z use_defaultsZpruneZ manifest_onlyZforce_manifest)r-r.r.r/r0s   z!manifest_maker.initialize_optionscCsdS)Nr.)r-r.r.r/rQszmanifest_maker.finalize_optionscCst|_tjj|js.|jn|jj|jtjj|j rg|j n|j |jj |jj |jdS)N)rrxrCrFrSrwwrite_manifestfindall add_defaultstemplateZ read_templateprune_file_listsortZremove_duplicates)r-r.r.r/rps        zmanifest_maker.runc Cstjd krg}xX|jjD]J}y|jdWn#tk r^tjd|Yq"X|j|q"W||j_n|jj}t j dkrdd|D}n|j t |j |fd|j dS) zWrite the file list in 'self.filelist' (presumably as filled in by 'add_defaults()' and 'read_template()') to the manifest file named by 'self.manifest'. rZzutf-8z$'%s' not UTF-8 encodable -- skipping/cSs%g|]}|jtjdqS)r)replacerCsep).0rdr.r.r/ s z1manifest_maker.write_manifest..zwriting manifest file '%s'N)rZ)r]r^rxrr_rrrTrrCrexecuterRrw)r-rfiler.r.r/rs  zmanifest_maker.write_manifestcCs&|jds"tj||ndS)Nzstandard file not found:) startswithrrT)r-msgr.r.r/rTszmanifest_maker.warncCstj||jj|j|jj|jtt}|r[|jj|n"t j j |jr}|j n|j d}|jjdd|jdS)Nr*prefix)rrrxrrrwr<rextendrCrFrSZ read_manifestget_finalized_commandZinclude_patternr)r-ZrcfilesZei_cmdr.r.r/rs  zmanifest_maker.add_defaultscCs|jd}|jj}|jjdd|j|jjdd|tjtj }|jj|d|dddS)Nbuildrz(RCS|CVS|\.svn)Zis_regexr) rr9 get_fullnamerxZexclude_pattern build_basereescaperCr)r-rbase_dirrr.r.r/r%s zmanifest_maker.prune_file_listN) r{r|r}rr0rQrprrTrrr.r.r.r/rvs      rvcCsZdj|}tjdkr0|jd}nt|d}|j||jdS)z{Create a file with the specified name and write 'contents' (a sequence of strings without line terminators) to it.  rZzutf-8r[N)rZ)rGr]r^r_rarbrc)r4contentsrdr.r.r/rR.s  rRc Cstjd||js|jj}|j|j|_}|j|j|_}z|j |j Wd|||_|_Xt |jdd}ddl m }|j|j |ndS)Nz writing %sZzip_safer) bdist_egg)rr\r`r9rIr&rJr%rkwrite_pkg_inforgetattrZsetuptools.commandrZwrite_safety_flag)cmdbasenamer4rIZoldverZoldnamesaferr.r.r/r9s  rcCs&tjj|r"tjdndS)NzsWARNING: 'depends.txt' is not used by setuptools 0.6! Use the install_requires/extras_require setup() args instead.)rCrFrSrrT)rrr4r.r.r/warn_depends_obsoleteJsrcCs|j}djt|jpfg}xI|jp9ijD]2\}}|jd|djt|fq@W|jd|dj|dS)Nrz [%s] %s requirementsr7)r9rGr Zinstall_requiresZextras_requireitemsrrY)rrr4distrWextrareqsr.r.r/write_requirementsRs  !"*rcCsItjdd|jjD}|jd|dj|ddS)NcSs&g|]}|jdddqS).rr)split)rkr.r.r/r\s z(write_toplevel_names..ztop-level namesr)r2fromkeysr9Ziter_distribution_namesrRrG)rrr4pkgsr.r.r/write_toplevel_namesYs rcCst|||ddS)NT) write_arg)rrr4r.r.r/ overwrite_argcsrFcCsgtjj|d}t|j|d}|dk rMdj|d}n|j||||dS)Nrr)rCrFsplitextrr9rGrY)rrr4rXZargnamevaluer.r.r/rfs  rcCs|jj}t|ts'|dkr0|}n|dk rg}xs|jD]e\}}t|tstj||}djtt |j }n|j d||fqOWdj|}n|j d||ddS)Nrz [%s] %s r7z entry pointsT) r9Z entry_points isinstancerrr parse_grouprGmaprtr5rrY)rrr4rmrWsectionrr.r.r/ write_entriesms   !rcCsntjjdrjtdd}x9|D]1}tjd|}|r(t|jdSq(W|jndS)NzPKG-INFOrUzVersion:.*-r(\d+)\s*$rr) rCrFrSrarmatchintgrouprc)rdlinerr.r.r/get_pkg_info_revision}s  r)(rrCrr] setuptoolsrdistutils.errorsr>rZsetuptools.command.sdistrZsetuptools.compatrrdistutils.utilrdistutils.filelistrZ _FileList pkg_resourcesr r r r r rrrrrrvrRrrrrrrrrr.r.r.r/s2    :J