§
    ­xkdk]  ã                   ó
  — 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  G d„ de	¦  «        Z
 G d„ de¦  «        Z G d„ d	e¦  «        Z G d
„ de¦  «        Z G d„ de¦  «        Zd„ Zd„ Z G d„ d¦  «        Zddddg fd„ZdS )é    N)ÚElementTree)Úgettextc                   ó   — e Zd ZdS )ÚNoDistroTemplateExceptionN)Ú__name__Ú
__module__Ú__qualname__© ó    ú3/usr/lib/python3/dist-packages/aptsources/distro.pyr   r   %   s   € € € € € Ø€Dr   r   c                   óX   — e Zd Zg fd„Zd„ Zdd„Zd„ Zd„ Zdd„Zd	„ Z	d
„ Z
d„ Zd„ Zd„ ZdS )ÚDistributionc                 óh   — || _         || _        || _        || _        || _        d| _        d| _        dS )z0Container for distribution specific informationsÚdebzdeb-srcN)ÚidÚcodenameÚdescriptionÚreleaseÚis_likeÚbinary_typeÚsource_type)Úselfr   r   r   r   r   s         r   Ú__init__zDistribution.__init__*   s>   € ð ˆŒØ ˆŒØ&ˆÔØˆŒØˆŒà ˆÔØ$ˆÔÐÐr   c                 ó  — || _         d| _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _	        d| _
        g | _        d| _        d| _        d| _        g | _        | j         j        j        D ]5}|                      |j        ¦  «        r|j        | j        k    r	|| _         nŒ6| j        €t-          d| j        ›d| j        ›�¦  «        ‚g }g }g }g }| j         j        D �]ƒ}|j        �sÞ|                      |j        ¦  «        �rÃ|j        �r»|j        j        �r®|                      |j        j        ¦  «        �rŽ|j                             d¦  «        r=|j        s6| j                              |¦  «         | !                    |j"        ¦  «         �n7|j                             d¦  «        r"|j        r| j                              |¦  «         nû|j#        | j$        k    rV|j        sO| j                              |¦  «         | !                    |j"        ¦  «         |                      |j        ¦  «         n•|j#        | j$        k    r"|j        r| j                              |¦  «         nc|j#        | j%        k    r"|j        s| j                              |¦  «         n1|j#        | j%        k    r!|j        r| j                              |¦  «         |j        s“|j        | j        j&        v r€|j        s,|j#        | j$        k    r| j                              |¦  «         �Œ6|j        s,|j#        | j%        k    r| j                              |¦  «         �Œi| j                              |¦  «         �Œ…tO          |¦  «        | _        tO          |¦  «        | _        | !                    |¦  «         | !                    |¦  «         tO          |¦  «        | _        tO          |¦  «        | _	        |  (                    ¦   «          dS )zf
        Find the corresponding template, main and child sources
        for the distribution
        NFÚ z2Error: could not find a distribution template for ú/úcdrom:))ÚsourceslistÚsource_templateÚchild_sourcesÚmain_sourcesÚdisabled_sourcesÚcdrom_sourcesÚdownload_compsÚenabled_compsÚcdrom_compsÚ
used_mediaÚget_source_codeÚsource_code_sourcesÚdefault_serverÚmain_serverÚnearest_serverÚused_serversÚmatcherÚ	templatesÚis_codenameÚnameÚdistributionr   r   r   ÚlistÚinvalidÚdistÚtemplateÚofficialÚuriÚ
startswithÚdisabledÚappendÚextendÚcompsÚtyper   r   ÚchildrenÚsetÚget_mirrors)r   r   r6   Úmediar=   r&   r%   Úsources           r   Úget_sourceszDistribution.get_sources6   s  € ð 'ˆÔà#ˆÔØˆÔØˆÔØ "ˆÔØˆÔØ ˆÔØˆÔØˆÔØˆŒØ$ˆÔØ#%ˆÔ ð !ˆÔØˆÔØ ˆÔØˆÔð Ô(Ô0Ô:ð 	ð 	ˆHØ×Ò ¤Ñ.Ô.ð °8Ô3HÈDÌGÒ3SÐ3Sð (0�Ô$Ø�øØÔÐ'Ý+Ð+à”7�7�7˜DœM˜Mð+ñô ð ð ˆØˆØˆØˆàÔ&Ô+ð 	9ñ 	9ˆFà”Nñ9à×$Ò$ V¤[Ñ1Ô1ñ9ð ”Oñ9ð ”OÔ,ñ	9ð
 ×$Ò$ V¤_Ô%9Ñ:Ô:ñ9ð ”:×(Ò(¨Ñ2Ô2ð 9¸6¼?ð 9ØÔ&×-Ò-¨fÑ5Ô5Ð5Ø×&Ò& v¤|Ñ4Ô4Ð4Ñ4Ø”Z×*Ò*¨8Ñ4Ô4ð 9¸¼ð 9ØÔ&×-Ò-¨fÑ5Ô5Ð5Ð5Ø”[ DÔ$4Ò4Ð4¸V¼_Ð4ØÔ%×,Ò,¨VÑ4Ô4Ð4Ø—L’L ¤Ñ.Ô.Ð.Ø—L’L ¤Ñ,Ô,Ð,Ð,Ø”[ DÔ$4Ò4Ð4¸¼Ð4ØÔ)×0Ò0°Ñ8Ô8Ð8Ð8Ø”[ DÔ$4Ò4Ð4¸V¼_Ð4ØÔ,×3Ò3°FÑ;Ô;Ð;Ð;Ø”[ DÔ$4Ò4Ð4¸¼Ð4ØÔ)×0Ò0°Ñ8Ô8Ð8Ø”>ð 9 f¤o¸Ô9MÔ9VÐ&VÐ&VØ”ð 9¨6¬;¸$Ô:JÒ+JÐ+JØÔ&×-Ò-¨fÑ5Ô5Ð5Ñ5Øœð 9¨V¬[¸DÔ<LÒ-LÐ-LØÔ,×3Ò3°FÑ;Ô;Ð;Ñ;àÔ)×0Ò0°Ñ8Ô8Ð8ùÝ! %™jœjˆÔÝ˜{Ñ+Ô+ˆÔØ×Ò˜UÑ#Ô#Ð#Ø×Ò˜[Ñ)Ô)Ð)Ý  Ñ/Ô/ˆÔÝ˜e™*œ*ˆŒØ×ÒÑÔÐÐÐr   Nc                 ób  — | j         j        | _        | j        D ]1}|                     d¦  «        s| j                             |¦  «         Œ2t          | j        ¦  «        dk    r| j        | _	        n| j        d         j
        | _	        i | _        d}t          j                             |¦  «        rÎt          |¬¦  «        }t!          |dd¦  «        €|j        |_        |                     d¦  «        }|D ]‰}	 |j        d         }n# t(          $ r |j        d	         }Y nw xY w	 |j        d
         }n# t(          $ r |j        d         }Y nw xY wt+          j        d|¦  «        | j        |                     ¦   «         <   ŒŠd| _        d| _        t          j        dd¬¦  «        }	|	                     d¦  «        }
|	                     d¦  «        }|dk    rt          |	¦  «        }|	|
dz   |…                              ¦   «         }|r
||z  | _        || j        v r| j        |         | _        || _        dS dS )zR
        Provide a set of mirrors where you can get the distribution from
        r   r   z%/usr/share/xml/iso-codes/iso_3166.xml)ÚfileÚiterNÚiso_3166_entryÚcommon_namer1   Úalpha_2_codeÚalpha_3_codeÚiso_3166ÚLANGÚen_UK)ÚdefaultÚ_ú.éÿÿÿÿé   )r   Úbase_urir+   r'   r9   r-   r;   Úlenr!   r*   r8   Ú	countriesÚosÚpathÚexistsr   ÚgetattrÚgetiteratorrG   ÚattribÚKeyErrorr   ÚdgettextÚlowerÚcountryÚcountry_codeÚgetenvÚfindr,   )r   Úmirror_templateÚmediumÚfnameÚetÚitÚelmÚdescrÚcodeÚlocaleÚaÚzra   s                r   rA   zDistribution.get_mirrorsŒ   s_  € ð
  Ô/Ô8ˆÔð ”oð 	1ð 	1ˆFØ×$Ò$ XÑ.Ô.ð 1àÔ!×(Ò(¨Ñ0Ô0Ð0øåˆtÔ Ñ!Ô! QÒ&Ð&Ø"&Ô"2ˆDÔÐà"&Ô"3°AÔ"6Ô":ˆDÔð ˆŒØ7ˆÝŒ7�>Š>˜%Ñ Ô ð 	SÝ %Ð(Ñ(Ô(ˆBõ �r˜6 4Ñ(Ô(Ð0Øœ.�”Ø—’Ð)Ñ*Ô*ˆBØð 	Sð 	S�ð/ØœJ }Ô5�E�EøÝð /ð /ð /ØœJ vÔ.�E�E�Eð/øøøð6Øœ: nÔ5�D�DøÝð 6ð 6ð 6Øœ: nÔ5�D�D�Dð6øøøå/6Ô/?À
ÈEÑ/RÔ/R�”˜tŸzšz™|œ|Ñ,Ð,ð ˆŒØ ˆÔÝ”˜6¨7Ð3Ñ3Ô3ˆØ�KŠK˜ÑÔˆØ�KŠK˜ÑÔˆØ�Š7ˆ7Ý�F‘”ˆAØ˜a !™e a˜iÔ(×.Ò.Ñ0Ô0ˆàð 	AØ"1°LÑ"@ˆDÔà˜4œ>Ð)Ð)Øœ>¨,Ô7ˆDŒLØ ,ˆDÔÐÐð *Ð)s$   Ã6DÄDÄDÄ"D0Ä0E
Å	E
c                 ó"  — d}|                      d¦  «        }|                      d¦  «        }|dk    r |dk    r||t          d¦  «        z   |…         }|| j        v rt          d¦  «        | j        |         z  S d|                     d¦  «        z  S )zoTry to get a human readable name for the main mirror of a country
        Customize for different distributionsNz://z.archive.ubuntu.comrR   úServer for %sú%sú/ )rc   rU   rV   rP   Úrstrip©r   Úserverr`   ÚiÚlis        r   Ú_get_mirror_namezDistribution._get_mirror_nameÄ   s”   € ð ˆØ�KŠK˜ÑÔˆØ�[Š[Ð.Ñ/Ô/ˆØ�Š7ˆ7�r˜R’x�xØ˜Q¥ U¡¤™^¨bÐ0Ô1ˆGØ�d”nÐ$Ð$å�_Ñ%Ô%¨¬°wÔ(?Ñ?Ð?à˜&Ÿ-š-¨Ñ-Ô-Ñ-Ð-r   c                 óH  — d„ }g }t          | j        ¦  «        dk     s4t          | j        ¦  «        dk    r„ || j        d         | j        ¦  «        rh|                     t	          d¦  «        | j        dg¦  «         | j        r5|                     |                      | j        ¦  «        | j        dg¦  «         �nèt          | j        ¦  «        dk    rÏ || j        d         | j        ¦  «        s³|                     t	          d¦  «        | j        dg¦  «         | j        d         }| j        rF ||| j        ¦  «        s5|                     |                      | j        ¦  «        | j        dg¦  «         |r+|                     |                      |¦  «        |dg¦  «         �nt          | j        ¦  «        dk    ré|                     t	          d¦  «        | j        dg¦  «         | j        r5|                     |                      | j        ¦  «        | j        dg¦  «         |                     t	          d¦  «        ddg¦  «         | j        D ]V}|                      |¦  «        |dg} ||| j        ¦  «        s ||| j        ¦  «        rŒ=||vr|                     |¦  «         ŒW|S )	z+Return a list of used and suggested serversc                 óx   — t          j        |                      d¦  «        |                     d¦  «        ¦  «        S )zgHelper function that handles comaprision of mirror urls
            that could contain trailing slashesrr   )ÚreÚmatchÚstriprs   )Úmir1Úmir2s     r   Úcompare_mirrorsz5Distribution.get_server_list.<locals>.compare_mirrorsÕ   s.   € õ ”8˜DŸJšJ tÑ,Ô,¨d¯kªk¸$Ñ.?Ô.?Ñ@Ô@Ð@r   rS   r   zMain serverTFzCustom serversN)rU   r-   r+   r;   rP   r,   rx   )r   r€   Úmirrorsru   Úmirror_entrys        r   Úget_server_listzDistribution.get_server_listÒ   sö  € ð	Að 	Að 	Að ˆÝˆtÔ Ñ!Ô! AÒ%Ð%Ý�Ô!Ñ"Ô" aÒ'Ð'Ø� Ô 1°!Ô 4°dÔ6FÑGÔGð (ð �NŠN�A˜mÑ,Ô,¨dÔ.>ÀÐEÑFÔFÐFØÔ"ð Ø—’à×-Ò-¨dÔ.AÑBÔBØÔ+Øðñô ð ùõ �Ô"Ñ#Ô# qÒ(Ð(°°ØÔ˜aÔ  $Ô"2ñ2
ô 2
Ð(ð �NŠN�A˜mÑ,Ô,¨dÔ.>ÀÐFÑGÔGÐGàÔ& qÔ)ˆFð Ô"ð Ø&� v¨tÔ/BÑCÔCð Ø—N’Nà ×1Ò1°$Ô2EÑFÔFØ Ô/Ø!ðñô ð ð ð NØ—’ × 5Ò 5°fÑ =Ô =¸vÀtÐLÑMÔMÐMùå�Ô"Ñ#Ô# aÒ'Ð'ð �NŠN�A˜mÑ,Ô,¨dÔ.>ÀÐFÑGÔGÐGØÔ"ð Ø—’à×-Ò-¨dÔ.AÑBÔBØÔ+Øðñô ð ð �NŠN�AÐ.Ñ/Ô/°°tÐ<Ñ=Ô=Ð=ØÔ+ð 1ð 1�Ø $× 5Ò 5°fÑ =Ô =¸vÀuÐM�Ø"�? 6¨4Ô+>Ñ?Ô?ð 1À?À?Ø˜DÔ,ñDô Dð 1ð Ø!¨Ð0Ð0Ø—N’N <Ñ0Ô0Ð0øàˆr   r   c                 óf  — |€| j         }|€| j        }|€t          | j        ¦  «        }|€| j        }| j                             |||||¦  «        }| j        rX|| j        k    rO| j                             | j        |||||j	        | j        j         
                    |¦  «        dz   ¬¦  «         dS dS dS )z3
        Add distribution specific sources
        NrS   )rF   Úpos)r*   r   r3   r%   r   r   Úaddr(   r   rF   Úindex)r   r>   r8   r5   r=   ÚcommentÚ
new_sources          r   Ú
add_sourcezDistribution.add_source  sä   € ð ˆ;àÔ%ˆCØˆ<Ø”=ˆDØˆ=Ý˜Ô+Ñ,Ô,ˆEØˆ<ØÔ#ˆDØÔ%×)Ò)¨$°°T¸5À'ÑJÔJˆ
ð Ôð 		 D¨DÔ,<Ò$<Ð$<ØÔ× Ò ØÔ ØØØØØ”_ØÔ$Ô)×/Ò/°
Ñ;Ô;¸aÑ?ð !ñ ô ð ð ð ð		ð 		Ð$<Ð$<r   c                 óä   — t          |g¦  «        }| j        D ]=}|j        j        D ].}|j        |k    r!|j        r|                     |j        ¦  «         Œ/Œ>|D ]}|                      |¦  «         ŒdS )z³
        Enable a component in all main, child and source code sources
        (excluding cdrom based sources)

        comp:         the component that should be enabled
        N)r@   r!   r6   Ú
componentsr1   Úparent_componentr†   Ú_enable_component)r   Úcompr=   rC   Úcs        r   Úenable_componentzDistribution.enable_component2  s–   € õ �T�F‘”ˆàÔ'ð 	2ð 	2ˆFØ”_Ô/ð 2ð 2�Ø”6˜T’>�> aÔ&8�>Ø—I’I˜aÔ0Ñ1Ô1Ð1øð2ð ð 	&ð 	&ˆAØ×"Ò" 1Ñ%Ô%Ð%Ð%ð	&ð 	&r   c                 ón  ‡— ˆfd„}g }|                      | j        ¦  «         |                      | j        ¦  «         i }i }|D ][}|j        | j        k    rI|j        |vrt          ¦   «         ||j        <   |j        D ]"}||j                                      |¦  «         Œ#Œ\| j	        D ][}|j        | j
        k    rI|j        |vrt          ¦   «         ||j        <   |j        D ]"}||j                                      |¦  «         Œ#Œ\t          | j        ¦  «        dk     r|                      d‰z  g¬¦  «         n'|D ]} |||¦  «         Œ| j	        D ]} |||¦  «         Œ| j        rPt          | j	        ¦  «        dk     r"|                      | j
        d‰z  g¬¦  «         d S | j	        D ]} |||¦  «         Œd S d S )Nc                 ó¢   •— | j         |vrdS ‰|| j                  v rdS | xj        ‰gz  c_        || j                                       ‰¦  «         dS )zÄ
            Check if we already added the component to the repository, since
            a repository could be splitted into different apt lines. If not
            add the component
            N)r5   r=   r†   )rC   Úcomps_per_distr�   s     €r   Úadd_component_only_oncez?Distribution._enable_component.<locals>.add_component_only_onceC  sc   ø€ ð Œ{ .Ð0Ð0Ø�ð �~ f¤kÔ2Ð2Ð2Ø�àˆLŒL˜T˜FÑ"ˆLŒLØ˜6œ;Ô'×+Ò+¨DÑ1Ô1Ð1Ð1Ð1r   rS   rq   )r=   )r>   r=   )r<   r!   r    r>   r   r5   r@   r=   r†   r)   r   rU   rŠ   r(   )	r   r�   r•   Úsourcesr”   Úcomps_per_sdistÚsr�   rC   s	    `       r   rŽ   zDistribution._enable_componentB  sI  ø€ ð	2ð 	2ð 	2ð 	2ð 	2ð$ ˆØ�Š�tÔ(Ñ)Ô)Ð)Ø�Š�tÔ)Ñ*Ô*Ð*ð ˆØˆØð 	2ð 	2ˆAØŒv˜Ô)Ò)Ð)Ø”6 Ð/Ð/Ý-0©U¬U�N 1¤6Ñ*Øœð 2ð 2�AØ" 1¤6Ô*×.Ò.¨qÑ1Ô1Ð1Ð1øØÔ)ð 	3ð 	3ˆAØŒv˜Ô)Ò)Ð)Ø”6 Ð0Ð0Ý.1©e¬e�O A¤FÑ+Øœð 3ð 3�AØ# A¤FÔ+×/Ò/°Ñ2Ô2Ð2Ð2øõ ˆtÔ Ñ!Ô! AÒ%Ð%à�OŠO 4¨$¡; -ˆOÑ0Ô0Ð0Ð0ð "ð @ð @�Ø'Ð'¨°Ñ?Ô?Ð?Ð?àÔ2ð Að A�Ø'Ð'¨°Ñ@Ô@Ð@Ð@ð Ôð 	EÝ�4Ô+Ñ,Ô,¨qÒ0Ð0à—’ TÔ%5¸dÀT¹k¸]�ÑKÔKÐKÐKÐKð #Ô6ð Eð E�FØ+Ð+¨F°OÑDÔDÐDÐDð	Eð 	EðEð Er   c                 ó¤  — g }|                      | j        ¦  «         |                      | j        ¦  «         |                      | j        ¦  «         || j        v rg }|                      | j        ¦  «         |D ]W}||j        v rL|j                             |¦  «         t          |j        ¦  «        dk     r| j                             |¦  «         ŒXdS )zx
        Disable a component in all main, child and source code sources
        (excluding cdrom based sources)
        rS   N)	r<   r!   r    r)   r&   r=   ÚremoverU   r   )r   r�   r–   rC   s       r   Údisable_componentzDistribution.disable_component  sÙ   € ð
 ˆØ�Š�tÔ(Ñ)Ô)Ð)Ø�Š�tÔ)Ñ*Ô*Ð*Ø�Š�tÔ/Ñ0Ô0Ð0Ø�4Ô#Ð#Ð#ØˆGØ�NŠN˜4Ô,Ñ-Ô-Ð-Øð 	4ð 	4ˆFØ�v”|Ð#Ð#Ø”×#Ò# DÑ)Ô)Ð)Ý�v”|Ñ$Ô$ qÒ(Ð(ØÔ$×+Ò+¨FÑ3Ô3Ð3øð		4ð 	4r   c                 óô   ‡ — ˆ fd„}g }g }|‰ _         ‰ j        D ]} ||||¦  «         Œ‰ j        D ]0}|j        j        �|j        j        |j        k    r ||||¦  «         Œ1‰ j        D ]} ||||¦  «         ŒdS )zHChange the server of all distro specific sources to
        a given hostc                 ó.  •— || _         | j        D ]P}| j         | j        |g|v r| j                             |¦  «         Œ.|                     | j         | j        |g¦  «         ŒQt          | j        ¦  «        dk     r‰j                             | ¦  «         d S d S )NrS   )r8   r=   r5   rš   r;   rU   r   )rC   r8   Úseenr�   r   s       €r   Úchange_server_of_sourcez;Distribution.change_server.<locals>.change_server_of_source•  s¦   ø€ àˆFŒJØœð Að A�Ø”J ¤¨TÐ2°dÐ:Ð:Ø”L×'Ò'¨Ñ-Ô-Ð-Ð-à—K’K ¤¨V¬[¸$Ð ?Ñ@Ô@Ð@Ð@Ý�6”<Ñ Ô  1Ò$Ð$ØÔ ×'Ò'¨Ñ/Ô/Ð/Ð/Ð/ð %Ð$r   N)r*   r!   r    r6   rT   r8   r)   )r   r8   rŸ   Úseen_binaryÚseen_sourcerC   s   `     r   Úchange_serverzDistribution.change_server‘  s×   ø€ ð		0ð 		0ð 		0ð 		0ð 		0ð ˆØˆØ!ˆÔØÔ'ð 	>ð 	>ˆFØ#Ð# F¨C°Ñ=Ô=Ð=Ð=ØÔ(ð 	Bð 	BˆFð ”Ô(Ð0Ø”?Ô+¨v¬zÒ9Ð9à'Ð'¨°°[ÑAÔAÐAøØÔ.ð 	>ð 	>ˆFØ#Ð# F¨C°Ñ=Ô=Ð=Ð=ð	>ð 	>r   c                 ó    — || j         k    rdS dS )z/Compare a given name with the release codename.TF)r   ©r   r1   s     r   r0   zDistribution.is_codename¯  s   € à�4”=Ò Ð Ø�4à�5r   ©N)NNNNr   )r   r   r	   r   rD   rA   rx   rƒ   rŠ   r‘   rŽ   r›   r¢   r0   r
   r   r   r   r   )   sØ   € € € € € ØCEð 
%ð 
%ð 
%ð 
%ðTð Tð Tðl6-ð 6-ð 6-ð 6-ðp.ð .ð .ðCð Cð CðJð ð ð ð6&ð &ð &ð ;Eð ;Eð ;Eðz4ð 4ð 4ð$>ð >ð >ð<ð ð ð ð r   r   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚDebianDistributionz)Class to support specific Debian featuresc                 ó2   — || j         k    s	| j        dv rdS dS )z}Compare a given name with the release codename and check if
        if it can be used as a synonym for a development releases)ÚtestingÚunstableTF)r   r   r¤   s     r   r0   zDebianDistribution.is_codenameº  s(   € ð �4”=Ò Ð  D¤LÐ4KÐ$KÐ$KØ�4à�5r   c                 ó�  — d}|                      d¦  «        }|                      d¦  «        }|dk    r |dk    r||t          d¦  «        z   |…         }|| j        v rTt          d¦  «        t	          j        d| j        |                              ¦   «         ¦  «                             ¦   «         z  S d|                     d¦  «        z  S )	zYTry to get a human readable name for the main mirror of a country
        Debian specificNz://ftp.z.debian.orgrR   rp   rL   rq   rr   )rc   rU   rV   rP   r   r^   rs   rt   s        r   rx   z#DebianDistribution._get_mirror_nameÂ  sÄ   € ð ˆØ�KŠK˜	Ñ"Ô"ˆØ�[Š[˜Ñ'Ô'ˆØ�Š7ˆ7�r˜R’x�xØ˜Q¥ Y¡¤Ñ/°"Ð4Ô5ˆGØ�d”nÐ$Ð$õ �/Ñ"Ô"ÝÔ"Ø ¤¨wÔ 7× >Ò >Ñ @Ô @ñô ç’&‘(”(ñðð ˜&Ÿ-š-¨Ñ-Ô-Ñ-Ð-r   c                 ó>   — t                                | d¬¦  «         d S )Nz http://ftp.%s.debian.org/debian/©rd   ©r   rA   ©r   s    r   rA   zDebianDistribution.get_mirrorsÕ  s/   € Ý× Ò ØÐ"Dð 	!ñ 	
ô 	
ð 	
ð 	
ð 	
r   N)r   r   r	   Ú__doc__r0   rx   rA   r
   r   r   r§   r§   ·  sG   € € € € € Ø3Ð3ðð ð ð.ð .ð .ð&
ð 
ð 
ð 
ð 
r   r§   c                   ó   — e Zd ZdZd„ ZdS )ÚUbuntuDistributionz)Class to support specific Ubuntu featuresc                 ó>   — t                                | d¬¦  «         d S )Nz$http://%s.archive.ubuntu.com/ubuntu/r­   r®   r¯   s    r   rA   zUbuntuDistribution.get_mirrorsÞ  s/   € Ý× Ò ØÐ"Hð 	!ñ 	
ô 	
ð 	
ð 	
ð 	
r   N©r   r   r	   r°   rA   r
   r   r   r²   r²   Û  s)   € € € € € Ø3Ð3ð
ð 
ð 
ð 
ð 
r   r²   c                   ó   — e Zd ZdZd„ ZdS )ÚUbuntuRTMDistributionz-Class to support specific Ubuntu RTM featuresc                 ó(   — | j         j        | _        d S r¥   )r   rT   r+   r¯   s    r   rA   z!UbuntuRTMDistribution.get_mirrorsç  s   € ØÔ/Ô8ˆÔÐÐr   Nr´   r
   r   r   r¶   r¶   ä  s)   € € € € € Ø7Ð7ð9ð 9ð 9ð 9ð 9r   r¶   c                  óˆ  — ddl m} m} ddl}dddddœ}	  | d	d
g|¬¦  «                             ¦   «         d         }|                     d¦  «        }|                     d„ |                     d¦  «        D ¦   «         ¦  «         n># t          $ r1}|j        |j	        k    rt          j        d|z  ¦  «         Y d}~nd}~ww xY w|S )z-Call lsb_release --idrc and return a mapping.r   ©ÚPopenÚPIPENÚsidÚDebianzDebian GNU/Linux unstable (sid)rª   )ÚCodenameúDistributor IDÚDescriptionÚReleaseÚlsb_releasez-idrc)Ústdoutzutf-8c              3   óH   K  — | ]}d |v ¯|                      d ¦  «        V — ŒdS )z:	N)Úsplit)Ú.0Úlines     r   ú	<genexpr>z_lsb_release.<locals>.<genexpr>ú  s3   è è € ÐUÐU¨DÀuÐPTÀ}À}�d—j’j Ñ'Ô'À}À}À}À}ÐUÐUr   ú
z#lsb_release failed, using defaults:)Ú
subprocessrº   r»   ÚerrnoÚcommunicateÚdecodeÚupdaterÅ   ÚOSErrorÚENOENTÚloggingÚwarning)rº   r»   rË   ÚresultÚoutÚexcs         r   Ú_lsb_releaserÖ   ë  s   € à&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø€L€L€Lð Ø"Ø8Øð	ð €FðIØˆe�] GÐ,°TÐ:Ñ:Ô:×FÒFÑHÔHÈÔKˆà�jŠj˜Ñ!Ô!ˆØ�ŠÐUÐU°C·I²I¸d±O´OÐUÑUÔUÑUÔUÐUÐUøÝð Ið Ið IØŒ9˜œÒ$Ð$ÝŒOÐAÀCÑGÑHÔHÐHøøøøøøøøøðIøøøð €Ms   •A.B Â
B?Â'B:Â:B?c                  ó  — ddl m} m} ddl}	 ddl m} n9# t
          $ r, t          j        t          j        t          j	        ¦  «        }Y nw xY w	  | ddg||d¬¦  «         
                    ¦   «         d         }|                     ¦   «         D ]5}|                     d	¦  «        r|                     d
d¦  «        d         c S Œ6n># t          $ r1}|j        |j        k    rt!          j        d|z  ¦  «         Y d}~nd}~ww xY wdS )z=Get the current channel from system-image-cli -i if possible.r   r¹   N)ÚDEVNULLzsystem-image-cliz-iT)rÃ   ÚstderrÚuniversal_newlinesz	channel: z: rS   z+system-image-cli failed, using defaults: %s)rÊ   rº   r»   rË   rØ   ÚImportErrorrW   ÚopenÚdevnullÚO_RDWRrÌ   Ú
splitlinesr9   rÅ   rÏ   rÐ   rÑ   rÒ   )rº   r»   rË   rØ   rÔ   rÇ   rÕ   s          r   Ú_system_image_channelrà     s^  € à&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø€L€L€Lð1Ø&Ð&Ð&Ð&Ð&Ð&Ð&øÝð 1ð 1ð 1å”'�"œ*¥b¤iÑ0Ô0ˆˆˆð1øøøðQØˆeØ Ð&ØØØ#ð	
ñ 
ô 
÷
 Š+‰-Œ-˜ôˆð —N’NÑ$Ô$ð 	.ð 	.ˆDØ�Š˜{Ñ+Ô+ð .Ø—z’z $¨Ñ*Ô*¨1Ô-Ð-Ð-Ð-ð.ð	.øõ ð Qð Qð QØŒ9˜œÒ$Ð$ÝŒOÐIÈCÑOÑPÔPÐPøøøøøøøøøðQøøøð ˆ4s.   Ž •3AÁ
AÁA1C ÃC Ã
C>Ã'C9Ã9C>c                   ó6   — e Zd ZdZdZd	d„Zd„ Zd„ Zd„ Zd„ Z	dS )
Ú
_OSReleasez/etc/os-releaseTc                 óö   — i | _         d| _        t          j        | _        t
          j                             | j        ¦  «        sd S |                      ¦   «          d| _        |r|  	                    ¦   «          d S d S )NFT)
rÓ   Úvalidrâ   ÚOS_RELEASE_FILErF   rW   rX   ÚisfileÚparseÚinject_lsb_compat)r   Ú
lsb_compats     r   r   z_OSRelease.__init__  su   € ØˆŒØˆŒ
ÝÔ.ˆŒ	åŒw�~Š~˜dœiÑ(Ô(ð 	ØˆFà�
Š
‰ŒˆØˆŒ
àð 	%Ø×"Ò"Ñ$Ô$Ð$Ð$Ð$ð	%ð 	%r   c                 ó@  — | j         d         | j         d<   | j         d         | j         d<   | j                              d¦  «        | j         d<   | j         d         s"| j                              d¦  «        | j         d<   | j                              d¦  «        | j         d	<   d S )
NÚIDr¿   ÚPRETTY_NAMErÀ   ÚVERSION_CODENAMEr¾   ÚUBUNTU_CODENAMEÚ
VERSION_IDrÁ   )rÓ   Úgetr¯   s    r   rè   z_OSRelease.inject_lsb_compat-  s�   € Ø(,¬°DÔ(9ˆŒÐ$Ñ%Ø%)¤[°Ô%?ˆŒ�MÑ"à"&¤+§/¢/Ð2DÑ"EÔ"EˆŒ�JÑØŒ{˜:Ô&ð 	Ià&*¤k§o¢oÐ6GÑ&HÔ&HˆDŒK˜
Ñ#Ø!%¤§¢°Ñ!>Ô!>ˆŒ�IÑÐÐr   c                 óÌ   — t          | j        d¦  «        }|D ]7}|                     ¦   «         }|sŒ | j        |                     dd¦  «        Ž  Œ8|                     ¦   «          d S )NÚrú=rS   )rÜ   rF   r}   Úparse_entryrÅ   Úclose)r   ÚfrÇ   s      r   rç   z_OSRelease.parse7  sl   € Ý�”˜CÑ Ô ˆØð 	2ð 	2ˆDØ—:’:‘<”<ˆDØð ØØˆDÔ˜dŸjšj¨¨aÑ0Ô0Ð1Ð1Ð1Ø	�Š‰	Œ	ˆ	ˆ	ˆ	r   c                 ó¤   — |                       |¦  «        }|dk    r*t          |t          ¦  «        r|                     d¦  «        }|| j        |<   d S )NÚID_LIKEú )Úparse_valueÚ
isinstanceÚstrrÅ   rÓ   )r   ÚkeyÚvalues      r   rô   z_OSRelease.parse_entry@  sT   € Ø× Ò  Ñ'Ô'ˆØ�)ÒÐ¥
¨5µ#Ñ 6Ô 6Ðð —K’K Ñ$Ô$ˆEØ ˆŒ�CÑÐÐr   c                 ód   — t          j        |¦  «        }t          |¦  «        dk    r|d         S |S )NrS   r   )ÚshlexrÅ   rU   )r   rþ   Úvaluess      r   rú   z_OSRelease.parse_valueH  s1   € Ý”˜UÑ#Ô#ˆÝˆv‰;Œ;˜!ÒÐØ˜!”9ÐØˆr   N)T)
r   r   r	   ÚDEFAULT_OS_RELEASE_FILErå   r   rè   rç   rô   rú   r
   r   r   râ   râ     so   € € € € € Ø/ÐØ'€Oð%ð %ð %ð %ð?ð ?ð ?ðð ð ð!ð !ð !ðð ð ð ð r   râ   c                 óZ  — | r|r|r|sÆt          ¦   «         }g }t          ¦   «         }|j        r|j        }t          ¦   «         }|d         } |d         }|d         }|d         }|                     dg ¦  «        }| dk    rPt          ¦   «         }|�@d|v r<d	} |                     d
d¦  «        d                              dd¦  «        d         }|}|}| dk    rt          | ||||¦  «        S | d	k    rt          | ||||¦  «        S | dk    rt          | ||||¦  «        S t          | ||||¦  «        S )zè
    Check the currently used distribution and return the corresponding
    distriubtion class that supports distro specific features.

    If no paramter are given the distro will be auto detected via
    a call to lsb-release
    r¿   r¾   rÀ   rÁ   rø   ÚUbuntuNzubuntu-rtm/z
Ubuntu-RTMr   rS   ú-r   r½   )râ   rÖ   rä   rÓ   rð   rà   ÚrsplitrÅ   r²   r¶   r§   r   )	r   r   r   r   r   Ú
os_releaseÚ	os_resultÚ
lsb_resultÚchannels	            r   Ú
get_distror  O  sg  € ð ð #�8ð # ð #°ð #Ý‘\”\ˆ
Øˆ	Ý!‘^”^ˆ
ØÔð 	*Ø"Ô)ˆIõ "‘^”^ˆ
ØÐ(Ô)ˆØ˜jÔ)ˆØ  Ô/ˆØ˜YÔ'ˆà—-’- 	¨2Ñ.Ô.ˆØ�Š>ˆ>Ý+Ñ-Ô-ˆGØÐ" }¸Ð'?Ð'?Ø!�Ø"Ÿ>š>¨#¨qÑ1Ô1°!Ô4×:Ò:¸3ÀÑBÔBÀ1ÔE�Ø&�Ø"�Ø	ˆX‚~€~Ý! " h°¸WÀgÑNÔNÐNØ	ˆ\ÒÐÝ$ R¨°;ÀÈÑQÔQÐQØ	ˆxŠˆÝ! " h°¸WÀgÑNÔNÐNå˜B ¨+°wÀÑHÔHÐHr   )r   rÑ   r{   r   rW   Úxml.etree.ElementTreer   Úapt_pkgrP   Ú	Exceptionr   Úobjectr   r§   r²   r¶   rÖ   rà   râ   r  r
   r   r   ú<module>r     s­  ðð4 €€€Ø €€€Ø 	€	€	€	Ø €€€Ø 	€	€	€	à -Ð -Ð -Ð -Ð -Ð -à  Ð  Ð  Ð  Ð  Ð  ð	ð 	ð 	ð 	ð 	 	ñ 	ô 	ð 	ðKð Kð Kð Kð K�6ñ Kô Kð Kð\!
ð !
ð !
ð !
ð !
˜ñ !
ô !
ð !
ðH
ð 
ð 
ð 
ð 
˜ñ 
ô 
ð 
ð9ð 9ð 9ð 9ð 9Ð.ñ 9ô 9ð 9ðð ð ð,ð ð ð41ð 1ð 1ð 1ð 1ñ 1ô 1ð 1ðh  °4ÀÈrð -Ið -Ið -Ið -Ið -Ið -Ir   