£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>

Re                 @   s   d  d l  Z  d  d l Z d  d l Z d  d l m Z d  d l m Z m Z d  d l m	 Z	 m
 Z
 d  d l m Z d  d l m Z m Z e j Z e j Z Gd d   d e
  Z e	 j e  d S)	    N)call_subprocess)display_pathrmtree)vcsVersionControl)logger)url2pathnameurlparsec                   s   e  Z d  Z d Z d Z d Z d& Z d	 Z d
 Z d   f d 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 d d   Z d  d!   Z   f d" d#   Z d$ d%   Z   S)'Gitgitz.gitclonegit+http	git+httpsgit+sshgit+gitgit+filezgit-clone.txtzs# This was a Git repo; to make it a repo again run:
git init
git remote add origin %(url)s -f
git checkout %(rev)s
Nc                s   | r t  |  \ } } } } } | j d  r | d  t | j d    }	 |	 t |  j d d  j d  }
 t | | |
 | | f  } | j d  d } | d  |  t | | d   | |
 | | f  } q n  t t	 |   j
 | | |  d  S)Nfile/\+   )urlsplitendswithlenlstripr   replace
urlunsplitfindsuperr
   __init__)selfurlargskwargsschemenetlocpathqueryfragmentinitial_slashesnewpath
after_plus)	__class__ &/tmp/pip-ztkk0jow-build/pip/vcs/git.pyr      s     %9zGit.__init__c             C   s   d  } } x | j    D] } | j   s | j   j d  rE q n  t j d |  } | ru | j d  j   } n  t j d |  } | r | j d  j   } n  | r | r | | f Sq Wd S)N#z$git\s*remote\s*add\s*origin(.*)\s*-fr   z^git\s*checkout\s*-q\s*(.*)\s*)NN)
splitlinesstrip
startswithresearchgroup)r    contentr!   revline	url_match	rev_matchr-   r-   r.   parse_vcs_bundle_file%   s    
"zGit.parse_vcs_bundle_filec             C   s   t  j d d  } |  j |  zT | j d  s> | d } n  t |  j d d d d | g d |  j d	 d
 d | Wd t |  Xd S)z@Export the Git repository at the url to the destination locationz-exportzpip-r   zcheckout-indexz-az-fz--prefixfilter_stdoutshow_stdoutFcwdN)tempfilemkdtempunpackr   r   cmd_filterr   )r    locationtemp_dirr-   r-   r.   export4   s    z
Git.exportc             C   s`   |  j  |  } d | } | | k r0 | | g S| | k rG | | g St j d |  | Sd S)zCheck the revision options before checkout to compensate that tags
        and branches may need origin/ as a prefix.
        Returns the SHA1 of the branch or tag if found.
        z	origin/%sz5Could not find a tag or branch '%s', assuming commit.N)get_refsr   warn)r    r7   destrev_options	revisions
origin_revr-   r-   r.   check_rev_optionsA   s    
zGit.check_rev_optionsc             C   sP   t  |  j d d | g d | t  |  j d d g | d | |  j |  d  S)Nconfigzremote.origin.urlr>   checkoutz-q)r   rB   update_submodules)r    rI   r!   rJ   r-   r-   r.   switchS   s
    z
Git.switchc             C   sr   t  |  j d d g d | | r> |  j | d | |  } n  t  |  j d d d g | d | |  j |  d  S)Nfetchz-qr>   r   resetz--hard)r   rB   rM   rP   )r    rI   rJ   r-   r-   r.   update[   s
    #z
Git.updatec             C   s  |  j    \ } } | r. | g } d | } n d g } d } |  j | | | |  r t j d | | t |  f  t |  j d d | | g  |  j |  | r |  j | | |  } |  j	 |  j
 | d  s t |  j d d g | d	 | q q n  d  S)
Nz (to %s)zorigin/master zCloning %s%s to %sr   z-qr   rO   r>   )get_url_revcheck_destinationr   notifyr   r   rB   rP   rM   get_revisionr2   )r    rI   r!   r7   rJ   rev_displayr-   r-   r.   obtaine   s    		 z
Git.obtainc             C   s.   t  |  j d d g d d d | } | j   S)NrN   zremote.origin.urlr=   Fr>   )r   rB   r1   )r    rD   r!   r-   r-   r.   get_urlx   s    zGit.get_urlc             C   s.   t  |  j d d g d d d | } | j   S)Nz	rev-parseHEADr=   Fr>   )r   rB   r1   )r    rD   current_revr-   r-   r.   rY   ~   s    !zGit.get_revisionc             C   s	  t  |  j d g d d d | } i  } x | j   j   D] } | j d d  \ } } | j   } d } | j d  r | t d  d  } nP | j d	  r | t d	  d  } n( | j d
  r | t d
  d  } n  | d k	 r: | j   | | <q: q: W| S)z=Return map of named refs (branches or tags) to commit hashes.zshow-refr=   Fr>    r   Nzrefs/remotes/zrefs/heads/z
refs/tags/)r   rB   r1   r0   splitr2   r   )r    rD   outputrvr8   commitrefref_namer-   r-   r.   rG      s     zGit.get_refsc       
      C   s   |  j  |  } | j   j d  s1 d | } n  | j   j d d  d } | sW d  S|  j |  } |  j |  } t d d   | j   D  } | | k r d | | | f }	 n
 d	 | }	 d
 | | |	 f S)Nzgit:zgit+-r   r   c             s   s!   |  ] \ } } | | f Vq d  S)Nr-   ).0rd   rc   r-   r-   r.   	<genexpr>   s    z*Git.get_src_requirement.<locals>.<genexpr>z%s-%sz%s-devz%s@%s#egg=%s)	r\   lowerr2   egg_namer`   rY   rG   dictitems)
r    distrD   	find_tagsrepoegg_project_namer^   refsnames_by_commitfull_egg_namer-   r-   r.   get_src_requirement   s    
zGit.get_src_requirementc                s   d |  j  k rl d |  j  k s$ t  |  j  j d d  |  _  t t |   j   \ } } | j d d  } n t t |   j   \ } } | | f S)a;  
        Prefixes stub URLs like 'user@hostname:user/repo.git' with 'ssh://'.
        That's required because although they use SSH they sometimes doesn't
        work with a ssh:// scheme (e.g. Github). But we need a scheme for
        parsing. Hence we remove it again afterwards and return it as a stub.
        z://zfile:zgit+z
git+ssh://zssh://rU   )r!   AssertionErrorr   r   r
   rV   )r    r!   r7   )r,   r-   r.   rV      s    zGit.get_url_revc             C   sN   t  j j t  j j | d   s% d  St |  j d d d d d g d | d  S)Nz.gitmodules	submodulerT   z--initz--recursivez-qr>   )osr&   existsjoinr   rB   )r    rD   r-   r-   r.   rP      s    !zGit.update_submodules)zgitr   r   r   r   r   )__name__
__module____qualname__namedirname	repo_nameschemesbundle_fileguider   r;   rF   rM   rQ   rT   r[   r\   rY   rG   rt   rV   rP   r-   r-   )r,   r.   r
      s&   
r
   )r?   r3   os.pathrw   pip.utilr   r   r   pip.vcsr   r   pip.logr   Zpip.backwardcompatr   r	   r   r   r
   registerr-   r-   r-   r.   <module>   s   		