
QNc           @   s   d  d l  Z  e  j d d e  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 d  d l m Z d Z d Z d e j j f d	     YZ d S(
   iNt   ignores   apt API not stable yet(   t   gettext(   t   UpdateOrigins   /var/lib/synaptic/preferencess>   http://changelogs.ubuntu.com/changelogs/pool/%s/%s/%s/%s_%s/%st   MyCachec           B   s   e  Z d  Z d d  Z d   Z d   Z d   Z e d    Z	 e d    Z
 d   Z d   Z d	   Z d
   Z e d d  Z d   Z d   Z d   Z d   Z d   Z RS(   t   Ubuntuc         C   s   t  j j |  | |  t |  j  d k s1 t  |  j   sD t  |  j   i  |  _ i  |  _	 |  j
 j d k r |  j   n  |  j
 j d k r |  j
 j d k s t  d  S(   Ni    (   t   aptt   Cachet   __init__t   lent   reqReinstallPkgst   AssertionErrort   _dpkgJournalDirtyt   _initDepCachet   all_changest   all_newst	   _depcachet   broken_countt   saveDistUpgradet	   del_count(   t   selft   progresst   rootdir(    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyR   ,   s    
		c         C   sV   t  j j t j j d   d } x- t  j |  D] } t j d |  r2 t	 Sq2 Wt
 S(   s`   
        test if the dpkg journal is dirty
        (similar to debSystem::CheckUpdates)
        s   Dir::State::statuss   /updatess   [0-9]+(   t   ost   patht   dirnamet   apt_pkgt   Configt	   find_filet   listdirt   ret   matcht   Truet   False(   R   t   dt   f(    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyR   ?   s    	c         C   sC   |  j  j   t j j t  r2 |  j  j t  n  |  j  j   d  S(   N(   R   t   read_pinfileR   R   t   existst   SYNAPTIC_PINFILEt   init(   R   (    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyR   K   s    c         C   s   |  j    d  S(   N(   R   (   R   (    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyt   clearS   s    c         C   s>   t  j |  j  } t  j   } | j | |  j |  j  | j S(   s<    get the size of the packages that are required to download (   R   t   PackageManagerR   t   Acquiret   get_archivest   _listt   _recordst   fetch_needed(   R   t   pmt   fetcher(    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyt   requiredDownloadU   s    c         C   s
   |  j  j S(   N(   R   t
   inst_count(   R   (    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyt   installCount\   s    c         C   s
   |  j  j S(   N(   R   t
   keep_count(   R   (    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyt	   keepCount_   s    c         C   sv   |  j  j t  |  j  j } |  j  j d k r; |  j   n  |  j  j d k r_ |  j  j d k se t  |  j  j   | S(   s@    this functions mimics a upgrade but will never remove anything i    (   R   t   upgradeR   R   R'   R   R
   (   R   t   wouldDelete(    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyR   a   s    *c         C   s  | j  j } |  j j | j   } | d } d } x | j D]e \ } } | j | j | j f  r; | j	 j
 j |  } | r | | j | j f }	 |	 } Pq q; q; W| r| j r| j rt t d  | j d  | | j | j f <| | j | j f } n  | j d k r| Sx | j  j D] }
 | rQt j |
 j | j  d k rQq!n  x |
 j D]y \ } } | j | j | j f  r[| j	 j
 j |  } | r| | j | j f }	 |	 j | j k r|	 } qqq[q[Wq!W| S(   s9   match 'pkg' origin against 'matcher', take versions between
            installedVersion and candidateVersion into account too
            Useful if installed pkg A v1.0 is available in both
            -updates (as v1.2) and -security (v1.1). we want to display
            it as a security update then
        s   Other updates (%s)i    N(   NN(   t   _pkgt   current_verR   t   get_candidate_vert   Nonet	   file_listt   has_keyt   archivet   origint   _pcacheR+   t
   find_indexR   t   _t
   importancet   version_listR   t   VersionComparet   ver_str(   R   t   pkgt   matchert   inst_vert   cand_vert   update_origint   verFileItert   indext	   indexfileR   t   ver(    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyt   matchPackageOriginj   s8    
,c         C   s>   t  j | d  } t |  d k r: d j | d  } n  | S(   s    strip of the epoch t   :i   t    (   t   stringt   splitR   t   join(   R   t   verstrt   l(    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyt   _strip_epoch   s    c         C   s  |  | } | j  } d } | j j j | j  j } | j }	 |  j |	  }
 | j d  } t	 |  d k rz | d } n  | d } | j
 d  r d | d } n  | r | } n t | | | | |
 | f } t j |  } d } d t j |  } xt r| j   } | d k rPn  t j | |  } | r| j } | rhd	 | k rh| j d	 d  d } n  | j d  } | rd	 | k r| j d	 d  d } n  | r| rt j | |  d k  rPqq| rt j | |  d k rPqn  | | } q W| S(
   s*    helper that fetches the file in question t   maint   /i   i    t   libi   RQ   s   ^%s \((.*)\)(.*)$RP   (   t   sourcePackageNameR?   R   R9   R7   t   sectiont   candidateVersionRW   RS   R   t
   startswitht   CHANGELOGS_URIt   urllib2t   urlopenR   t   escapeR   t   readlineR   t   installedVersiont   groupR   RD   (   R   t   namet   fnamet   strict_versioningt   changelogs_uriRF   t   srcpkgt   src_sectionR\   t   srcver_epocht   srcverRV   t   prefixt   urit	   changelogt   alllinest   regexpt   lineR   t	   installedt   changelogver(    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyt   _get_changelog_or_news   sN    
		
			c         C   s   |  | } | j  j } | j  j j d  } | s5 d  S| j d  d j   } d | k ry | j d  d j d  } n | j  j } | j	 d  d } | d | | f S(   Nt   Sourcet   (i    i   t   )RY   s   /%s_%s.changelog(
   t	   candidateRo   t   recordt   getR:   RS   t   stript   rstript   versiont
   rpartition(   R   Rf   RF   t   deb_urit   srcrecRj   Rm   t   base_uri(    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyt+   _guess_third_party_changelogs_uri_by_source   s    
c         C   s;   |  | } | j  j } | r7 d t j | d d  d Sd S(   s`    guess changelogs uri based on ArchiveURI by replacing .deb
            with .changelog
        s   %s.changelogt   .i   i    N(   Rz   Ro   RR   t   rsplitR:   (   R   Rf   RF   R   (    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyt+   _guess_third_party_changelogs_uri_by_binary   s
    
c         C   s6   |  j  |  |  j |  y | j   Wn n Xd  S(   N(   t   get_newst   get_changelogt   release(   R   Rf   t   lock(    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyt   get_news_and_changelog  s    c         C   sH   y |  j  | d t  } Wn t k
 r- d SX| rD | |  j | <n  d S(   s7    get the NEWS.Debian file from the changelogs location s   NEWS.DebianN(   Rv   R   t	   ExceptionR   (   R   Rf   t   news(    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyR     s    c         C   s)  |  | j  } t d  |  | j |  | j f |  j | <|  j g  | D] } | j ^ qE k rF|  j |  } |  j |  } d } x | | g D] } | r y/ |  j	 | d t
 |  } |  j | c | 7<Wq+t j k
 r }	 t d  } q+t t j t j f k
 r'}	 t j d  t d  } q+Xq q W|  j | c | 7<d S|  | j }
 |  | j j d d	  } yA |  j	 | d  } t |  d
 k rt d  |
 | f } n  Wnb t j k
 r}	 t d  |
 | f } n7 t t j t j f k
 r}	 d G|	 GHt d  } n X|  j | c | 7<d S(   s4    get the changelog file from the changelog location sG   Changes for the versions:
Installed version: %s
Available version: %s

RQ   Rp   sA   This update does not come from a source that supports changelogs.s   error on changelog fetchingsO   Failed to download the list of changes. 
Please check your Internet connection.NRP   s   %3Ai    s   The changelog does not contain any relevant changes.

Please use http://launchpad.net/ubuntu/+source/%s/%s/+changelog
until the changes become available or try again later.s   The list of changes is not available yet.

Please use http://launchpad.net/ubuntu/+source/%s/%s/+changelog
until the changes become available or try again later.s   caught exception: (   t   candidateOriginRA   Rd   R]   R   t   CHANGELOG_ORIGINR>   R   R   Rv   R    R`   t	   HTTPErrort   IOErrort   httplibt   BadStatusLinet   sockett   errort   loggingt	   exceptionR[   t   replaceR   (   R   Rf   t   originst   ot   changelogs_uri_binaryt   changelogs_uri_sourcet   error_messageRi   Rp   t   eRj   Rl   (    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyR     sD    +%			N(   t   __name__t
   __module__R   R:   R   R   R   R'   t   propertyR0   R2   R4   R   RO   RW   R    Rv   R   R   R   R   R   (    (    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyR   (   s"   							0	J					(   t   warningst   filterwarningst   FutureWarningR   R   R   R   RR   R`   R   R   R   t   DistUpgrade.DistUpgradeCachet   DistUpgradeR   RA   t
   UpdateListR   R%   R_   t   DistUpgradeCacheR   (    (    (    s>   /usr/lib/python2.7/dist-packages/UpdateManager/Core/MyCache.pyt   <module>   s    