ó
WâRc           @   sú  d  d l  Z  d  d l Z d  d l Z d  d l m Z m Z d  d l Z d  d l Z d  d l m Z	 d e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e
 f d	 „  ƒ  YZ d
 e
 f d „  ƒ  YZ d „  Z d e
 f d „  ƒ  YZ e d k röe d d ƒ Z e j e j ƒ xï e j D]á Z e j d e j ƒ e j d e j ƒ e j d e j ƒ e j d e j ƒ e j i  k re j d e j j ƒ  ƒ n  x4 e j D]) Z e j d e j e j e j f ƒ qšWx% e j  D] Z! e j d e! j ƒ qÑWqWn  d S(   iÿÿÿÿN(   t   Popent   PIPE(   t   gettextt   Templatec           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s‚   d  |  _ t |  _ g  |  _ d  |  _ d  |  _ d  |  _ d  |  _ g  |  _	 g  |  _
 d  |  _ i  |  _ d  |  _ t |  _ t |  _ d  S(   N(   t   Nonet   namet   Falset   childt   parentst
   match_namet   descriptiont   base_urit   typet
   componentst   childrent	   match_urit
   mirror_sett   distributiont   Truet	   availablet   official(   t   self(    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyt   __init__$   s    													c         C   s   | t  d „  |  j ƒ k S(   s8    Check if the distribution provides the given component c         S   s   |  j  S(   N(   R   (   t   c(    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyt   <lambda>6   s    (   t   mapR   (   R   t   comp(    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyt   has_component4   s    c         C   sC   t  | ƒ \ } } } | |  j k r; |  j | j | | ƒ St Sd S(   s8    Check if a given url of a repository is a valid mirror N(   t	   split_urlR   t   has_repositoryR   (   R   t   urlt   protot   hostnamet   dir(    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyt	   is_mirror8   s    (   t   __name__t
   __module__R   R   R"   (    (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyR   "   s   		t	   Componentc           B   sP   e  Z d d d d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   c         C   s(   | |  _  | |  _ | |  _ | |  _ d  S(   N(   R   R
   t   description_longt   parent_component(   R   R   t   desct	   long_descR'   (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyR   C   s    			c         C   s   |  j  S(   N(   R'   (   R   (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyt   get_parent_componentI   s    c         C   s   | |  _  d  S(   N(   R'   (   R   t   parent(    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyt   set_parent_componentL   s    c         C   s4   |  j  d  k	 r |  j  S|  j d  k	 r, |  j Sd  Sd  S(   N(   R&   R   R
   (   R   (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyt   get_descriptionO   s
    c         C   s   | |  _  d  S(   N(   R
   (   R   R(   (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyt   set_descriptionW   s    c         C   s   | |  _  d  S(   N(   R&   (   R   R(   (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyt   set_description_longZ   s    c         C   s   |  j  S(   N(   R&   (   R   (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyt   get_description_long]   s    N(
   R#   R$   R   R   R*   R,   R-   R.   R/   R0   (    (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyR%   A   s   					t   Mirrorc           B   sP   e  Z d  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   s(    Storage for mirror related information c         C   s/   | |  _  g  |  _ |  j | | ƒ | |  _ d  S(   N(   R    t   repositoriest   add_repositoryt   location(   R   R   R    R!   R4   (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyR   d   s    		c         C   s   |  j  j t | | ƒ ƒ d  S(   N(   R2   t   appendt
   Repository(   R   R   R!   (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyR3   j   s    c            s   t  ‡  f d †  |  j ƒ S(   Nc            s   |  j  ˆ  k S(   N(   R   (   t   r(   R   (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyR   n   s    (   t   filterR2   (   R   R   (    (   R   s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyt   get_repositories_for_protom   s    c         C   sJ   | d  k r t Sx3 |  j D]( } | j | k r | | j k r t Sq Wt S(   N(   R   R   R2   R   R!   R   (   R   R   R!   R7   (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyR   p   s    c            s   t  ‡  f d †  ˆ  j ƒ S(   Nc            s   |  j  ˆ  j ƒ S(   N(   t   get_urlR    (   R7   (   R   (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyR   y   s    (   R   R2   (   R   (    (   R   s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyt   get_repo_urlsx   s    c         C   s   |  j  S(   N(   R4   (   R   (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyt   get_location{   s    c         C   s   | |  _  d  S(   N(   R4   (   R   R4   (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyt   set_location~   s    N(   R#   R$   t   __doc__R   R   R3   R9   R   R;   R<   R=   (    (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyR1   a   s   					R6   c           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   R   R!   (   R   R   R!   (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyR   „   s    	c         C   s   |  j  |  j f S(   N(   R   R!   (   R   (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyt   get_infoˆ   s    c         C   s   d |  j  | |  j f S(   Ns
   %s://%s/%s(   R   R!   (   R   R    (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyR:   ‹   s    (   R#   R$   R   R?   R:   (    (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyR6   ‚   s   		c         C   sB   t  j d |  d d ƒ} x# t | ƒ d k  r= | j d ƒ q W| S(   sE    split a given URL into the protocoll, the hostname and the dir part s   :*\/+t   maxspliti   i   N(   t   ret   splitt   lenR5   R   (   R   RB   (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyR      s    t   DistInfoc           B   s    e  Z d d  d „ Z d „  Z RS(   s   /usr/share/python-apt/templatesc         C   s  d |  _  g  |  _ t j j d ƒ |  _ d  } t j d ƒ } t j d ƒ } | sÅ y/ t	 d d d g d t
 ƒj ƒ  d	 j ƒ  } WqÅ t k
 rÁ } | j t j k r¸ t j d
 | ƒ n  d } qÅ Xn  | |  _ i  } d | | f } t | ƒ —}	 d  }
 d  } xe|	 D]]} | j d d ƒ } t | ƒ d k  r6qn  | d	 j ƒ  } | d j ƒ  } | d k rtt | ƒ |  _ q| d k rŒ| |  _  q| d k rÙ|  j |
 | ƒ d  } t ƒ  }
 | |
 _ | |
 _ d | |
 _ q| d k rñ| |
 _ q| d k rOt |
 _ xZ|  j D]8 } | j | k r|
 j j  | ƒ | j! j  |
 ƒ qqWq| d k rpt j" | ƒ |
 _# q| d k r‘t j" | ƒ |
 _$ q| d k r©| |
 _% q| d k rË|
 j& rË| |
 _& q| d |  j k rê| |
 _& q| d k r|
 j' r| |
 _' q| d |  j k r+| |
 _' q| d k sJ| d |  j k ržt( j) j* | ƒ rb| p€t( j) j+ t( j) j, | | ƒ ƒ } | | k rŽi  } yD t | ƒ 2 } t- | j. g  | D] } | j ƒ  ^ q·ƒ } Wd  QXWn t/ k
 r÷d GHg  } n Xx† | D]~ } | j0 d  ƒ r,| j1 d! | ƒ } qÿn  t2 | ƒ \ } } } | | k rd| | j3 | | ƒ qÿt4 | | | | ƒ | | <qÿW| | | <n  | | |
 _5 q| d" k r¼t | ƒ |
 _6 q| d# k r| rô|
 j7 | j ƒ rô|
 j8 j  | ƒ n  t9 | ƒ } q| d$ k r%| j: t | ƒ ƒ q| d% k rG| j; t | ƒ ƒ q| d& k r| j< | ƒ qqW|  j |
 | ƒ d  }
 d  } Wd  QXd  S('   Nt    s   APT::Architectures   ^#LOC:(.+)$sS   ^(#LOC:.+)|(((http)|(ftp)|(rsync)|(file)|(mirror)|(https))://[A-Za-z0-9/\.:\-_@]+)$t   lsb_releases   -is   -st   stdouti    s#   lsb_release failed, using defaults:t   Debians
   %s/%s.infot   :i   i   t   ChangelogURIt   MetaReleaseURIt   Suites   ^%s$t	   MatchNamet   ParentSuitet	   Availablet   Officialt   RepositoryTypet   BaseURIs
   BaseURI-%st   MatchURIs   MatchURI-%st   MirrorsFiles   MirrorsFile-%ss#   WARNING: Failed to read mirror files   #LOC:s   \1t   DescriptionR%   t   CompDescriptiont   CompDescriptionLongt   ParentComponent(=   t   metarelease_urit	   templatest   apt_pkgt   configt   findt   archR   RA   t   compileR    R   t   communicatet   stript   OSErrort   errnot   ENOENTt   loggingt   warnt   distt   openRB   RC   t   _t   changelogs_urit   finish_templateR   R   R   R	   R   R   R   R5   R   t   string_to_boolR   R   R   R   R   t   ost   patht   isabst   abspatht   joinR8   t   matcht	   Exceptiont
   startswitht   subR   R3   R1   R   R
   R   R   R%   R.   R/   R,   (   R   Rg   t   base_dirR4   t	   match_loct   match_mirror_linet   exct   map_mirror_setst
   dist_fnamet	   dist_filet   templatet	   componentt   linet   tokenst   fieldt   valuet   nannyR   t   value_ft   xt   mirror_dataR   R    R!   (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyR   ™   sÊ    								!	)
c         C   s   | s
 d S| j  d k rR | j rR x- | j D] } | j  r, | j  | _  Pq, q, Wn  | j i  k rš | j rš x- | j D] } | j  rt | j | _ Pqt qt Wn  | rÌ | j | j ƒ rÌ | j j | ƒ d } n  x | j D] } | j	 | _	 qÖ W|  j
 j | ƒ d S(   s    finish the current tempalte N(   R   R   R   R   R   R   R   R   R5   R   RZ   (   R   R}   R~   t   t(    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyRk     s$    			N(   R#   R$   R   R   Rk   (    (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyRD   —   s   qt   __main__t   Ubuntus   /usr/share/python-apt/templatess
   
Suite: %ss   Desc: %ss   BaseURI: %ss   MatchURI: %ss   Mirrors: %ss    %s -%s -%ss     %s("   Rc   Re   Rm   t
   subprocessR    R   RA   R[   R   Ri   t   objectR   R%   R1   R6   R   RD   R#   t   dt   infoRj   RZ   R}   R   R
   R   R   R   t   keysR   R   R&   R   R   (    (    (    s8   /usr/lib/python2.7/dist-packages/DistUpgrade/distinfo.pyt   <module>   s8    !	