3 ÝPf†$ã@sÔddlmZddlZddlZddlZddlmZddlm Z ddl m Z m Z ddl mZddlmZmZejdƒZejd ƒZejd ƒZejd ƒZejd ƒZejd ƒZejeƒZGdd„deƒZdd„ZejeƒdS)é)Úabsolute_importN)Úparse)ÚLink)ÚrmtreeÚ display_path)Ú indent_log)ÚvcsÚVersionControlz url="([^"]+)"zcommitted-rev="(\d+)"z URL: (.+)zRevision: (.+)z\s*revision="(\d+)"z(.*)cs�eZdZdZdZdZd"Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z ‡fdd„Zdd„Zdd„Zdd„Zdd„Zed d!„ƒZ‡ZS)#Ú SubversionÚsvnz.svnÚcheckoutúsvn+sshúsvn+httpú svn+httpsúsvn+svncCs´|jdƒj|jƒ s td|ƒ‚|jd|gdddid�}tj|ƒ}|sftjdt |ƒƒtj d |ƒd S|j d ƒj ƒ}t j|ƒ}|s¦tjd t |ƒƒtj d |ƒ|d fS||j d ƒfS)z/Returns (url, revision), where both are stringsú/zBad directory: %sÚinfoFZLANGÚC)Ú show_stdoutZ extra_environz'Cannot determine URL of svn checkout %sz!Output that cannot be parsed: %sNéz,Cannot determine revision of svn checkout %s)NN)ÚrstripÚendswithÚdirnameÚAssertionErrorÚ run_commandÚ _svn_url_reÚsearchÚloggerÚwarningrÚdebugÚgroupÚstripÚ_svn_revision_re)ÚselfÚlocationÚoutputÚmatchÚurl©r(ú /usr/lib/python3.6/subversion.pyÚget_infos,        zSubversion.get_infoc Cst|jƒ\}}t||ƒ}|j|ƒ}tjd||ƒtƒ�6tjj|ƒrJt |ƒ|j dg|||gdd�WdQRXdS)z@Export the svn repository at the url to the destination locationz!Exporting svn repository %s to %sÚexportF)rN) Ú get_url_revÚget_rev_optionsÚremove_auth_from_urlrrrÚosÚpathÚexistsrr)r#r$r'ÚrevÚ rev_optionsr(r(r)r+;s    zSubversion.exportcCs|jdg|||gƒdS)NÚswitch)r)r#Údestr'r3r(r(r)r4JszSubversion.switchcCs|jdg||gƒdS)NÚupdate)r)r#r5r3r(r(r)r6MszSubversion.updatecCst|jƒ\}}t||ƒ}|j|ƒ}|r.d|}nd}|j||||ƒrptjd||t|ƒƒ|jddg|||gƒdS)Nz (to revision %s)ÚzChecking out %s%s to %sr z-q)r,r-r.Zcheck_destinationrrrr)r#r5r'r2r3Z rev_displayr(r(r)ÚobtainPs     zSubversion.obtaincCsfx`|D]X}t|ƒj}|sqd|kr@dj|jdƒdd…ƒjƒ}n|}||jkr|jddƒdSqWdS)Nú-rú#réÿÿÿÿ)rÚ egg_fragmentÚjoinÚsplitÚlowerÚkey)r#ÚdistZdependency_linksr'r<r@r(r(r)Ú get_locationas   zSubversion.get_locationc Cs°d}x¦tj|ƒD]˜\}}}|j|kr2g|dd…<q|j|jƒtjj||jdƒ}tjj|ƒs^q|j|ƒ\}}||kr~|d} n | s�|j| ƒ ržg|dd…<qt ||ƒ}qW|S)zR Return the maximum revision for all files under a given location rNÚentriesr) r/ÚwalkrÚremover0r=r1Ú_get_svn_url_revÚ startswithÚmax) r#r$ZrevisionÚbaseÚdirsÚfilesZ entries_fnZdirurlZlocalrevZbase_urlr(r(r)Ú get_revisionos"      zSubversion.get_revisioncs,tt|ƒjƒ\}}|jdƒr$d|}||fS)Nzssh://zsvn+)Úsuperr r,rG)r#r'r2)Ú __class__r(r)r,Šs zSubversion.get_url_revcCsV|}xBtjjtjj|dƒƒsF|}tjj|ƒ}||krtjd|ƒdSqW|j|ƒdS)Nzsetup.pyzGCould not find setup.py for directory %s (tried all parent directories)r)r/r0r1r=rrrrF)r#r$Z orig_locationZ last_locationr(r(r)Úget_url‘s zSubversion.get_urlc Cspddlm}tjj||jdƒ}tjj|ƒrHt|ƒ�}|jƒ}WdQRXnd}|j dƒsj|j dƒsj|j dƒr¬t t t j |jdƒƒƒ}|dd=|dd }d d „|Dƒdg}n¨|j d ƒrötj|ƒ}|sÐtd |ƒ‚|jdƒ}dd „tj|ƒDƒdg}n^y<|jdd|gdd�} tj| ƒjdƒ}dd „tj| ƒDƒ}Wn |k �rRdg}}YnX|�rdt|ƒ} nd} || fS)Nr)ÚInstallationErrorrCr7Ú8Ú9Z10z écSs,g|]$}t|ƒdkr|drt|dƒ‘qS)é )ÚlenÚint)Ú.0Údr(r(r)ú µsz/Subversion._get_svn_url_rev..zÚ_svn_xml_url_rerÚ ValueErrorr Ú _svn_rev_reÚfinditerrÚ_svn_info_xml_url_reÚ_svn_info_xml_rev_rerH) r#r$rPZ entries_pathÚfÚdatar'Zrevsr&Zxmlr2r(r(r)rF¥s>             zSubversion._get_svn_url_revcCsB|j|ƒ}|dkrdS|jƒjddƒd}|j|ƒ}d|||fS)Nr9rrzsvn+%s@%s#egg=%s)rOZegg_namer>rL)r#rAr$ZrepoZegg_project_namer2r(r(r)Úget_src_requirementÑs   zSubversion.get_src_requirementcCsdS)z&Always assume the versions don't matchFr()r#r5r3r(r(r)Ú check_versionÚszSubversion.check_versioncCs>tj|ƒ}|jjdƒd}|j||j|j|jf}tj|ƒ}|S)Nú@rr;) Ú urllib_parseÚurlsplitÚnetlocr>Úschemer0ZqueryZfragmentZ urlunsplit)r'ZpurlZstripped_netlocZ url_piecesZsurlr(r(r)r.Þs   zSubversion.remove_auth_from_url)r r rrr)Ú__name__Ú __module__Ú __qualname__ÚnamerZ repo_nameZschemesr*r+r4r6r8rBrLr,rOrFrirjÚ staticmethodr.Ú __classcell__r(r()rNr)r s" , r cCs¦|rd|g}ng}tj|ƒ}t|dƒr6|j|j}}nL|d}d|krz|jdƒd}d|krn|jddƒ\}}q‚|d}}nd \}}|r’|d|g7}|r¢|d|g7}|S) Nz-rÚusernamerrkrú:z --usernamez --password)NN)rlrmÚhasattrrvÚpasswordr>)r'r2r3ÚrrvryrnZauthr(r(r)r-ñs$      r-)Z __future__rZloggingr/ÚreZpip._vendor.six.moves.urllibrrlZ pip.indexrZ pip.utilsrrZpip.utils.loggingrZpip.vcsrr Úcompilerarcrr"rfreZ getLoggerrprr r-Úregisterr(r(r(r)Ús&           Y