N3{YE@siddlZddlZddlZddlmZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddlmZyddlZWn!ek rddljZYnXddlmZmZeeddddZdd Zd d Zd d ZddZddZeZdddZ ddZ!dddZ"ddZ#ddZ$Gddde%Z&Gdd d e&Z'Gd!d"d"e'Z(Gd#d$d$e&Z)dd%d&Z*Gd'd(d(e%Z+Gd)d*d*e+Z,Gd+d,d,e+Z-e.d-krex(e*ej/d.D]Z0e1e0qNWndS)/N)log)unicode)unescape)PopenPIPEcCspy;t|d|d|dtjdk}|j|}Wntk rSdSYnXt||}|j|fS)Nstdoutstderrshellwin32)r r )_Popensysplatform communicateOSErrordecode_as_string returncode)argsrrencodingstreamprocdatar//tmp/pip-r2rszybt-build/setuptools/svn_utils.py _run_commands  rcCs0|jdd}djdd|jDS)Nschedulerr cSs+g|]!}|j|jkr|jqSr)nodeType TEXT_NODE nodeValue).0trrr 2s z'_get_entry_schedule..)getElementsByTagNamejoin childNodes)entryrrrr_get_entry_schedule0sr'cCs0|jdd}djdd|jDS)Npropertyrr cSs+g|]!}|j|jkr|jqSr)rrr)r r!rrrr"9s z(_get_target_property..)r#r$r%)targetZ property_textrrr_get_target_property7sr*cCs+tjdkr!|jd}n|}|S)Nrzutf-8)r+r)r version_infoencode) decoded_strrrrr _get_xml_data>sr/cGs6| s|dkr#tjj|Stjj||S)N.)ospathr$)prefixsuffixrrrjoinpathGsr5c CsyLtj}| s"|dkr5tjd}n|rKtj|nWn!tjtfk rod}YnXtjdk}|sddg|S|j dr|rdS|SdS)NzUS-ASCIIr darwinzutf-8zmac-) localegetpreferredencodinggetdefaultlocalecodecslookupError LookupErrorrr startswith)ris_osxrrrdetermine_console_encodingLs  r@cCsL|dkrt}nt|ts6|j|}ntjd|}|S)a 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. NZNFC)_console_encoding isinstancerdecode unicodedata normalize)textrrrrris  rcCstjjjt|}t}x||D]t\}}|dkr+|jdkr+|j|t|j ds|j |j d|j dfqq+q+W|ddS)z+Parse the entries from a recursive info xml START_ELEMENTr&deleter2kindr N) xmldompulldom parseStringr/listnodeName expandNoder'r>append getAttribute)r.docentrieseventnoderrrparse_dir_entriess  rWr c Cstjj|}tjj|}tjjjt|}t }x|D]\}}|dkrO|j dkrO|j |tjj|j d}tjj|j |r|t|dd}nt|}x-t|D]}|jt||qWqOqOW|S)z!Parse a propget svn:externals xmlrGr)r2r N)r1r2normpathnormcaserJrKrLrMr/rNrOrPrRr>lenr*parse_external_proprQr5) r.r3rS externalsrUrVr2rexternalrrrparse_externals_xmls   !r^cCsg}x|jD]}|j}|s1qntjdkrR|jd}ntj|}tjd krdd|D}ntj|d dr|d}n |d }t |dd}|j t j j |qW|S) z 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 r+rzutf-8cSsg|]}|jdqS)zutf-8)rC)r xrrrr"s z'parse_external_prop..r r)r+r)r+rr`) splitlineslstriprr,r-shlexspliturlparseurlsplitrrQr1r2rX)linesr\liner]rrrr[s    r[c Csd}t|d}d}zxt|jdD]}|j}t|dkr1|\}}|jt|}|dkr||krd}q|dkr|rPqq1q1WWd|jX|S)NFrtr KTV)openiterreadlinerdrZreadintclose) filenamekeyfoundfrrhpartsrIlengthrrrparse_prop_files    ryc@seZdZdZeddZejdejZ e dddZ ddd Z d d Z ed d ZeddZddZddZdddZddZddZdS)SvnInfoz 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. cCs?tdddg\}}|dkr7|r7|jSdSdS)Nsvnz --versionz--quietrr )rstrip)coderrrrget_svn_versions zSvnInfo.get_svn_versionz!(?:([\-0-9]+):)?(\d+)([a-z]*)\s*$r c Cshtjj|}tdd|g\}}tjj|d}tjjtjj|dptjjtjj|dptjjtjj|d}t|jjd}y'tdd |dd D}Wnt k rt}YnX|st |S|s.| s.|dkrHt j d t t|S|dkr^t|St|S)Nr{infoz.svnrTz dir-propsz dir-prop-baser0css|]}t|VqdS)N)rq)r r_rrr szSvnInfo.load..rjr r+z?No SVN 1.3+ command found: falling back on pre 1.7 .svn parsing)r r+)r r)r1r2rXrr$isfiletupler~rd ValueErrorrzwarningswarnDeprecationWarning SvnFileInfo Svn13Info Svn15Info) clsdirnamenormdirr}rZsvn_dirZhas_svn svn_versionZbase_svn_versionrrrloads(!!!'      z SvnInfo.loadcCs||_d|_d|_dS)N)r2_entries _externals)selfr2rrr__init__s  zSvnInfo.__init__cCshtdd|jg\}}|r5tjddS|jj|}|r`t|jdSdSdS)z|}q>q>W|dk r+t|d}t|dd}|jt|q+q+W|S)Nz.svnz dir-prop-basez dir-propsz svn:externalsrzutf-8) rr5r1r2rryrextendr[)rZ prop_filesr\rZ prop_fileZ rel_partsrsZext_proprrrrs    zSvnFileInfo.get_externals) rrrrrrrrrrr)rrr|s     rccsqtj|}x|jD] }|VqWx?|jD]1}tj|}x|jD] }|VqZWq8WdS)N)rzrrr)rrr2Zsub_infoZsub_pathrrr svn_finders rc@sLeZdZddZeddZeddZddZd S) rcCs ||_dS)N)r)rrrrrrszSVNEntriesFile.__init__c CsItjj|dd}t|}ztj|}Wd|jX|S)Nz.svnrT)r1r2r$rmrrprr)class_rrsrvrrrrrs   zSVNEntriesFile.loadcCs5|j}|jd}ttg|}||S)NzSVNEntriesFileTextSVNEntriesFileXML)rfileobjrZis_xmlrrrrps zSVNEntriesFile.readcCs|jdg}t|S)Nr)parse_revision_numbersr)rZall_revsrrrrszSVNEntriesFile.parse_revisionN)rrrrrrrprrrrrrs   rc@sseZdZidd6dd6dd6ZddZd d Zd d Zd dZddZddZ dS)rz1.4.x z1.5.x z1.6.xcCs|jS)N)sections)rrrrZ__get_cached_sectionssz(SVNEntriesFileText.__get_cached_sectionsc Csd}|jj|}ddttj|D}yEt|djd}||jjkr{t j d|nWnt k rdSYnX||_ |j |_|j S)Nz cSsg|] }|qSrr)r r_rrrr"s z3SVNEntriesFileText.get_sections..rzUnknown subversion verson %d)rrdmapstrrarqpopknown_svn_versionsvaluesrrrr(_SVNEntriesFileText__get_cached_sections get_sections)rZSECTION_DIVIDERrrrrrrs    zSVNEntriesFileText.get_sectionscCst|jS)N)boolr)rrrris_validszSVNEntriesFileText.is_validcCs|jddS)Nr)r)rrrrget_urlszSVNEntriesFileText.get_urlcs)dfdd|jD}|S)Nrcs<g|]2}t|kr|rt|qSr)rZrq)r section)revision_line_numberrrr"s z=SVNEntriesFileText.parse_revision_numbers..)r)rZ rev_numbersr)rrrsz)SVNEntriesFileText.parse_revision_numberscs/ddfdd|jD}|S)NcSs0|o/|do/t|dkp/|ddkS)NrrrH)rZ)srrrsz:SVNEntriesFileText.get_undeleted_records..cs&g|]}|r|dqS)rr)r r) undeletedrrr"s z.)r)rrr)rrrs z(SVNEntriesFileText.get_undeleted_recordsN) rrrrrrrrrrrrrrrs       rc@s@eZdZddZddZddZddZd S) rcCsdS)NTr)rrrrrszSVNEntriesFileXML.is_validcCs(tjd}|j|jjdS)zGet repository URLz url="([^"]+)"r )rrsearchrr)rZurlrerrrrszSVNEntriesFileXML.get_urlcCs,tjd}dd|j|jDS)Nzcommitted-rev="(\d+)"cSs%g|]}t|jdqS)r )rqr)r mrrrr"$s z.)rrfinditerr)rZrevrerrrr!s z(SVNEntriesFileXML.parse_revision_numberscCs8tjdtj}dd|j|jD}|S)Nz%name="([^"]+)"(?![^>]+deleted="true")cSs%g|]}t|jdqS)r )rr)r rrrrr",s z;SVNEntriesFileXML.get_undeleted_records..)rrrrr)rZentries_patternresultsrrrr(s z'SVNEntriesFileXML.get_undeleted_recordsN)rrrrrrrrrrrrs    r__main__r )2r1rr distutilsrZxml.dom.pulldomrJrcr7r:rDrZsetuptools.compatrxml.sax.saxutilsrre ImportError urllib.parseparse subprocessrr rZ_PIPErr'r*r/r5r@rArrWr^r[ryobjectrzrrrrrrrrargvnameprintrrrrsN                  $ t B 3