Re)@sddlZddlZddlmZddlmZddlmZmZm Z ddl m Z ddl m Z mZejdZejdZejd Zejd Zejd Zejd ZGd ddeZddZe jedS)N)urlparse)Link)rmtree display_pathcall_subprocess)logger)vcsVersionControlz url="([^"]+)"zcommitted-rev="(\d+)"z URL: (.+)zRevision: (.+)z\s*revision="(\d+)"z(.*)cseZdZdZdZdZd'ZdZd Zd d Z d d Z ddZ ddZ ddZ ddZddZddZfddZddZddZd d!Zd"d#Zd$d%d&ZS)( Subversionsvnz.svncheckoutsvn+sshsvn+http svn+httpssvn+svnzsvn-checkout.txtzg# This was an svn checkout; to make it a checkout again run: svn checkout --force -r %(rev)s %(url)s . cCs|jdj|j s,td|t|jd|gdddidd6}tj|}|stj d t |tj d |dS|j d j }tj|}|stj d t |tj d ||d fS||j d fS)z/Returns (url, revision), where both are strings/zBad directory: %sinfo show_stdoutF extra_environCLANGz'Cannot determine URL of svn checkout %sz!Output that cannot be parsed: %sNz,Cannot determine revision of svn checkout %s)NN)rstripendswithdirnameAssertionErrorrcmd _svn_url_researchrwarnrrgroupstrip_svn_revision_re)selflocationoutputmatchurlr(-/tmp/pip-ztkk0jow-build/pip/vcs/subversion.pyget_infos,( zSubversion.get_infocCsx|jD]}|j s |jjdr;q ntjd|}|sWdS|jd}||jdjjddd}||fSWdS)N#z ^-r\s*([^ ])?rr)NN)NN) splitlinesr! startswithrerr endsplit)r#contentliner&revrestr(r(r)parse_vcs_bundle_file,s", z Subversion.parse_vcs_bundle_filec Cs|j\}}t||}tjd||ftjd7_zStjj|rit|nt |j dg|||gd|j ddWdtjd8_XdS)z@Export the svn repository at the url to the destination locationz!Exporting svn repository %s to %sexport filter_stdoutrFN) get_url_revget_rev_optionsrnotifyindentospathexistsrrr_filter)r#r$r'r3 rev_optionsr(r(r)r78s zSubversion.exportcCs%t|jdg|||gdS)Nswitch)rr)r#destr'rAr(r(r)rBIszSubversion.switchcCs"t|jdg||gdS)Nupdate)rr)r#rCrAr(r(r)rDMszSubversion.updatecCs|j\}}t||}|r4d|}nd}|j||||rtjd||t|ft|jddg|||gndS)Nz (to revision %s)zChecking out %s%s to %sr z-q)r9r:check_destinationrr;rrr)r#rCr'r3rA rev_displayr(r(r)obtainQs  zSubversion.obtaincCsx|D]}t|j}|s(qnd|kr_dj|jdddj}n|}||jkr|jdddSqWdS)N-rr+r)r egg_fragmentjoinr0lowerkey)r#distdependency_linksr'rKrNr(r(r) get_location^s  +zSubversion.get_locationc Csd}xtj|D]\}}}|j|krJg|ddrLr?_get_svn_url_revr-max) r#r$revisionbasedirsfiles entries_fndirurllocalrevbase_urlr(r(r) get_revisionls"  zSubversion.get_revisioncsAtt|j\}}|jdr7d|}n||fS)Nzssh://zsvn+)superr r9r-)r#r'r3) __class__r(r)r9s zSubversion.get_url_revcCsx|}x^tjjtjj|dsf|}tjj|}||kr tjd|dSq W|j|dS)Nzsetup.pyzGCould not find setup.py for directory %s (tried all parent directories)r)r=r>r?rLrrrrU)r#r$ orig_location last_locationr(r(r)get_urls$  zSubversion.get_urlc Csddlm}ttjj||jd}|j}|j|j dst|j dst|j drt t t j |jd}|dd=|dd}d d |Ddg}n|j d r7tj|}|std |n|jd }dd tj|Ddg}n{yYt|jdd|gdd}tj|jd }dd tj|D}Wn|k rdg}}YnX|rt|} nd} || fS)Nr)InstallationErrorrR8910z cSs<g|]2}t|dkr|drt|dqS) )lenint).0dr(r(r) s z/Subversion._get_svn_url_rev..zrLrreadcloser-listmapstrr,r0_svn_xml_url_rer ValueErrorr _svn_rev_refinditerrr_svn_info_xml_url_re_svn_info_xml_rev_rerV) r#r$refdatar'revsr&xmlr3r(r(r)rUs2!  -! &!  zSubversion._get_svn_url_revcCst|jdd|gdd}g}xV|jD]H}|j}t|d}|djd}|j||fq4W|S) Nlsz-vrFrrrrJ)rrr,r0rlr!append)r# svn_tag_urlstdoutresultsr2partsr3tagr(r(r) get_tag_revss zSubversion.get_tag_revscCsZd}d}xG|D]?\}}||kr|dksC||kr|}|}qqW|S)Nr()r#r3tag_revsbest_match_revbest_tagrtag_revr(r(r)find_tag_matchs  zSubversion.find_tag_matchFc Cs|j|}|dkrdS|jd}|jjddd}|j|}|ddkrd||df}n|ddkrd |j|d|f}n|dd krZd |j|f}|r{dj|ddd} |j| } |j|| } | rWtjd| d| | f}d|| f}qWq{n!tj d|d ||f}d|||fS)NrrIrrr6tagsrz%s-%sbranchesbranchz %s-%s-r%strunkz %s-dev_r%sz/tagsz2trunk checkout %s seems to be equivalent to tag %sz%s/%sz?svn URL does not fit normal structure (tags/branches/trunk): %szsvn+%s@%s#egg=%s)ztagsztagrJr)zbrancheszbranchrJrJrJ) rdr0egg_namer_rLrrrr;r) r#rOr$ find_tagsreporegg_project_namer3 full_egg_nametag_urlrr&r(r(r)get_src_requirements.  zSubversion.get_src_requirement)zsvnr rrr)__name__ __module__ __qualname__namer repo_nameschemes bundle_fileguider*r5r7rBrDrHrQr_r9rdrUrrrr(r()rar)r s(         ! r cCs|rd|g}ng}tj|}t|drO|j|j}}nl|d}d|kr|jdd}d|kr|jdd\}}q|d}}n d \}}|r|d|g7}n|r|d|g7}n|S) Nz-rusernamer@r:z --usernamez --password)NN)rurlsplithasattrrpasswordr0)r'r3rArrrnetlocauthr(r(r)r:s$    r:)r=r.Zpip.backwardcompatr pip.indexrpip.utilrrrpip.logrpip.vcsrr compilerxrzrr"r}r|r r:registerr(r(r(r)s