<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    Re6                 @   s  d dl mZ d dlZd dlZd dlZd dlmZ d dl	m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 d d	lmZ d d
lmZmZmZmZ erd dlmZm Z  d dlm!Z! d dlm"Z"m#Z# e
j$Z$e
j%Z%e&e'Z(e)dZ*dd Z+G dd deZ,e-e, dS )    )absolute_importN)parse)request)
BadCommandSubProcessError)display_pathhide_url)make_command)TempDirectory)MYPY_CHECK_RUNNING)RemoteNotFoundErrorVersionControl!find_path_to_setup_from_repo_rootvcs)OptionalTuple)
HiddenText)AuthInfo
RevOptionsz^[a-fA-F0-9]{40}$c             C   s   t t| S )N)bool
HASH_REGEXmatch)sha r   /builddir/build/BUILDROOT/alt-python37-pip-20.2.4-6.el8.x86_64/opt/alt/python37/lib/python3.7/site-packages/pip/_internal/vcs/git.pylooks_like_hash*   s    r   c                   s   e Zd ZdZdZdZdZdZdZe	dd Z
d	d
 Zdd Zedd Zdd Zedd Zedd Zedd Zdd Zdd Zdd Zedd Zed*d d!Zed"d# Ze fd$d%Zed&d' Ze fd(d)Z  ZS )+Gitgitz.gitclone)r   zgit+httpz	git+httpszgit+sshzgit+gitzgit+file)GIT_DIRGIT_WORK_TREEHEADc             C   s   | gS )Nr   )revr   r   r   get_base_rev_args:   s    zGit.get_base_rev_argsc             C   sJ   |  t|\}}|jsdS | ||js.dS t| ||jd }| S )NFr   )get_url_rev_optionsr   r"   is_commit_id_equalr   get_revision_sha)selfurldest_rev_optionsis_tag_or_branchr   r   r   is_immutable_rev_checkout>   s    zGit.is_immutable_rev_checkoutc             C   sX   d}|  dg}||r4|t|d   d }nd}d|dd d }t|S )Nzgit version versionr    .   )run_command
startswithlensplitjoinparse_version)r'   VERSION_PFXr.   r   r   r   get_git_versionO   s    
zGit.get_git_versionc             C   s@   dddg}| j |d|d}| }|dr<|tdd S dS )zl
        Return the current branch, or None if HEAD isn't at a branch
        (e.g. detached HEAD).
        zsymbolic-refz-qr!   )   )extra_ok_returncodescwdzrefs/heads/N)r2   stripr3   r4   )clslocationargsoutputrefr   r   r   get_current_branch\   s    


zGit.get_current_branchc          	   C   sV   | ds|d }tdd0}| j|j|d | jdddd|g|jd	 W d
Q R X d
S )z@Export the Git repository at the url to the destination location/export)kind)r(   zcheckout-indexz-az-fz--prefix)r<   N)endswithr
   unpackpathr2   )r'   r?   r(   temp_dirr   r   r   rE   q   s    
z
Git.exportc       
   	   C   s   d}y| j d|g|d}W n tk
r.   Y nX i }xP|  D ]@}y| \}}W n" tk
rx   td|Y nX |||< qBW d|}d|}	||}|dk	r|dfS ||	}|d	fS )
z
        Return (sha_or_none, is_branch), where sha_or_none is a commit hash
        if the revision names a remote branch or tag, otherwise None.

        Args:
          dest: the repository directory.
          rev: the revision name.
        r/   zshow-ref)r<   zunexpected show-ref line: {!r}zrefs/remotes/origin/{}zrefs/tags/{}NTF)r2   r   r=   
splitlinesr5   
ValueErrorformatget)
r>   r)   r"   rA   refsliner   rB   
branch_reftag_refr   r   r   r&   ~   s&    



zGit.get_revision_shac             C   s   |j }|dk	st| ||\}}|dk	rF||}|r<|nd|_|S t|sZtd| |dsh|S | j	t
dd|| |d | j|dd}||}|S )	z
        Resolve a revision to a new RevOptions object with the SHA1 of the
        branch, tag, or ref if found.

        Args:
          rev_options: a RevOptions object.
        Nz:Did not find branch or tag '%s', assuming revision or ref.zrefs/fetchz-q)r<   
FETCH_HEAD)r"   )arg_revAssertionErrorr&   make_newbranch_namer   loggerwarningr3   r2   r	   to_argsget_revision)r>   r)   r(   r+   r"   r   	is_branchr   r   r   resolve_revision   s&    



zGit.resolve_revisionc             C   s   |sdS |  ||kS )z
        Return whether the current commit hash equals the given name.

        Args:
          dest: the repository directory.
          name: a string name.
        F)r\   )r>   r)   namer   r   r   r%      s    	zGit.is_commit_id_equalc             C   s   |  }td||t| | tdd|| |jr| |||}t|dd }|d kr| 	||jstdd|
 }| j||d n4| ||krd|}dd|d	|g}| j||d | | d S )
NzCloning %s%s to %sr   z-qrX   checkout)r<   z	origin/{}z-bz--track)
to_displayrY   infor   r2   r	   r"   r^   getattrr%   r[   rC   rM   update_submodules)r'   r)   r(   r+   rev_displayrX   cmd_argstrack_branchr   r   r   	fetch_new   s     
zGit.fetch_newc             C   sB   | j tdd||d tdd| }| j ||d | | d S )Nconfigzremote.origin.url)r<   r`   z-q)r2   r	   r[   rd   )r'   r)   r(   r+   rf   r   r   r   switch   s    
z
Git.switchc             C   st   |   tdkr&| jdddg|d n| jddg|d | |||}tddd| }| j||d | | d S )Nz1.9.0rS   z-qz--tags)r<   resetz--hard)r9   r7   r2   r^   r	   r[   rd   )r'   r)   r(   r+   rf   r   r   r   update  s    z
Git.updatec             C   sx   | j dddgd|d}| }y|d }W n tk
rB   tY nX x|D ]}|drJ|}P qJW |dd	 }| S )
z
        Return URL of the first remote encountered.

        Raises RemoteNotFoundError if the repository does not have a remote
        url configured.
        ri   z--get-regexpzremote\..*\.url)r:   )r;   r<   r   zremote.origin.url  r:   )r2   rK   
IndexErrorr   r3   r5   r=   )r>   r?   stdoutremotesfound_remoteremoter(   r   r   r   get_remote_url  s    




zGit.get_remote_urlNc             C   s&   |d krd}| j d|g|d}| S )Nr!   z	rev-parse)r<   )r2   r=   )r>   r?   r"   current_revr   r   r   r\   5  s
    zGit.get_revisionc             C   sP   | j ddg|d }tj|s0tj||}tjtj|d}t||S )z~
        Return the path to setup.py, relative to the repo root.
        Return None if setup.py is in the repo root.
        z	rev-parsez	--git-dir)r<   z..)r2   r=   osrI   isabsr6   abspathr   )r>   r?   git_dir	repo_rootr   r   r   get_subdirectory>  s    zGit.get_subdirectoryc                s   t |\}}}}}|dr|dt|d  }|t|ddd }t|||||f}|dd }	|d|	 t||	d ||||f }d|krd|kst	|d	d
}t
t| |\}}
}|dd}nt
t| |\}}
}||
|fS )a9  
        Prefixes stub URLs like 'user@hostname:user/repo.git' with 'ssh://'.
        That's required because although they use SSH they sometimes don'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.
        fileNrD   \+r:   z://zfile:zgit+z
git+ssh://zssh://r/   )urlsplitrG   r4   lstripurllib_requesturl2pathnamereplace
urlunsplitfindrV   superr   get_url_rev_and_auth)r>   r(   schemenetlocrI   queryfragmentinitial_slashesnewpath
after_plusr"   	user_pass)	__class__r   r   r   M  s"    

zGit.get_url_rev_and_authc             C   s6   t jt j|dsd S | jdddddg|d d S )Nz.gitmodules	submodulerl   z--initz--recursivez-q)r<   )ru   rI   existsr6   r2   )r>   r?   r   r   r   rd   p  s
    zGit.update_submodulesc                sv   t t| |}|r|S y| jddg|dd}W n2 tk
rP   td| d S  tk
rb   d S X tj	
|dS )Nz	rev-parsez--show-toplevelF)r<   log_failed_cmdzKcould not determine if %s is under git control because git is not availablez
)r   r   get_repository_rootr2   r   rY   debugr   ru   rI   normpathrstrip)r>   r?   locr)r   r   r   r   y  s    zGit.get_repository_root)N)__name__
__module____qualname__r_   dirname	repo_nameschemesunset_environdefault_arg_revstaticmethodr#   r-   r9   classmethodrC   rE   r&   r^   r%   rh   rj   rl   rs   r\   rz   r   rd   r   __classcell__r   r   )r   r   r   .   s0   (-#	r   ).
__future__r   loggingos.pathru   repip._vendor.packaging.versionr   r7   Zpip._vendor.six.moves.urlliburllib_parser   r   pip._internal.exceptionsr   r   pip._internal.utils.miscr   r   pip._internal.utils.subprocessr	   pip._internal.utils.temp_dirr
   pip._internal.utils.typingr    pip._internal.vcs.versioncontrolr   r   r   r   typingr   r   r   r   r   r~   r   	getLoggerr   rY   compiler   r   r   registerr   r   r   r   <module>   s2   

  a