ž Ÿ/{Y¸Ec@siddlZddlZddlZddlmZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddlmZyddlZWn!ek rÏddljZYnXddlmZmZeedddd„Zdd „Zd d „Zd d „Zdd„Zdd„ZeƒZ ddd„Z!dd„Z"ddd„Z#dd„Z$dd„Z%Gdd„de&ƒ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+ej0d.ƒD]Z1e2e1ƒqNWndS(/iN(ulog(uunicode(uunescape(uPopenuPIPEcCspy;t|d|d|dtjdkƒ}|jƒ|}Wntk rSdSYnXt||ƒ}|j|fS(Nustdoutustderrushelluwin32iu(iu(u_Popenusysuplatformu communicateuOSErrorudecode_as_stringu returncode(uargsustdoutustderruencodingustreamuprocudata((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu _run_commands  u _run_commandcCs0|jdƒd}djdd„|jDƒƒS(NuscheduleiucSs+g|]!}|j|jkr|j‘qS((unodeTypeu TEXT_NODEu nodeValue(u.0ut((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu 2s u'_get_entry_schedule..(ugetElementsByTagNameujoinu childNodes(uentryuschedule((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu_get_entry_schedule0su_get_entry_schedulecCs0|jdƒd}djdd„|jDƒƒS(NupropertyiucSs+g|]!}|j|jkr|j‘qS((unodeTypeu TEXT_NODEu nodeValue(u.0ut((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu 9s u(_get_target_property..(ugetElementsByTagNameujoinu childNodes(utargetu property_text((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu_get_target_property7su_get_target_propertycCs+tjdkr!|jdƒ}n|}|S(Niiuutf-8(ii(usysu version_infouencode(u decoded_strudata((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu _get_xml_data>su _get_xml_datacGs6| s|dkr#tjj|ŒStjj||ŒS(Nu.(uosupathujoin(uprefixusuffix((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyujoinpathGsujoinpathc Cs´yLtjƒ}| s"|dkr5tjƒd}n|rKtj|ƒnWn!tjtfk rod}YnXtj dk}|s“ddg|S|j dƒr¬|r¬dS|SdS(NuUS-ASCIIiudarwinuutf-8umac-( ulocaleugetpreferredencodingugetdefaultlocaleucodecsulookupuErroru LookupErroruNoneusysuplatformu startswith(uencodinguis_osx((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyudetermine_console_encodingLs  udetermine_console_encodingcCsL|dkrt}nt|tƒs6|j|ƒ}ntjd|ƒ}|S(uï 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. uNFCN(uNoneu_console_encodingu isinstanceuunicodeudecodeu unicodedatau normalize(utextuencoding((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyudecode_as_stringis  udecode_as_stringcCs±tjjjt|ƒƒ}tƒ}x||D]t\}}|dkr+|jdkr+|j|ƒt|ƒj dƒsŸ|j |j dƒ|j dƒfƒqŸq+q+W|dd…S(u+Parse the entries from a recursive info xmlu START_ELEMENTuentryudeleteupathukindiN( uxmludomupulldomu parseStringu _get_xml_dataulistunodeNameu expandNodeu_get_entry_scheduleu startswithuappendu getAttribute(u decoded_strudocuentriesueventunode((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuparse_dir_entriess  uparse_dir_entriesuc Cstjj|ƒ}tjj|ƒ}tjjjt|ƒƒ}t ƒ}xË|D]Ã\}}|dkrO|j dkrO|j |ƒtjj|j dƒƒ}tjj|ƒj |ƒrÖ|t|ƒdd…}nt|ƒ}x-t|ƒD]}|jt||ƒƒqïWqOqOW|S(u!Parse a propget svn:externals xmlu START_ELEMENTutargetupathiN(uosupathunormpathunormcaseuxmludomupulldomu parseStringu _get_xml_dataulistunodeNameu expandNodeu getAttributeu startswithulenu_get_target_propertyuparse_external_propuappendujoinpath( u decoded_struprefixudocu externalsueventunodeupathudatauexternal((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuparse_externals_xmls   !uparse_externals_xmlcCsçg}xÚ|jƒD]Ì}|jƒ}|s1qntjdkrR|jdƒ}ntj|ƒ}tjd kr†dd„|Dƒ}ntj|d ƒdrª|d}n |d }t |ddƒ}|j t j j |ƒƒqW|S( uê 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 iiuutf-8cSsg|]}|jdƒ‘qS(uutf-8(udecode(u.0ux((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu ½s u'parse_external_prop..iuencoding(ii(iiiÿÿÿÿiÿÿÿÿ(u splitlinesulstripusysu version_infouencodeushlexusplituurlparseuurlsplitudecode_as_stringuappenduosupathunormpath(ulinesu externalsulineuexternal((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuparse_external_prop¨s    uparse_external_propc CsÇd}t|dƒ}d}zšx“t|jdƒD]}|jƒ}t|ƒdkr1|\}}|jt|ƒƒ}|dkr—||kr—d}q°|dkr°|r°Pq°q1q1WWd|j ƒX|S(NurtuiuKuVFT( uFalseuopenuiterureadlineusplitulenureaduintuTrueuclose( ufilenameukeyufoundufudataulineupartsukindulength((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuparse_prop_fileÌs    uparse_prop_filecBsÔ|EeZdZdZedd„ƒZejdejƒZ e ddd„ƒZ ddd „Z d d „Z ed d „ƒZedd„ƒZdd„Zdd„Zddd„Zdd„Zdd„ZdS(uSvnInfou¸ 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|jƒSdSdS(Nusvnu --versionu--quietiu(u _run_commandustrip(ucodeudata((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuget_svn_versionès uSvnInfo.get_svn_versionu!(?:([\-0-9]+):)?(\d+)([a-z]*)\s*$uc Cshtjj|ƒ}tdd|gƒ\}}tjj|dƒ}tjjtjj|dƒƒp¢tjjtjj|dƒƒp¢tjjtjj|dƒƒ}t|jƒjdƒƒ}y'tdd „|dd …Dƒƒ}Wnt k rtƒ}YnX|st |ƒS|s.| s.|dkrHt j d t ƒt|ƒS|dkr^t|ƒSt|ƒS(Nusvnuinfou.svnuentriesu dir-propsu dir-prop-baseu.css|]}t|ƒVqdS(N(uint(u.0ux((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu suSvnInfo.load..iiiu?No SVN 1.3+ command found: falling back on pre 1.7 .svn parsingi(ii(ii(uosupathunormpathu _run_commandujoinuisfileutupleuget_svn_versionusplitu ValueErroruSvnInfouwarningsuwarnuDeprecationWarningu SvnFileInfou Svn13Infou Svn15Info( uclsudirnameunormdirucodeudatausvn_diruhas_svnu svn_versionubase_svn_version((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuload÷s(!!!'      u SvnInfo.loadcCs||_d|_d|_dS(N(upathuNoneu_entriesu _externals(uselfupath((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu__init__s  uSvnInfo.__init__cCshtdd|jgƒ\}}|r5tjdƒdS|jj|ƒ}|r`t|jdƒƒSdSdS(u<Retrieve the directory revision informatino using svnversionu svnversionu-cusvnversion failediiN(u _run_commandupathuloguwarnu revision_reumatchuintugroup(uselfucodeudatauparsed((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu get_revisions uSvnInfo.get_revisioncCs(|jdkr!|jƒ|_n|jS(N(u_entriesuNoneu get_entries(uself((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuentries(suSvnInfo.entriescCs(|jdkr!|jƒ|_n|jS(N(u _externalsuNoneu get_externals(uself((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu externals.suSvnInfo.externalsccsx|jD] }|Vq WdS(uR Iterate over the svn:external references in the repository path. N(u externals(uselfuitem((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuiter_externals4suSvnInfo.iter_externalsccs8x1|jD]&\}}|jƒdkr |Vq q WdS(uR Iterate over the non-deleted file entries in the repository path ufileN(uentriesulower(uselfuitemukind((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu iter_files;suSvnInfo.iter_filesccsI|r|jVnx1|jD]&\}}|jƒdkr|VqqWdS(uR Iterate over the non-deleted file entries in the repository path udirN(upathuentriesulower(uselfu include_rootuitemukind((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu iter_dirsCs  uSvnInfo.iter_dirscCsgS(N((uself((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu get_entriesMsuSvnInfo.get_entriescCsgS(N((uself((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu get_externalsPsuSvnInfo.get_externalsNT(u__name__u __module__u __qualname__u__doc__u staticmethoduget_svn_versionureucompileuIu revision_reu classmethoduloadu__init__u get_revisionupropertyuentriesu externalsuiter_externalsu iter_filesuTrueu iter_dirsu get_entriesu get_externals(u __locals__((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuSvnInfoàs     uSvnInfocBs,|EeZdZdd„Zdd„ZdS(u Svn13InfocCsKtdddd|jgddƒ\}}|rAtjdƒgSt|ƒS(Nusvnuinfou-Ru--xmluencodinguutf-8usvn info failed(u _run_commandupathulogudebuguparse_dir_entries(uselfucodeudata((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu get_entriesUs  uSvn13Info.get_entriescCsºdddg}g}xž|jƒD]}t||gddƒ\}}|dkrdtjdƒgSxKt|ƒD]=}|r•tjj||ƒ}n|jtjj |ƒƒqqWq"W|S(Nusvnupropgetu svn:externalsuencodinguutf-8iusvn propget failed( u iter_dirsu _run_commanduloguwarnuparse_external_propuosupathujoinuappendunormpath(uselfucmduresultufolderucodeulinesuexternal((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu get_externals_s  !uSvn13Info.get_externalsN(u__name__u __module__u __qualname__u get_entriesu get_externals(u __locals__((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu Svn13InfoTs u Svn13InfocBs |EeZdZdd„ZdS(u Svn15InfocCsiddd|jddg}t|ddƒ\}}|rJtjdƒgSt|d tjj|jƒƒS( Nusvnupropgetu svn:externalsu-Ru--xmluencodinguutf-8usvn propget faileduprefix(upathu _run_commandulogudebuguparse_externals_xmluosuabspath(uselfucmducodeulines((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu get_externalsss  uSvn15Info.get_externalsN(u__name__u __module__u __qualname__u get_externals(u __locals__((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu Svn15Inforsu Svn15Infocse|EeZdZd‡fdd†Zdd„Zdd„Zdd „Zd d „Zd d „Z‡S(u SvnFileInfoucs,tt|ƒj|ƒd|_d|_dS(N(usuperu SvnFileInfou__init__uNoneu _directoriesu _revision(uselfupath(u __class__(u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu__init__~s uSvnFileInfo.__init__ccs×t|ddƒ}tjj|ƒrÓtj|ƒ}|d|jƒfVx‰|jƒD]x}t |ƒ}t||ƒ}tjj|ƒr˜|ddfVqTtjj |ƒrTx|j |ƒD] }|VqºWqTqTWndS(Nu.svnuentriesFT(ujoinpathuosupathuisfileuSVNEntriesFileuloaduFalseuparse_revisionuget_undeleted_recordsudecode_as_stringuTrueuNoneuisdiru _walk_svn(uselfubaseu entry_fileuentriesupathuitem((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu _walk_svnƒs uSvnFileInfo._walk_svncCs‰tƒ}d}xa|j|jƒD]M\}}}|rM|j|dfƒq"|j|dfƒt||ƒ}q"W||_||_dS(Niufileudir(ulistu _walk_svnupathuappendumaxu_entriesu _revision(uselfuentriesurevupathuisfileudir_rev((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu_build_entries‘s " uSvnFileInfo._build_entriescCs#|jdkr|jƒn|jS(N(u_entriesuNoneu_build_entries(uself((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu get_entriesŸs uSvnFileInfo.get_entriescCs#|jdkr|jƒn|jS(N(u _revisionuNoneu_build_entries(uself((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu get_revision¤s uSvnFileInfo.get_revisioncCs½ddgddgg}g}x˜|jƒD]Š}d}x8|D]0}t||Œ}tjj|ƒr>|}q>q>W|dk r+t|dƒ}t|ddƒ}|jt |ƒƒq+q+W|S(Nu.svnu dir-prop-baseu dir-propsu svn:externalsuencodinguutf-8( u iter_dirsuNoneujoinpathuosupathuisfileuparse_prop_fileudecode_as_stringuextenduparse_external_prop(uselfu prop_filesu externalsudirnameu prop_fileu rel_partsufilenameuext_prop((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu get_externals©s    uSvnFileInfo.get_externals( u__name__u __module__u __qualname__u__init__u _walk_svnu_build_entriesu get_entriesu get_revisionu get_externals(u __locals__((u __class__u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu SvnFileInfo|s     u SvnFileInfoccsqtj|ƒ}x|jƒD] }|VqWx?|jƒD]1}tj|ƒ}x|jƒD] }|VqZWq8WdS(N(uSvnInfouloadu iter_filesuiter_externals(udirnameuinfoupathusub_infousub_path((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu svn_finder¾s u svn_findercBsP|EeZdZdd„Zedd„ƒZedd„ƒZdd„Zd S( uSVNEntriesFilecCs ||_dS(N(udata(uselfudata((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu__init__ÌsuSVNEntriesFile.__init__c CsItjj|ddƒ}t|ƒ}ztj|ƒ}Wd|jƒX|S(Nu.svnuentries(uosupathujoinuopenuSVNEntriesFileureaduclose(uclass_ubaseufilenameufuresult((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuloadÏs   uSVNEntriesFile.loadcCs5|jƒ}|jdƒ}ttg|}||ƒS(Nuòs u3SVNEntriesFileText.get_sections..iuUnknown subversion verson %d(udatausplitumapustru splitlinesuintupopuknown_svn_versionsuvaluesuloguwarnu ValueErrorusectionsu(_SVNEntriesFileText__get_cached_sectionsu get_sections(uselfuSECTION_DIVIDERusectionsu svn_version((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu get_sectionsïs    uSVNEntriesFileText.get_sectionscCst|jƒƒS(N(uboolu get_sections(uself((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuis_validþsuSVNEntriesFileText.is_validcCs|jƒddS(Nii(u get_sections(uself((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuget_urlsuSVNEntriesFileText.get_urlcs)d‰‡fdd†|jƒDƒ}|S(Ni cs<g|]2}t|ƒˆkr|ˆrt|ˆƒ‘qS((ulenuint(u.0usection(urevision_line_number(u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu s u=SVNEntriesFileText.parse_revision_numbers..(u get_sections(uselfu rev_numbers((urevision_line_numberu-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuparse_revision_numberssu)SVNEntriesFileText.parse_revision_numberscs/dd„‰‡fdd†|jƒDƒ}|S(NcSs0|o/|do/t|ƒdkp/|ddkS(Niiiudelete(ulen(us((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyusu:SVNEntriesFileText.get_undeleted_records..cs&g|]}ˆ|ƒr|d‘qS(i((u.0usection(u undeleted(u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu s u<SVNEntriesFileText.get_undeleted_records..(u get_sections(uselfuresult((u undeletedu-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuget_undeleted_recordss u(SVNEntriesFileText.get_undeleted_recordsN( u__name__u __module__u __qualname__uknown_svn_versionsu(_SVNEntriesFileText__get_cached_sectionsu get_sectionsuis_validuget_urluparse_revision_numbersuget_undeleted_records(u __locals__((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuSVNEntriesFileTextås      uSVNEntriesFileTextcBsD|EeZdZdd„Zdd„Zdd„Zdd„Zd S( uSVNEntriesFileXMLcCsdS(NT(uTrue(uself((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuis_validsuSVNEntriesFileXML.is_validcCs(tjdƒ}|j|jƒjdƒS(uGet repository URLu url="([^"]+)"i(ureucompileusearchudataugroup(uselfuurlre((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuget_urlsuSVNEntriesFileXML.get_urlcCs,tjdƒ}dd„|j|jƒDƒS(Nucommitted-rev="(\d+)"cSs%g|]}t|jdƒƒ‘qS(i(uintugroup(u.0um((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu $s u<SVNEntriesFileXML.parse_revision_numbers..(ureucompileufinditerudata(uselfurevre((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuparse_revision_numbers!s u(SVNEntriesFileXML.parse_revision_numberscCs8tjdtjƒ}dd„|j|jƒDƒ}|S(Nu%name="([^"]+)"(?![^>]+deleted="true")cSs%g|]}t|jdƒƒ‘qS(i(uunescapeugroup(u.0umatch((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyu ,s u;SVNEntriesFileXML.get_undeleted_records..(ureucompileuIufinditerudata(uselfuentries_patternuresults((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuget_undeleted_records(s u'SVNEntriesFileXML.get_undeleted_recordsN(u__name__u __module__u __qualname__uis_validuget_urluparse_revision_numbersuget_undeleted_records(u __locals__((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyuSVNEntriesFileXMLs   uSVNEntriesFileXMLu__main__i(3uosureusysu distutilsuloguxml.dom.pulldomuxmlushlexulocaleucodecsu unicodedatauwarningsusetuptools.compatuunicodeuxml.sax.saxutilsuunescapeuurlparseu ImportErroru urllib.parseuparseu subprocessuPopenu_PopenuPIPEu_PIPEuNoneu _run_commandu_get_entry_scheduleu_get_target_propertyu _get_xml_dataujoinpathudetermine_console_encodingu_console_encodingudecode_as_stringuparse_dir_entriesuparse_externals_xmluparse_external_propuparse_prop_fileuobjectuSvnInfou Svn13Infou Svn15Infou SvnFileInfou svn_finderuSVNEntriesFileuSVNEntriesFileTextuSVNEntriesFileXMLu__name__uargvunameuprint(((u-/tmp/pip-jy811g-build/setuptools/svn_utils.pyusN                  $ t B 3