JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbrў ReEc@siddlZddlZddlZddlmZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddlmZyddlZWn!ek rddljZYnXddlmZmZeeddddZdd Zd d Zd d ZddZddZeZ dddZ!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+ej0d.D]Z1e2e1qNWndS(/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-k8wh6o-build/setuptools/svn_utils.pyu _run_commands  u _run_commandcCs0|jdd}djdd|jDS(NuscheduleiucSs+g|]!}|j|jkr|jqS((unodeTypeu TEXT_NODEu nodeValue(u.0ut((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu 2s u'_get_entry_schedule..(ugetElementsByTagNameujoinu childNodes(uentryuschedule((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu_get_entry_schedule0su_get_entry_schedulecCs0|jdd}djdd|jDS(NupropertyiucSs+g|]!}|j|jkr|jqS((unodeTypeu TEXT_NODEu nodeValue(u.0ut((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu 9s u(_get_target_property..(ugetElementsByTagNameujoinu childNodes(utargetu property_text((u-/tmp/pip-k8wh6o-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-k8wh6o-build/setuptools/svn_utils.pyu _get_xml_data>su _get_xml_datacGs6| s|dkr#tjj|Stjj||S(Nu.(uosupathujoin(uprefixusuffix((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyujoinpathGsujoinpathc CsyLtj}| s"|dkr5tjd}n|rKtj|nWn!tjtfk rod}YnXtj dk}|sddg|S|j dr|rdS|SdS(NuUS-ASCIIiudarwinuutf-8umac-( ulocaleugetpreferredencodingugetdefaultlocaleucodecsulookupuErroru LookupErroruNoneusysuplatformu startswith(uencodinguis_osx((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyudetermine_console_encodingLs  udetermine_console_encodingcCsL|dkrt}nt|ts6|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-k8wh6o-build/setuptools/svn_utils.pyudecode_as_stringis  udecode_as_stringcCstjjjt|}t}x||D]t\}}|dkr+|jdkr+|j|t|j ds|j |j d|j dfqq+q+W|ddS(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-k8wh6o-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||qWqOqOW|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-k8wh6o-build/setuptools/svn_utils.pyuparse_externals_xmls   !uparse_externals_xmlcCsg}x|jD]}|j}|s1qntjdkrR|jd}ntj|}tjd krdd|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|]}|jdqS(uutf-8(udecode(u.0ux((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu s u'parse_external_prop..iuencoding(ii(iiii(u splitlinesulstripusysu version_infouencodeushlexusplituurlparseuurlsplitudecode_as_stringuappenduosupathunormpath(ulinesu externalsulineuexternal((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyuparse_external_props    uparse_external_propc Csd}t|d}d}zxt|jdD]}|j}t|dkr1|\}}|jt|}|dkr||krd}q|dkr|rPqq1q1WWd|j X|S(NurtuiuKuVFT( uFalseuopenuiterureadlineusplitulenureaduintuTrueuclose( ufilenameukeyufoundufudataulineupartsukindulength((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyuparse_prop_files    uparse_prop_filecBs|EeZdZdZeddZejdejZ e dddZ ddd Z d d Z ed d ZeddZddZddZdddZddZddZdS(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|jSdSdS(Nusvnu --versionu--quietiu(u _run_commandustrip(ucodeudata((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyuget_svn_versions uSvnInfo.get_svn_versionu!(?:([\-0-9]+):)?(\d+)([a-z]*)\s*$uc 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(Nusvnuinfou.svnuentriesu dir-propsu dir-prop-baseu.css|]}t|VqdS(N(uint(u.0ux((u-/tmp/pip-k8wh6o-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-k8wh6o-build/setuptools/svn_utils.pyuloads(!!!'      u SvnInfo.loadcCs||_d|_d|_dS(N(upathuNoneu_entriesu _externals(uselfupath((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu__init__s  uSvnInfo.__init__cCshtdd|jg\}}|r5tjddS|jj|}|r`t|jdSdSdS(u<Retrieve the directory revision informatino using svnversionu svnversionu-cusvnversion failediiN(u _run_commandupathuloguwarnu revision_reumatchuintugroup(uselfucodeudatauparsed((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu get_revisions uSvnInfo.get_revisioncCs(|jdkr!|j|_n|jS(N(u_entriesuNoneu get_entries(uself((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyuentries(suSvnInfo.entriescCs(|jdkr!|j|_n|jS(N(u _externalsuNoneu get_externals(uself((u-/tmp/pip-k8wh6o-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-k8wh6o-build/setuptools/svn_utils.pyuiter_externals4suSvnInfo.iter_externalsccs8x1|jD]&\}}|jdkr |Vq q WdS(uR Iterate over the non-deleted file entries in the repository path ufileN(uentriesulower(uselfuitemukind((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu iter_files;suSvnInfo.iter_filesccsI|r|jVnx1|jD]&\}}|jdkr|VqqWdS(uR Iterate over the non-deleted file entries in the repository path udirN(upathuentriesulower(uselfu include_rootuitemukind((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu iter_dirsCs  uSvnInfo.iter_dirscCsgS(N((uself((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu get_entriesMsuSvnInfo.get_entriescCsgS(N((uself((u-/tmp/pip-k8wh6o-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-k8wh6o-build/setuptools/svn_utils.pyuSvnInfos     uSvnInfocBs,|EeZdZddZddZdS(u Svn13InfocCsKtdddd|jgdd\}}|rAtjdgSt|S(Nusvnuinfou-Ru--xmluencodinguutf-8usvn info failed(u _run_commandupathulogudebuguparse_dir_entries(uselfucodeudata((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu get_entriesUs  uSvn13Info.get_entriescCsdddg}g}x|jD]}t||gdd\}}|dkrdtjdgSxKt|D]=}|rtjj||}n|jtjj |qqWq"W|S(Nusvnupropgetu svn:externalsuencodinguutf-8iusvn propget failed( u iter_dirsu _run_commanduloguwarnuparse_external_propuosupathujoinuappendunormpath(uselfucmduresultufolderucodeulinesuexternal((u-/tmp/pip-k8wh6o-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-k8wh6o-build/setuptools/svn_utils.pyu Svn13InfoTs u Svn13InfocBs |EeZdZddZdS(u Svn15InfocCsiddd|jddg}t|dd\}}|rJtjdgSt|d tjj|jS( Nusvnupropgetu svn:externalsu-Ru--xmluencodinguutf-8usvn propget faileduprefix(upathu _run_commandulogudebuguparse_externals_xmluosuabspath(uselfucmducodeulines((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu get_externalsss  uSvn15Info.get_externalsN(u__name__u __module__u __qualname__u get_externals(u __locals__((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu Svn15Inforsu Svn15Infocse|EeZdZdfddZddZddZdd Zd d Zd d ZS(u SvnFileInfoucs,tt|j|d|_d|_dS(N(usuperu SvnFileInfou__init__uNoneu _directoriesu _revision(uselfupath(u __class__(u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu__init__~s uSvnFileInfo.__init__ccst|dd}tjj|rtj|}|d|jfVx|jD]x}t |}t||}tjj|r|ddfVqTtjj |rTx|j |D] }|VqWqTqTWndS(Nu.svnuentriesFT(ujoinpathuosupathuisfileuSVNEntriesFileuloaduFalseuparse_revisionuget_undeleted_recordsudecode_as_stringuTrueuNoneuisdiru _walk_svn(uselfubaseu entry_fileuentriesupathuitem((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu _walk_svns uSvnFileInfo._walk_svncCst}d}xa|j|jD]M\}}}|rM|j|dfq"|j|dft||}q"W||_||_dS(Niufileudir(ulistu _walk_svnupathuappendumaxu_entriesu _revision(uselfuentriesurevupathuisfileudir_rev((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu_build_entriess " uSvnFileInfo._build_entriescCs#|jdkr|jn|jS(N(u_entriesuNoneu_build_entries(uself((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu get_entriess uSvnFileInfo.get_entriescCs#|jdkr|jn|jS(N(u _revisionuNoneu_build_entries(uself((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu get_revisions uSvnFileInfo.get_revisioncCsddgddgg}g}x|jD]}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-k8wh6o-build/setuptools/svn_utils.pyu get_externalss    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-k8wh6o-build/setuptools/svn_utils.pyu SvnFileInfo|s     u SvnFileInfoccsqtj|}x|jD] }|VqWx?|jD]1}tj|}x|jD] }|VqZWq8WdS(N(uSvnInfouloadu iter_filesuiter_externals(udirnameuinfoupathusub_infousub_path((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu svn_finders u svn_findercBsP|EeZdZddZeddZeddZddZd S( uSVNEntriesFilecCs ||_dS(N(udata(uselfudata((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu__init__suSVNEntriesFile.__init__c CsItjj|dd}t|}ztj|}Wd|jX|S(Nu.svnuentries(uosupathujoinuopenuSVNEntriesFileureaduclose(uclass_ubaseufilenameufuresult((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyuloads   uSVNEntriesFile.loadcCs5|j}|jd}ttg|}||S(Nus 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-k8wh6o-build/setuptools/svn_utils.pyu get_sectionss    uSVNEntriesFileText.get_sectionscCst|jS(N(uboolu get_sections(uself((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyuis_validsuSVNEntriesFileText.is_validcCs|jddS(Nii(u get_sections(uself((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyuget_urlsuSVNEntriesFileText.get_urlcs)dfdd|jD}|S(Ni cs<g|]2}t|kr|rt|qS((ulenuint(u.0usection(urevision_line_number(u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu s u=SVNEntriesFileText.parse_revision_numbers..(u get_sections(uselfu rev_numbers((urevision_line_numberu-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyuparse_revision_numberssu)SVNEntriesFileText.parse_revision_numberscs/ddfdd|jD}|S(NcSs0|o/|do/t|dkp/|ddkS(Niiiudelete(ulen(us((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyusu:SVNEntriesFileText.get_undeleted_records..cs&g|]}|r|dqS(i((u.0usection(u undeleted(u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu s u<SVNEntriesFileText.get_undeleted_records..(u get_sections(uselfuresult((u undeletedu-/tmp/pip-k8wh6o-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-k8wh6o-build/setuptools/svn_utils.pyuSVNEntriesFileTexts      uSVNEntriesFileTextcBsD|EeZdZddZddZddZddZd S( uSVNEntriesFileXMLcCsdS(NT(uTrue(uself((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyuis_validsuSVNEntriesFileXML.is_validcCs(tjd}|j|jjdS(uGet repository URLu url="([^"]+)"i(ureucompileusearchudataugroup(uselfuurlre((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyuget_urlsuSVNEntriesFileXML.get_urlcCs,tjd}dd|j|jDS(Nucommitted-rev="(\d+)"cSs%g|]}t|jdqS(i(uintugroup(u.0um((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu $s u<SVNEntriesFileXML.parse_revision_numbers..(ureucompileufinditerudata(uselfurevre((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyuparse_revision_numbers!s u(SVNEntriesFileXML.parse_revision_numberscCs8tjdtj}dd|j|jD}|S(Nu%name="([^"]+)"(?![^>]+deleted="true")cSs%g|]}t|jdqS(i(uunescapeugroup(u.0umatch((u-/tmp/pip-k8wh6o-build/setuptools/svn_utils.pyu ,s u;SVNEntriesFileXML.get_undeleted_records..(ureucompileuIufinditerudata(uselfuentries_patternuresults((u-/tmp/pip-k8wh6o-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-k8wh6o-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-k8wh6o-build/setuptools/svn_utils.pyusN                  $ t B 3