U
��.e[ � @ s� d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl m
Z
ddlmZ ddl
mZ er|dd lmZmZ dd
lmZ e�e�Zdd� Zd
d� Zdd� Zdd� ZdS )z4Metadata generation logic for source distributions.
� N)�InstallationError)�
ensure_dir)�make_setuptools_shim_args)�call_subprocess)�MYPY_CHECK_RUNNING)�vcs)�Callable�List)�InstallRequirementc C s | j s
tS tS )a Return a callable metadata generator for this InstallRequirement.
A metadata generator takes an InstallRequirement (install_req) as an input,
generates metadata via the appropriate process for that install_req and
returns the generated metadata directory.
)Z
use_pep517�_generate_metadata_legacy�_generate_metadata��install_req� r �N/usr/lib/python3.8/site-packages/pip/_internal/operations/generate_metadata.py�get_metadata_generator s r c s� dd� � � fdd�}dd� }| }|r.||�}nt j�|d�}t �|�}|sVtd| ��t|�d krn|j|d
� t j�||d �S )zEFind an .egg-info in `source_directory`, based on `is_editable`.
c S s0 t j�t j�| dd��p.t j�t j�| dd��S )N�bin�pythonZScriptsz
Python.exe)�os�path�lexists�join�exists)r r r r �looks_like_virtual_env( s �z._find_egg_info..looks_like_virtual_envc s� g }t �| �D ]�\� }}tjD ]}||kr|�|� qt|�D ]<}�t j�� |��r`|�|� q>|dksp|dkr>|�|� q>|�� fdd�|D �� qdd� |D �S )NZtestZtestsc 3 s | ]}t j�� |�V qd S �N)r r r )�.0�dir_��rootr r � ? s zC_find_egg_info..locate_editable_egg_info..c S s g | ]}|� d �r|�qS )z .egg-info)�endswith)r �fr r r �
@ s
zD_find_egg_info..locate_editable_egg_info..) r �walkr Zdirnames�remove�listr r �extend)�baseZ
candidates�dirs�filesr �r r r �locate_editable_egg_info/ s
z0_find_egg_info..locate_editable_egg_infoc S s( | � tjj�tjjr"| � tjj�p$d S )Nr )�countr r �sep�altsep)r r r r �depth_of_directoryB s ��z*_find_egg_info..depth_of_directory�pip-egg-infoz!Files/directories not found in %s� )�keyr )r r r �listdirr �len�sort)Zsource_directoryZis_editabler+ r/ r' � filenamesr r* r �_find_egg_info# s
�r7 c C s� | j pd�| j�}t�d| j|� t| j�}| jr<|dg7 }g }| jsft j
�| jd�}d|g}t
|� | j� t|dg | | jdd� W 5 Q R X t| j| j�S ) Nzfrom {}z2Running setup.py (path:%s) egg_info for package %sz
--no-user-cfgr0 z
--egg-baseZegg_infozpython setup.py egg_info)�cwdZcommand_desc)�name�format�link�logger�debugZ
setup_py_pathr �isolatedZeditabler r r Zunpacked_source_directoryr Z build_envr r7 )r Zreq_details_strZbase_cmdZegg_base_optionZegg_info_dirr r r r ^ s6 �
���r c C s | � � S r )Zprepare_pep517_metadatar
r r r r � s r )�__doc__Zloggingr Zpip._internal.exceptionsr Zpip._internal.utils.miscr Z$pip._internal.utils.setuptools_buildr Zpip._internal.utils.subprocessr Zpip._internal.utils.typingr Zpip._internal.vcsr �typingr r Zpip._internal.req.req_installr
Z getLogger�__name__r<