î
½1kd�)  ã               @   s  d  d l  Z  d  d l Z d  d l m Z d  d l m Z d  d l m Z m Z m	 Z	 d  d l
 m Z d  d l m Z m Z e j d ƒ Z e j d ƒ Z e j d	 ƒ Z e j d
 ƒ Z e j d ƒ Z e j d ƒ Z Gd d „  d e ƒ Z d d „  Z e j e ƒ d S)é    N)Úurlparse)ÚLink)ÚrmtreeÚdisplay_pathÚcall_subprocess)Úlogger)ÚvcsÚVersionControlzurl="([^"]+)"zcommitted-rev="(\d+)"z	URL: (.+)zRevision: (.+)z\s*revision="(\d+)"z<url>(.*)</url>c                   så   e  Z d  Z d Z d Z d Z d' Z d Z d	 Z d
 d „  Z	 d d „  Z
 d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z ‡  f d d †  Z d d „  Z d d „  Z d  d! „  Z d" d# „  Z d$ d% d& „ Z ‡  S)(Ú
SubversionÚsvnz.svnÚcheckoutúsvn+sshúsvn+httpú	svn+httpsúsvn+svnzsvn-checkout.txtzg# This was an svn checkout; to make it a checkout again run:
svn checkout --force -r %(rev)s %(url)s .
c             C   s  | j  d ƒ j |  j ƒ s, t d | ƒ ‚ t |  j d | g d d d i d d 6ƒ} t j | ƒ } | s˜ t j	 d	 t
 | ƒ ƒ t j d
 | ƒ d S| j d ƒ j ƒ  } t j | ƒ } | sô t j	 d t
 | ƒ ƒ t j d
 | ƒ | d f S| | j d ƒ f S)z/Returns (url, revision), where both are stringsú/zBad directory: %sÚinfoÚshow_stdoutFÚextra_environÚCÚLANGz'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ÚAssertionErrorr   ÚcmdÚ_svn_url_reÚsearchr   Úwarnr   r   ÚgroupÚstripÚ_svn_revision_re)ÚselfÚlocationÚoutputÚmatchÚurl© r(   úA/var/www/pythonscrapper/code/venv/build/pip/pip/vcs/subversion.pyÚget_info   s    ,(
zSubversion.get_infoc             C   s¡   xš | j  ƒ  D]Œ } | j ƒ  s | j ƒ  j d ƒ r; q n  t j d | ƒ } | sW d S| j d ƒ } | | j ƒ  d  … j ƒ  j d  d ƒ d } | | f SWd S)Nú#z^-r\s*([^ ])?r   r   )NN)NN)Ú
splitlinesr!   Ú
startswithÚrer   r    ÚendÚsplit)r#   ÚcontentÚliner&   ÚrevÚrestr(   r(   r)   Úparse_vcs_bundle_file,   s    ",z Subversion.parse_vcs_bundle_filec             C   s±   |  j  ƒ  \ } } t | | ƒ } t j d | | f ƒ t j d 7_ zS t j j | ƒ ri t | ƒ n  t	 |  j
 d g | | | g d |  j d d ƒWd t j d 8_ Xd S)z@Export the svn repository at the url to the destination locationz!Exporting svn repository %s to %sé   ÚexportÚfilter_stdoutr   FN)Úget_url_revÚget_rev_optionsr   ÚnotifyÚindentÚosÚpathÚexistsr   r   r   Ú_filter)r#   r$   r'   r3   Úrev_optionsr(   r(   r)   r7   8   s    zSubversion.exportc             C   s%   t  |  j d g | | | g ƒ d  S)NÚswitch)r   r   )r#   Údestr'   rA   r(   r(   r)   rB   I   s    zSubversion.switchc             C   s"   t  |  j d g | | g ƒ d  S)NÚupdate)r   r   )r#   rC   rA   r(   r(   r)   rD   M   s    zSubversion.updatec             C   s�   |  j  ƒ  \ } } t | | ƒ } | r4 d | } n d } |  j | | | | ƒ r™ t j d | | t | ƒ f ƒ t |  j d d g | | | g ƒ n  d  S)Nz (to revision %s)Ú zChecking out %s%s to %sr   z-q)r9   r:   Úcheck_destinationr   r;   r   r   r   )r#   rC   r'   r3   rA   Úrev_displayr(   r(   r)   ÚobtainQ   s    	zSubversion.obtainc             C   s�   x‰ | D]� } t  | ƒ j } | s( q n  d | k r_ d j | j d ƒ d  d … ƒ j ƒ  } n | } | | j k r | j d d ƒ d Sq Wd  S)Nú-r   r+   r   éÿÿÿÿ)r   Úegg_fragmentÚjoinr0   ÚlowerÚkey)r#   ÚdistÚdependency_linksr'   rK   rN   r(   r(   r)   Úget_location^   s    +zSubversion.get_locationc       
      C   sÿ   d } xò t  j | ƒ D]á \ } } } |  j | k rJ g  | d d … <q n  | j |  j ƒ t  j j | |  j d ƒ } t  j j | ƒ s� q n  |  j | ƒ \ } } | | k r» | d }	 n- | sÒ | j |	 ƒ rè g  | d d … <q n  t	 | | ƒ } q W| S)zR
        Return the maximum revision for all files under a given location
        r   NÚentriesr   )
r=   Úwalkr   Úremover>   rL   r?   Ú_get_svn_url_revr-   Úmax)
r#   r$   ÚrevisionÚbaseÚdirsÚfilesÚ
entries_fnÚdirurlÚlocalrevÚbase_urlr(   r(   r)   Úget_revisionl   s"    zSubversion.get_revisionc                sA   t  t |  ƒ j ƒ  \ } } | j d ƒ r7 d | } n  | | f S)Nzssh://zsvn+)Úsuperr
   r9   r-   )r#   r'   r3   )Ú	__class__r(   r)   r9   ‡   s    zSubversion.get_url_revc             C   sx   | } x^ t  j j t  j j | d ƒ ƒ sf | } t  j j | ƒ } | | k r	 t j d | ƒ d  Sq	 W|  j | ƒ d S)Nzsetup.pyzGCould not find setup.py for directory %s (tried all parent directories)r   )r=   r>   r?   rL   r   r   r   rU   )r#   r$   Úorig_locationÚlast_locationr(   r(   r)   Úget_urlŽ   s    $	zSubversion.get_urlc       
      C   s×  d d l  m } t t j j | |  j d ƒ ƒ } | j ƒ  } | j ƒ  | j	 d ƒ st | j	 d ƒ st | j	 d ƒ rË t
 t t j | j d ƒ ƒ ƒ } | d d =| d d } d	 d
 „  | Dƒ d g } nç | j	 d ƒ r7t j | ƒ } | st d | ƒ ‚ n  | j d ƒ } d d
 „  t j | ƒ Dƒ d g } n{ yY t |  j d d | g d d ƒ} t j | ƒ j d ƒ } d d
 „  t j | ƒ Dƒ } Wn | k
 r±d  g  } } Yn X| rÇt | ƒ }	 n d }	 | |	 f S)Nr   )ÚInstallationErrorrR   Ú8Ú9Ú10z

é   c             S   s<   g  |  ]2 } t  | ƒ d  k r | d  r t | d  ƒ ‘ q S)é	   )ÚlenÚint)Ú.0Údr(   r(   r)   ú
<listcomp>§   s   	 z/Subversion._get_svn_url_rev.<locals>.<listcomp>z<?xmlzBadly formatted data: %rr   c             S   s%   g  |  ] } t  | j d  ƒ ƒ ‘ q S)r   )rl   r    )rm   Úmr(   r(   r)   ro   ­   s   	 r   z--xmlr   Fc             S   s%   g  |  ] } t  | j d  ƒ ƒ ‘ q S)r   )rl   r    )rm   rp   r(   r(   r)   ro   ³   s   	 )Úpip.exceptionsre   Úopenr=   r>   rL   r   ÚreadÚcloser-   ÚlistÚmapÚstrr,   r0   Ú_svn_xml_url_rer   Ú
ValueErrorr    Ú_svn_rev_reÚfinditerr   r   Ú_svn_info_xml_url_reÚ_svn_info_xml_rev_rerV   )
r#   r$   re   ÚfÚdatar'   Úrevsr&   Úxmlr3   r(   r(   r)   rU   �   s2    !
-!&! zSubversion._get_svn_url_revc             C   s„   t  |  j d d | g d d ƒ} g  } xV | j ƒ  D]H } | j ƒ  } t | d ƒ } | d j d ƒ } | j | | f ƒ q4 W| S)	NÚlsz-vr   Fr   r   r   rJ   )r   r   r,   r0   rl   r!   Úappend)r#   Úsvn_tag_urlÚstdoutÚresultsr2   Úpartsr3   Útagr(   r(   r)   Úget_tag_revs¾   s    zSubversion.get_tag_revsc             C   sZ   d  } d  } xG | D]? \ } } | | k r | d  k sC | | k r | } | } q q W| S)Nr(   )r#   r3   Útag_revsÚbest_match_revÚbest_tagrˆ   Útag_revr(   r(   r)   Úfind_tag_matchÉ   s    zSubversion.find_tag_matchFc             C   sŒ  |  j  | ƒ } | d  k r d  S| j d ƒ } | j ƒ  j d d ƒ d } |  j | ƒ } | d d k r€ d | | d f } nû | d d k r° d | j ƒ  | d | f } nË | d d k rZd | j ƒ  | f } | r{d j | d  d … ƒ d }	 |  j |	 ƒ }
 |  j | |
 ƒ } | rWt j d | ƒ d |	 | f } d | | f } qWq{n! t j	 d | ƒ d | | f } d | | | f S)Nr   rI   r   r   r6   Útagsrˆ   z%s-%sÚbranchesÚbranchz	%s-%s-r%sÚtrunkz
%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): %szsvn+%s@%s#egg=%séþÿÿÿ)ztagsztagrJ   r“   )zbrancheszbranchrJ   rJ   rJ   )
rd   r0   Úegg_namer_   rL   r‰   rŽ   r   r;   r   )r#   rO   r$   Ú	find_tagsÚrepor‡   Úegg_project_namer3   Úfull_egg_nameÚtag_urlrŠ   r&   r(   r(   r)   Úget_src_requirementÕ   s.     zSubversion.get_src_requirement)zsvnr   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Únamer   Ú	repo_nameÚschemesÚbundle_fileÚguider*   r5   r7   rB   rD   rH   rQ   r_   r9   rd   rU   r‰   rŽ   rš   r(   r(   )ra   r)   r
      s(   !r
   c             C   sñ   | r d | g } n g  } t  j |  ƒ } t | d ƒ rO | j | j } } nl | d } d | k r¯ | j d ƒ d } d | k rŸ | j d d ƒ \ } } q» | d  } } n d	 \ } } | rÔ | d | g 7} n  | rí | d | g 7} n  | S)
Nz-rÚusernamer   ú@r   ú:z
--usernamez
--password)NN)r   ÚurlsplitÚhasattrr£   Úpasswordr0   )r'   r3   rA   Úrr£   r¨   ÚnetlocÚauthr(   r(   r)   r:   õ   s$    
r:   )r=   r.   Zpip.backwardcompatr   Ú	pip.indexr   Úpip.utilr   r   r   Úpip.logr   Úpip.vcsr   r	   Úcompilerx   rz   r   r"   r}   r|   r
   r:   Úregisterr(   r(   r(   r)   Ú<module>   s   ä