§
    ­xkd¦e  ã                   ó  — d dl mZm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mZmZmZmZmZmZmZ d dlZddlmZmZ ddlmZ  ed¦  «        Zg d¢Zd	ed
edefd„Z dee         dee         fd„Z! G d„ de"¦  «        Z# G d„ de"¦  «        Z$dedefd„Z% G d„ d¦  «        Z& G d„ d¦  «        Z'ee'e&f         Z( G d„ de)¦  «        Z* G d„ de)¦  «        Z+ G d„ de)¦  «        Z,e-dk    r˜ ej.        ¦   «           e+¦   «         Z/e/D ]'Z0 ej1        d e0                     ¦   «         z  ¦  «         Œ( e d!d"¦  «        Z2 ej1        d#e2z  ¦  «          ej1         e d$d"¦  «        ¦  «          ej1         e d!d%¦  «        ¦  «         dS dS )&é    )Úabsolute_importÚprint_functionN)
ÚAnyÚDictÚCallableÚIterableÚIteratorÚListÚOptionalÚTupleÚTypeVarÚUnioné   )ÚDistInfoÚTemplate)Ú_deb822ÚT)Ú	is_mirrorÚDeb822SourceEntryÚSourceEntryÚNullMatcherÚSourcesListÚSourceEntryMatcherÚ
master_uriÚcompare_uriÚreturnc                 óP  — |                      d¦  «        }|                       d¦  «        } || k    rdS 	 |                     d¦  «        d         }|                      d¦  «        d         }n# t          $ r Y dS w xY wd|v r&||                     d¦  «        dz   d…         |k    rdS dS )z¡check if the given add_url is idential or a mirror of orig_uri e.g.:
    master_uri = archive.ubuntu.com
    compare_uri = de.archive.ubuntu.com
    -> True
    z/ Tz//r   Fú.N)ÚrstripÚsplitÚ
IndexErrorÚindex)r   r   Úcompare_srvÚ
master_srvs       ú8/usr/lib/python3/dist-packages/aptsources/sourceslist.pyr   r   D   sÒ   € ð ×$Ò$ TÑ*Ô*€KØ×"Ò" 4Ñ(Ô(€Jà�jÒ Ð àˆtðØ!×'Ò'¨Ñ-Ô-¨aÔ0ˆØ×%Ò% dÑ+Ô+¨AÔ.ˆ
ˆ
øåð ð ð àˆuˆuðøøøð ˆkÐÐ˜k¨+×*;Ò*;¸CÑ*@Ô*@À1Ñ*DÐ*FÐ*FÔGÈ:ÒUÐUàˆtØˆ5s   ´6A+ Á+
A9Á8A9Úsc                 ó:   — t          t          | ¦  «        ¦  «        S )a-  simple and efficient way to return uniq collection

    This is not intended for use with a SourceList. It is provided
    for internal use only. It does not have a leading underscore to
    not break any old code that uses it; but it should not be used
    in new code (and is not listed in __all__).)ÚlistÚset)r&   s    r%   Úuniqr*   a   s   € õ •�A‘”‰<Œ<Ðó    c                   ón   — e Zd Zdedefd„Z	 ddddee         dee         fd	„Zddd
ee         ddfd„ZdS )ÚSingleValuePropertyÚkeyÚdocc                 ó"   — || _         || _        d S ©N©r.   Ú__doc__©Úselfr.   r/   s      r%   Ú__init__zSingleValueProperty.__init__l   ó   € ØˆŒØˆŒˆˆr+   NÚobjr   Úobjtyper   c                 óB   — |j                              | j        d ¦  «        S r1   )ÚsectionÚgetr.   ©r5   r8   r9   s      r%   Ú__get__zSingleValueProperty.__get__p   s   € ð Œ{�Š˜tœx¨Ñ.Ô.Ð.r+   Úvaluec                 óF   — |€|j         | j        = d S ||j         | j        <   d S r1   )r;   r.   )r5   r8   r?   s      r%   Ú__set__zSingleValueProperty.__set__u   s-   € Øˆ=Ø”˜DœHÐ%Ð%Ð%à$)ˆCŒK˜œÑ!Ð!Ð!r+   r1   )	Ú__name__Ú
__module__Ú__qualname__Ústrr6   r   Útyper>   rA   © r+   r%   r-   r-   k   s¤   € € € € € ð˜Cð  cð ð ð ð ð
 CGð/ð /Ø&ð/Ø19¸$´ð/à	�#Œð/ð /ð /ð /ð
*Ð.ð *°xÀ´}ð *Èð *ð *ð *ð *ð *ð *r+   r-   c                   ón   — e Zd Zdedefd„Z	 ddddee         dee         fd	„Zddd
ee         ddfd„Z	dS )ÚMultiValuePropertyr.   r/   c                 ó"   — || _         || _        d S r1   r2   r4   s      r%   r6   zMultiValueProperty.__init__}   r7   r+   Nr8   r   r9   r   c                 ór   — t                                |j                             | j        d¦  «        ¦  «        S ©NÚ )r   Úmysplitr;   r<   r.   r=   s      r%   r>   zMultiValueProperty.__get__�   s*   € õ ×"Ò" 3¤;§?¢?°4´8¸RÑ#@Ô#@ÑAÔAÐAr+   Úvaluesc                 óJ   — d                      |¦  «        |j        | j        <   d S )Nú )Újoinr;   r.   )r5   r8   rO   s      r%   rA   zMultiValueProperty.__set__†   s"   € Ø #§¢¨Ñ 0Ô 0ˆŒ�D”HÑÐÐr+   r1   )
rB   rC   rD   rE   r6   r   rF   r
   r>   rA   rG   r+   r%   rI   rI   |   s¬   € € € € € ð˜Cð  cð ð ð ð ð
 CGðBð BØ&ðBØ19¸$´ðBà	ˆcŒðBð Bð Bð Bð
1Ð.ð 1¸¸S¼	ð 1Àdð 1ð 1ð 1ð 1ð 1ð 1r+   rI   Úpropc                 ó   — | S r1   rG   )rS   s    r%   ÚDeprecatedPropertyrU   Š   s   € Ø€Kr+   c                   ó”  — e Zd Zdeeej        ef                  defd„Zde	de	fd„Z
 edd¦  «        Z ed	d
¦  «        Z e ed	d
¦  «        ¦  «        Z edd¦  «        Z e edd¦  «        ¦  «        Z edd¦  «        Z e edd¦  «        ¦  «        Z edd¦  «        Zedefd„¦   «         Zej        deddfd„¦   «         Zedee         fd„¦   «         Zej        dee         ddfd„¦   «         Zedefd„¦   «         Zej        deddfd„¦   «         Zedefd„¦   «         Zedefd„¦   «         Zdefd„Zdefd„Zdeddfd„ZdS ) r   r;   Úfilec                 óø   — |€t          j        d¦  «        | _        n6t          |t          ¦  «        rt          j        |¦  «        | _        n|| _        t	          | j        ¦  «        | _        || _        d | _        d S rL   )r   ÚSectionr;   Ú
isinstancerE   Ú_linerW   Útemplate)r5   r;   rW   s      r%   r6   zDeb822SourceEntry.__init__�   si   € Øˆ?Ý"œ?¨2Ñ.Ô.ˆDŒLˆLÝ˜¥Ñ%Ô%ð 	#Ý"œ?¨7Ñ3Ô3ˆDŒLˆLà"ˆDŒLå˜œÑ&Ô&ˆŒ
ØˆŒ	Ø,0ˆŒˆˆr+   Úotherr   c                 óü   — | j         |j         k    ol| j        |j        k    o\| j        oU| j                             d¦  «        |j                             d¦  «        k    o| j        |j        k    o| j        |j        k    S ©z+equal operator for two sources.list entriesú/©ÚdisabledrF   Úurir   ÚdistÚcomps©r5   r]   s     r%   Ú__eq__zDeb822SourceEntry.__eq__›   sƒ   € ð ŒM˜Uœ^Ò+ð *Ø”	˜UœZÒ'ð*à”ð*ð ”—’ Ñ$Ô$¨¬	×(8Ò(8¸Ñ(=Ô(=Ò=ð*ð ”	˜UœZÒ'ð	*ð
 ”
˜eœkÒ)ð	
r+   ÚArchitectureszThe list of architecturesÚTypeszThe list of typesÚURIszURIs in the sourceÚSuiteszSuites in the sourceÚ
ComponentszComponents in the sourcec                 ó   — | j         j        S )ú1Legacy attribute describing the paragraph header.©r;   Úheader©r5   s    r%   ÚcommentzDeb822SourceEntry.comment°   s   € ð Œ|Ô"Ð"r+   rr   Nc                 ó   — || j         _        dS )rn   Nro   )r5   rr   s     r%   rr   zDeb822SourceEntry.commentµ   s   € ð &ˆŒÔÐÐr+   c                 ód   — 	 t          j        | j        d         ¦  «        S # t          $ r Y d S w xY w)NÚTrusted)Úapt_pkgÚstring_to_boolr;   ÚKeyErrorrq   s    r%   ÚtrustedzDeb822SourceEntry.trustedº   sA   € ð	ÝÔ)¨$¬,°yÔ*AÑBÔBÐBøÝð 	ð 	ð 	Ø�4�4ð	øøøs   ‚! ¡
/®/r?   c                 ó^   — |€	 | j         d= d S # t          $ r Y d S w xY w|rdnd| j         d<   d S )Nru   ÚyesÚno©r;   rx   ©r5   r?   s     r%   ry   zDeb822SourceEntry.trustedÁ   s[   € àˆ=ðØ”L Ð+Ð+Ð+øÝð ð ð Ø��ðøøøð 05Ð&> e e¸$ˆDŒL˜Ñ#Ð#Ð#s   „ Ž
›c                 ó^   — t          j        | j                             dd¦  «        ¦  «         S )zCheck if Enabled: no is set.ÚEnabledr{   )rv   rw   r;   r<   rq   s    r%   rb   zDeb822SourceEntry.disabledË   s*   € õ Ô)¨$¬,×*:Ò*:¸9ÀeÑ*LÔ*LÑMÔMÐMÐMr+   c                 óV   — |rd| j         d<   d S 	 | j         d= d S # t          $ r Y d S w xY w)Nr|   r€   r}   r~   s     r%   rb   zDeb822SourceEntry.disabledÐ   sS   € àð 	Ø&*ˆDŒL˜Ñ#Ð#Ð#ðØ”L Ð+Ð+Ð+øÝð ð ð Ø��ðøøøs   � š
(§(c                 ó   — | j          S )z7A section is invalid if it doesn't have proper entries.)r;   rq   s    r%   ÚinvalidzDeb822SourceEntry.invalidÚ   s   € ð ”<ÐÐr+   c                 ó   — | j         S )z The entire (original) paragraph.)r[   rq   s    r%   ÚlinezDeb822SourceEntry.lineß   s   € ð ŒzÐr+   c                 óN   — |                       ¦   «                              ¦   «         S r1   ©rE   Ústriprq   s    r%   Ú__str__zDeb822SourceEntry.__str__ä   s   € Ø�xŠx‰zŒz×ÒÑ!Ô!Ð!r+   c                 ó*   — t          | j        ¦  «        S )z(Section as a string, newline terminated.)rE   r;   rq   s    r%   rE   zDeb822SourceEntry.strç   s   € å�4”<Ñ Ô Ð r+   Úenabledc                 ó   — | | _         dS )z.Deprecated (for deb822) accessor for .disabledN)rb   )r5   r‹   s     r%   Úset_enabledzDeb822SourceEntry.set_enabledë   s   € à#˜ˆŒˆˆr+   ) rB   rC   rD   r   r   r   rY   rE   r6   r   rg   rI   ÚarchitecturesÚtypesrU   r-   rF   Úurisrc   Úsuitesrd   re   Úpropertyrr   ÚsetterÚboolry   rb   rƒ   r…   r‰   r�   rG   r+   r%   r   r   Ž   sÝ  € € € € € ð
1 ¨¨w¬ÀÐ/CÔ)DÔ Eð 
1ÈSð 
1ð 
1ð 
1ð 
1ð

˜Cð 

 Cð 

ð 

ð 

ð 

ð 'Ð& Ð8SÑTÔT€MØÐ˜wÐ(;Ñ<Ô<€EØÐÐ1Ð1°'Ð;NÑOÔOÑPÔP€DØÐ˜fÐ&:Ñ;Ô;€DØ
Ð
Ð0Ð0°Ð9MÑNÔNÑ
OÔ
O€CØÐ Ð*@ÑAÔA€FØÐÐ1Ð1°(Ð<RÑSÔSÑTÔT€DØÐ˜|Ð-GÑHÔH€Eàð#˜ð #ð #ð #ñ „Xð#ð „^ð&˜sð & tð &ð &ð &ñ „^ð&ð ð˜ $œð ð ð ñ „Xðð „^ð?˜X dœ^ð ?°ð ?ð ?ð ?ñ „^ð?ð ðN˜$ð Nð Nð Nñ „XðNð „_ð˜dð  tð ð ð ñ „_ðð ð ˜ð  ð  ð  ñ „Xð ð ð�cð ð ð ñ „Xðð"˜ð "ð "ð "ð "ð!�Sð !ð !ð !ð !ð$ 4ð $¨Dð $ð $ð $ð $ð $ð $r+   r   c                   ó¤   — e Zd ZdZddedee         fd„Zdedefd„Ze	dede
e         fd	„¦   «         Zdeddfd
„Zdeddfd„Zdefd„Zdefd„ZdS )r   zsingle sources.list entryNr…   rW   c                 óh  — d| _         d| _        d| _        g | _        d | _        d| _        d| _        g | _        d| _        || _	        |€?t          j                             d¦  «        t          j                             d¦  «        z   }|| _        |                      |¦  «         d | _        g | _        d S )NFrM   zDir::EtcúDir::Etc::sourcelist)rƒ   rb   rF   rŽ   ry   rc   rd   re   rr   r…   rv   ÚconfigÚfind_dirÚfindrW   Úparser\   Úchildren)r5   r…   rW   s      r%   r6   zSourceEntry.__init__ó   s¬   € ØˆŒØˆŒØˆŒ	Ø(*ˆÔØ'+ˆŒØˆŒØˆŒ	Ø "ˆŒ
ØˆŒØˆŒ	Øˆ<Ý”>×*Ò*¨:Ñ6Ô6½¼×9LÒ9LØ&ñ:ô :ñ ˆDð ˆŒ	Ø�
Š
�4ÑÔÐØ,0ˆŒØ+-ˆŒˆˆr+   r]   r   c                 óî   — | j         |j         k    oe| j        |j        k    oU| j                             d¦  «        |j                             d¦  «        k    o| j        |j        k    o| j        |j        k    S r_   ra   rf   s     r%   rg   zSourceEntry.__eq__  sw   € ð ŒM˜Uœ^Ò+ð *Ø”	˜UœZÒ'ð*à”—’ Ñ$Ô$¨¬	×(8Ò(8¸Ñ(=Ô(=Ò=ð*ð ”	˜UœZÒ'ð*ð ”
˜eœkÒ)ð	
r+   c                 óH  — |                       ¦   «         } g }d}d}d}t          t          | ¦  «        ¦  «        D ]À}| |         dk    r2|r"d}d}|                     |¦  «         | |         }Œ2d}|| |         z  }Œ@| |         dk    rd}|| |         z  }ŒZ|r:| |                              ¦   «         s d}|                     |¦  «         | |         }Œ–| |                              ¦   «         r|sd}Œµ|| |         z  }ŒÁt          |¦  «        dk    r|                     |¦  «         |S )z|a split() implementation that understands the sources.list
        format better and takes [] into account (for e.g. cdroms)rM   Fú[Tú]r   )rˆ   ÚrangeÚlenÚappendÚisspace)r…   ÚpiecesÚtmpÚp_foundÚspace_foundÚis         r%   rN   zSourceEntry.mysplit  sK  € ð �zŠz‰|Œ|ˆØˆØˆàˆØˆÝ•s˜4‘y”yÑ!Ô!ð 	ð 	ˆAØ�AŒw˜#Š~ˆ~Øð #Ø"'�KØ"�GØ—M’M #Ñ&Ô&Ð&Ø˜qœ'�C�Cà"�GØ˜4 œ7‘N�C�CØ�a”˜C’�Ø�Ø�t˜A”w‘��Øð 	 T¨!¤W§_¢_Ñ%6Ô%6ð 	à#�Ø—’˜cÑ"Ô"Ð"Ø˜1”g��Ø�a”—’Ñ"Ô"ð ¨7ð à"��à�t˜A”w‘��åˆs‰8Œ8�aŠ<ˆ<Ø�MŠM˜#ÑÔÐØˆr+   c                 ó  — || _         |                     ¦   «         }|dk    s|dk    r	d| _        dS |d         dk    rRd| _        |dd…                              ¦   «                              ¦   «         }|d         dvr	d| _        dS |dd…         }|                     d¦  «        }|dk    r||dz   d…         | _        |d|…         }|                      |¦  «        }t          |¦  «        dk     r	d| _        dS |d                              ¦   «         | _	        | j	        d	vr	d| _        dS |d                              ¦   «         d         d
k    r¸| 
                    d¦  «                             d¦  «                             ¦   «         }|D ]{}	 |                     dd¦  «        \  }}|dk    r|                     d¦  «        | _        Œ=|dk    rt          j        |¦  «        | _        Œ]d| _        Œe# t          $ r
 d| _        Y Œxw xY w|d                              ¦   «         | _        t          | j        ¦  «        dk     rd| _        |d                              ¦   «         | _        t          |¦  «        dk    r|dd…         | _        dS g | _        dS )zXparse a given sources.list (textual) line and break it up
        into the field we haverM   ú#TNr   r   )Úrpmúrpm-srcÚdebúdeb-srcé   )r®   r¯   r¬   r­   rŸ   z[]ú=Úarchú,ry   é   )r…   rˆ   rƒ   rb   r    rš   rr   rN   r¢   rF   ÚpoprŽ   rv   rw   ry   Ú	Exceptionrc   rd   re   )r5   r…   r¥   r©   ÚoptionsÚoptionr.   r?   s           r%   r›   zSourceEntry.parse7  s�  € ð ˆŒ	Ø�zŠz‰|Œ|ˆà�2Š:ˆ:˜ š˜ØˆDŒLØˆFØ�Œ7�cŠ>ˆ>Ø ˆDŒMØ˜!˜"˜"”X—^’^Ñ%Ô%×+Ò+Ñ-Ô-ˆFà˜!”9Ð DÐDÐDØ#�”Ø�à˜A˜B˜B”x�à�IŠI�c‰NŒNˆØˆqŠ5ˆ5Ø  A¡  œ=ˆDŒLØ˜˜˜”8ˆDà—’˜dÑ#Ô#ˆåˆv‰;Œ;˜Š?ˆ?ØˆDŒLØˆFà˜1”I—O’OÑ%Ô%ˆŒ	àŒ9Ð@Ð@Ð@ØˆDŒLØˆFà�!Œ9�?Š?ÑÔ˜QÔ 3Ò&Ð&Ø—j’j ‘m”m×)Ò)¨$Ñ/Ô/×5Ò5Ñ7Ô7ˆGØ!ð ,ð ,�ð
,Ø!'§¢¨c°1Ñ!5Ô!5‘J�C˜ð ˜f’}�}Ø-2¯[ª[¸Ñ-=Ô-=˜Ô*Ð*Ø 	Ò)Ð)Ý'.Ô'=¸eÑ'DÔ'D˜œ˜à'+˜œ˜øõ !ð (ð (ð (Ø#'�D”L�L�Lð(øøøð ˜!”9—?’?Ñ$Ô$ˆŒÝˆtŒx‰=Œ=˜1ÒÐØˆDŒLð ˜1”I—O’OÑ%Ô%ˆŒ	Ýˆv‰;Œ;˜Š?ˆ?à   œˆDŒJˆJˆJàˆDŒJˆJˆJs   ÆG-Ç-HÈ HÚ	new_valuec                 óè   — | | _         |r3| j                             ¦   «                              d¦  «        | _        dS | j                             ¦   «         d         dk    rd| j        z   | _        dS dS )z!set a line to enabled or disabledr«   r   N)rb   r…   Úlstriprˆ   )r5   r¹   s     r%   r�   zSourceEntry.set_enabledw  sq   € à%˜ˆŒàð 	,Øœ	×(Ò(Ñ*Ô*×1Ò1°#Ñ6Ô6ˆDŒIˆIˆIð Œy�ŠÑ Ô  Ô# sÒ*Ð*Ø $¤)™O�”	�	�	ð +Ð*r+   c                 óN   — |                       ¦   «                              ¦   «         S )zdebug helperr‡   rq   s    r%   r‰   zSourceEntry.__str__‚  s   € à�xŠx‰zŒz×ÒÑ!Ô!Ð!r+   c                 ó  — | j         r| j        S d}| j        rd}|| j        z  }| j        r5| j        �.|dd                     | j        ¦  «        ›d| j        rdnd›d	�z  }n@| j        �|d
| j        rdndz  z  }n'| j        r |dd                     | j        ¦  «        z  z  }|d| j        ›d| j        ›�z  }t          | j
        ¦  «        dk    r |dd                     | j
        ¦  «        z   z  }| j        dk    r|d| j        z   z  }|dz  }|S )z!return the current line as stringrM   z# Nz [arch=r³   z	 trusted=r{   r|   r    z [trusted=%s]z
 [arch=%s]rQ   r   z #ú
)rƒ   r…   rb   rF   rŽ   ry   rR   rc   rd   r¢   re   rr   )r5   r…   s     r%   rE   zSourceEntry.str†  sM  € àŒ<ð 	Ø”9ÐØˆØŒ=ð 	ØˆDà�”	ÑˆàÔð 	@ $¤,Ð":ØˆDØ—’˜Ô+Ñ,Ô,Ð,Ð,ØœÐ/��¨4Ð/Ð/ðñ ˆDˆDð Œ\Ð%Ø�O°´Ð'F u uÀ$ÑGÑGˆDˆDØÔð 	@Ø�L 3§8¢8¨DÔ,>Ñ#?Ô#?Ñ?Ñ?ˆDØˆ˜DœH˜H˜H d¤i iÐ0Ñ0ˆÝˆtŒz‰?Œ?˜QÒÐØ�C˜#Ÿ(š( 4¤:Ñ.Ô.Ñ.Ñ.ˆDØŒ<˜2ÒÐØ�D˜4œ<Ñ'Ñ'ˆDØ�‰ˆØˆr+   r1   )rB   rC   rD   r3   rE   r   r6   r   rg   Ústaticmethodr
   rN   r›   r”   r�   r‰   rG   r+   r%   r   r   ð   s  € € € € € Ø#Ð#ð.ð .˜Sð .¨°¬ð .ð .ð .ð .ð(
˜Cð 
 Cð 
ð 
ð 
ð 
ð ð#�cð #˜d 3œið #ð #ð #ñ „\ð#ðJ>˜#ð > $ð >ð >ð >ð >ð@	, Tð 	,¨dð 	,ð 	,ð 	,ð 	,ð"˜ð "ð "ð "ð "ð�Sð ð ð ð ð ð r+   r   c                   ó"   — e Zd ZdZdedefd„ZdS )r   za Matcher that does nothingr&   r   c                 ó   — dS )NTrG   )r5   r&   s     r%   ÚmatchzNullMatcher.match¨  s   € Øˆtr+   N)rB   rC   rD   r3   ÚAnySourceEntryr”   rÂ   rG   r+   r%   r   r   ¥  s<   € € € € € Ø%Ð%ð�~ð ¨$ð ð ð ð ð ð r+   r   c                   óˆ  — e Zd ZdZ	 	 d%ddœdededefd	„Zd&d„Zd
ee	         fd„Z
dee	gef         ded
ee	         fd„Zdddg fdedededee         dededee         dee         d
e	fd„Zded
dfd„Zded
dfd„Zd'dee         d
efd „Zded
dfd!„Zd&d"„Zd#ee	         d
eee	         eeee	         f         f         fd$„ZdS )(r   z6represents the full sources.list + sources.list.d fileTú /usr/share/python-apt/templates/F)Údeb822ÚwithMatcherÚmatcherPathrÆ   c                ó¢   — g | _         |  |rt          |¦  «        | _        nt          ¦   «         | _        || _        |                      ¦   «          d S r1   )r(   r   Úmatcherr   rÆ   Úrefresh)r5   rÇ   rÈ   rÆ   s       r%   r6   zSourcesList.__init__¯  sM   € ð +-ˆŒ	ØÐ<Øð 	)Ý-¨kÑ:Ô:ˆDŒLˆLå&™=œ=ˆDŒLØˆŒØ�Š‰Œˆˆˆr+   r   Nc                 ó‚  — g | _         t          j                             d¦  «        }t          j                             |¦  «        r|                      |¦  «         t          j                             d¦  «        }t          j                             |¦  «        r{t	          j	        |¦  «        D ]f}| j
        r|                     d¦  «        s|                     d¦  «        r3|                      t          j                             ||¦  «        ¦  «         Œg| j         D ]#}|j        s| j                             |¦  «         Œ$dS )z update the list of known entriesr—   úDir::Etc::sourcepartsú.sourcesz.listN)r(   rv   r˜   Ú	find_fileÚosÚpathÚexistsÚloadr™   ÚlistdirrÆ   ÚendswithrR   rƒ   rÊ   rÂ   )r5   rW   ÚpartsdirÚsources       r%   rË   zSourcesList.refresh¿  s!  € àˆŒ	åŒ~×'Ò'Ð(>Ñ?Ô?ˆÝŒ7�>Š>˜$ÑÔð 	Ø�IŠI�d‰OŒOˆOå”>×*Ò*Ð+BÑCÔCˆÝŒ7�>Š>˜(Ñ#Ô#ð 	<Ýœ
 8Ñ,Ô,ð <ð <�Ø”Kð < D§M¢M°*Ñ$=Ô$=ð <À$Ç-Â-ØñCô Cð <ð —I’I�bœgŸlšl¨8°TÑ:Ô:Ñ;Ô;Ð;øà”ið 	+ð 	+ˆFØ”>ð +Ø”×"Ò" 6Ñ*Ô*Ð*øð	+ð 	+r+   c              #   ó&   K  — | j         D ]}|V — ŒdS )zGsimple iterator to go over self.list, returns SourceEntry
        typesN)r(   )r5   Úentrys     r%   Ú__iter__zSourcesList.__iter__Ó  s.   è è € ð ”Yð 	ð 	ˆEØˆKˆKˆKˆKð	ð 	r+   Ú
predicatesÚattrsc              /   ó:  ‡‡K  — ‰                      dd ¦  «        }| j        D ]xŠ|r9‰j        r2|                     d¦  «        ‰j                             d¦  «        k    rŒ=t	          ˆˆfd„‰D ¦   «         ¦  «        rt	          ˆfd„|D ¦   «         ¦  «        r‰V — Œyd S )Nrc   r`   c              3   óL   •K  — | ]}t          ‰|¦  «        ‰|         k    V — Œd S r1   )Úgetattr)Ú.0r.   rÜ   r×   s     €€r%   ú	<genexpr>z%SourcesList.__find.<locals>.<genexpr>á  s6   øè è € ÐGÐG¸#•7˜6 3Ñ'Ô'¨5°¬:Ò5ÐGÐGÐGÐGÐGÐGr+   c              3   ó.   •K  — | ]} |‰¦  «        V — Œd S r1   rG   )rà   Ú	predicater×   s     €r%   rá   z%SourcesList.__find.<locals>.<genexpr>á  sF   øè è € ð Pð PØ&/�	�	˜&Ñ!Ô!ðPð Pð Pð Pð Pð Pr+   )rµ   r(   rc   r   Úall)r5   rÛ   rÜ   rc   r×   s     ` @r%   Ú__findzSourcesList.__findÚ  sä   øøè è € ð �iŠi˜˜tÑ$Ô$ˆØ”ið 	ð 	ˆFØð �v”zð  c§j¢j°¡o¤o¸¼×9JÒ9JÈ3Ñ9OÔ9OÒ&OÐ&OØÝÐGÐGÐGÐGÐGÀÐGÑGÔGÑGÔGð ÍCð Pð Pð Pð PØ3=ðPñ Pô Pñ Mô Mð ð ���øð	ð 	r+   rM   éÿÿÿÿrF   rc   rd   Ú
orig_compsrr   ÚposrW   rŽ   c	                 óˆ  ‡— |                      ¦   «         }|                     d¦  «        }	|	r|dd…                              ¦   «         }t          ‰¦  «        Š|dd…         }
|                      ˆfd„|	d|||¬¦  «        }|D ]?}|
D ]:}||j        v r/|
|
                     |¦  «        = t          |
¦  «        dk    r|c c S Œ;Œ@|                      ˆfd„d|||¬	¦  «        }|D ]‹}|j        |	k    rEt          |j        ¦  «        t          |
¦  «        k    rt          |j        |
z   ¦  «        |_        |c S |j        r2|	s0t          |j        ¦  «        t          |
¦  «        k    rd|_        |c S ŒŒ|�o| 
                    d
¦  «        rZt          d|¬¦  «        }|g|_        |g|_        |g|_        |
|_        ‰rt          ‰¦  «        |_        ||j        _        |	|_        nŽ|	rdnd|‰rdd                     ‰¦  «        z  nd||g}|                     |
¦  «         |r|                     d|z   ¦  «         d                     d„ |D ¦   «         ¦  «        dz   }t-          |¦  «        }|�||_        | j                             |¦  «         |dk     r| j                             |¦  «         n| j                             ||¦  «         |S )z¨
        Add a new source to the sources.list.
        The method will search for existing matching repos and will try to
        reuse them as far as possible
        r«   r   Nc                 ó4   •— t          | j        ¦  «        ‰k    S r1   ©r)   rŽ   ©r&   rŽ   s    €r%   ú<lambda>z!SourcesList.add.<locals>.<lambda>   ó   ø€ •c˜!œ/Ñ*Ô*¨mÒ;€ r+   F)rb   rƒ   rF   rc   rd   r   c                 ó4   •— t          | j        ¦  «        ‰k    S r1   rë   rì   s    €r%   rí   z!SourcesList.add.<locals>.<lambda>  rî   r+   )rƒ   rF   rc   rd   rÎ   )rW   rM   z	[arch=%s]r³   rQ   c              3   ó   K  — | ]}|¯|V — Œ	d S r1   rG   )rà   Úparts     r%   rá   z"SourcesList.add.<locals>.<genexpr><  s'   è è € Ð;Ð; T°dÐ;˜DÐ;Ð;Ð;Ð;Ð;Ð;r+   r¾   )rˆ   Ú
startswithr»   r)   Ú_SourcesList__findre   r"   r¢   rb   r*   rÕ   r   r�   r�   r‘   r(   rŽ   r;   rp   rR   Úextendr£   r   rW   rÊ   rÂ   Úinsert)r5   rF   rc   rd   rç   rr   rè   rW   rŽ   rb   re   Úsourcesr×   Únew_compÚ	new_entryÚpartsr…   s           `        r%   ÚaddzSourcesList.addæ  s>  ø€ ð" �zŠz‰|Œ|ˆØ—?’? 3Ñ'Ô'ˆØð 	%Ø˜˜˜”8—?’?Ñ$Ô$ˆDÝ˜MÑ*Ô*ˆð ˜1˜1˜1”ˆØ—+’+Ø;Ð;Ð;Ð;ØØØØØð ñ 
ô 
ˆð ð 	&ð 	&ˆFØ!ð &ð &�Ø˜vœ|Ð+Ð+ð ˜eŸkšk¨(Ñ3Ô3Ð4Ý˜5‘z”z Q’�Ø%˜˜˜˜˜øð&ð —+’+Ø;Ð;Ð;Ð;ØØØØð ñ 
ô 
ˆð ð 	"ð 	"ˆFØŒ (Ò*Ð*õ �v”|Ñ$Ô$­¨E©
¬
Ò2Ð2Ý#'¨¬°uÑ(<Ñ#=Ô#=�F”LØ���Ø”ð "¨ð "å�v”|Ñ$Ô$­¨E©
¬
Ò2Ð2Ø&+�F”OØ!�M�M�Møð Ð §¢¨jÑ 9Ô 9ÐÝ)¨$°TÐ:Ñ:Ô:ˆIØ#˜fˆIŒOØ!˜UˆIŒNØ $˜vˆIÔØ#ˆIŒOØð >Ý*.¨}Ñ*=Ô*=�	Ô'Ø'.ˆIÔÔ$Ø!)ˆIÔÐð  Ð'�� RØØ;HÐP�˜sŸxšx¨Ñ6Ô6Ñ6Ð6ÈbØØðˆEð �LŠL˜ÑÔÐØð ,Ø—’˜S 7™]Ñ+Ô+Ð+Ø—8’8Ð;Ð;¨UÐ;Ñ;Ô;Ñ;Ô;¸dÑBˆDå# DÑ)Ô)ˆIØÐØ!%�	”àŒ×Ò˜9Ñ%Ô%Ð%Ø�Š7ˆ7ØŒI×Ò˜YÑ'Ô'Ð'Ð'àŒI×Ò˜S )Ñ,Ô,Ð,ØÐr+   Úsource_entryc                 ó:   — | j                              |¦  «         dS )z0remove the specified entry from the sources.listN)r(   Úremove)r5   rû   s     r%   rý   zSourcesList.removeI  s   € àŒ	×Ò˜Ñ&Ô&Ð&Ð&Ð&r+   Ú
backup_extc                 óÜ  — t           j                             d¦  «        }t          j                             ||z   ¦  «        r7t          j                             |¦  «        rt          j        ||z   |¦  «         t           j                             d¦  «        }t          j	        d|z  ¦  «        D ]<}t          j                             ||z   ¦  «        rt          j        ||z   |¦  «         Œ=dS )z8restore sources.list files based on the backup extensionr—   rÍ   z%s/*N)
rv   r˜   rÏ   rÐ   rÑ   rÒ   ÚshutilÚcopyr™   Úglob)r5   rþ   rW   rÖ   s       r%   Úrestore_backupzSourcesList.restore_backupM  sÐ   € åŒ~×'Ò'Ð(>Ñ?Ô?ˆÝŒ7�>Š>˜$ Ñ+Ñ,Ô,ð 	1µ´·²ÀÑ1EÔ1Eð 	1ÝŒK˜˜zÑ)¨4Ñ0Ô0Ð0å”>×*Ò*Ð+BÑCÔCˆÝ”I˜f xÑ/Ñ0Ô0ð 	5ð 	5ˆDÝŒw�~Š~˜d ZÑ/Ñ0Ô0ð 5Ý”˜D :Ñ-¨tÑ4Ô4Ð4øð	5ð 	5r+   c                 ó  — t          ¦   «         }|€t          j        d¦  «        }| j        D ]R}|j        |vrGt
          j                             |j        ¦  «        r#t          j	        |j        |j        ›|›�¦  «         ŒS|S )z€make a backup of the current source files, if no backup extension
        is given, the current date/time is used (and returned)Nz%y%m%d.%H%M)
r)   ÚtimeÚstrftimer(   rW   rÐ   rÑ   rÒ   r   r  )r5   rþ   Úalready_backupedr×   s       r%   ÚbackupzSourcesList.backupX  s   € õ +.©%¬%ÐØÐÝœ }Ñ5Ô5ˆJØ”ið 	Mð 	MˆFØŒ{Ð"2Ð2Ð2µr´w·~²~ÀfÄkÑ7RÔ7RÐ2Ý”˜FœK°6´;°;À
À
Ð)KÑLÔLÐLøØÐr+   c                 óÈ  — 	 t          |d¦  «        5 }|                     d¦  «        r@t          j        |¦  «        D ]*}| j                             t          ||¦  «        ¦  «         Œ+n/|D ],}t          ||¦  «        }| j                             |¦  «         Œ-ddd¦  «         dS # 1 swxY w Y   dS # t          $ r&}t          j
        d|›d|›d�¦  «         Y d}~dS d}~ww xY w)z(re)load the current sourcesÚrrÎ   Nzcould not open file 'z': r¾   )ÚopenrÕ   r   ÚFiler(   r£   r   r   r¶   ÚloggingÚwarning)r5   rW   Úfr;   r…   r×   Úexcs          r%   rÓ   zSourcesList.loadc  s]  € ð
	LÝ�d˜C‘”ð 1 AØ—=’= Ñ,Ô,ð 1Ý#*¤<°¡?¤?ð Kð K˜Øœ	×(Ò(Õ):¸7ÀDÑ)IÔ)IÑJÔJÐJÐJðKð !"ð 1ð 1˜Ý!,¨T°4Ñ!8Ô!8˜Øœ	×(Ò(¨Ñ0Ô0Ð0Ð0ð1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1ð 1ð 1øõ ð 	Lð 	Lð 	LÝŒOˆOÀÀÀÀcÀcÀcÐJÑKÔKÐKÐKÐKÐKÐKÐKÐKøøøøð	Løøøs;   ‚B1 ’BB$ÂB1 Â$B(Â(B1 Â+B(Â,B1 Â1
C!Â;CÃC!c                 óî  — i }t          | j        ¦  «        dk    r`t          j                             d¦  «        }d}t          |d¦  «        5 }|                     |¦  «         ddd¦  «         n# 1 swxY w Y   dS 	 | j        D ]•}|j        |vrt          |j        d¦  «        ||j        <   n:|j                             d¦  «        r ||j                                      d¦  «         ||j                                      | 	                    ¦   «         ¦  «         Œ–	 | 
                    ¦   «         D ]}|                     ¦   «          ŒdS # | 
                    ¦   «         D ]}|                     ¦   «          Œw xY w)zsave the current sourcesr   r—   z ## See sources.list(5) for more information, especialy
# Remember that you can only use http, ftp or file URIs
# CDROMs are managed through the apt-cdrom tool.
ÚwNrÎ   r¾   )r¢   r(   rv   r˜   rÏ   r  ÚwriterW   rÕ   rE   rO   Úclose)r5   ÚfilesrÑ   rp   r  r×   s         r%   ÚsavezSourcesList.saveq  s­  € à-/ˆåˆtŒy‰>Œ>˜QÒÐÝ”>×+Ò+Ð,BÑCÔCˆDðEð õ �d˜C‘”ð   AØ—’˜‘”�ð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  àˆFð		Øœ)ð 7ð 7�Ø”; eÐ+Ð+Ý)-¨f¬k¸3Ñ)?Ô)?�E˜&œ+Ñ&Ð&Ø”[×)Ò)¨*Ñ5Ô5ð 3Ø˜&œ+Ô&×,Ò,¨TÑ2Ô2Ð2Ø�f”kÔ"×(Ò(¨¯ª©¬Ñ6Ô6Ð6Ð6ð7ð —\’\‘^”^ð ð �Ø—’‘	”	�	�	ðð ø�U—\’\‘^”^ð ð �Ø—’‘	”	�	�	ðøøøs   ÁA.Á.A2Á5A2Á<BE Å-E4Úsources_listc                 ó  — g }i }|D ]v}|j         €Œ
|j         j        r.|j         }||vrg ||<   ||         }|                     |¦  «         ŒDt          |j         j        ¦  «        dk    r|                     |¦  «         Œw||fS )z5get all parent and child channels in the sources listNr   )r\   Úchildr£   r¢   rœ   )r5   r  ÚparentsÚused_child_templatesr×   r.   Útemps          r%   Úcheck_for_relationszSourcesList.check_for_relationsŒ  s°   € ð ˆØEGÐØ"ð 	+ð 	+ˆFàŒÐ&Øð ŒÔ$ð 	+Ø”o�ØÐ2Ð2Ð2Ø02Ð(¨Ñ-Ø+¨CÔ0�Ø—’˜FÑ#Ô#Ð#Ð#õ �v”Ô/Ñ0Ô0°1Ò4Ð4Ø—N’N 6Ñ*Ô*Ð*øð Ð-Ð.Ð.r+   )TrÅ   )r   Nr1   )rB   rC   rD   r3   r”   rE   r6   rË   r	   rÃ   rÚ   r   r   ró   r
   Úintr   r   rú   r   rý   r  r  rÓ   r  r   r   r   r  rG   r+   r%   r   r   ¬  sd  € € € € € Ø@Ð@ð !Ø=ðð
 ðð ð àðð ðð
 ðð ð ð ð +ð +ð +ð +ð(˜( >Ô2ð ð ð ð ð
Ø# ^Ð$4°dÐ$:Ô;ð
ØFIð
à	�.Ô	!ð
ð 
ð 
ð 
ð$ ØØ"Ø')ðað aàðað ðað ð	að
 ˜”Iðað ðað ðað �sŒmðað   ”}ðað 
ðað að að aðF' ;ð '°4ð 'ð 'ð 'ð 'ð	5¨ð 	5°ð 	5ð 	5ð 	5ð 	5ð	ð 	 ¨#¤ð 	¸#ð 	ð 	ð 	ð 	ðL˜ð L ð Lð Lð Lð Lðð ð ð ð6/Ø$ ^Ô4ð/à	ˆt�NÔ# T¨(°D¸Ô4HÐ*HÔ%IÐIÔ	Jð/ð /ð /ð /ð /ð /r+   r   c                   ó.   — e Zd ZdZdefd„Zdedefd„ZdS )r   ztmatcher class to make a source entry look nice
    lots of predefined matchers to make it i18n/gettext friendly
    rÈ   c                 ó@  — g | _         t          j        d|z  ¦  «        }|D ]|}t          j                             |¦  «        }|                     d¦  «        }|d|…         }t          ||¬¦  «        }|j         D ]#}|j        �| j                              |¦  «         Œ$Œ}d S )Nz	%s/*.infoz.infor   )Úbase_dir)	Ú	templatesr  rÐ   rÑ   Úbasenamerš   r   Ú	match_urir£   )r5   rÈ   Ú
spec_filesr  r©   rd   r\   s          r%   r6   zSourceEntryMatcher.__init__¬  s¬   € Ø)+ˆŒå”Y˜{¨[Ñ8Ñ9Ô9ˆ
Øð 	4ð 	4ˆAÝ”× Ò  Ñ#Ô#ˆAØ—’�w‘”ˆAØ�!�A�#”ˆAÝ˜A¨Ð4Ñ4Ô4ˆDØ œNð 4ð 4�ØÔ%Ð1Ø”N×)Ò)¨(Ñ3Ô3Ð3øð4ð 	ˆr+   r×   r   c                 óà  — d}| j         D ]ã}|j        �|j        €Œ|j        �y|j        �r|j        �k|j        �dt          j        |j        |j        ¦  «        rEt          j        |j        |j        ¦  «        r&|j        |j        k    s|j        dk    rd}||_	         nS| 
                    |j        ¦  «        r8|j        �1|j        �*t          j        |j        |j        ¦  «        rd}||_	         nŒä|S )z%Add a matching template to the sourceFNr®   T)r"  rc   rd   r$  Ú
match_nameÚreÚsearchrÂ   rF   r\   r   )r5   r×   Úfoundr\   s       r%   rÂ   zSourceEntryMatcher.matchº  s  € àˆØœð 	ð 	ˆHØŒzÐ! V¤[Ð%8ØàÔ"Ð.ØÔ'Ð3Ø”JÐ*Ø”KÐ+Ý”I˜hÔ0°&´*Ñ=Ô=ð ,å”H˜XÔ0°&´+Ñ>Ô>ð ,ð ” ¤Ò-Ð-°´À%Ò1GÐ1Gà�Ø"*�”Ø�à×"Ò" 6¤:Ñ.Ô.ðàÔ'Ð3Ø”KÐ+Ý”H˜XÔ0°&´+Ñ>Ô>ð ,ð �Ø"*�”Ø�øØˆr+   N)	rB   rC   rD   r3   rE   r6   rÃ   r”   rÂ   rG   r+   r%   r   r   §  s[   € € € € € ðð ð Cð ð ð ð ð˜Nð ¨tð ð ð ð ð ð r+   r   Ú__main__zentry %sz!http://archive.ubuntu.com/ubuntu/z$http://de.archive.ubuntu.com/ubuntu/zis_mirror(): %sz http://archive.ubuntu.com/ubuntuz#http://de.archive.ubuntu.com/ubuntu)3Ú
__future__r   r   r  Úior  Úos.pathrÐ   r(  r   r  Útypingr   r   r   r   r	   r
   r   r   r   r   rv   Údistinfor   r   rM   r   r   Ú__all__rE   r”   r   r*   r’   r-   rI   rU   r   r   rÃ   Úobjectr   r   r   rB   Úinit_configrö   rÙ   ÚinfoÚmirrorrG   r+   r%   ú<module>r6     sç  ðð4 7Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6à €€€Ø 	€	€	€	Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð ð €GˆC�L„L€ðð ð €ð˜#ð ¨Cð °Dð ð ð ð ð:ˆH�QŒKð ˜D œGð ð ð ð ð*ð *ð *ð *ð *˜(ñ *ô *ð *ð"1ð 1ð 1ð 1ð 1˜ñ 1ô 1ð 1ð˜Qð  1ð ð ð ð ð_$ð _$ð _$ð _$ð _$ñ _$ô _$ð _$ðDoð oð oð oð oñ oô oð oðd �{Ð$5Ð5Ô6€ðð ð ð ð �&ñ ô ð ðx/ð x/ð x/ð x/ð x/�&ñ x/ô x/ð x/ðv1ð 1ð 1ð 1ð 1˜ñ 1ô 1ð 1ðj ˆzÒÐØ€GÔÑÔÐØˆk‰mŒm€Gàð /ð /ˆØˆŒ�Z %§)¢)¡+¤+Ñ-Ñ.Ô.Ð.Ð.ð ˆYØ+Ð-Sñô €Fð €G„LÐ" VÑ+Ñ,Ô,Ð,à€G„LØˆ	Ø.Ð0Vñ	
ô 	
ñô ð ð
 €G„LØˆ	Ø/Ð1Vñ	
ô 	
ñô ð ð ð ð% Ðr+   