ó Àfc@s@dZddlmZddlmZddlmZddlm Z ddlZddlZddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&ddl'j(Z(ddl)m*Z*ddlm+Z+d„Z,defd„ƒYZ-defd„ƒYZdefd„ƒYZ.d„Z/d„Z0d„Z1d„Z2d„Z3d„Z4d„Z5d„Z6e7d „Z8d!„Z9d"„Z:dS(#sUsetuptools.command.egg_info Create a distribution's .egg-info directory and contentsiÿÿÿÿ(tFileList(tDistutilsInternalError(t convert_path(tlogN(tsix(tmap(tCommand(tsdist(t walk_revctrl(t edit_config(t bdist_egg(tparse_requirementst safe_namet parse_versiont safe_versiont yield_linest EntryPointtiter_entry_pointst to_filename(tglob(t packagingcCs€d}|jtjjƒ}tjtjƒ}d|f}xt|ƒD]\}}|t|ƒdk}|dkr¢|rˆ|d7}qG|d||f7}qGnd}t|ƒ} x‹|| krA||} | dkrê||d7}nJ| d kr||7}n1| d kr!|d} | | krB|| d krB| d} n| | krk|| d krk| d} nx*| | kr—|| d kr—| d} qnW| | krº|tj| ƒ7}q4||d| !} d} | dd krôd } | d} n| tj| ƒ7} |d| f7}| }n|tj| ƒ7}|d7}q·W|sG||7}qGqGW|d7}tj|dtj tj BƒS(sö Translate a file path glob like '*.txt' in to a regular expression. This differs from fnmatch.translate which allows wildcards to match directory separators. It also knows about '**/' which matches any number of directories. ts[^%s]is**s.*s (?:%s+%s)*it*t?t[t!t]t^s[%s]s\Ztflags( tsplittostpathtseptretescapet enumeratetlentcompilet MULTILINEtDOTALL(RtpattchunksR t valid_chartctchunkt last_chunktit chunk_lentchartinner_itinnert char_class((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyttranslate_pattern$sV                tegg_infocBs½eZdZddddgZdgZidd 6Zd „Zed„ƒZej d„ƒZd„Z d„Z e d„Z d„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(s+create a distribution's .egg-info directorys egg-base=tesLdirectory containing .egg-info directories (default: top of the source tree)stag-datetds0Add date stamp (e.g. 20050528) to version numbers tag-build=tbs-Specify explicit tag to add to version numbersno-datetDs"Don't include date stamp [default]cCsLd|_d|_d|_d|_d|_d|_t|_d|_ dS(Ni( tNonetegg_namet egg_versiontegg_baseR5t tag_buildttag_datetFalsetbroken_egg_infotvtags(tself((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pytinitialize_options‡s       cCsdS(N((RC((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyttag_svn_revision”scCsdS(N((RCtvalue((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRE˜scCs@tjƒ}|jƒ|diR?R5N(t collectionst OrderedDictttagsR tdict(RCtfilenameR5((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pytsave_version_info�s  cCsçt|jjƒƒ|_|jƒ|_|jƒ|_t|jƒ}yKt |t j j ƒ}|ridnd}t t||j|jfƒƒWn3tk rÅtjjd|j|jfƒ‚nX|jdkr|jj}|pêijdtjƒ|_n|jdƒt|jƒd|_|jtjkrXtjj|j|jƒ|_nd|jkrt|jƒn|j|jj_ |jj }|dk rã|j!|jj"ƒkrã|j|_#t|jƒ|_$d|j_ ndS(Ns%s==%ss%s===%ss2Invalid distribution name or version syntax: %s-%sRR=s .egg-infot-(%R t distributiontget_nameR;RIRBttagged_versionR<R t isinstanceRtversiontVersiontlistR t ValueErrort distutilsterrorstDistutilsOptionErrorR=R:t package_dirtgetRtcurdirtensure_dirnameRR5Rtjointcheck_broken_egg_infotmetadatat _patched_disttkeytlowert_versiont_parsed_version(RCtparsed_versiont is_versiontspectdirstpd((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pytfinalize_optionsªs8!   ! !  $ cCsl|r|j|||ƒnLtjj|ƒrh|dkrX| rXtjd||ƒdS|j|ƒndS(s¹Write `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). s$%s not set in setup(), but %s existsN(t write_fileRRtexistsR:Rtwarnt delete_file(RCtwhatRKtdatatforce((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pytwrite_or_delete_fileÙs  cCsdtjd||ƒtjr.|jdƒ}n|js`t|dƒ}|j|ƒ|jƒndS(sªWrite `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. swriting %s to %ssutf-8twbN( RtinfoRtPY3tencodetdry_runtopentwritetclose(RCRoRKRptf((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRkís   cCs-tjd|ƒ|js)tj|ƒndS(s8Delete `filename` (if not a dry run) after announcing its deleting %sN(RRtRwRtunlink(RCRK((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRnûs cCsE|jjƒ}|jr4|j|jƒr4t|ƒSt||jƒS(N(RNt get_versionRBtendswithR(RCRR((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRPs cCs¿|j|jƒ|jj}xXtdƒD]J}|jd|ƒ|jƒ}|||jtj j |j|jƒƒq)Wtj j |jdƒ}tj j |ƒr±|j |ƒn|j ƒdS(Nsegg_info.writerst installersnative_libs.txt(tmkpathR5RNtfetch_build_eggRtrequiretresolvetnameRRR]RlRnt find_sources(RCRteptwritertnl((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pytrun s  ,cCsBd}|jr||j7}n|jr>|tjdƒ7}n|S(NRs-%Y%m%d(R>R?ttimetstrftime(RCRR((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRIs   cCsJtjj|jdƒ}t|jƒ}||_|jƒ|j|_dS(s"Generate SOURCES.txt manifest files SOURCES.txtN( RRR]R5tmanifest_makerRNtmanifestR‰tfilelist(RCtmanifest_filenametmm((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyR… s   cCsŽ|jd}|jtjkr:tjj|j|ƒ}ntjj|ƒrŠtjddddd||j ƒ|j |_ ||_ ndS(Ns .egg-infoRMiNs¦ 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=RR[RR]RlRRmR5RA(RCtbei((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyR^(s   (s egg-base=R6sLdirectory containing .egg-info directories (default: top of the source tree)(stag-dateR7s0Add date stamp (e.g. 20050528) to version number(s tag-build=R8s-Specify explicit tag to add to version number(sno-dateR9s"Don't include date stamp [default](t__name__t __module__t descriptiont user_optionstboolean_optionst negative_optRDtpropertyREtsetterRLRjR@RrRkRnRPR‰RIR…R^(((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyR5ws*     /       RcBs†eZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „ZRS(cCsó|j|ƒ\}}}}|dkrw|jddj|ƒƒx«|D](}|j|ƒsHtjd|ƒqHqHWnx|dkrÓ|jddj|ƒƒxO|D](}|j|ƒs¤tjd|ƒq¤q¤Wn|dkr/|jd dj|ƒƒxó|D](}|j|ƒstjd |ƒqqWnÀ|d kr‹|jd dj|ƒƒx—|D](}|j|ƒs\tjd |ƒq\q\Wnd|dkró|jd|dj|ƒfƒx5|D].}|j ||ƒs¾tjd||ƒq¾q¾Wnü|dkr[|jd|dj|ƒfƒxÍ|D].}|j ||ƒs&tjd||ƒq&q&Wn”|dkr�|jd|ƒ|j |ƒsïtjd|ƒqïnR|dkrß|jd|ƒ|j |ƒsïtjd|ƒqïnt d|ƒ‚dS(Ntincludesinclude t s%warning: no files found matching '%s'texcludesexclude s9warning: no previously-included files found matching '%s'sglobal-includesglobal-include s>warning: no files found matching '%s' anywhere in distributionsglobal-excludesglobal-exclude sRwarning: no previously-included files matching '%s' found anywhere in distributionsrecursive-includesrecursive-include %s %ss:warning: no files found matching '%s' under directory '%s'srecursive-excludesrecursive-exclude %s %ssNwarning: no previously-included files matching '%s' found under directory '%s'tgraftsgraft s+warning: no directories found matching '%s'tprunesprune s6no previously-included directories found matching '%s's'this cannot happen: invalid action '%s'(t_parse_template_linet debug_printR]RšRRmRœtglobal_includetglobal_excludetrecursive_includetrecursive_excludeR�RžR(RCtlinetactiontpatternstdirt dir_patterntpattern((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pytprocess_template_line;sd                         cCsrt}xett|jƒdddƒD]D}||j|ƒr&|jd|j|ƒ|j|=t}q&q&W|S(s† Remove all files from the file list that match the predicate. Return True if any matching files were removed iiÿÿÿÿs removing (R@trangeR$tfilesR tTrue(RCt predicatetfoundR.((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyt _remove_files„s&  cCsHgt|ƒD]}tjj|ƒs |^q }|j|ƒt|ƒS(s#Include files that match 'pattern'.(RRRtisdirtextendtbool(RCRªR{R°((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRš‘s1 cCst|ƒ}|j|jƒS(s#Exclude files that match 'pattern'.(R4R±tmatch(RCRªRµ((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRœ—s cCsftjj|d|ƒ}gt|dtƒD]}tjj|ƒs+|^q+}|j|ƒt|ƒS(sN Include all files anywhere in 'dir/' that match the pattern. s**t recursive(RRR]RR®R²R³R´(RCR¨Rªt full_patternR{R°((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyR£œs  cCs.ttjj|d|ƒƒ}|j|jƒS(sM Exclude any file anywhere in 'dir/' that match the pattern. s**(R4RRR]R±Rµ(RCR¨RªRµ((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyR¤¦scCsOgt|ƒD]%}tjj|ƒD] }|^q#q }|j|ƒt|ƒS(sInclude all files from 'dir/'.(RRVRŽtfindallR³R´(RCR¨t match_dirtitemR°((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyR�­s % cCs+ttjj|dƒƒ}|j|jƒS(sFilter out files from 'dir/'.s**(R4RRR]R±Rµ(RCR¨Rµ((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRž·scCsy|jdkr|jƒnttjjd|ƒƒ}g|jD]}|j|ƒrA|^qA}|j|ƒt |ƒS(s“ Include all files anywhere in the current directory that match the pattern. This is very inefficient on large file trees. s**N( tallfilesR:R¸R4RRR]RµR³R´(RCRªRµR{R°((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyR¡¼s  + cCs+ttjjd|ƒƒ}|j|jƒS(sD Exclude all files anywhere that match the pattern. s**(R4RRR]R±Rµ(RCRªRµ((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyR¢ÈscCsN|jdƒr|d }nt|ƒ}|j|ƒrJ|jj|ƒndS(Ns iÿÿÿÿ(R~Rt _safe_pathR­tappend(RCRºR((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyR½Ïs   cCs |jjt|j|ƒƒdS(N(R­R³tfilterR¼(RCtpaths((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyR³×scCs"tt|j|jƒƒ|_dS(sÜ Replace self.files with only safe paths Because some owners of FileList manipulate the underlying ``files`` attribute directly, this method must be called to repair those paths. N(RTR¾R¼R­(RC((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyt_repairÚscCsÈd}tj|ƒ}|dkr6tjd|ƒtStj|dƒ}|dkrktj||dƒtSy,tjj |ƒs’tjj |ƒr–t SWn*t k rÃtj||t j ƒƒnXdS(Ns!'%s' not %s encodable -- skippings''%s' in unexpected encoding -- skippingsutf-8(t unicode_utilstfilesys_decodeR:RRmR@t try_encodeRRRlR®tUnicodeEncodeErrortsystgetfilesystemencoding(RCRtenc_warntu_patht utf8_path((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyR¼äs  $ (R’R“R«R±RšRœR£R¤R�RžR¡R¢R½R³RÀR¼(((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyR8s I        RŒcBseeZdZd„Zd„Zd„Zd„Zd„Zd„Ze d„ƒZ d„Z d „Z RS( s MANIFEST.incCs(d|_d|_d|_d|_dS(Ni(t use_defaultsRžt manifest_onlytforce_manifest(RC((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRDÿs   cCsdS(N((RC((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRjscCsŒtƒ|_tjj|jƒs.|jƒn|jƒtjj|jƒrZ|j ƒn|j ƒ|jj ƒ|jj ƒ|jƒdS(N( RRŽRRRlR�twrite_manifestt add_defaultsttemplatet read_templatetprune_file_listtsorttremove_duplicates(RC((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyR‰s       cCs"tj|ƒ}|jtjdƒS(Nt/(RÁRÂtreplaceRR (RCR((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyt_manifest_normalizescCsb|jjƒg|jjD]}|j|ƒ^q}d|j}|jt|j|f|ƒdS(so Write the file list in 'self.filelist' to the manifest file named by 'self.manifest'. swriting manifest file '%s'N(RŽRÀR­RÖR�texecuteRk(RCR{R­tmsg((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRÍs ( cCs&|j|ƒs"tj||ƒndS(N(t_should_suppress_warningRRm(RCRØ((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRm$scCstjd|ƒS(s; suppress missing-file warnings from sdist sstandard file .*not found(R!Rµ(RØ((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRÙ(scCs£tj|ƒ|jj|jƒ|jj|jƒttƒƒ}|r[|jj|ƒn"t j j |jƒr}|j ƒn|j dƒ}|jj|jƒdS(NR5(RRÎRŽR½RÏR�RTRR³RRRlt read_manifesttget_finalized_commandR�R5(RCtrcfilestei_cmd((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRÎ/s  cCsy|jdƒ}|jjƒ}|jj|jƒ|jj|ƒtjtj ƒ}|jj d|d|ddƒdS(Ntbuilds(^|s)(RCS|CVS|\.svn)tis_regexi( RÛRNt get_fullnameRŽRžt build_baseR!R"RR texclude_pattern(RCRÞtbase_dirR ((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRÑ;s( R’R“RÏRDRjR‰RÖRÍRmt staticmethodRÙRÎRÑ(((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRŒüs     cCsGdj|ƒ}|jdƒ}t|dƒ�}|j|ƒWdQXdS(s{Create a file with the specified name and write 'contents' (a sequence of strings without line terminators) to it. s sutf-8RsN(R]RvRxRy(RKtcontentsR{((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRkEscCs«tjd|ƒ|js§|jj}|j|j|_}|j|j|_}z|j |j ƒWd|||_|_Xt |jddƒ}t j|j |ƒndS(Ns writing %stzip_safe(RRtRwRNR_R<RRR;R„twrite_pkg_infoR5tgetattrR:R twrite_safety_flag(tcmdtbasenameRKR_toldvertoldnametsafe((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyRçRs  cCs&tjj|ƒr"tjdƒndS(NssWARNING: 'depends.txt' is not used by setuptools 0.6! Use the install_requires/extras_require setup() args instead.(RRRlRRm(RêRëRK((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pytwarn_depends_obsoleteescCs;t|p dƒ}d„}t||ƒ}|j|ƒdS(NcSs|dS(Ns ((R¥((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pytoR((RRt writelines(tstreamtreqstlinest append_cr((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyt_write_requirementsms cCs’|j}tjƒ}t||jƒ|jp1i}x>t|ƒD]0}|jdjt ƒ�ƒt|||ƒqAW|j d||j ƒƒdS(Ns [{extra}] t requirements( RNRtStringIORötinstall_requirestextras_requiretsortedRytformattvarsRrtgetvalue(RêRëRKtdistRpRútextra((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pytwrite_requirementsts  cCs<tjƒ}t||jjƒ|jd||jƒƒdS(Nssetup-requirements(tioRøRöRNtsetup_requiresRrRþ(RêRëRKRp((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pytwrite_setup_requirementss cCsetjg|jjƒD]}|jddƒd^qƒ}|jd|djt|ƒƒdƒdS(Nt.iistop-level namess (RJtfromkeysRNtiter_distribution_namesRRkR]Rû(RêRëRKtktpkgs((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pytwrite_toplevel_names…s2cCst|||tƒdS(N(t write_argR®(RêRëRK((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyt overwrite_arg�scCsgtjj|ƒd}t|j|dƒ}|dk rMdj|ƒd}n|j||||ƒdS(Nis (RRtsplitextRèRNR:R]Rr(RêRëRKRqtargnameRF((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyR “s  cCsö|jj}t|tjƒs*|dkr3|}n©|dk rÜg}x‚t|jƒƒD]n\}}t|tjƒs¯tj ||ƒ}dj tt t |j ƒƒƒƒ}n|jd||fƒqXWdj |ƒ}n|jd||tƒdS(Ns s [%s] %s Rs entry points(RNt entry_pointsRQRt string_typesR:RûtitemsRt parse_groupR]RtstrtvaluesR½RrR®(RêRëRKR†RptsectionRå((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pyt write_entries›s   'cCs}tjdtƒtjjdƒrytjdƒ�C}x9|D]1}tj d|ƒ}|r;t |j dƒƒSq;WWdQXndS(sd Get a -r### off of PKG-INFO Version in case this is an sdist of a subversion revision. s$get_pkg_info_revision is deprecated.sPKG-INFOsVersion:.*-r(\d+)\s*$iNi( twarningsRmtDeprecationWarningRRRlRRxR!Rµtinttgroup(R{R¥Rµ((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pytget_pkg_info_revision¬s  (;t__doc__tdistutils.filelistRt _FileListtdistutils.errorsRtdistutils.utilRRVRRR!RÅRRRŠRGtsetuptools.externRtsetuptools.extern.six.movesRt setuptoolsRtsetuptools.command.sdistRRtsetuptools.command.setoptR tsetuptools.commandR t pkg_resourcesR R R RRRRRtsetuptools.unicode_utilsRÁtsetuptools.globRRR4R5RŒRkRçRïRöRRR R R@R RR(((s?/usr/lib/python2.7/site-packages/setuptools/command/egg_info.pytsN         : SÁÄI