
ȔMc           @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z e j d k  rR d  d l m Z n  d  d l Td  d l	 Td  d l
 m Z d Z e d Z d	 Z d
 Z d Z d Z d   Z d   Z d   Z d   Z d   Z e d d  Z e j   se j d e  re e j d e   qn  d S(   iNi   i   (   t   Set(   t   *(   t   Fetchers   /etc/urpmi/s	   urpmi.cfgs   /var/lib/urpmi/s   /var/cache/urpmi/mirrors.caches   /etc/product.ids   /etc/releasec          C   s}   t  t j d t   }  |  j   j   j d  } |  j   i  } x3 | D]+ } | j d  \ } } | j   | | <qJ W| S(   Ns
   product-idt   ,t   =(	   t   opent   sysconft   gett
   PRODUCT_IDt   readlinet   stript   splitt   closet   lower(   t   fpt   itemst	   productidt   itemt   keyt   entry(    (    sB   /usr/lib/python2.7/dist-packages/smart/plugins/urpmichannelsync.pyt   getProductID/   s    
c          C   s   t  t j d t   }  |  j   j   } |  j   t j d |  } | r | j	 d  } | j	 d  } | j
   j d  d k r d } n  | | f Sd S(	   Nt   releases   .*release (\d+\.\d+).*for (\w+)i   i   t   cookerit   arch(   s   releases   arch(   R   R   R   t   RELEASER	   R
   R   t   ret   matcht   groupR   t   find(   R   t   lineR   R   R   (    (    sB   /usr/lib/python2.7/dist-packages/smart/plugins/urpmichannelsync.pyt   getReleaseArch9   s    
	
c         C   s  t    } t j j t  r^ t t  } t | j   j d d  j d d   } | j	   n d  } g  } t } t } t |   } xx| j   D]j} | j   } t |  d k r q n  | d d k r t } t } n  | r q n  | d d k rt } | j d	  }	 t |	  d
 k r't } q n  | j t    d	 j |	 d d ! j d d  | d d <|	 d r |	 d | d d <q q n  | sq n  | j d  d k r| j   j d  \ }
 } | | d |
 j   <|
 d k r| r| j |  r| | } | d j d  d } | j | d   r?| d | d d <n d  | d d <x | d D]} } | d j d  d } | j | d   rX| d d s| d | d d <qt j d | d d f | d d t qXqXWqqqq t | d | j   <q W| j	   | S(   Ns   =>t   :t   ;t    i    it   }t   {t    i   is   \t   namet   urls   : t
   mirrorlistt   chosent   listt   mirrorst   unique(   R   t   ost   patht   isfilet   URPMI_MIRRORS_CACHER   t   evalt   readt   replaceR   t   Nonet   Falset	   readlinesR
   t   lent   TrueR   t   appendt   dictt   joinR   t   has_keyt
   getHandlerR   t   add(   t   filenamet   fetchert   mirrorsfilet   mirrorscachet   configt   in_blockt   skipt   urpmi_cfg_fR   t   sR   t   valuet   schemet   mirror(    (    sB   /usr/lib/python2.7/dist-packages/smart/plugins/urpmichannelsync.pyt   fetch_urpmi_cfgF   sh    	*	*

;
c   	      C   sl  |  |  j  d  d j d  d } |  |  j  d   j d  } t |  d k rh| d } y t t d  } | j   } x | rCi  } | j d  j d	  } x6 t d t |  d  D] } | | d | | | <q W| d
 | k r4| d | k r4d |  |  j  d   | d |  |  j  d  d f }  Pn  | j   } q~ W| j   Wqht	 k
 rd} qhXn  |  S(   Nt   @i   t   /i    s   ://i   t   netrcs   
R$   t   machinet   logins   %s:%s@%st   password(
   t   rfindR   R6   R   t   URPMI_CONFIG_DIRR	   R
   t   xrangeR   t   IOError(	   R&   RN   RO   R   R   RM   t   splittedt   it   e(    (    sB   /usr/lib/python2.7/dist-packages/smart/plugins/urpmichannelsync.pyt   find_urpmi_password   s(    $
	 5c         C   sO  t    } t |   } x3| D]+} | d } d | } d } d  } d  } | j d  s] q n  d   }	 | d j d  }
 |
 r | d j d d  } n t | d j d d	   } d  } d  } | j d
  r | d
 } nB | j d  r | d d } n" | j d  r| d } n  d } | j d  r@|	 | d  } n  i d d 6| d 6| d 6| d 6| j d  d 6|
 d 6| d 6} | r| | d <n  | r| | d <n  | j |  y t | |  Wn3 t	 k
 r} t
 j t d  t j | f  q Xt j d | f  } | d  k	 r+| j |  n | } t j  d | f |  q W| S(   NR%   s   urpmisync-%si    R&   c         S   s   |  d k r7 t    } d | d | d | d f }  nZ |  j d  d k sa |  j d  d k r t   \ } } |  j d |  j d |  }  n  |  S(	   Ns   $MIRRORLISTs-   http://api.mandriva.com/mirrors/%s.%s.%s.listt   typet   versionR   s   $RELEASEis   $ARCH(   R   R   R   R2   (   t	   mirrorurlR   R   R   (    (    sB   /usr/lib/python2.7/dist-packages/smart/plugins/urpmichannelsync.pyt   getMirrorListURL   s    	*!s   cdrom://s   localmedia://s   ssh://s   scp://t   with_hdlistt   media_info_dirs   /synthesis.hdlist.czs   with-dirs   media_info/synthesis.hdlist.czR'   t   urpmiRY   t   baseurlt   hdlurlt   ignoret   disabledt	   removablet   priorityt	   directoryR[   s   While using %s: %st   channels(   t   setRJ   R3   R;   t
   startswithR2   RX   R=   t   createChannelt   Errort   ifacet   errort   _t   fileR%   R   R   t   update(   R>   t   seent	   urpmi_cfgt   mediaR%   t   aliasRe   R`   R[   R\   Rd   Ra   Rf   t   dataRW   t   channel(    (    sB   /usr/lib/python2.7/dist-packages/smart/plugins/urpmichannelsync.pyt   _loadMediaList   s`    	

	


$c         C   s   t    } t j j |   r1 | j t |    n  t j d  } xH t j d  D]7 } | j	 d  rP | | k rP t j
 d | f  qP qP Wd  S(   NRg   s
   urpmisync-(   Rh   R,   R-   R.   Rp   Rw   R   R   t   keysRi   t   remove(   t   urpmicfgt   mediadirt   forceRq   Rg   Rt   (    (    sB   /usr/lib/python2.7/dist-packages/smart/plugins/urpmichannelsync.pyt   syncURPMIChannels   s    	s   sync-urpmi-medialists   urpmi-config(   i   i   (   t	   posixpathR,   R   t   syst   version_infot   setsR    Rh   t   smart.channelt   smartt   smart.fetcherR   RR   t   URPMI_CONFIGt   URPMI_MEDIA_DIRR/   R   R   R   R   RJ   RX   Rw   R3   R}   R   t   getReadOnlyR   R4   (    (    (    sB   /usr/lib/python2.7/dist-packages/smart/plugins/urpmichannelsync.pyt   <module>   s.   


	
		>		P