ó
}k^c           @  së   d  d l  m Z d  d l Z d  d l m Z m Z m Z m Z d  d l m	 Z	 m
 Z
 m Z m Z m Z d  d l m Z m Z d  d l m Z d  d l m Z m Z e j e  Z d d  Z e d d	   Z d d d
  Z d   Z d S(   i˙˙˙˙(   t   with_statementN(   t   environt   listdirt   removet   rmdir(   t   dirnamet   existst   joint   getsizet   split(   t   Popent   PIPE(   t   PUBLIC_DIR_RE(   t   memoizet   sitedirc         C  sl   t  | p g   } xS |  D]K } t | d  4 } x* | D]" } | r8 | j | j    q8 q8 WWd QXq W| S(   s#   Parse namespace_packages.txt files.t   rN(   t   sett   opent   addt   strip(   t   fpathst   othert   resultt   fpatht   fpt   line(    (    s(   /usr/share/python/debpython/namespace.pyt   parse"   s    $c         C  sľ   d } d t j d d  } |  rL t | |   } t |  r | g } q n7 t |  r g  t |  D] } t | |  ^ qe } n  | r¨ t d   t |  D  } n	 t   } | S(   s~   Return a set of namespaces to regenerate/clean.

    :param package: limit namespaces to the ones needed by given package
    s   %s/usr/share/python/ns/t   DESTDIRt    c         s  s!   |  ] } | j  d  d  Vq d S(   t   .t   /N(   t   replace(   t   .0t   i(    (    s(   /usr/share/python/debpython/namespace.pys	   <genexpr>A   s    N(   t   NoneR   t   getR   R   R   R   R   (   t   packageR   t   nsdirR   R!   R   (    (    s(   /usr/share/python/debpython/namespace.pyt   load-   s    +	c         c  sU  | d k	 r- t |  } t   } t   } n  x/|  D]'} | V| d k rQ q4 n  t |  } | | k r4 | j |  t j |  } | r[| j   }	 xž | |	 k rT| t |	  d }
 |
 | k r4t	 | d  } | t
 k r$y t | d  j   Wn! t k
 rt j d |  q1X| Vq4| j |  n  | j |  t |  d } q Wq[q4 q4 W| t k rQ| rQt d d j	 |  d t
 d	 t } | j   \ } } xF | j   D]8 } | j d
 d  d } | | k rľ| j |  qľqľWx] | D]R } y t |  Wn6 t t f k
 rD} t j d |  t j |  qřX| VqřWn  d S(   s)   Add __init__.py files to given generator.i   s   __init__.pyt   as   cannot create %si    s   /usr/bin/dpkg -S %s 2>/dev/nullt    t   shellt   stdouts   : s   cannot remove %sN(   R"   R&   R   R   R   R   t   matcht   groupt   lenR   t   TrueR   t   closet	   Exceptiont   logt   errorR	   t   FalseR
   R   t   communicatet
   splitlinesR   t   IOErrort   OSErrort   debug(   t   filesR$   t   actiont
   namespacest   already_processedt   removal_candidatest   fnt   dpatht   mt
   public_dirt   ns_dirR   t   processR*   t   stderrR   t   nst   e(    (    s(   /usr/share/python/debpython/namespace.pyt   add_namespace_filesG   sT    	c   	      C  sŻ  t  | t  s t |  } n  t   } x | D] } x | D]{ } t t | |   | j d   } t | d  } t |  s q; n  t |  d k r; t j d |  | j	 |  Pq; q; Wq. W| | } xŕ | D]Ř } xp | D]h } t t | |   | j d   } t | d  } t |  rÜ t
 |  t |  sDt |  qDqÜ qÜ Wt d |  d | j d   } t | d  } t |  rĎ t
 |  t |  s§t |  q§qĎ qĎ W| S(   s8   Remove empty __init__.py files for requested namespaces.R   s   __init__.pyi    s)   file not empty, cannot share %s namespacet   debians   usr/share/pyshared(   t
   isinstanceR   R   R   R	   R   R   R1   t   warningR   R   R   R   (	   R$   R;   t   versionst   keepRE   t   versionR   R   R?   (    (    s(   /usr/share/python/debpython/namespace.pyt   remove_from_package   s:    	!
!

(   t
   __future__R    t   loggingt   osR   R   R   R   t   os.pathR   R   R   R   R	   t
   subprocessR
   R   t   debpython.pydistR   t   debpython.toolsR   R   t	   getLoggert   __name__R1   R"   R   R&   RG   RN   (    (    (    s(   /usr/share/python/debpython/namespace.pyt   <module>   s   "(8