3 Pf$@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|jd|gdddid}tj|}|sFtjdt|tjd|d S|jd j}t j|}|stjd t|tjd||dfS||jd fS) z/Returns (url, revision), where both are stringsinfoFZLANGC) show_stdoutZ extra_environz'Cannot determine URL of svn checkout %sz!Output that cannot be parsed: %sNz,Cannot determine revision of svn checkout %s)NN) run_command _svn_url_researchloggerwarningrdebuggroupstrip_svn_revision_re)selflocationoutputmatchurlr# /usr/lib/python3.6/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)rrr"rev rev_optionsr#r#r$r&;s    zSubversion.exportcCs|jdg|||gdS)Nswitch)r)rdestr"r.r#r#r$r/JszSubversion.switchcCs|jdg||gdS)Nupdate)r)rr0r.r#r#r$r1MszSubversion.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(r)Zcheck_destinationrrrr)rr0r"r-r.Z rev_displayr#r#r$obtainPs     zSubversion.obtaincCsfx`|D]X}t|j}|sqd|kr@dj|jdddj}n|}||jkr|jdddSqWdS)N-r#r)r egg_fragmentjoinsplitlowerkey)rdistZdependency_linksr"r7r;r#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 rNentries/) r*walkdirnameremover+r8r,_get_svn_url_rev startswithmax) rrZrevisionbasedirsfilesZ entries_fnZdirurlZlocalrevZbase_urlr#r#r$ get_revisionos"      zSubversion.get_revisioncs,tt|j\}}|jdr$d|}||fS)Nzssh://zsvn+)superr r'rD)rr"r-) __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)r*r+r,r8rArrrC)rrZ orig_locationZ 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)InstallationErrorr>r289Z10z 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)Nr4rrzsvn+%s@%s#egg=%s)rLZegg_namer9rI)rr<rZrepoZegg_project_namer-r#r#r$get_src_requirements   zSubversion.get_src_requirementcCsdS)z&Always assume the versions don't matchFr#)rr0r.r#r#r$ check_versionszSubversion.check_versioncCs>tj|}|jjdd}|j||j|j|jf}tj|}|S)N@rr6) urllib_parseurlsplitnetlocr9schemer+ZqueryZfragmentZ urlunsplit)r"ZpurlZstripped_netlocZ url_piecesZsurlr#r#r$r)s   zSubversion.remove_auth_from_url)r r rrr)__name__ __module__ __qualname__namerAZ repo_nameZschemesr%r&r/r1r3r=rIr'rLrCrfrg staticmethodr) __classcell__r#r#)rKr$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-rusernamerrhr:z --usernamez --password)NN)rirjhasattrrspasswordr9)r"r-r.rrsrvrkZauthr#r#r$r(s$      r()Z __future__rZloggingr*reZpip._vendor.six.moves.urllibrriZ pip.indexrZ pip.utilsrrZpip.utils.loggingrZpip.vcsrr compiler^r`rrrcrbZ getLoggerrmrr r(registerr#r#r#r$s&           Y