ó
8Nc           @€  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