eaiovnaovbqoebvqoeavibavo  abc@@sddlmZddlZddlZddlZddlmZddlm Z ddl m Z ddl m Zddlm ZddlmZmZddlmZmZe jZe jZejeZd efd YZejedS( i(tabsolute_importN(tsamefile(t BadCommand(tparse(trequest(t display_pathtrmtree(tvcstVersionControltGitcB@seZdZdZdZdZddZd Zd Z d Z d Z d Z dZ dZdZdZdZdZdZdZdZdZdZdZdZdZdZedZRS( tgits.gittclonesgit+https git+httpssgit+sshsgit+gitsgit+filec O@s|rt|\}}}}}|jdr|t|jd } | tj|jddjd} t||| ||f}|jdd} || t|| || ||f}qnt 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|jdd }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|jds>|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(sCheck 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|dS(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|jtdkr7|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||||rtjd||t||jdd||g|r|j|||}|j||s|jddg|d|qn|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.pytobtains"    cC@s|jdddgdtd|}|j}|d}x'|D]}|jdrA|}PqAqAW|jdd }|jS( 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_urls   cC@s+|jddgdtd|}|jS(Ns rev-parsetHEADR'R2(R*R+RR(RR6t current_rev((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyRBscc@sn|jdgdtd|}xI|jjD]5}|jdd\}}|j|jfVq1WdS(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_refss cC@s |jdS(Ns refs/remotes/(R,(RR\((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyt is_ref_remotescC@s |jdS(Ns refs/heads/(R,(RR\((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyt is_ref_branchscC@s |jdS(Ns refs/tags/(R,(RR\((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyt is_ref_tagscC@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_commits  cC@s |j|S(N(R9(RR6((s//usr/lib/python2.7/site-packages/pip/vcs/git.pytget_refsscC@si}x|j|D]\}}d}|j|rJ|td}nD|j|rl|td}n"|j|r|td}n|dk r|||s