Ñò
óˆNc           @   sb  d  d k  Z  d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k	 l
 Z
 d  d k l Z d „  Z d „  Z d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ e d j og e i ƒ  e ƒ  Z x e D] Z e i ƒ  GHqWe d d ƒ Z d e GHe d d ƒ GHe d d ƒ GHn d S(   iÿÿÿÿN(   t   DistInfo(   t   function_deprecated_byc         C   s¥   | i  d ƒ } |  i  d ƒ }  | |  j o t Sy* | i d ƒ d } |  i d ƒ d } Wn t j
 o t SXd | j o# | | i d ƒ d | j o t St S(   sµ    check if the given add_url is idential or a mirror of orig_uri
        e.g. master_uri = archive.ubuntu.com
            compare_uri = de.archive.ubuntu.com
            -> True
    s   / s   //i   t   .(   t   rstript   Truet   splitt
   IndexErrort   Falset   index(   t
   master_urit   compare_urit   compare_srvt
   master_srv(    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyt	   is_mirror*   s    c         C   s   t  t |  ƒ ƒ S(   s.    simple and efficient way to return uniq list (   t   listt   set(   t   s(    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyt   uniqH   s    t   SourceEntryc           B   sP   e  Z d  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   s    single sources.list entry c         C   s§   t  |  _ t  |  _ d |  _ d |  _ d |  _ g  |  _ d |  _ | |  _ | d  j o& t
 i i d ƒ t
 i i d ƒ } n | |  _ |  i | ƒ d  |  _ g  |  _ d  S(   Nt    s   Dir::Etcs   Dir::Etc::sourcelist(   R   t   invalidt   disabledt   typet   urit   distt   compst   commentt   linet   Nonet   apt_pkgt   configt   find_dirt   findt   filet   parset   templatet   children(   t   selfR   R!   (    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyt   __init__P   s    											c         C   s\   |  i  | i  j oI |  i | i j o6 |  i | i j o# |  i | i j o |  i | i j S(   s-    equal operator for two sources.list entries (   R   R   R   R   R   (   R%   t   other(    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyt   __eq__b   s
    c         C   s&  | i  ƒ  } g  } d } t } t } x× t t | ƒ ƒ D]Ã } | | d j o t } | | | 7} q7 | | d j o t } | | | 7} q7 | o3 | | i ƒ  o! t } | i | ƒ | | } q7 | | i ƒ  o | o
 t } q7 | | | 7} q7 Wt | ƒ d j o | i | ƒ n | S(   s‚    a split() implementation that understands the sources.list
            format better and takes [] into account (for e.g. cdroms) R   t   [t   ]i    (   t   stripR   t   ranget   lenR   t   isspacet   append(   R%   R   t   piecest   tmpt   p_foundt   space_foundt   i(    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyt   mysplitj   s.     
c      	   C   sª  |  i  i ƒ  } | d j p | d j o t |  _ d S| d d j oL t |  _ | d i ƒ  i ƒ  } | d d j o t |  _ d S| d } n | i d ƒ } | d j o | | d |  _ | |  } n |  i | ƒ } t	 | ƒ d
 j  o t |  _ d S| d i ƒ  |  _
 |  i
 d j o t |  _ d S| d i ƒ  |  _ t	 |  i ƒ d j  o t |  _ n | d i ƒ  |  _ t	 | ƒ d
 j o | d
 |  _ n
 g  |  _ d S(   s^    parse a given sources.list (textual) line and break it up
            into the field we have R   t   #Ni    i   t   rpms   rpm-srct   debs   deb-srci   i   (   R7   s   rpm-srcR8   s   deb-src(   R8   s   deb-srcR7   s   rpm-src(   R   R+   R   R   R   R   R    R   R5   R-   R   R   R   R   (   R%   R   R0   R4   (    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyR"   ‰   s<    					c         C   sb   | |  _  | o |  i i ƒ  i d ƒ |  _ n/ |  i i ƒ  d d j o d |  i |  _ n d S(   s#    set a line to enabled or disabled R6   i    N(   R   R   t   lstripR+   (   R%   t	   new_value(    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyt   set_enabled¹   s
    
c         C   s   |  i  ƒ  i ƒ  S(   s    debug helper (   t   strR+   (   R%   (    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyt   __str__Ä   s    c         C   s³   |  i  o |  i Sd } |  i o
 d } n | d |  i |  i |  i f 7} t |  i ƒ d j o | d d i |  i ƒ 7} n |  i	 d j o | d |  i	 7} n | d 7} | S(   s#    return the current line as string R   s   # s   %s %s %si    t    s    #s   
(
   R   R   R   R   R   R   R-   R   t   joinR   (   R%   R   (    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyR<   È   s    


 
N(   t   __name__t
   __module__t   __doc__R   R&   R(   R5   R"   R;   R=   R<   (    (    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyR   M   s   			0		t   NullMatcherc           B   s   e  Z d  Z d „  Z RS(   s    a Matcher that does nothing c         C   s   t  S(   N(   R   (   R%   R   (    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyt   matchÛ   s    (   R@   RA   RB   RD   (    (    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyRC   Ø   s   t   SourcesListc           B   s”   e  Z d  Z e d d „ Z d „  Z d „  Z d d d d „ Z d „  Z	 d	 „  Z
 e i o e e
 ƒ Z n d d
 „ Z d „  Z d „  Z d „  Z RS(   s8    represents the full sources.list + sources.list.d file s    /usr/share/python-apt/templates/c         C   s=   g  |  _  | o t | ƒ |  _ n t ƒ  |  _ |  i ƒ  d  S(   N(   R   t   SourceEntryMatchert   matcherRC   t   refresh(   R%   t   withMatchert   matcherPath(    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyR&   â   s
    	c         C   s›   g  |  _  t i i d ƒ } |  i | ƒ t i i d ƒ } x( t i d | ƒ D] } |  i | ƒ qN Wx/ |  i  D]$ } | i p |  i i	 | ƒ qo qo Wd S(   s"    update the list of known entries s   Dir::Etc::sourcelists   Dir::Etc::sourcepartss	   %s/*.listN(
   R   R   R   t	   find_filet   loadR   t   globR   RG   RD   (   R%   R!   t   partsdirt   source(    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyRH   ì   s    	 
 
c         c   s#   x |  i  D] } | Vq
 Wt ‚ d S(   sM    simple iterator to go over self.list, returns SourceEntry
            types N(   R   t   StopIteration(   R%   t   entry(    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyt   __iter__û   s    
 	R   iÿÿÿÿc      
   C   sV  | } x¨ |  i  D] }	 |	 i oŒ |	 i o |	 i | j oq | |	 i j oa |	 i | j oQ xN | D]B }
 |
 |	 i j o, | | i |
 ƒ =t | ƒ d j o |	 Sqd qd Wq q Wx÷ |  i  D]ì }	 |	 i o\ |	 i oQ |	 i | j oA | |	 i j o1 |	 i | j o! t	 |	 i | ƒ } | |	 _ |	 S|	 i ou |	 i oj |	 i | j oZ | |	 i j oJ |	 i | j o: t t
 |	 i ƒ t
 | ƒ @ƒ t | ƒ j o t |	 _ |	 Sq¼ Wd | | | f } x | D] } | d | } qÆW| d j o d | | f } n | d } t | ƒ } | d j	 o | | _ n |  i i | ƒ |  i  i | | ƒ | S(   s¨   
        Add a new source to the sources.list.
        The method will search for existing matching repos and will try to
        reuse them as far as possible
        i    s   %s %s %sR>   R   s   %s #%s
s   
N(   R   R   R   R   R   R   R   R   R-   R   R   R   R   R   R!   RG   RD   t   insert(   R%   R   R   R   t
   orig_compsR   t   posR!   R   RO   t   new_compR   t   ct	   new_entry(    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyt   add  sN    
   
  	 ,		 
c         C   s   |  i  i | ƒ d S(   s2    remove the specified entry from the sources.list N(   R   t   remove(   R%   t   source_entry(    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyRZ   5  s    c         C   s·   t  i i d ƒ } t i i | | ƒ o+ t i i | ƒ o t i | | | ƒ n t  i i d ƒ } xJ t	 i	 d | ƒ D]5 } t i i | | ƒ o t i | | | ƒ qz qz Wd S(   s:    restore sources.list files based on the backup extension s   Dir::Etc::sourcelists   Dir::Etc::sourcepartss	   %s/*.listN(
   R   R   RK   t   ost   patht   existst   shutilt   copyR   RM   (   R%   t
   backup_extR!   RN   (    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyt   restore_backup9  s     c         C   s‹   t  ƒ  } | d j o t i d ƒ } n x[ |  i D]P } | i | j o: t i i | i ƒ o$ t	 i
 | i d | i | f ƒ q3 q3 W| S(   s†    make a backup of the current source files, if no backup extension
            is given, the current date/time is used (and returned) s   %y%m%d.%H%Ms   %s%sN(   R   R   t   timet   strftimeR   R!   R\   R]   R^   R_   R`   (   R%   Ra   t   already_backupedRO   (    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyt   backupH  s    	
 (c         C   sp   yO t  | d ƒ } | i ƒ  } x- | D]% } t | | ƒ } |  i i | ƒ q% WWn d | GHn X| i ƒ  d S(   s    (re)load the current sources t   rs   could not open file '%s'N(   t   opent	   readlinesR   R   R/   t   close(   R%   R!   t   ft   linesR   RO   (    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyRL   T  s     c         C   sÍ   h  } t  |  i ƒ d j o3 t i i d ƒ } d } t | d ƒ i | ƒ d SxX |  i D]M } | i | j o t | i d ƒ | | i <n | | i i | i ƒ  ƒ qY Wx | D] } | | i	 ƒ  q± Wd S(   s    save the current sources i    s   Dir::Etc::sourcelists    ## See sources.list(5) for more information, especialy
# Remember that you can only use http, ftp or file URIs
# CDROMs are managed through the apt-cdrom tool.
t   wN(
   R-   R   R   R   RK   Rh   t   writeR!   R<   Rj   (   R%   t   filesR]   t   headerRO   Rk   (    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyt   savea  s    
  c         C   s´   g  } h  } x› | D]“ } | i  d j o q n | i  i o? | i  } | | j o g  | | <n | | } | i | ƒ q t | i  i ƒ d j o | i | ƒ q q W| | f S(   s5   get all parent and child channels in the sources listi    N(   R#   R   t   childR/   R-   R$   (   R%   t   sources_listt   parentst   used_child_templatesRO   t   keyt   temp(    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyt   check_for_relationst  s     	
N(   R@   RA   RB   R   R&   RH   RR   R   RY   RZ   Rb   R   t   _COMPAT_0_7R   t   restoreBackupRf   RL   Rq   Rx   (    (    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyRE   ß   s   		3		
		RF   c           B   s    e  Z d  Z d „  Z d „  Z RS(   s}    matcher class to make a source entry look nice
        lots of predefined matchers to make it i18n/gettext friendly
        c         C   s©   g  |  _  t i d | ƒ } x† | D]~ } t i i | ƒ } | i d ƒ } | d | !} t | d | ƒ} x5 | i  D]* } | i d  j	 o |  i  i	 | ƒ qs qs Wq# Wd  S(   Ns	   %s/*.infos   .infoi    t   base_dir(
   t	   templatesRM   R\   R]   t   basenameR    R    t	   match_uriR   R/   (   R%   RJ   t
   spec_filesRk   R4   R   R#   (    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyR&   ’  s    	 
 c         C   s­   t  i  } t } x— |  i D]Œ } t i | i | i ƒ o- t i | i | i	 ƒ o t
 } | | _ Pq | i | i ƒ o- t i | i | i	 ƒ o t
 } | | _ Pq q W| S(   s%   Add a matching template to the source(   t   gettextR   R|   t   ret   searchR~   R   RD   t
   match_nameR   R   R#   R   (   R%   RO   t   _t   foundR#   (    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyRD      s    	
 			(   R@   RA   RB   R&   RD   (    (    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyRF     s   	t   __main__s!   http://archive.ubuntu.com/ubuntu/s$   http://de.archive.ubuntu.com/ubuntu/s   is_mirror(): %ss    http://archive.ubuntu.com/ubuntus#   http://de.archive.ubuntu.com/ubuntu(   R€   RM   t   os.pathR\   R   R_   t   sysRc   R   t   aptsources.distinfoR    t   apt.deprecationR   R   R   t   objectR   RC   RE   RF   R@   t   init_configt   sourcesRQ   R<   t   mirror(    (    (    s:   /usr/lib/python2.6/dist-packages/aptsources/sourceslist.pyt   <module>   s8   		‹®&
	 		