σ r2Wc@@sθddlmZddlZddlZddlZddlmZddlm Z ddl m Z ddl m 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„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.pyRs #cC@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--prefixt show_stdouttcwdN(ttempfiletmkdtemptunpackRt run_commandtFalseR(Rtlocationttemp_dir((s//usr/lib/python2.7/site-packages/pip/vcs/git.pytexport4s  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_optionsAs      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_revisiont startswith(RR4R5((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyt check_versionUscC@sJ|jdd|gd|ƒ|jddg|d|ƒ|j|ƒdS(Ntconfigsremote.origin.urlR'tcheckouts-q(R+tupdate_submodules(RR4RR5((s//usr/lib/python2.7/site-packages/pip/vcs/git.pytswitch^scC@sl|jddgd|ƒ|r;|j|d||ƒ}n|jdddg|d|ƒ|j|ƒdS(Ntfetchs-qR'itresets--hard(R+R8R>(RR4R5((s//usr/lib/python2.7/site-packages/pip/vcs/git.pytupdateds  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/mastertsCloning %s%s to %sR s-qR=R'( t get_url_revtcheck_destinationR1tinfoRR+R8R;R>(RR4RR3R5t rev_display((s//usr/lib/python2.7/site-packages/pip/vcs/git.pytobtainps"    cC@sQ|jdddgdtd|ƒ}|jƒd}|jdƒd}|jƒS( s+Return URL of the first remote encountered.R<s --get-regexpsremote\..*\.urlR&R'it i(R+R,t splitlinestsplittstrip(RR-tremotest first_remoteR((s//usr/lib/python2.7/site-packages/pip/vcs/git.pytget_url‰s cC@s+|jddgdtd|ƒ}|jƒS(Ns rev-parsetHEADR&R'(R+R,RL(RR-t current_rev((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyR9’scc@sn|jdgdtd|ƒ}xI|jƒjƒD]5}|jddƒ\}}|jƒ|jƒfVq1WdS(s4Yields tuples of (commit, ref) for branches and tagssshow-refR&R'RIiN(R+R,RLRJRK(RR-toutputtlinetcommittref((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyt get_full_refs—s cC@s |jdƒS(Ns refs/remotes/(R:(RRU((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyt is_ref_remoteŸscC@s |jdƒS(Ns refs/heads/(R:(RRU((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyt is_ref_branch’scC@s |jdƒS(Ns refs/tags/(R:(RRU((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(tanyRWRXRY(RRU((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyt is_ref_commit¨s  cC@s |j|ƒS(N(R0(RR-((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 !cC@sutt|ƒj|ƒrtSy0|ƒjdgd|dtddƒ}| SWn"tk rptjd|ƒtSXdS(Ns rev-parseR'R&t on_returncodetignoresKcould not determine if %s is under git control because git is not available( RR tcontrols_locationtTrueR+R,RR1tdebug(tclsR-tr((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyRws    (R sgit+https git+httpssgit+sshsgit+gitsgit+fileN(t__name__t __module__tnameRdt repo_nametschemesR]RR/R8R;R?RBRHROR9RVRWRXRYR[R\R0RjRsRDR>t classmethodRw(((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyR s2               (t __future__RtloggingR(tos.pathR`t pip.compatRtpip.exceptionsRtpip._vendor.six.moves.urllibRt urllib_parseRRt pip.utilsRRtpip.vcsRRRRt getLoggerR|R1R tregister(((s//usr/lib/python2.7/site-packages/pip/vcs/git.pyts     ώ