ó
?…]c           @   s  d  d l  m 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 y d d l	 m
 Z
 e Z Wn e k
 r e Z n Xd d l	 m Z d d l m Z d d l m Z m Z d	 „  Z d
 „  Z d „  Z d d „ Z d „  Z d d „ Z d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   ELOOPN(   t   NamedTemporaryFilei   (   t   archive_utils(   t   utils(   t   AbstractBaseFormat(   t   CaseInsensitiveFileSystemErrort   InvalidArchiveErrorc   
         s`  ‡  f d †  } t  j j t j d d ƒ } t  j j | ƒ r:t d d d d d t ƒ Þ } t j	 ˆ  ƒ Æ | j
 t d	 „  | ƒ ƒ | j ƒ  | d
 j | j ƒ } t j | d t d t j ƒj ƒ  \ } } | j d ƒ j ƒ  j d ƒ } g  | D]# }	 |	 j ˆ  t  j d ƒ d ^ qò } t  j | j ƒ Wd QXWd QXn" t d „  t | d | ƒDƒ ƒ } | S(   s7   Sort by filesize or by binsort, to optimize compressionc            sÈ   t  j t  j j ˆ  |  ƒ ƒ j p$ d } t t  j j |  ƒ d k ƒ } | r¾ t  j j |  ƒ \ } } t j	 d d | ƒ } | s¡ d t
 t  j j |  ƒ ƒ d } q¾ d t t
 | ƒ ƒ d	 } n  | | f S(
   Ni † t   infos   (\.dylib|\.so).*$s   .soi   i
   i   i áõi áõ(   t   ost   lstatt   patht   joint   st_sizet   intt   dirnamet   splitextt   ret   subt   hasht   abs(   t   ft   fsizet
   info_ordert   _t   ext(   t   prefix(    s=   lib/python2.7/site-packages/conda_package_handling/tarball.pyt   order   s    '#t   bint   binsortt   modet   wt   suffixs	   .filelistt   deletec         S   s   d t  j |  d S(   Nt   .s   
(   R   t   sep(   t   x(    (    s=   lib/python2.7/site-packages/conda_package_handling/tarball.pyt   <lambda>*   t    s    -t 1 -q -d -o 1000 {}t   shellt   stdouts   utf-8s   
i   iÿÿÿÿNc         s   s   |  ] } | Vq d  S(   N(    (   t   .0R   (    (    s=   lib/python2.7/site-packages/conda_package_handling/tarball.pys	   <genexpr>5   s    t   key(   R   R
   R   t   sysR   t   existsR   t   FalseR   t	   tmp_chdirt
   writelinest   mapt   closet   formatt   namet
   subprocesst   Popent   Truet   PIPEt   communicatet   decodet   stript   splitR"   t   unlinkt   listt   sorted(
   R   t   filesR   R   t   flt   cmdt   outR   t
   files_listR   (    (   R   s=   lib/python2.7/site-packages/conda_package_handling/tarball.pyt   _sort_file_order   s     
-"c         C   s=   t  j |  d ƒ % } x | D] } | j | ƒ q WWd  QXd  S(   Ns   w:bz2(   t   tarfilet   opent   add(   t   fullpathR>   t   tR   (    (    s=   lib/python2.7/site-packages/conda_package_handling/tarball.pyt   _create_no_libarchive9   s    c         C   s   t  j |  | | | ƒ d  S(   N(   R   t   create_archive(   RG   R>   t   compression_filtert   filter_opts(    (    s=   lib/python2.7/site-packages/conda_package_handling/tarball.pyt   _create_libarchive?   s    R%   c   	   	   C   sq   t  j j | | ƒ } t |  | ƒ } | | } t j |  ƒ . t rZ t | | | | ƒ n t | | ƒ Wd  QX| S(   N(	   R   R
   R   RC   R   R-   t   libarchive_enabledRM   RI   (	   R   R>   t   tmpdirt   basenameR   RK   RL   t   tmp_pathRG   (    (    s=   lib/python2.7/site-packages/conda_package_handling/tarball.pyt   create_compressed_tarballC   s    
c         C   sW   t  j j |  ƒ s0 t  j j t  j ƒ  |  ƒ }  n  t j | ƒ  t j |  ƒ Wd  QXd  S(   N(	   R   R
   t   isabsR   t   getcwdR   R-   R   t   extract_file(   t   tarballt   dir_path(    (    s=   lib/python2.7/site-packages/conda_package_handling/tarball.pyt   _tar_xfT   s    c         C   s²  | d  k r |  d  } n  t |  d ƒ } t j d | ƒ æ } xl | j ƒ  D]^ } t j j | j ƒ s t j j | j ƒ j	 t j
 ƒ  ƒ rM t |  d j | j ƒ ƒ ‚ qM qM Wy | j d | ƒ WnY t k
 r} | j t k rt d |  d | d | ƒ ‚ qt |  d	 t | ƒ ƒ ‚ n XWd  QXWd  QXt j j	 d
 ƒ r®t j ƒ  d k r®x\ t j | ƒ D]H \ } } } x6 | D]. }	 t j j | |	 ƒ }
 t j |
 d d ƒ quWq_Wn  d  S(   Niøÿÿÿt   rbt   fileobjs   contains unsafe path: {}R
   t   package_locationt   extract_locationt	   caused_bys   failed with error: {}t   linuxi    (   t   NoneRE   RD   t
   getmembersR   R
   RS   R2   t   realpatht
   startswithRT   R   R1   t
   extractallt   IOErrort   errnoR    R   t   strR*   t   platformt   getuidt   walkR   t   lchown(   t   tarball_full_patht   destination_directoryRZ   t   tar_filet   membert   et   roott   dirsR>   t   fnt   p(    (    s=   lib/python2.7/site-packages/conda_package_handling/tarball.pyt   _tar_xf_no_libarchive[   s0    #$t   CondaTarBZ2c           B   s>   e  Z e d  „  ƒ Z e e j ƒ  d „ ƒ Z e d „  ƒ Z RS(   c         K   s…   t  j j | ƒ s" t  j | ƒ n  t  j j |  ƒ s^ t  j j t  j j t  j ƒ  |  ƒ ƒ }  n  t rt t	 |  | ƒ n t
 |  | ƒ d  S(   N(   R   R
   t   isdirt   makedirsRS   t   normpathR   RT   RN   RX   Rt   (   Rr   t   dest_dirt   kw(    (    s=   lib/python2.7/site-packages/conda_package_handling/tarball.pyt   extract   s    *c         K   s^   t  j j | ƒ r' t  j j | ƒ } n  t |  | | t  j j | ƒ j d d ƒ d d ƒ } | S(   Ns   .tar.bz2R%   t   bzip2(   R   R
   RS   R   RR   RP   t   replace(   R   t	   file_listt   out_fnt
   out_folderRz   t   out_file(    (    s=   lib/python2.7/site-packages/conda_package_handling/tarball.pyt   create‹   s    c         C   s   t  j |  ƒ } | j } t |  d ƒ  } t j | ƒ } Wd  QXt |  d ƒ  } t j | ƒ } Wd  QXi | d 6| d 6| d 6S(   NRY   t   sizet   md5t   sha256(   R   t   statR   RE   R   t   md5_checksumt   sha256_checksum(   t   in_filet   stat_resultRƒ   R   R„   R…   (    (    s=   lib/python2.7/site-packages/conda_package_handling/tarball.pyt   get_pkg_details”   s    	(   t   __name__t
   __module__t   staticmethodR{   R   RT   R‚   R‹   (    (    (    s=   lib/python2.7/site-packages/conda_package_handling/tarball.pyRu   }   s   (   Re   R    R   R   R3   R*   RD   t   tempfileR   R%   R   R5   RN   t   ImportErrorR,   R   t	   interfaceR   t
   exceptionsR   R   RC   RI   RM   RR   RX   R_   Rt   Ru   (    (    (    s=   lib/python2.7/site-packages/conda_package_handling/tarball.pyt   <module>   s*   

	%			"