ó
²<ac           @  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 m Z m Z e j e  Z d d  Z e d d   Z d d d	  Z d S(
   iÿÿÿÿ(   t   with_statementN(   t   environt   listdirt   removet   rmdir(   t   dirnamet   existst   joint   getsizet   split(   t   Popent   PIPE(   t   memoizet   sitedirt   PUBLIC_DIR_REc         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>@   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_filesF   sT    	(   t
   __future__R    t   loggingt   osR   R   R   R   t   os.pathR   R   R   R   R	   t
   subprocessR
   R   t   debpython.toolsR   R   R   t	   getLoggert   __name__R1   R"   R   R&   RG   (    (    (    s(   /usr/share/python/debpython/namespace.pyt   <module>   s   "(