ó
Ý²k^c           @` s^  d  d l  m Z m Z m Z m Z d  d l m Z m Z m Z m	 Z	 d  d l
 m Z d  d l m Z d  d l m Z m Z m Z m Z m Z d  d l m Z m Z m Z d  d l m Z m Z m Z m Z m Z m Z m Z m  Z  d d	 l! m" Z" m# Z# d d
 l$ m% Z% m& Z& d d l' m( Z( e e) ƒ Z* d „  Z+ d „  Z, e" d „ Z- d „  Z. d „  Z/ d S(   i    (   t   absolute_importt   divisiont   print_functiont   unicode_literals(   t   EACCESt   ENOENTt   EPERMt   EROFS(   t   chain(   t	   getLogger(   t   X_OKt   accesst   chmodt   lstatt   walk(   t   isdirt   isfilet   join(   t   S_IEXECt   S_IMODEt   S_ISDIRt   S_ISREGt   S_IWRITEt   S_IXGRPt   S_IXOTHt   S_IXUSRi   (   t	   MAX_TRIESt   exp_backoff_fn(   t   islinkt   lchmodi   (   t   on_winc         C` s0  y t  |  ƒ j } t | ƒ r< t |  t | ƒ t Bt Bƒ n\ t |  ƒ rb t |  t | ƒ t Bƒ n6 t	 | ƒ rˆ t |  t | ƒ t Bƒ n t
 j d |  ƒ t SWnŒ t k
 r+} t | d d  ƒ } | t f k ræ t
 j d |  ƒ ‚  q,| t t t f k rt
 j d |  | ƒ t St
 j d |  | ƒ ‚  n Xd  S(   Nu    path cannot be made writable: %su   errnou,   tried to make writable, but didn't exist: %su%   tried make writable but failed: %s
%ru!   Error making path writable: %s
%r(   R   t   st_modeR   R   R   R   R   R   R   R   t   logt   debugt   Truet	   Exceptiont   getattrt   NoneR   R   R   R   t   Falset   warn(   t   patht   modet   et   eno(    (    s>   lib/python2.7/site-packages/conda/gateways/disk/permissions.pyt   make_writable   s(    c         C` s˜   t  |  ƒ j } t | ƒ r6 t |  t | ƒ t @ƒ n^ t |  ƒ r] t |  t | ƒ t @ƒ n7 t | ƒ r„ t |  t | ƒ t @ƒ n t	 j
 d |  ƒ t S(   Nu!   path cannot be made read only: %s(   R   R   R   R   R   R   R   R   R   R    R!   R"   (   R(   R)   (    (    s>   lib/python2.7/site-packages/conda/gateways/disk/permissions.pyt   make_read_only-   s    c         C` sÇ   t  |  ƒ r° x´ t |  ƒ D] \ } } } x~ t j | | f ƒ D]g }  y  t t t | |  ƒ d | ƒWq> t t f k
 r¤ } | j	 t
 k rž t j d |  ƒ q¥ ‚  q> Xq> Wq Wn t t |  d | ƒd  S(   Nt	   max_triesu   no such file or directory: %s(   R   R   R   t   from_iterableR   R,   R   t   IOErrort   OSErrort   errnoR   R    R!   (   R(   R.   t   roott   dirst   filesR*   (    (    s>   lib/python2.7/site-packages/conda/gateways/disk/permissions.pyt   recursive_make_writable:   s     c         C` sa   t  |  ƒ rM t |  ƒ j } t j d |  ƒ t |  t | ƒ t Bt Bt	 Bƒ n t j
 d |  ƒ d  S(   Nu   chmod +x %su    Cannot make path '%s' executable(   R   R   R   R    t   traceR   R   R   R   R   t   error(   R(   R)   (    (    s>   lib/python2.7/site-packages/conda/gateways/disk/permissions.pyt   make_executableL   s
    "c         C` s0   t  |  ƒ r, t r |  j d ƒ St |  t ƒ St S(   Nu   .exeu   .bat(   u   .exeu   .bat(   R   R   t   endswithR   R
   R&   (   R(   (    (    s>   lib/python2.7/site-packages/conda/gateways/disk/permissions.pyt   is_executableU   s     N(0   t
   __future__R    R   R   R   R2   R   R   R   R   t	   itertoolsR   t   loggingR	   t   osR
   R   R   R   R   t   os.pathR   R   R   t   statR   R   R   R   R   R   R   R   t    R   R   t   linkR   R   t   common.compatR   t   __name__R    R,   R-   R6   R9   R;   (    (    (    s>   lib/python2.7/site-packages/conda/gateways/disk/permissions.pyt   <module>   s   ""(:				