ó
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 m Z	 d e
 f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿN(   t   gettextt   AptCdromErrorc           B   s   e  Z d  Z RS(   s%    base exception for apt cdrom errors (   t   __name__t
   __module__t   __doc__(    (    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyR   !   s   t   AptCdromc           B   s¡   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d d	 „ Z d d
 „ Z d „  Z d d „ Z d „  Z d d „ Z d „  Z RS(   s    represents a apt cdrom object c         C   s:   | |  _  | |  _ t ƒ  |  _ t ƒ  |  _ t ƒ  |  _ d  S(   N(   t   viewt	   cdrompatht   sett   packagest
   signaturest   i18n(   t   selfR   t   path(    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyt   __init__(   s
    		c         C   s^   t  j j t j j d ƒ t j j d ƒ ƒ } t  j j | | ƒ rZ t j	 | | | ƒ n  d S(   sG    restore the backup copy of the cdroms.list file (*not* sources.list)! s
   Dir::States   Dir::State::cdromsN(
   t   osR   t   joint   apt_pkgt   Configt   find_dirt   findt   existst   shutilt   copy(   R   t
   backup_extt
   cdromstate(    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyt   restoreBackup0   s    c         C   su   |  j  ƒ  } |  j | |  j ƒ } t j j d ƒ } t | ƒ j ƒ  } | j | d | ƒ } t | d ƒ j	 | ƒ d S(   s    comment out the cdrom entry s   Dir::Etc::sourcelists   # %st   wN(
   t   _readDiskNamet   _generateSourcesListLineR	   R   R   t	   find_filet   opent   readt   replacet   write(   R   t   disknamet   pentryt   sourceslistt   content(    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyt   comment_out_cdrom_entry:   s    c      	   C   sµ  t  ƒ  } t  ƒ  } t  ƒ  } xŠt j |  j d t ƒD]p\ } } } | j d ƒ sa | j d ƒ rk | 2q4 q4 d | k r} q4 q4 d | k r¨ | j t j j | d ƒ ƒ q4 d | k rÓ | j t j j | d ƒ ƒ q4 d | k së d | k rÿ t	 j
 d	 | ƒ q4 d
 | k r*| j t j j | d
 ƒ ƒ q4 d | k rxk t j t j j | d ƒ ƒ D]% } | j t j j | d | ƒ ƒ qUWq4 t j j | ƒ d d k r4 | 2q4 q4 W| | | f S(   s|    
        scan the CD for interessting files and return them as:
        (packagesfiles, signaturefiles, i18nfiles)
        t   topdowns   debian-installers   dist-upgraders   .aptignrt   Packagess   Packages.gzt   Sourcess
   Sources.gzs+   Sources entry found in %s but not supporteds   Release.gpgR   i   t   pool(   R   R   t   walkR   t   Truet   endswitht   addR   R   t   loggingt   errort   listdirt   split(   R   R	   R
   R   t   roott   dirst   filest   f(    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyt   _scanCDC   s0    			(%&c         C   s†   t  j j d ƒ } t  j ƒ  } | j t j j j ƒ  ƒ } |  j	 ƒ  } t
 | d ƒ } | j d | | f ƒ | j d | | f ƒ d S(   s    update apts cdrom.list s   Dir::State::cdromst   as   CD::%s "%s";
s   CD::%s::Label "%s";
N(   R   R   R   t   Cdromt   identt   aptt   progresst   baset   CdromProgressR   R   R"   (   R   t   dbfilet   cdromt   idt   labelt   out(    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyt   _writeDatabasec   s    c         C   sa   t  | ƒ } t j j d ƒ } x< t  | ƒ D]. } d | k r+ | | k r+ | j | ƒ q+ q+ W| S(   s&    drop architectures that are not ours s   APT::Architectures   /binary-(   R   R   R   R   t   remove(   R   R	   t   archt   d(    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyt	   _dropArchm   s    c         C   sr   |  j  } t j j |  j  d d ƒ } t j j | ƒ rn t | ƒ j ƒ  } x# d D] } | j | d ƒ } qO Wn  | S(   Ns   .diskt   infot   "t   ]t   [t   _(   RK   RL   RM   RN   (   R   R   R   R   R   R   R    R!   (   R   R#   RJ   t   special(    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyR   y   s    	c   	      C   s½   d } d } g  } xl | D]d } t  j d | ƒ } | sI t t d ƒ ‚ n  | j d ƒ } | j d ƒ } | j | j d ƒ ƒ q W| s | r“ d  S| j ƒ  d | | d j | ƒ f } | S(	   Nt    s    (.*)/dists/([^/]*)/(.*)/binary-*s&   Could not calculate sources.list entryi   i   i   s   deb cdrom:[%s]/ %s %st    (	   t   ret   matchR   RN   t   groupt   appendt   Nonet   sortR   (	   R   R#   R	   R   t   distt   compsRH   t   mR$   (    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyR   ƒ   s    
c   
      C   s   | s t  j j d ƒ } n  |  j ƒ  } xÒ | D]Ê } t  j d | | | j d ƒ f ƒ } t j j | t j j	 | ƒ d ƒ } | j
 d ƒ rè t j | ƒ } t | d ƒ } xI t rä | j d ƒ }	 | j |	 ƒ |	 d k r¯ Pq¯ q¯ Wq. t j | | ƒ q. Wt S(	   Ns   Dir::State::listss   cdrom:[%s]/%st   distsi    s   .gzR   i ú  RP   (   R   R   R   R   t   URItoFileNameR   R   R   R   t   splitextR.   t   gzipR   R-   R    R"   R   R   (
   R   t   translationst	   targetdirR#   R7   t   fnamet   outft   gRD   t   s(    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyt   _copyTranslations—   s     &%	c   
      C   s   | s t  j j d ƒ } n  |  j ƒ  } xÒ | D]Ê } t  j d | | | j d ƒ f ƒ } t j j | t j j	 | ƒ d ƒ } | j
 d ƒ rè t j | ƒ } t | d ƒ } xI t rä | j d ƒ }	 | j |	 ƒ |	 d k r¯ Pq¯ q¯ Wq. t j | | ƒ q. Wt S(	   Ns   Dir::State::listss   cdrom:[%s]/%sR[   i    s   .gzR   i ú  RP   (   R   R   R   R   R\   R   R   R   R   R]   R.   R^   R   R-   R    R"   R   R   (
   R   R	   R`   R#   R7   Ra   Rb   Rc   RD   Rd   (    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyt   _copyPackages«   s     &%	c         C   sq  t  j j d d ƒ } t  j j d d ƒ } x@| D]8} t j j | ƒ d } t j j | ƒ d } | d | d | | g } t j | ƒ } | d k sš t	 St  j
 t | ƒ ƒ }	 |	 j ƒ  x­ |	 j d j d	 ƒ D]• }
 |
 j ƒ  \ } } } t j j | | ƒ } t j j | ƒ s)t j d
 | ƒ qÐ n  t  j t | ƒ ƒ } | | k sÐ t j d | | f ƒ t	 SqÐ Wq1 Wt S(   s!    verify the signatues and hashes s   Dir::Bin::gpgs   /usr/bin/gpgvs   Apt::GPGV::TrustedKeyrings   /etc/apt/trusted.gpgi    s	   --keyrings   --ignore-time-conflictt   SHA256s   
s   ignoring missing '%s's(   hash sum mismatch expected %s but got %s(   R   R   R   R   R   R3   R]   t
   subprocesst   callt   Falset   ParseTagFileR   t   stept   sectionR   R   R0   RJ   t	   sha256sumR1   R-   (   R   R
   t   gpgvt   keyringt   sigt   basepatht   releaseft   cmdt   rett   tt   entryt   hasht   sizet   nameR7   t   sum(    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyt   _verifyReleaseÀ   s2    		
c         C   s®   | s t  j j d ƒ } n  |  j ƒ  } x€ | D]x } t j j | ƒ d } xY | | f D]K } t  j d | | | j d ƒ f ƒ } t	 j
 | t j j | | ƒ ƒ qW Wq. Wt S(   s    copy the release file s   Dir::State::listsi    s   cdrom:[%s]/%sR[   (   R   R   R   R   R   R   R]   R\   R   R   R   R   R-   (   R   R
   R`   R#   Rq   Rs   R7   Ra   (    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyt   _copyReleaseÞ   s    &'c         C   s6  |  j  ƒ  \ |  _ |  _ |  _ |  j |  j ƒ |  _ t |  j ƒ d k rg t j d ƒ t t	 d ƒ ‚ n  |  j
 |  j ƒ rŒ |  j |  j ƒ n  |  j |  j ƒ |  j |  j ƒ |  j ƒ  } | sÏ t j d ƒ t S|  j | |  j ƒ } t j j d ƒ } t | ƒ j ƒ  } t | d ƒ j d | | f ƒ |  j ƒ  t S(   s'    reimplement pkgCdrom::Add() in python i    s+   no useable indexes found on CD, wrong ARCH?s`   Unable to locate any package files, perhaps this is not a Ubuntu Disc or the wrong architecture?s   no .disk/ directory founds   Dir::Etc::sourcelistR   s%   # added by the release upgrader
%s
%s(   R8   R	   R
   R   RI   t   lenR0   R1   R   RN   R|   R}   Rf   Re   R   Rj   R   R   R   R   R   R    R"   RE   R-   (   R   R#   t   deblineR%   R&   (    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyt   _doAddë   s&     
c         C   s  t  j d |  j ƒ | rr t j j t j j d ƒ t j j	 d ƒ ƒ } t j j
 | ƒ rr t j | | | ƒ qr n  t j j d |  j ƒ t j j d d ƒ y |  j ƒ  } WnN t t f k
 rû } t  j d | ƒ |  j j t d ƒ t d	 ƒ | ƒ t SXt  j d
 | ƒ | S(   s    add a cdrom to apt's database s   AptCdrom.add() called with '%s's
   Dir::States   Dir::State::cdromss   Acquire::cdrom::mounts   APT::CDROM::NoMountt   trues   can't add cdrom: %ss   Failed to add the CDs   There was a error adding the CD, the upgrade will abort. Please report this as a bug if this is a valid Ubuntu CD.

The error message was:
'%s's   AptCdrom.add() returned: %s(   R0   t   debugR   R   R   R   R   R   R   R   R   R   R   t   SetR€   t   SystemErrorR   R1   R   RN   Rj   (   R   R   R   t   rest   e(    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyR/     s$    	c         C   s   |  j  d k	 S(   s#    helper to use this as 'if cdrom:' N(   R   RV   (   R   (    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyt   __nonzero__(  s    N(   R   R   R   R   R   R'   R8   RE   RI   R   R   RV   Re   Rf   R|   R}   R€   R/   R‡   (    (    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyR   %   s    		
			 	
		
			"(   RR   R   R<   R   R0   R^   R   Rh   R    RN   t	   ExceptionR   t   objectR   (    (    (    sC   /usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAptCdrom.pyt   <module>   s   