U
    @vgu                     @   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S )z;Metadata generation logic for legacy source distributions.
    N)InstallationError)
ensure_dir)make_setuptools_egg_info_args)call_subprocess)MYPY_CHECK_RUNNING)vcs)ListOptional)BuildEnvironmentc                    s   dd   fdd}dd }| }|r.||}nt j|d}t |}|sXtd|t|d	krp|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/tmp/pip-unpacked-wheel-gw11q0wt/pip/_internal/operations/build/metadata_legacy.py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>2   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>3   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_directory5   s    z*_find_egg_info.<locals>.depth_of_directorypip-egg-infoz!Files/directories not found in {}   )keyr   )r   r   r   listdirr   formatlensort)source_directoryis_editabler*   r.   r%   	filenamesr   r)   r   _find_egg_info   s    

r9   c              	   C   sb   t d|| d}|s,tj|d}t| t|||d}|  t||dd W 5 Q R X t||S )znGenerate metadata using setup.py-based defacto mechanisms.

    Returns the generated metadata directory.
    z2Running setup.py (path:%s) egg_info for package %sNr/   )egg_info_dirno_user_configzpython setup.py egg_info)cwdcommand_desc)	loggerdebugr   r   r   r   r   r   r9   )	build_envsetup_py_path
source_direditableisolateddetailsr:   argsr   r   r   generate_metadataQ   s*     rG   )__doc__loggingr   pip._internal.exceptionsr   pip._internal.utils.miscr   $pip._internal.utils.setuptools_buildr   pip._internal.utils.subprocessr   pip._internal.utils.typingr   pip._internal.vcsr   typingr   r	   pip._internal.build_envr
   	getLogger__name__r>   r9   rG   r   r   r   r   <module>   s   
;