U ��.e 5 � @ s d dl mZ d dlZd dlZd dlZd dlmZ d dl mZ d dl mZ d dl mZ d dlmZ d dlmZ d dlmZ d d lmZ d d lmZmZmZmZ er�d dlmZmZ d dlmZ d d lm Z m!Z! e j"Z"e j#Z#e�$e%�Z&e�'d�Z(dd� Z)G dd� de�Z*e�+e*� dS )� )�absolute_importN)�parse)�request)� BadCommand)�display_path)�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 �9/usr/lib/python3.8/site-packages/pip/_internal/vcs/git.py�looks_like_hash* s r c s� e Zd ZdZdZdZdZdZdZe dd� �Z d d � Zedd� �Z d d� Zedd� �Zedd� �Zedd� �Zdd� Zdd� Zdd� Zedd� �Zed(dd��Zed d!� �Ze� fd"d#��Zed$d%� �Ze� fd&d'��Z� ZS ))�Git�gitz.git�clone)r zgit+httpz git+httpszgit+sshzgit+gitzgit+file)ZGIT_DIRZ GIT_WORK_TREE�HEADc C s | gS r r ��revr r r �get_base_rev_args: s zGit.get_base_rev_argsc C s\ d}| j dgdd�}|�|�r8|t|�d � �� d }nd}d�|�d�d d� �}t|�S ) Nzgit version �versionF)�show_stdoutr � �.� )�run_command� startswith�len�split�join� parse_version)�selfZVERSION_PFXr" r r r �get_git_version> s zGit.get_git_versionc C sB dddg}| j |dd|d�}|�� }|�d�r>|td�d� S dS ) zl Return the current branch, or None if HEAD isn't at a branch (e.g. detached HEAD). zsymbolic-ref�-qr �� F�Zextra_ok_returncodesr# �cwdzrefs/heads/N)r' �stripr( r) )�cls�location�args�output�refr r r �get_current_branchK s � zGit.get_current_branchc C sX |� d�s|d }tdd��2}| j|j|d� | jdddd|gd |jd � W 5 Q R X dS )z@Export the Git repository at the url to the destination location�/�export)Zkind)�urlzcheckout-indexz-az-fz--prefixF�r# r3 N)�endswithr �unpack�pathr' )r- r6 r= Ztemp_dirr r r r<