ó
'—^c           @   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 n  e j e ƒ Z d „  Z d „  Z d S(   s;   Metadata generation logic for legacy source distributions.
iÿÿÿÿN(   t   InstallationError(   t
   ensure_dir(   t   make_setuptools_egg_info_args(   t   call_subprocess(   t   MYPY_CHECK_RUNNING(   t   vcs(   t   Listt   Optional(   t   BuildEnvironmentc            sº   d „  ‰  ‡  f d †  } d „  } |  } | r< | | ƒ } n$ t  j j | d ƒ } t  j | ƒ } | s~ t d j | ƒ ƒ ‚ n  t | ƒ d k r£ | j d | ƒ n  t  j j | | d ƒ S(	   sE   Find an .egg-info in `source_directory`, based on `is_editable`.
    c         S   sF   t  j j t  j j |  d d ƒ ƒ pE t  j j t  j j |  d d ƒ ƒ S(   Nt   bint   pythont   Scriptss
   Python.exe(   t   ost   patht   lexistst   joint   exists(   R   (    (    sK   /tmp/pip-build-eiI0Wo/pip/pip/_internal/operations/build/metadata_legacy.pyt   looks_like_virtual_env   s    $c            s  g  } x× t  j |  ƒ D]Æ \ ‰  } } x- t j D]" } | | k r/ | j | ƒ q/ q/ Wxg t | ƒ D]Y } ˆ t  j j ˆ  | ƒ ƒ r“ | j | ƒ qb | d k s« | d k rb | j | ƒ qb qb W| j ‡  f d †  | Dƒ ƒ q Wg  | D] } | j	 d ƒ rç | ^ qç S(   Nt   testt   testsc         3   s$   |  ] } t  j j ˆ  | ƒ Vq d  S(   N(   R   R   R   (   t   .0t   dir_(   t   root(    sK   /tmp/pip-build-eiI0Wo/pip/pip/_internal/operations/build/metadata_legacy.pys	   <genexpr>2   s    s	   .egg-info(
   R   t   walkR   t   dirnamest   removet   listR   R   t   extendt   endswith(   t   baset
   candidatest   dirst   filesR   t   f(   R   (   R   sK   /tmp/pip-build-eiI0Wo/pip/pip/_internal/operations/build/metadata_legacy.pyt   locate_editable_egg_info"   s    !c         S   s8   |  j  t j j ƒ t j j r3 |  j  t j j ƒ p6 d S(   Ni    (   t   countR   R   t   sept   altsep(   R   (    (    sK   /tmp/pip-build-eiI0Wo/pip/pip/_internal/operations/build/metadata_legacy.pyt   depth_of_directory5   s    s   pip-egg-infos!   Files/directories not found in {}i   t   keyi    (   R   R   R   t   listdirR    t   formatt   lent   sort(   t   source_directoryt   is_editableR"   R&   R   t	   filenames(    (   R   sK   /tmp/pip-build-eiI0Wo/pip/pip/_internal/operations/build/metadata_legacy.pyt   _find_egg_info   s    		c      
   C   s‰   t  j d | | ƒ d } | sA t j j | d ƒ } t | ƒ n  t | d | d | ƒ} |   t | d | d d ƒWd QXt	 | | ƒ S(	   sn   Generate metadata using setup.py-based defacto mechanisms.

    Returns the generated metadata directory.
    s2   Running setup.py (path:%s) egg_info for package %ss   pip-egg-infot   egg_info_dirt   no_user_configt   cwdt   command_descs   python setup.py egg_infoN(
   t   loggert   debugt   NoneR   R   R   R   R   R   R/   (   t	   build_envt   setup_py_patht
   source_dirt   editablet   isolatedt   detailsR0   t   args(    (    sK   /tmp/pip-build-eiI0Wo/pip/pip/_internal/operations/build/metadata_legacy.pyt   generate_metadataQ   s"    
	(   t   __doc__t   loggingR   t   pip._internal.exceptionsR    t   pip._internal.utils.miscR   t$   pip._internal.utils.setuptools_buildR   t   pip._internal.utils.subprocessR   t   pip._internal.utils.typingR   t   pip._internal.vcsR   t   typingR   R   t   pip._internal.build_envR   t	   getLoggert   __name__R4   R/   R>   (    (    (    sK   /tmp/pip-build-eiI0Wo/pip/pip/_internal/operations/build/metadata_legacy.pyt   <module>   s   	;