� ��abc@@s�ddlmZddlZddlZddlZddlmZddlm Z ddl m Z ddl m Zddlm ZddlmZmZddlmZmZe jZe jZeje�Zd efd ��YZeje�dS( i(tabsolute_importN(tsamefile(t BadCommand(tparse(trequest(t display_pathtrmtree(tvcstVersionControltGitcB@s�eZdZdZdZdZdd�Zd �Zd �Z d �Z d �Z d �Z d�Z d�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zed��ZRS( tgits.gittclonesgit+https git+httpssgit+sshsgit+gitsgit+filec O@s�|r�t|�\}}}}}|jd�r�|t|jd�� } | tj|�jdd�jd�} t||| ||f�}|jd�d} || t|| || ||f�}q�nt t |�j |||�dS(Ntfilet/s\t+i( turlsplittendswithtlentlstripturllib_requestt url2pathnametreplacet urlunsplittfindtsuperR t__init__( tselfturltargstkwargstschemetnetloctpathtquerytfragmenttinitial_slashestnewpatht after_plus((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyR s #cC@sld}|jdgdt�}|j|�r@|t|�}nd}dj|jd�d �}t|�S(Ns git version tversiont show_stdouttt.i(t run_commandtFalset startswithRtjointsplitt parse_version(Rt VERSION_PFXR&((s//usr/lib/python2.7/site-packages/pip/vcs/git.pytget_git_version5scC@sytjdd�}|j|�zH|jd�s>|d}n|jdddd|gdtd |�Wd t|�Xd S( s@Export the Git repository at the url to the destination locations-exportspip-R scheckout-indexs-as-fs--prefixR'tcwdN(ttempfiletmkdtemptunpackRR*R+R(Rtlocationttemp_dir((s//usr/lib/python2.7/site-packages/pip/vcs/git.pytexportBs  cC@s_|j|�}d|}||kr0||gS||krG||gStjd|�|SdS(s�Check 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. s origin/%ss5Could not find a tag or branch '%s', assuming commit.N(tget_short_refstloggertwarning(Rtrevtdestt rev_optionst revisionst origin_rev((s//usr/lib/python2.7/site-packages/pip/vcs/git.pytcheck_rev_optionsOs      cC@s|j|�j|d�S(s  Compare the current sha to the ref. ref may be a branch or tag name, but current rev will always point to a sha. This means that a branch or tag will never compare as True. So this ultimately only matches against exact shas. i(t get_revisionR,(RR=R>((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyt check_versioncscC@sJ|jdd|gd|�|jddg|d|�|j|�dS(Ntconfigsremote.origin.urlR2tcheckouts-q(R*tupdate_submodules(RR=RR>((s//usr/lib/python2.7/site-packages/pip/vcs/git.pytswitchlscC@s�|j�td�kr7|jdddgd|�n|jddgd|�|rr|j|d||�}n|jdddg|d|�|j|�dS( Ns1.9.0tfetchs-qs--tagsR2itresets--hard(R1R/R*RARF(RR=R>((s//usr/lib/python2.7/site-packages/pip/vcs/git.pytupdaters cC@s�|j�\}}|r.|g}d|}ndg}d}|j||||�r�tjd||t|��|jdd||g�|r�|j|||�}|j||�s�|jddg|d|�q�n|j|�ndS( Ns (to %s)s origin/masterR(sCloning %s%s to %sR s-qRER2( t get_url_revtcheck_destinationR:tinfoRR*RARCRF(RR=RR<R>t rev_display((s//usr/lib/python2.7/site-packages/pip/vcs/git.pytobtain�s"    cC@s�|jdddgdtd|�}|j�}|d}x'|D]}|jd�rA|}PqAqAW|jd�d }|j�S( s+Return URL of the first remote encountered.RDs --get-regexpsremote\..*\.urlR'R2isremote.origin.url t i(R*R+t splitlinesR,R.tstrip(RR6tremotest found_remotetremoteR((s//usr/lib/python2.7/site-packages/pip/vcs/git.pytget_url�s   cC@s+|jddgdtd|�}|j�S(Ns rev-parsetHEADR'R2(R*R+RR(RR6t current_rev((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyRB�scc@sn|jdgdtd|�}xI|j�j�D]5}|jdd�\}}|j�|j�fVq1WdS(s4Yields tuples of (commit, ref) for branches and tagssshow-refR'R2RPiN(R*R+RRRQR.(RR6toutputtlinetcommittref((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyt get_full_refs�s cC@s |jd�S(Ns refs/remotes/(R,(RR\((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyt is_ref_remote�scC@s |jd�S(Ns refs/heads/(R,(RR\((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyt is_ref_branch�scC@s |jd�S(Ns refs/tags/(R,(RR\((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyt is_ref_tag�scC@s/t|j|�|j|�|j|�f� S(s0A ref is a commit sha if it is not anything else(tanyR^R_R`(RR\((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyt is_ref_commit�s  cC@s |j|�S(N(R9(RR6((s//usr/lib/python2.7/site-packages/pip/vcs/git.pytget_refs�scC@s�i}x�|j|�D]�\}}d}|j|�rJ|td�}nD|j|�rl|td�}n"|j|�r�|td�}n|dk r|||s      �