U
    5øiu  ã                   @   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-xstzcrsb/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   
;