U
    P^[                     @   s   d 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
 ddlmZ ddlmZ er|dd	lmZmZ dd
lmZ eeZdd Zdd Zdd Zdd ZdS )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
tS tS )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.
    )
use_pep517_generate_metadata_legacy_generate_metadatainstall_req r   K/tmp/pip-install-220asx0h/pip/pip/_internal/operations/generate_metadata.pyget_metadata_generator   s    r   c                    s   dd   fdd}dd }| }|r.||}nt j|d}t |}|sVtd| t|d	krn|j|d
 t j||d S )zEFind an .egg-info in `source_directory`, based on `is_editable`.
    c                 S   s0   t jt j| ddp.t jt j| ddS )NbinpythonScriptsz
Python.exe)ospathlexistsjoinexists)r   r   r   r   looks_like_virtual_env(   s    z._find_egg_info.<locals>.looks_like_virtual_envc                    s   g }t | D ]\ }}tjD ]}||kr|| qt|D ]<}t j |r`|| q>|dksp|dkr>|| q>| fdd|D  qdd |D S )Ntesttestsc                 3   s   | ]}t j |V  qd S N)r   r   r   ).0dir_rootr   r   	<genexpr>?   s     zC_find_egg_info.<locals>.locate_editable_egg_info.<locals>.<genexpr>c                 S   s   g | ]}| d r|qS )z	.egg-info)endswith)r   fr   r   r   
<listcomp>@   s     
 zD_find_egg_info.<locals>.locate_editable_egg_info.<locals>.<listcomp>)	r   walkr   dirnamesremovelistr   r   extend)base
candidatesdirsfilesr    r   r!   r   locate_editable_egg_info/   s    
z0_find_egg_info.<locals>.locate_editable_egg_infoc                 S   s(   |  tjjtjjr"|  tjjp$d S )Nr   )countr   r   sepaltsep)r    r   r   r   depth_of_directoryB   s    z*_find_egg_info.<locals>.depth_of_directorypip-egg-infoz!Files/directories not found in %s   )keyr   )r   r   r   listdirr   lensort)Zsource_directoryZis_editabler1   r5   r,   	filenamesr   r0   r   _find_egg_info#   s    

r=   c              	   C   s   | j pd| j}td| j| t| j}| jr<|dg7 }g }| jsft	j
| jd}d|g}t| | j  t|dg | | jdd W 5 Q R X t| j| jS )	Nzfrom {}z2Running setup.py (path:%s) egg_info for package %sz--no-user-cfgr6   z
--egg-baseegg_infozpython setup.py egg_info)cwdcommand_desc)nameformatlinkloggerdebugZsetup_py_pathr   isolatededitabler   r   r   Zunpacked_source_directoryr   	build_envr   r=   )r   Zreq_details_strbase_cmdegg_base_optionegg_info_dirr   r   r   r   ^   s6     

 r   c                 C   s   |   S r   )prepare_pep517_metadatar   r   r   r   r      s    r   )__doc__loggingr   pip._internal.exceptionsr   pip._internal.utils.miscr   $pip._internal.utils.setuptools_buildr   Zpip._internal.utils.subprocessr   pip._internal.utils.typingr   pip._internal.vcsr   typingr   r	   Zpip._internal.req.req_installr
   	getLogger__name__rD   r   r=   r   r   r   r   r   r   <module>   s    
;(