3 ]$@sddlmZddlZddlZddlZddlmZddlm Z ddl m Z m Z ddl mZddlmZmZejdZejd Zejd Zejd Zejd Zejd ZejeZGdddeZddZejedS))absolute_importN)parse)Link)rmtree display_path) indent_log)vcsVersionControlz url="([^"]+)"zcommitted-rev="(\d+)"z URL: (.+)zRevision: (.+)z\s*revision="(\d+)"z(.*)cseZdZdZdZdZd"Zdd Zd d Zd d Z ddZ ddZ ddZ ddZ fddZddZddZddZddZed d!ZZS)# Subversionsvnz.svncheckoutsvn+sshsvn+http svn+httpssvn+svncCs|jdj|j s td||jd|gdddid}tj|}|sftjdt |tj d |d S|j d j }t j|}|stjd t |tj d ||d fS||j d fS)z/Returns (url, revision), where both are strings/zBad directory: %sinfoFLANGC) show_stdout extra_environz'Cannot determine URL of svn checkout %sz!Output that cannot be parsed: %sNz,Cannot determine revision of svn checkout %s)NN)rstripendswithdirnameAssertionError run_command _svn_url_researchloggerwarningrdebuggroupstrip_svn_revision_re)selflocationoutputmatchurlr*1/tmp/pip-build-8jg9gmni/pip/pip/vcs/subversion.pyget_infos,        zSubversion.get_infoc Cst|j\}}t||}|j|}tjd||t6tjj|rJt ||j dg|||gddWdQRXdS)z@Export the svn repository at the url to the destination locationz!Exporting svn repository %s to %sexportF)rN) get_url_revget_rev_optionsremove_auth_from_urlrrrospathexistsrr)r%r&r)rev rev_optionsr*r*r+r-;s    zSubversion.exportcCs|jdg|||gdS)Nswitch)r)r%destr)r5r*r*r+r6JszSubversion.switchcCs|jdg||gdS)Nupdate)r)r%r7r5r*r*r+r8MszSubversion.updatecCst|j\}}t||}|j|}|r.d|}nd}|j||||rptjd||t||jddg|||gdS)Nz (to revision %s)zChecking out %s%s to %sr z-q)r.r/r0check_destinationrrrr)r%r7r)r4r5 rev_displayr*r*r+obtainPs     zSubversion.obtaincCsfx`|D]X}t|j}|sqd|kr@dj|jdddj}n|}||jkr|jdddSqWdS)N-r#r)r egg_fragmentjoinsplitlowerkey)r%distdependency_linksr)r@rDr*r*r+ get_locationas   zSubversion.get_locationc Csd}xtj|D]\}}}|j|kr2g|dd<q|j|jtjj||jd}tjj|s^q|j|\}}||kr~|d} n | s|j|  rg|dd<qt ||}qW|S)zR Return the maximum revision for all files under a given location rNentriesr) r1walkrremover2rAr3_get_svn_url_rev startswithmax) r%r&revisionbasedirsfiles entries_fndirurllocalrevbase_urlr*r*r+ get_revisionos"      zSubversion.get_revisioncs,tt|j\}}|jdr$d|}||fS)Nzssh://zsvn+)superr r.rL)r%r)r4) __class__r*r+r.s zSubversion.get_url_revcCsV|}xBtjjtjj|dsF|}tjj|}||krtjd|dSqW|j|dS)Nzsetup.pyzGCould not find setup.py for directory %s (tried all parent directories)r)r1r2r3rArrr rK)r%r& orig_location last_locationr*r*r+get_urls zSubversion.get_urlc Cspddlm}tjj||jd}tjj|rHt|}|j}WdQRXnd}|j dsj|j dsj|j drt t t j |jd}|dd=|dd }d d |Ddg}n|j d rtj|}|std ||jd}dd tj|Ddg}n^y<|jdd|gdd} tj| jd}dd tj| D}Wn |k rRdg}}YnX|rdt|} nd} || fS)Nr)InstallationErrorrHr98910z cSs,g|]$}t|dkr|drt|dqS) )lenint).0dr*r*r+ sz/Subversion._get_svn_url_rev..z             zSubversion._get_svn_url_revcCsB|j|}|dkrdS|jjddd}|j|}d|||fS)Nr=rrzsvn+%s@%s#egg=%s)r[egg_namerBrV)r%rEr&repoegg_project_namer4r*r*r+get_src_requirements   zSubversion.get_src_requirementcCsdS)z&Always assume the versions don't matchFr*)r%r7r5r*r*r+ check_versionszSubversion.check_versioncCs>tj|}|jjdd}|j||j|j|jf}tj|}|S)N@rr?) urllib_parseurlsplitnetlocrBschemer2queryfragment urlunsplit)r)purlstripped_netloc url_piecessurlr*r*r+r0s   zSubversion.remove_auth_from_url)r r rrr)__name__ __module__ __qualname__namer repo_nameschemesr,r-r6r8r<rGrVr.r[rKr}r~ staticmethodr0 __classcell__r*r*)rXr+r s" , r cCs|rd|g}ng}tj|}t|dr6|j|j}}nL|d}d|krz|jdd}d|krn|jdd\}}q|d}}nd \}}|r|d|g7}|r|d|g7}|S) Nz-rusernamerrr:z --usernamez --password)NN)rrhasattrrpasswordrB)r)r4r5rrrrauthr*r*r+r/s$      r/) __future__rloggingr1reZpip._vendor.six.moves.urllibrr pip.indexr pip.utilsrrpip.utils.loggingrpip.vcsrr compilerorqrr$rtrs getLoggerrrr r/registerr*r*r*r+s&           Y