ó
Qº’Nc           @   sâ   d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 m Z m Z m Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ e d k rÞ e e e ƒ Z n  d S(   iÿÿÿÿN(   t   get_langt   get_distt   get_ubuntu_flavort   Distc           B   s   e  Z d  „  Z RS(   c         C   sU   | |  _  | |  _ | |  _ | |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _	 d  S(   N(
   t   namet   versiont   datet	   supportedt   Nonet   releaseNotesURIt   releaseNotesHtmlUrit   upgradeToolt   upgradeToolSigt   upgrade_broken(   t   selfR   R   R   R   (    (    s;   /usr/lib/python2.7/dist-packages/DistUpgrade/MetaRelease.pyt   __init__$   s    								(   t   __name__t
   __module__R   (    (    (    s;   /usr/lib/python2.7/dist-packages/DistUpgrade/MetaRelease.pyR   #   s   t   MetaReleaseCorec           B   s}   e  Z d  Z d e j k Z d Z d Z e e e e d „ Z	 d „  Z
 d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z RS(   sU   
    A MetaReleaseCore object astracts the list of released 
    distributions. 
    t   DEBUG_UPDATE_MANAGERs$   /etc/update-manager/release-upgradess    /etc/update-manager/meta-releasec   
      C   sè  |  j  d | | f ƒ | |  _ t |  _ d  |  _ t ƒ  |  _ d  |  _ d |  _	 d |  _
 d |  _ d |  _ t j ƒ  } t j j |  j ƒ rpy | j |  j ƒ Wn4 t j k
 rÖ } t j j d |  j | f ƒ d  SX| j d ƒ rpd } x~ d d d	 d
 g D]g } | j | | ƒ rÿ |  j  d |  j | j | | ƒ f ƒ t |  d | | f | j | | ƒ ƒ qÿ qÿ Wqpn  t j ƒ  } t j j |  j ƒ rLy | j |  j ƒ Wn4 t j k
 rÛ} t j j d |  j | f ƒ d  SX| j d d ƒ rL| j d d ƒ j ƒ  }	 |	 d k s|	 d k r+t |  _ d  S|	 d k rI|  j
 |  _	 qIqLn  | ra|  j
 |  _	 n  | r||  j	 |  j 7_	 n | r—|  j	 |  j 7_	 n  |  j  d |  j	 ƒ d  |  _ |  j ƒ  sÑ|  j  d ƒ d  St  j! |  j" d ƒ d  S(   Ns1   MetaRelease.__init__() useDevel=%s useProposed=%ss)   http://changelogs.ubuntu.com/meta-releases-   http://changelogs.ubuntu.com/meta-release-ltss   -developments   ERROR: failed to read '%s':
%st   METARELEASEt   URIt   URI_LTSt   URI_UNSTABLE_POSTFIXt   URI_PROPOSED_POSTFIXs   %s: %s s   %s_%st   DEFAULTt   Promptt   nevert   not   ltss   metarelease-uri: %ss   _buildMetaReleaseFile failed(    (#   t   _debugt   forceDownloadt   Truet   downloadingR   t   new_distR   t   current_dist_namet   no_longer_supportedt   METARELEASE_URIt   METARELEASE_URI_LTSt    METARELEASE_URI_UNSTABLE_POSTFIXt    METARELEASE_URI_PROPOSED_POSTFIXt   ConfigParsert   ost   patht   existst   CONF_METARELEASEt   readt   Errort   syst   stderrt   writet   has_sectiont
   has_optiont   gett   setattrt   CONFt   lowert   Falset   metarelease_informationt   _buildMetaReleaseFilet   threadt   start_new_threadt   download(
   R   t   useDevelopmentReleaset   useProposedt   forceLTSR   t   parsert   et   sect   kt   type(    (    s;   /usr/lib/python2.7/dist-packages/DistUpgrade/MetaRelease.pyR   <   sn    								3		c         C   sH  t  j j d t  j j |  j ƒ ƒ |  _ y t |  j d ƒ Wn¾ t k
 rû } t  j d t  j j	 d ƒ ƒ } t  j j | d ƒ } t  j j
 | ƒ sÑ y t  j | ƒ WqÑ t k
 rÍ } t j j d | ƒ t SXn  t  j j | t  j j |  j ƒ ƒ |  _ n Xy2 t  j j |  j ƒ d k r-t  j |  j ƒ n  Wn t k
 rC} n Xt S(   Ns   /var/lib/update-manager/t   at   XDG_CACHE_HOMEs   ~/.caches   update-manager-cores   mkdir() failed: '%s'i    (   R*   R+   t   joint   basenameR%   t   METARELEASE_FILEt   opent   IOErrort   getenvt
   expanduserR,   t   mkdirt   OSErrorR0   R1   R2   R9   t   getsizet   unlinkt	   ExceptionR    (   R   RC   t	   cache_dirR+   (    (    s;   /usr/lib/python2.7/dist-packages/DistUpgrade/MetaRelease.pyR;   ‹   s*    +c         C   s   | |  _  d S(   s\    virtual function that is called when the distro is no longer
            supported
        N(   R$   (   R   t   dist(    (    s;   /usr/lib/python2.7/dist-packages/DistUpgrade/MetaRelease.pyt   dist_no_longer_supported¦   s    c         C   s   | |  _  d S(   s\    virtual function that is called when a new distro release
            is available
        N(   R"   (   R   RV   (    (    s;   /usr/lib/python2.7/dist-packages/DistUpgrade/MetaRelease.pyt   new_dist_available«   s    c         C   s³  |  j  d ƒ |  j } |  j  d | ƒ d  } g  } t j |  j ƒ } | j ƒ  } x¸| rd | j k rü| j d } |  j  d | ƒ | j d } t j	 t
 j | ƒ ƒ } t | j d ƒ }	 | j d }
 t | |
 | |	 ƒ } d | j k r(| j d | _ t ƒ  } | r(| j d	 | 7_ q(n  d
 | j k rq| j d
 | _ |  j | ƒ } | rq| j | 7_ qqn  d | j k r“| j d | _ n  d | j k rµ| j d | _ n  d | j k r×| j d | _ n  | j | ƒ | | k rü| } qün  | j ƒ  } qT W| d  k r)|  j  d ƒ t Sd } x; | D]3 } | j | j k r6| } |  j  d | ƒ Pq6q6W| d k r“| j r“|  j | ƒ n  | d k r¯|  j | ƒ n  t S(   Ns   MetaRelease.parse()s   current dist name: '%s'R   s   found distro name: '%s't   Datet	   Supportedt   Versiont   ReleaseNotess   ?lang=%st   ReleaseNotesHtmlt   UpgradeToolt   UpgradeToolSignaturet   UpgradeBrokens,   current dist not found in meta-release file
t    s   new dist: %s(   R   R#   R   t   apt_pkgt   TagFileR:   t   stept   sectiont   timet   mktimet   rfc822t	   parsedatet   intR   R	   R    R
   t#   _get_release_notes_uri_query_stringR   R   R   t   appendR9   R   R   RW   RX   R    (   R   R#   t   current_distt   distst	   index_tagt   step_resultR   t   rawdateR   R   R   RV   t   langt   queryt   upgradable_to(    (    s;   /usr/lib/python2.7/dist-packages/DistUpgrade/MetaRelease.pyt   parse±   sd    			c         C   s  |  j  d ƒ d } t j |  j ƒ } | j d d ƒ | j d d ƒ t j |  j t j ƒ r y t j	 |  j ƒ j
 } Wq t k
 r‹ } q Xn  | d k rÊ |  j rÊ | j d t j t j | ƒ ƒ ƒ n  yt j | d d	 ƒ} t j j |  j ƒ rOt j |  j t j ƒ rOy t j |  j ƒ WqOt k
 rK} d
 |  j | f GHqOXn  y] t |  j d ƒ } x! | j ƒ  D] } | j | ƒ qqW| j ƒ  | j d d ƒ | |  _ Wn t k
 rÁ} n X| j ƒ  Wn¦ t j k
 rF} | j d k r2t j j |  j ƒ r2|  j  d |  j ƒ t |  j d ƒ |  _ qv|  j  d | ƒ n0 t j t j  f k
 ru} |  j  d | ƒ n X|  j d  k rù|  j  d ƒ y |  j" ƒ  Wn+ t# j$ d |  j ƒ t j% |  j ƒ n X|  j& r|  j& j' rt j% |  j ƒ qn |  j  d ƒ t( |  _) d  S(   Ns   MetaRelease.download()i    s   Cache-Controls   No-Cachet   Pragmas   no-caches   If-Modified-Sincet   timeouti   s   Can't unlink '%s' (%s)s   w+i0  s   reading file '%s't   rs%   result of meta-release download: '%s's!   have self.metarelease_informations   parse failed for '%s's   NO self.metarelease_information(*   R   t   urllib2t   RequestR%   t
   add_headerR*   t   accessRK   t   W_OKt   statt   st_mtimeRQ   R   Rf   t   asctimet   gmtimet   urlopenR+   R,   RS   RL   t	   readlinesR2   t   flusht   seekR:   RM   t   closet	   HTTPErrort   codet   URLErrort   httplibt   BadStatusLineR   Ru   t   loggingt	   exceptiont   removeR"   R   R9   R!   (   R   t   lastmodifiedt   reqRC   t   urit   ft   line(    (    s;   /usr/lib/python2.7/dist-packages/DistUpgrade/MetaRelease.pyR>   õ   s`    %
$c         C   sR   d } t  ƒ  } | r& | d | 7} n  t ƒ  } | d | 7} | d | j 7} | S(   Nt   ?s   lang=%s&s   os=%s&s   ver=%s(   R    R   R   (   R   RV   t   qRr   R*   (    (    s;   /usr/lib/python2.7/dist-packages/DistUpgrade/MetaRelease.pyRk   7  s    		c         C   s$   |  j  r  t j j | d ƒ n  d  S(   Ns   
(   t   DEBUGR0   R1   R2   (   R   t   msg(    (    s;   /usr/lib/python2.7/dist-packages/DistUpgrade/MetaRelease.pyR   D  s    	(   R   R   t   __doc__R*   t   environR–   R7   R-   R9   R   R;   RW   RX   Ru   R>   Rk   R   (    (    (    s;   /usr/lib/python2.7/dist-packages/DistUpgrade/MetaRelease.pyR   0   s   K				D	B	t   __main__(   Rb   R)   RŠ   RŒ   Rh   R*   R0   Rf   R<   Ry   t   utilsR    R   R   t   objectR   R   R   R9   t   meta(    (    (    s;   /usr/lib/python2.7/dist-packages/DistUpgrade/MetaRelease.pyt   <module>   s   ÿ 