kSc@sUddlZddlZddlZddlmZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z mZddlmZddlmZyddlZWn ek rddljZnXddlmZmZeedddZd Zd Zd Z d Z!d Z"e"Z#ddZ$dZ%ddZ&dZ'dZ(de)fdYZ*de*fdYZ+de+fdYZ,de*fdYZ-ddZ.de)fdYZ/de/fd YZ0d!e/fd"YZ1e2d#krQx#e.ej3d$D] Z4e4GHq?WndS(%iN(tlog(tunicodetPY2(tTemporaryDirectory(tunescape(tPopentPIPEic Csly;t|d|d|dtjdk}|j|}Wntk rOdSXt||}|j|fS(Ntstdouttstderrtshelltwin32it(iR (t_Popentsystplatformt communicatetOSErrortdecode_as_stringt returncode(targsRRtencodingtstreamtproctdata((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyt _run_commands cCsK|jdd}djg|jD]!}|j|jkr#|j^q#S(NtscheduleiR (tgetElementsByTagNametjoint childNodestnodeTypet TEXT_NODEt nodeValue(tentryRtt((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyt_get_entry_schedule0s  cCsK|jdd}djg|jD]!}|j|jkr#|j^q#S(NtpropertyiR (RRRRRR(ttargett property_textR!((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyt_get_target_property7s  cCs"tr|jd}n|}|S(Nsutf-8(Rtencode(t decoded_strR((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyt _get_xml_data>scGs6| s|dkr#tjj|Stjj||S(Nt.(tostpathR(tprefixtsuffix((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pytjoinpathGscCsyLtj}| s"|dkr5tjd}n|rKtj|nWn tjtfk rnd}nXtj dk}|sddg|S|j dr|rdS|SdS(NsUS-ASCIIitdarwinsutf-8smac-( tlocaletgetpreferredencodingtgetdefaultlocaletcodecstlookuptErrort LookupErrortNoneR Rt startswith(Rtis_osx((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pytdetermine_console_encodingLs  cCsL|dkrt}nt|ts6|j|}ntjd|}|S(s Decode the console or file output explicitly using getpreferredencoding. The text paraemeter should be a encoded string, if not no decode occurs If no encoding is given, getpreferredencoding is used. If encoding is specified, that is used instead. This would be needed for SVN --xml output. Unicode is explicitly put in composed NFC form. --xml should be UTF-8 (SVN Issue 2938) the discussion on the Subversion DEV List from 2007 seems to indicate the same. tNFCN(R8t_console_encodingt isinstanceRtdecodet unicodedatat normalize(ttextR((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRis  cCstjjjt|}t}x||D]t\}}|dkr+|jdkr+|j|t|j ds|j |j d|j dfqq+q+W|dS(s+Parse the entries from a recursive info xmlt START_ELEMENTR tdeleteR,tkindi( txmltdomtpulldomt parseStringR)tlisttnodeNamet expandNodeR"R9tappendt getAttribute(R(tdoctentriesteventtnode((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pytparse_dir_entriess  R c Cstjj|}tjj|}tjjjt|}t }x|D]\}}|dkrO|j dkrO|j |tjj|j d}tjj|j |r|t|d}nt|}x-t|D]}|jt||qWqOqOW|S(s!Parse a propget svn:externals xmlRCR$R,i(R+R,tnormpathtnormcaseRFRGRHRIR)RJRKRLRNR9tlenR&tparse_external_propRMR/( R(R-ROt externalsRQRRR,Rtexternal((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pytparse_externals_xmls   !cCsg}x|jD]}|j}|s1qntrI|jd}ntj|}trg|D]}|jd^qe}ntj|ddr|d}n |d}t |dd}|j t j j |qW|S(s Parse the value of a retrieved svn:externals entry. possible token setups (with quotng and backscaping in laters versions) URL[@#] EXT_FOLDERNAME [-r#] URL EXT_FOLDERNAME EXT_FOLDERNAME [-r#] URL sutf-8iiR(t splitlinestlstripRR'tshlextsplitR?turlparseturlsplitRRMR+R,RT(tlinesRXtlinetxRY((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRWs  %  c Cst}t|d}d}zxt|jdD]}|j}t|dkr1|\}}|jt|}|dkr||krt}q|dkr|rPqq1q1WWd|j X|S(NtrtR itKtV( tFalsetopentitertreadlineR^RVtreadtinttTruetclose( tfilenametkeytfoundtfRRbtpartsREtlength((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pytparse_prop_files    tSvnInfocBseZdZedZejdejZe ddZ ddZ dZ e dZe dZd Zd Zed Zd Zd ZRS(s Generic svn_info object. No has little knowledge of how to extract information. Use cls.load to instatiate according svn version. Paths are not filesystem encoded. c CsWt(}tdd|ddg\}}WdQX|dkrO|rO|jSdSdS(Ntsvns --config-dirs --versions--quietiR (RRtstrip(ttempdirtcodeR((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pytget_svn_versions  s!(?:([\-0-9]+):)?(\d+)([a-z]*)\s*$R c Cs;tjj|}t(}tdd|d|g\}}WdQXtjj|d}| ptjjtjj|d}t|jj d}ytd|d D} Wnt k rt} nX|st |S|s| s| d krt j d tt|S| dkr1t|St|S(NRws --config-dirtinfos.svnRPR*css|]}t|VqdS(N(Rl(t.0Rc((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pys siiis?No SVN 1.3+ command found: falling back on pre 1.7 .svn parsingi(ii(ii(R+R,RTRRRtisfilettupleR{R^t ValueErrorRvtwarningstwarntDeprecationWarningt SvnFileInfot Svn13Infot Svn15Info( tclstdirnametnormdirRyRzRtsvn_dirt is_svn_wdt svn_versiontbase_svn_version((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pytloads, !       cCs||_d|_d|_dS(N(R,R8t_entriest _externals(tselfR,((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyt__init__)s  cCshtdd|jg\}}|r5tjddS|jj|}|r`t|jdSdSdS(s<Retrieve the directory revision informatino using svnversiont svnversions-cssvnversion failediiN(RR,RRt revision_retmatchRltgroup(RRzRtparsed((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyt get_revision.s cCs(|jdkr!|j|_n|jS(N(RR8t get_entries(R((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRP;scCs(|jdkr!|j|_n|jS(N(RR8t get_externals(R((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRXAsccsx|jD] }|Vq WdS(sR Iterate over the svn:external references in the repository path. N(RX(Rtitem((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pytiter_externalsGsccs8x1|jD]&\}}|jdkr |Vq q WdS(sR Iterate over the non-deleted file entries in the repository path tfileN(RPtlower(RRRE((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyt iter_filesNsccsI|r|jVnx1|jD]&\}}|jdkr|VqqWdS(sR Iterate over the non-deleted file entries in the repository path tdirN(R,RPR(Rt include_rootRRE((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyt iter_dirsVs  cCsgS(N((R((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyR`scCsgS(N((R((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRcs(t__name__t __module__t__doc__t staticmethodR{tretcompiletIRt classmethodRRRR#RPRXRRRmRRR(((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRvs(     RcBseZdZdZRS(cCsKtdddd|jgdd\}}|rAtjdgSt|S(NRwR|s-Rs--xmlRsutf-8ssvn info failed(RR,RtdebugRS(RRzR((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRhs  cCsdddg}g}x|jD]}t||gdd\}}|dkrdtjdgSxKt|D]=}|rtjj||}n|jtjj |qqWq"W|S(NRwtpropgets svn:externalsRsutf-8issvn propget failed( RRRRRWR+R,RRMRT(RtcmdtresulttfolderRzRaRY((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRrs  !(RRRR(((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRgs RcBseZdZRS(cCsiddd|jddg}t|dd\}}|rJtjdgSt|d tjj|jS( NRwRs svn:externalss-Rs--xmlRsutf-8ssvn propget failedR-(R,RRRRZR+tabspath(RRRzRa((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRs  (RRR(((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRsRcBsAeZddZdZdZdZdZdZRS(R cCs,tt|j|d|_d|_dS(N(tsuperRRR8t _directoriest _revision(RR,((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRs ccst|dd}tjj|rtj|}|t|jfVx|jD]x}t |}t||}tjj|r|t dfVqTtjj |rTx|j |D] }|VqWqTqTWndS(Ns.svnRP(R/R+R,R~tSVNEntriesFileRRgtparse_revisiontget_undeleted_recordsRRmR8tisdirt _walk_svn(Rtbaset entry_fileRPR,R((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRs cCst}d}xa|j|jD]M\}}}|rM|j|dfq"|j|dft||}q"W||_||_dS(NiRR(RJRR,RMtmaxRR(RRPtrevR,R~tdir_rev((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyt_build_entriess " cCs#|jdkr|jn|jS(N(RR8R(R((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRs cCs#|jdkr|jn|jS(N(RR8R(R((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRs cCsddgddgg}g}x|jD]}d}x8|D]0}t||}tjj|r>|}q>q>W|dk r+t|d}t|dd}|jt |q+q+W|S(Ns.svns dir-prop-bases dir-propss svn:externalsRsutf-8( RR8R/R+R,R~RuRtextendRW(Rt prop_filesRXRt prop_filet rel_partsRotext_prop((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRs    (RRRRRRRR(((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRs      ccsqtj|}x|jD] }|VqWx?|jD]1}tj|}x|jD] }|VqZWq8WdS(N(RvRRR(RR|R,tsub_infotsub_path((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyt svn_finders RcBs8eZdZedZedZdZRS(cCs ||_dS(N(R(RR((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRscCsItjj|dd}t|}ztj|}Wd|jX|S(Ns.svnRP(R+R,RRhRRkRn(tclass_RRoRrR((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRs   cCs5|j}|jd}ttg|}||S(Ns/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRks cCs|jdg}t|S(Ni(tparse_revision_numbersR(Rtall_revs((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRs(RRRRRRkR(((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRs  RcBsYeZidd6dd6dd6ZdZdZdZd Zd Zd ZRS( is1.4.xi s1.5.xi s1.6.xcCs|jS(N(tsections(R((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyt__get_cached_sectionsscCsd}|jj|}gttj|D] }|^q+}yEt|djd}||jjkrt j d|nWnt k rdSX||_ |j |_|j S(Ns isUnknown subversion verson %d(RR^tmaptstrR[Rltpoptknown_svn_versionstvaluesRRRRt(_SVNEntriesFileText__get_cached_sectionst get_sections(RtSECTION_DIVIDERRRcR((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRs%   cCst|jS(N(tboolR(R((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pytis_validscCs|jddS(Nii(R(R((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pytget_urlscCsOd}g|jD]2}t||kr||rt||^q}|S(Ni (RRVRl(Rtrevision_line_numbertsectiont rev_numbers((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRs  cCs<d}g|jD]}||r|d^q}|S(NcSs0|o/|do/t|dkp/|ddkS(NiiiRD(RV(ts((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyt"si(R(Rt undeletedRR((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyR!s  ( RRRRRRRRR(((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyRs      RcBs,eZdZdZdZdZRS(cCstS(N(Rm(R((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyR,scCs(tjd}|j|jjdS(sGet repository URLs url="([^"]+)"i(RRtsearchRR(Rturlre((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyR/scCsAtjd}g|j|jD]}t|jd^q"S(Nscommitted-rev="(\d+)"i(RRtfinditerRRlR(Rtrevretm((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyR4scCsMtjdtj}g|j|jD]}t|jd^q(}|S(Ns%name="([^"]+)"(?![^>]+deleted="true")i(RRRRRRR(Rtentries_patternRtresults((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyR;s1(RRRRRR(((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pyR+s   t__main__i(5R+RR t distutilsRtxml.dom.pulldomRFR]R1R4R@Rtsetuptools.compatRRtsetuptools.py31compatRtxml.sax.saxutilsRR_t ImportErrort urllib.parsetparset subprocessRR Rt_PIPER8RR"R&R)R/R;R=RRSRZRWRutobjectRvRRRRRRRRtargvtname(((s>/usr/local/lib/python2.7/site-packages/setuptools/svn_utils.pytsP                    $  B 3