î
É X2  ã               @   sí   d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l m	 Z
 m Z d d d d „ Z d d „  Z d d „  Z d	 d
 „  Z Gd d „  d e j ƒ Z d d „  Z d d d  d d d „ Z d S)é    N)ÚPopenÚPIPEc             C   sR   t  | t j ƒ s$ |  j | ƒ } n  | d k r? t j ƒ  } n  t |  | | | ƒ S)z'for zipfile py2.5 borrowed from cpythonN)Ú
isinstanceÚzipfileÚZipInfoÚgetinfoÚosÚgetcwdÚ_extract_member)ÚselfÚmemberÚpathÚpwd© r   úN/home/ubuntu/projects/ifolica/build/setuptools/setuptools/tests/environment.pyÚ_extract   s
    r   c          
   C   s;   t  | d ƒ } z | j |  j | ƒ ƒ Wd  | j ƒ  Xd  S)NÚwb)ÚopenÚwriteÚreadÚclose)r   ÚnameZ	dest_pathÚ	dest_filer   r   r   Ú_extract_from_zip   s    r   c             C   sJ  | d d … t  j j t  j j f k r] t t  j j | ƒ d ƒ d k r] | d d … } n  | j d d k r• t  j j | | j d d … ƒ } n t  j j | | j ƒ } t  j j | ƒ } t  j j	 | ƒ } | rú t  j j
 | ƒ rú t  j | ƒ n  | j d d k r3t  j j | ƒ s/t  j | ƒ n  | St |  | j | ƒ | S)z'for zipfile py2.5 borrowed from cpythoné   Nr   ú/éÿÿÿÿr   r   )r   r   ÚsepÚaltsepÚlenÚ
splitdriveÚfilenameÚjoinÚnormpathÚdirnameÚexistsÚmakedirsÚisdirÚmkdirr   )r   r   Ú
targetpathr   Ú	upperdirsr   r   r   r
       s     ("%r
   c             C   sz   xf t  j |  ƒ D]U \ } } } t  j | t j ƒ x0 | D]( } t  j t  j j | | ƒ t j ƒ q9 Wq Wt j |  ƒ d  S)N)	r   ÚwalkÚchmodÚstatÚS_IWRITEr   r"   ÚshutilÚrmtree)ÚtargetZdir_pathÚdirsÚfilesr!   r   r   r   Ú_remove_dir@   s
    *r4   c               @   s:   e  Z d  Z d Z d Z d Z d d „  Z d d „  Z d S)ÚZippedEnvironmentNc             C   sö   |  j  d  k s |  j d  k r" d  St j j |  j  ƒ sD d  |  _ d  St j ƒ  |  _ t j ƒ  |  _	 d  d  d  } } } z@ t
 j |  j  ƒ } x' | j ƒ  D] } t | | |  j	 ƒ q˜ WWd  | rÌ | j ƒ  n  ~ Xt j t j j |  j	 |  j ƒ ƒ d  S)N)ÚdatafileÚdatanamer   r   ÚisfileÚold_cwdr	   ÚtempfileÚmkdtempÚtemp_dirr   ÚZipFileÚnamelistr   r   Úchdirr"   )r   Zzip_fileÚsourcer1   r3   r   r   r   ÚsetUpP   s     	zZippedEnvironment.setUpc             C   sh   |  j  d  k s |  j d  k r" d  Sy- |  j rN t j |  j ƒ t |  j ƒ n  Wn t k
 rc Yn Xd  S)N)r7   r6   r9   r   r?   r4   r<   ÚOSError)r   r   r   r   ÚtearDowng   s    	zZippedEnvironment.tearDown)Ú__name__Ú
__module__Ú__qualname__r6   r7   r9   rA   rC   r   r   r   r   r5   J   s
   r5   c             C   ss   t  ƒ  } xc t j j d d ƒ j t j ƒ D]@ } t j j | |  ƒ } t j | t j	 ƒ r+ | j
 | ƒ q+ q+ W| S)NÚPATHÚ )Úsetr   ÚenvironÚgetÚsplitÚpathsepr   r"   ÚaccessÚX_OKÚadd)ÚcmdÚresultr   r!   r   r   r   Ú_which_dirsu   s    	(rS   c             C   sm  | d k r= t  ƒ  } x% t j D] } t j | | | <q Wn  | d k	 rV | | d <n  | d k	 ro | | d <n  | j d d ƒ s½ t d ƒ j t d ƒ ƒ | d <t j j | d ƒ | d <n  t j	 d g t
 |  ƒ }  yA t |  d t d	 t d
 t j d k d | ƒ} | j ƒ  | } Wn t k
 r/d SYn Xt | d ƒ r`| j ƒ  } t j d | ƒ } n  | j | f S)z~
    Execution command for tests, separate from those used by the
    code directly to prevent accidental behavior issues
    NÚ
PYTHONPATHrG   rH   ÚtarÚgzipzsetup.pyÚstdoutÚstderrÚshellÚwin32Úenvr   ÚdecodeZNFC)r   rH   )Údictr   rJ   rK   rS   ÚunionrM   r"   ÚsysÚ
executableÚlistÚ_PopenÚ_PIPEÚplatformÚcommunicaterB   Úhasattrr\   ÚunicodedataÚ	normalizeÚ
returncode)rQ   Zpypathr   Zdata_streamr[   ÚenvnameÚprocÚdatar   r   r   Úrun_setup_py~   s,    		rm   )r   r   r_   r:   Zunittestr/   r-   rg   Ú
subprocessr   rb   r   rc   r   r   r
   r4   ZTestCaser5   rS   rm   r   r   r   r   Ú<module>   s     
+	