Ë
    + ƒhí’  ã                   ó  — 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 dlmZmZmZmZmZ d dlZddlmZ ddlmZ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# G d„ de!ee   «      Z$dedefd„Z%d+d„Z& G d„ d«      Z' G d„ d«      Z( G d„ d«      Z)ee)e'f   Z*ee)e'e(f   Z+ G d„ d«      Z, G d „ d!«      Z- G d"„ d#«      Z.e/d$k(  r“ ej`                  «         e-«       Z1e1D ]%  Z2 ejf                  d%e2j9                  «       z  «       Œ'  ed&d'«      Z4 ejf                  d(e4z  «        ejf                   ed)d'«      «        ejf                   ed&d*«      «       yy),é    N)ÚCallableÚIterableÚIterator)ÚAnyÚGenericÚOptionalÚTypeVarÚUnioné   )Ú_deb822)ÚDistInfoÚTemplateÚT)Ú	is_mirrorÚDeb822SourceEntryÚSourceEntryÚNullMatcherÚSourcesListÚSourceEntryMatcherÚ
master_uriÚcompare_uriÚreturnc                 ó  — |j                  d«      }| j                  d«      } || k(  ry	 |j                  d«      d   }| j                  d«      d   }d|v r||j                  d«      dz   d |k(  ryy# t        $ r Y yw xY w)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   ;   s¡   € ð ×$Ñ$ TÓ*€KØ×"Ñ" 4Ó(€Jà�jÒ àðØ!×'Ñ'¨Ó-¨aÑ0ˆØ×%Ñ% dÓ+¨AÑ.ˆ
ð ˆkÑ˜k¨+×*;Ñ*;¸CÓ*@À1Ñ*DÐ*FÐGÈ:ÒUàØøô ò áðús   ª(A2 Á2	A>Á=A>Ú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&   X   s   € ô ”�A“‹<Ðó    c                   ó`   — e Zd Zdedefd„Z	 dded   dedz  dedz  fd	„Zddd
edz  ddfd„Zy)ÚSingleValuePropertyÚkeyÚdocc                 ó    — || _         || _        y ©N©r*   Ú__doc__©Úselfr*   r+   s      r!   Ú__init__zSingleValueProperty.__init__c   ó   € ØˆŒØˆ�r'   NÚobjr   Úobjtyper   c                 óV   — |€| S |j                   j                  | j                  d «      S r-   )ÚsectionÚgetr*   ©r1   r4   r5   s      r!   Ú__get__zSingleValueProperty.__get__g   s'   € ð ˆ;ØˆKØ�{‰{�‰˜tŸx™x¨Ó.Ð.r'   Úvaluec                 ój   — |€|j                   | j                  = y ||j                   | j                  <   y r-   )r7   r*   ©r1   r4   r;   s      r!   Ú__set__zSingleValueProperty.__set__n   s)   € Øˆ=Ø—‘˜DŸH™HÑ%à$)ˆC�K‰K˜Ÿ™Ò!r'   r-   )	Ú__name__Ú
__module__Ú__qualname__Ústrr2   r   Útyper:   r>   © r'   r!   r)   r)   b   sf   „ ð˜Cð  có ð
 JNñ/ØÐ/Ñ0ð/Ø;?À$¹;ð/à	ˆt‰ó/ð*Ð.ð *°s¸T±zð *Àdô *r'   r)   c                   ó`   — e Zd Zdedefd„Z	 dded   dedz  dee   fd	„Zddd
ee   ddfd„Z	y)ÚMultiValuePropertyr*   r+   c                 ó    — || _         || _        y r-   r.   r0   s      r!   r2   zMultiValueProperty.__init__v   r3   r'   Nr4   r   r5   r   c                 ó|   — |€| S t         j                  |j                  j                  | j                  d«      «      S )NÚ )r   Úmysplitr7   r8   r*   r9   s      r!   r:   zMultiValueProperty.__get__z   s2   € ð ˆ;ØˆKÜ×"Ñ" 3§;¡;§?¡?°4·8±8¸RÓ#@ÓAÐAr'   Úvaluesc                 óT   — dj                  |«      |j                  | j                  <   y )Nú )Újoinr7   r*   )r1   r4   rK   s      r!   r>   zMultiValueProperty.__set__�   s   € Ø #§¡¨Ó 0ˆ�‰�D—H‘HÒr'   r-   )
r?   r@   rA   rB   r2   r   rC   r$   r:   r>   rD   r'   r!   rF   rF   u   sj   „ ð˜Cð  có ð
 JNñBØÐ/Ñ0ðBØ;?À$¹;ðBà	ˆc‰óBð1Ð.ð 1¸¸S¹	ð 1Àdô 1r'   rF   c                   óP   — e Zd Zdefd„Z	 dded   dedz  defd„Zddd	eddfd
„Zy)ÚExplodedEntryPropertyÚparentc                 ó   — || _         y r-   )rQ   ©r1   rQ   s     r!   r2   zExplodedEntryProperty.__init__†   s	   € Øˆ�r'   Nr4   ÚExplodedDeb822SourceEntryr5   r   c                 óT   — |€| S | j                   j                  |j                   «      S r-   )rQ   r:   r9   s      r!   r:   zExplodedEntryProperty.__get__‰   s'   € ð ˆ;ØˆKØ�{‰{×"Ñ" 3§:¡:Ó.Ð.r'   r;   c                 óp   — |j                  «        | j                  j                  |j                  |«       y r-   )Ú	split_outrQ   r>   r=   s      r!   r>   zExplodedEntryProperty.__set__�   s#   € Ø�‰ŒØ�‰×Ñ˜CŸJ™J¨Õ.r'   r-   )	r?   r@   rA   r   r2   r   rC   r:   r>   rD   r'   r!   rP   rP   …   sW   „ ð˜qó ð RVñ/ØÐ7Ñ8ð/ØCGÈ$Á;ð/à	
ó/ð/Ð6ð /¸qð /ÀTô /r'   rP   Úpropc                 ó   — | S r-   rD   )rX   s    r!   ÚDeprecatedPropertyrZ   •   s   € Ø€Kr'   c                   ó   — y)z3Behaves like an expired weakref.ref, returning NoneNrD   rD   r'   r!   Ú_null_weakrefr\   ™   s   € àr'   c                   óR  — e Zd Z	 d%dej                  ez  dz  deded   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dz  fd„«       Zej.                  dedz  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d"defd#„Zd&d$„Z y)'r   Nr7   Úfiler$   r   c                 óˆ  — |€t        j                  d«      | _        n2t        |t        «      rt        j                  |«      | _        n|| _        t	        | j                  «      | _        || _        d | _        d| _        t        j                  d   «       | _        |rt        j                  |«      | _        y t        | _        y )NrI   FrT   )r   ÚSectionr7   Ú
isinstancerB   Ú_liner^   ÚtemplateÚ	may_mergeÚweakrefÚWeakSetÚ	_childrenÚrefÚ_listr\   )r1   r7   r^   r$   s       r!   r2   zDeb822SourceEntry.__init__Ÿ   s�   € ð ˆ?Ü"Ÿ?™?¨2Ó.ˆD�LÜ˜¤Ô%Ü"Ÿ?™?¨7Ó3ˆD�Là"ˆDŒLä˜Ÿ™Ó&ˆŒ
ØˆŒ	Ø)-ˆŒØˆŒÜ Ÿ™Ð)DÑEÓGˆŒáÜ;B¿;¹;ÀtÓ;LˆD�Jä&ˆD�Jr'   Úotherr   c                 ód  — | j                   |j                   k(  xr– | j                  |j                  k(  xr{ | j                  xrm | j                  j                  d«      |j                  j                  d«      k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S ©z+equal operator for two sources.list entriesú/©ÚdisabledrC   Úurir   ÚdistÚcomps©r1   rj   s     r!   Ú__eq__zDeb822SourceEntry.__eq__·   s“   € ð �M‰M˜UŸ^™^Ñ+ò *Ø—	‘	˜UŸZ™ZÑ'ò*à—‘ò*ð —‘—‘ Ó$¨¯	©	×(8Ñ(8¸Ó(=Ñ=ò*ð —	‘	˜UŸZ™ZÑ'ò	*ð
 —
‘
˜eŸk™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.©r7   Úheader©r1   s    r!   ÚcommentzDeb822SourceEntry.commentÌ   s   € ð �|‰|×"Ñ"Ð"r'   r   c                 ó&   — || j                   _        y)r{   Nr|   )r1   r   s     r!   r   zDeb822SourceEntry.commentÑ   s   € ð &ˆ�‰Õr'   c                 óf   — 	 t        j                  | j                  d   «      S # t        $ r Y yw xY w)z%Return the value of the Trusted fieldÚTrustedN)Úapt_pkgÚstring_to_boolr7   ÚKeyErrorr~   s    r!   ÚtrustedzDeb822SourceEntry.trustedÖ   s3   € ð	Ü×)Ñ)¨$¯,©,°yÑ*AÓBÐBøÜò 	Ùð	ús   ‚!$ ¤	0¯0r;   c                 ój   — |€	 | j                   d= y |rdnd| j                   d<   y # t        $ r Y y w xY w)Nr‚   ÚyesÚno©r7   r…   ©r1   r;   s     r!   r†   zDeb822SourceEntry.trustedÞ   s@   € àˆ=ðØ—L‘L Ñ+ñ 05¡e¸$ˆD�L‰L˜Ò#øô ò Ùðús   „& ¦	2±2c                 ób   — t        j                  | j                  j                  dd«      «       S )zCheck if Enabled: no is set.ÚEnabledrˆ   )rƒ   r„   r7   r8   r~   s    r!   ro   zDeb822SourceEntry.disabledè   s)   € ô ×)Ñ)¨$¯,©,×*:Ñ*:¸9ÀeÓ*LÓMÐMÐMr'   c                 ób   — |rd| j                   d<   y 	 | j                   d= y # t        $ r Y y w xY w)Nr‰   r�   rŠ   r‹   s     r!   ro   zDeb822SourceEntry.disabledí   s6   € áØ&*ˆD�L‰L˜Ò#ðØ—L‘L Ñ+øÜò Ùðús   ”" ¢	.­.c                 ó   — | j                    S )z7A section is invalid if it doesn't have proper entries.)r7   r~   s    r!   ÚinvalidzDeb822SourceEntry.invalid÷   s   € ð —<‘<ÐÐr'   c                 ó   — | j                   S )z The entire (original) paragraph.)rb   r~   s    r!   ÚlinezDeb822SourceEntry.lineü   s   € ð �z‰zÐr'   c                 ó>   — | j                  «       j                  «       S r-   ©rB   Ústripr~   s    r!   Ú__str__zDeb822SourceEntry.__str__  s   € Ø�x‰x‹z×ÑÓ!Ð!r'   c                 ó,   — t        | j                  «      S )z(Section as a string, newline terminated.)rB   r7   r~   s    r!   rB   zDeb822SourceEntry.str  s   € ä�4—<‘<Ó Ð r'   Úenabledc                 ó   — | | _         y)z.Deprecated (for deb822) accessor for .disabledN©ro   ©r1   r˜   s     r!   Úset_enabledzDeb822SourceEntry.set_enabled  ó   € à#˜ˆ�r'   ÚAnySourceEntryc           
      ód  — | j                   s)| j                  €t        d„ | j                  D «       «      sy| j                  |j                  k7  ryt        |t        «      sy| j                  |j                  k7  r)t        d„ | j                  |j                  fD «       «      syt        t        | j                  j                  «      t        |j                  j                  «      z   «      D ]T  }|j                  «       dv rŒ| j                  j                  |d«      }|j                  j                  |d«      }||k7  sŒT y t        t        | j                   «      t        |j                   «      k7  t        | j"                  «      t        |j"                  «      k7  t        | j$                  «      t        |j$                  «      k7  t        | j&                  «      t        |j&                  «      k7  t        | j(                  «      t        |j(                  «      k7  g«      dkD  ry|j                   D ]'  }|| j                   vsŒ| xj                   |gz  c_        Œ) |j"                  D ]'  }|| j"                  vsŒ| xj"                  |gz  c_        Œ) |j$                  D ]'  }|| j$                  vsŒ| xj$                  |gz  c_        Œ) |j&                  D ]'  }|| j&                  vsŒ| xj&                  |gz  c_        Œ) |j(                  D ]'  }	|	| j(                  vsŒ| xj(                  |	gz  c_        Œ) y)z-Merge the two entries if they are compatible.Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr-   )rc   )Ú.0Úchilds     r!   ú	<genexpr>z*Deb822SourceEntry.merge.<locals>.<genexpr>  s   è ø€ ÒC¨5˜Ÿ�ÑCùs   ‚Fc              3   ó$   K  — | ]  }d |v –— Œ
 y­w)zAdded by software-propertiesNrD   )r¡   Úcs     r!   r£   z*Deb822SourceEntry.merge.<locals>.<genexpr>  s   è ø€ ò 5
Ø45Ð*¨aÔ/ñ5
ùs   ‚)ÚtypesÚurisÚsuitesÚ
componentsÚarchitecturesz	signed-byr   T)rd   rc   Úallrg   r^   ra   r   r   Úanyr%   r$   r7   ÚtagsÚlowerr8   Úsumr¦   r§   r¨   rr   rª   )
r1   rj   ÚtagÚin_selfÚin_otherÚtyprp   ÚsuiteÚ	componentÚarchs
             r!   ÚmergezDeb822SourceEntry.merge  s¦  € ð —’Ø—‘Ð%ÜÑC°D·N±NÔCÔCàØ�9‰9˜Ÿ
™
Ò"ØÜ˜%Ô!2Ô3ØØ�<‰<˜5Ÿ=™=Ò(´ñ 5
Ø:>¿,¹,ÈÏÉÐ9Vô5
ô 2
ð ä”t˜DŸL™L×-Ñ-Ó.´°e·m±m×6HÑ6HÓ1IÑIÓJò 	ˆCØ�y‰y‹{ð ñ ð Ø—l‘l×&Ñ& s¨DÓ1ˆGØ—}‘}×(Ñ(¨¨dÓ3ˆHØ˜(Ó"Ùð	ô  ä˜Ÿ
™
“O¤s¨5¯;©;Ó'7Ñ7Ü˜Ÿ	™	“N¤c¨%¯*©*£oÑ5Ü˜Ÿ™Ó$¬¨E¯L©LÓ(9Ñ9Ü˜Ÿ
™
“O¤s¨5¯;©;Ó'7Ñ7Ü˜×*Ñ*Ó+¬s°5×3FÑ3FÓ/GÑGðóð ò	ð à—;‘;ò 	$ˆCØ˜$Ÿ*™*Ò$Ø—
’
˜s˜eÑ#–
ð	$ð —:‘:ò 	#ˆCØ˜$Ÿ)™)Ò#Ø—	’	˜c˜UÑ"–	ð	#ð —\‘\ò 	'ˆEØ˜DŸK™KÒ'Ø—’ ˜wÑ&–ð	'ð Ÿ™ò 	*ˆIØ §
¡
Ò*Ø—
’
˜y˜kÑ)–
ð	*ð ×'Ñ'ò 	-ˆDØ˜4×-Ñ-Ò-Ø×"Ò" t fÑ,Ö"ð	-ð r'   c                 ó6  — | j                   D ]Š  }|j                  D ]y  }|j                  D ]h  }|j                  D ]W  }|j                  |j
                  |j                  f|||fk(  sŒ-|j                  | k(  sJ ‚t        j                  |«      |_
        ŒY Œj Œ{ ŒŒ y)z_If we end up being split, check if any of our children need to be reparented to the new parent.N)rg   r¦   r§   r¨   Ú_typeÚ_uriÚ_suiterQ   re   rh   Ú_parent)r1   Útor¢   r³   rp   r´   s         r!   Ú_reparent_childrenz$Deb822SourceEntry._reparent_childrenP  s’   € à—^‘^ò 	<ˆEØ—x‘xò <�ØŸ7™7ò <�CØ!#§¡ò <˜Ø!ŸK™K¨¯©°U·\±\ÐBÀsÈCÐQVÐFWÓWØ#(§<¡<°4Ò#7Ð7Ð#7Ü,3¯K©K¸«O˜E�Mñ<ñ<ñ<ñ	<r'   r-   )r½   r   r   N)!r?   r@   rA   r   r`   rB   r   r2   r   rt   rF   rª   r¦   rZ   r)   rC   r§   rp   r¨   rq   rr   Úpropertyr   ÚsetterÚboolr†   ro   r�   r’   r–   rœ   r·   r¾   rD   r'   r!   r   r   ž   s  „ ð
 )-ñ	'à—‘ 3Ñ&¨Ñ-ð'ð ð'ð �}Ñ%ó	'ð0

˜Cð 

 Có 

ñ ' Ð8SÓT€MÙ˜wÐ(;Ó<€EÙÑ1°'Ð;NÓOÓP€DÙ˜fÐ&:Ó;€DÙ
Ñ0°Ð9MÓNÓ
O€CÙ Ð*@ÓA€FÙÑ1°(Ð<RÓSÓT€DÙ˜|Ð-GÓH€Eàð#˜ò #ó ð#ð ‡^�^ð&˜sð & tò &ó ð&ð ð˜ ™ò ó ðð ‡^�^ð?˜T D™[ð ?¨Tò ?ó ð?ð ðN˜$ò Nó ðNð ‡_�_ð˜dð  tò ó ðð ð ˜ò  ó ð ð ð�cò ó ðð"˜ó "ð!�Só !ð$ 4ð $¨Dó $ðBÐ+ð B°ó BôH<r'   r   c                   ó†  — e Zd ZdZg d¢Zdedededefd„Zedef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dee   fd„«       Zedee   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j                  deddfd„«       Zdd„Zdd„Zdefd„Z eej,                  «      Z eej.                  «      Z eej0                  «      Z ee   ej4                  «      Z eej6                  «      Z eej8                  «      Zdeddfd„Zedefd„«       Zy)rT   zXThis represents a bit of a deb822 paragraph corresponding to a legacy sources.list entry)r¼   r¹   rº   r»   rc   Ú__weakref__rQ   r³   rp   r´   c                 óº   — t        j                  |«      | _        || _        || _        || _        |j                  | _        |j                  j                  | «       y r-   )	re   rh   r¼   r¹   rº   r»   rc   rg   Úadd)r1   rQ   r³   rp   r´   s        r!   r2   z"ExplodedDeb822SourceEntry.__init__a  sF   € Ü—{‘{ 6Ó*ˆŒØˆŒ
ØˆŒ	ØˆŒØŸ™ˆŒØ×Ñ×Ñ˜TÕ"r'   r   c                 óX   — | j                   �| j                  «       x}�|S t        d«      ‚)Nz#The parent entry is no longer valid)r¼   Ú
ValueErrorrS   s     r!   rQ   z ExplodedDeb822SourceEntry.parenti  s.   € à�<‰<Ð#ØŸ,™,›.Ð(�Ð5Ø�ÜÐ>Ó?Ð?r'   c                 ó:   — | j                  «        | j                  S r-   )Ú'_ExplodedDeb822SourceEntry__check_validrº   r~   s    r!   rp   zExplodedDeb822SourceEntry.urip  s   € à×ÑÔØ�y‰yÐr'   Nc                 óÄ   — | j                  «        | j                  j                  D �cg c]  }|| j                  k7  r|n|‘Œ c}| j                  _        || _        y c c}w r-   )rW   rQ   r§   rº   )r1   rp   Úus      r!   rp   zExplodedDeb822SourceEntry.uriu  sI   € à�‰ÔØBFÇ+Á+×BRÑBRÖS¸Q  d§i¡i¢™A°SÑ8ÒSˆ�‰ÔØˆ�	ùò Ts   ©Ac                 ó   — | j                   gS r-   ©rC   r~   s    r!   r¦   zExplodedDeb822SourceEntry.types{  ó   € à—	‘	ˆ{Ðr'   c                 ó   — | j                   gS r-   ©rq   r~   s    r!   r¨   z ExplodedDeb822SourceEntry.suites  rÎ   r'   c                 ó   — | j                   gS r-   ©rp   r~   s    r!   r§   zExplodedDeb822SourceEntry.urisƒ  s   € à—‘ˆzÐr'   c                 ó:   — | j                  «        | j                  S r-   )rÉ   r¹   r~   s    r!   rC   zExplodedDeb822SourceEntry.type‡  s   € à×ÑÔØ�z‰zÐr'   c                 óä   — | j                  «        |g| j                  _        || _        | j	                  «        | j                  |k(  sJ ‚| j                  j                  | j                  gk(  sJ ‚y r-   )rW   rQ   r¦   r¹   rÉ   )r1   r³   s     r!   rC   zExplodedDeb822SourceEntry.typeŒ  s]   € à�‰ÔØ ˜Eˆ�‰ÔØˆŒ
Ø×ÑÔØ�z‰z˜SÒ Ð Ð Ø�{‰{× Ñ  T§Z¡Z LÒ0Ð0Ñ0r'   c                 ó:   — | j                  «        | j                  S r-   )rÉ   r»   r~   s    r!   rq   zExplodedDeb822SourceEntry.dist•  s   € à×ÑÔØ�{‰{Ðr'   c                 óä   — | j                  «        |g| j                  _        || _        | j	                  «        | j                  |k(  sJ ‚| j                  j                  | j                  gk(  sJ ‚y r-   )rW   rQ   r¨   r»   rÉ   )r1   r´   s     r!   rq   zExplodedDeb822SourceEntry.distš  s]   € à�‰ÔØ#˜Wˆ�‰ÔØˆŒØ×ÑÔØ�{‰{˜eÒ#Ð#Ð#Ø�{‰{×!Ñ! d§k¡k ]Ò2Ð2Ñ2r'   c                 ód  — | j                   j                  «       €t        d«      ‚| j                   j                  D ]e  }| j                   j                  D ]J  }| j                   j
                  D ]/  }|||f| j                  | j                  | j                  fk(  sŒ-   y  ŒL Œg t        d| › �«      ‚)NúThe parent entry is deadúCould not find parent of )	rQ   ri   rÇ   r¦   r§   r¨   r¹   rº   r»   )r1   rC   rp   r´   s       r!   Ú__check_validz'ExplodedDeb822SourceEntry.__check_valid£  s¦   € Ø�;‰;×ÑÓÐ&ÜÐ7Ó8Ð8Ø—K‘K×%Ñ%ò 	ˆDØ—{‘{×'Ñ'ò �Ø!Ÿ[™[×/Ñ/ò �EØ˜c 5Ð)¨d¯j©j¸$¿)¹)ÀTÇ[Á[Ð-QÓQÛññð	ô
 Ð4°T°FÐ;Ó<Ð<r'   c                 óÖ  — | j                   }|j                  |j                  |j                  f| j                  g| j
                  g| j                  gfk(  ry |j                  «       }|€t        d«      ‚	 |j                  j                  |«      }|j                  |«       d}t        |j                  «      D ]ý  }t        |j                  «      D ]ã  }t        |j                  «      D ]É  }t        t        j                  |j                   «      |j"                  |¬«      }	|g|	_        |g|	_        |g|	_        d|	_        |j'                  |	«       |j                  j)                  ||	«       |||f| j                  | j
                  | j                  fk(  sŒ®t+        j,                  |	«      | _        d}ŒË Œå Œÿ |st        d| › �«      ‚y # t        $ r}t        d| › d�«      |‚d }~ww xY w)NrØ   z Parent entry for partial deb822 z no longer validF)r7   r^   r$   TrÙ   )rQ   r¦   r§   r¨   r¹   rº   r»   ri   rÇ   r$   r   ÚremoveÚreversedr   r   r`   r7   r^   rd   r¾   Úinsertre   rh   r¼   )
r1   rQ   Úsources_listr   ÚeÚ
reparentedrC   rp   r´   Únews
             r!   rW   z#ExplodedDeb822SourceEntry.split_out­  sÏ  € Ø—‘ˆØ�L‰L˜&Ÿ+™+ v§}¡}Ð5Ø�Z‰ZˆLØ�Y‰YˆKØ�[‰[ˆMð:
ò 
ð
 Ø—|‘|“~ˆØÐÜÐ7Ó8Ð8ð	Ø ×%Ñ%×+Ñ+¨FÓ3ˆEð 	×Ñ˜FÔ#àˆ
Ü˜VŸ\™\Ó*ò 	*ˆDÜ §¡Ó,ò *�Ü% f§m¡mÓ4ò *�EÜ+Ü '§¡°·±Ó ?Ø#Ÿ[™[Ø)ô�Cð
 "& �C”IØ #˜u�C”HØ"' �C”JØ$(�C”Mà×-Ñ-¨cÔ2Ø ×%Ñ%×,Ñ,¨U°CÔ8Ø˜c 5Ð)¨d¯j©j¸$¿)¹)ÀTÇ[Á[Ð-QÓQÜ'.§{¡{°3Ó'7˜œØ%)™
ñ*ñ*ð	*ñ$ ÜÐ8¸¸Ð?Ó@Ð@ð øô5 ò 	ÜØ2°4°&Ð8HÐIóàðûð	ús   Á6G
 Ç
	G(ÇG#Ç#G(c                 ón   — d| j                   › d| j                  › d| j                  › d| j                  › �S )Nz<child rM   z of )r¹   rº   r»   r¼   r~   s    r!   Ú__repr__z"ExplodedDeb822SourceEntry.__repr__Ø  s1   € Ø˜Ÿ™˜ A d§i¡i [°°$·+±+°¸dÀ4Ç<Á<À.ÐQÐQr'   r˜   c                 ó   — | | _         y)zSet the source to enabled.Nrš   r›   s     r!   rœ   z%ExplodedDeb822SourceEntry.set_enabledâ  r�   r'   c                 ó.   — | j                   j                  S )zReturn the file.)rQ   r^   r~   s    r!   r^   zExplodedDeb822SourceEntry.fileæ  s   € ð �{‰{×ÑÐr'   ©r   N)r?   r@   rA   r/   Ú	__slots__r   rB   r2   r¿   rQ   rp   rÀ   r$   r¦   r¨   r§   rC   rq   rÉ   rW   rä   rP   rª   rr   r�   rÁ   ro   r†   r   rœ   r^   rD   r'   r!   rT   rT   [  s&  „ Ùbò R€Ið#Ð0ð #°sð #Àð #ÈSó #ð ð@Ð)ò @ó ð@ð ð�Sò ó ðð 	‡Z�Zð�sð ˜tò ó ðð
 ð�t˜C‘yò ó ðð ð˜˜S™	ò ó ðð ð�d˜3‘iò ó ðð ð�cò ó ðð 
‡[�[ð1˜ð 1 ò 1ó ð1ð ð�cò ó ðð 
‡[�[ð3˜#ð 3 $ò 3ó ð3ó=ó)AðVR˜#ó Rñ *Ð*;×*IÑ*IÓJ€MÙ!Ð"3×"9Ñ"9Ó:€EÙ#Ð$5×$=Ñ$=Ó>€GØ*Ð$ TÑ*Ð+<×+EÑ+EÓF€HÙ#Ð$5×$=Ñ$=Ó>€GÙ#Ð$5×$=Ñ$=Ó>€Gð$ 4ð $¨Dó $ð ð �cò  ó ñ r'   rT   c                   ó   — e Zd ZdZddededz  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ede	ej                     fd„«       Zede	ej                     fd„«       Zede	ej                     fd„«       Zy)r   zsingle sources.list entryNr’   r^   c                 óV  — d| _         d| _        d| _        g | _        d | _        d| _        d| _        g | _        d| _        || _	        |€t        j                  j                  d«      }|j                  d«      rt        d«      ‚|| _        | j!                  |«       d | _        g | _        y )NFrI   úDir::Etc::sourcelistú.sourcesz6Classic SourceEntry cannot be written to .sources file)r�   ro   rC   rª   r†   rp   rq   rr   r   r’   rƒ   ÚconfigÚ	find_fileÚendswithrÇ   r^   Úparserc   Úchildren)r1   r’   r^   s      r!   r2   zSourceEntry.__init__ï  sœ   € ØˆŒØˆŒØˆŒ	Ø(*ˆÔØ$(ˆŒØˆŒØˆŒ	Ø "ˆŒ
ØˆŒØˆŒ	Øˆ<Ü—>‘>×+Ñ+Ð,BÓCˆDØ�=‰=˜Ô$ÜÐUÓVÐVØˆŒ	Ø�
‰
�4ÔØ)-ˆŒØ+-ˆ�r'   rj   r   c                 óH  — | j                   |j                   k(  xrˆ | j                  |j                  k(  xrm | j                  j                  d«      |j                  j                  d«      k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  S rl   rn   rs   s     r!   rt   zSourceEntry.__eq__  s…   € ð �M‰M˜UŸ^™^Ñ+ò *Ø—	‘	˜UŸZ™ZÑ'ò*à—‘—‘ Ó$¨¯	©	×(8Ñ(8¸Ó(=Ñ=ò*ð —	‘	˜UŸZ™ZÑ'ò*ð —
‘
˜eŸk™kÑ)ð	
r'   c                 óÈ  — | j                  «       } g }d}d}d}t        t        | «      «      D ]“  }| |   dk(  r(|rd}d}|j                  |«       | |   }Œ(d}|| |   z  }Œ3| |   dk(  rd}|| |   z  }ŒF|r,| |   j	                  «       sd}|j                  |«       | |   }Œt| |   j	                  «       r|sd}ŒŒ|| |   z  }Œ• t        |«      dkD  r|j                  |«       |S )z|a split() implementation that understands the sources.list
        format better and takes [] into account (for e.g. cdroms)rI   Fú[Tú]r   )r•   ÚrangeÚlenÚappendÚisspace)r’   ÚpiecesÚtmpÚp_foundÚspace_foundÚis         r!   rJ   zSourceEntry.mysplit  s  € ð �z‰z‹|ˆØˆØˆàˆØˆÜ”s˜4“yÓ!ò 	ˆAØ�A‰w˜#Š~ÙØ"'�KØ"�GØ—M‘M #Ô&Ø˜q™'‘Cà"�GØ˜4 ™7‘N‘CØ�a‘˜C’Ø�Ø�t˜A‘w‘‘Ù T¨!¡W§_¡_Ô%6à#�Ø—‘˜cÔ"Ø˜1‘g‘Ø�a‘—‘Ô"©7à"‘à�t˜A‘w‘‘ð-	ô0 ˆs‹8�aŠ<Ø�M‰M˜#ÔØˆr'   c                 ó0  — || _         |j                  «       }|dk(  s|dk(  rd| _        y|d   dk(  r<d| _        |dd j                  «       j	                  «       }|d   dvrd| _        y|dd }|j                  d«      }|dkD  r||dz   d | _        |d| }| j                  |«      }t        |«      dk  rd| _        y|d   j                  «       | _	        | j                  d	vrd| _        y|d   j                  «       d   d
k(  rŽ|j                  d«      j                  d«      j	                  «       }|D ][  }	 |j	                  dd«      \  }}|dk(  r|j	                  d«      | _        Œ5|dk(  rt        j                  |«      | _        ŒUd| _        Œ] |d   j                  «       | _        t        | j                   «      dk  rd| _        |d   j                  «       | _        t        |«      dkD  r|dd | _        yg | _        y# t        $ r
 d| _        Y Œàw xY w)zXparse a given sources.list (textual) line and break it up
        into the field we haverI   ú#TNr   r   )Úrpmúrpm-srcÚdebúdeb-srcé   )r  r  r  r  rô   z[]ú=r¶   ú,r†   é   )r’   r•   r�   ro   r   Úfindr   rJ   r÷   rC   Úpoprª   rƒ   r„   r†   Ú	Exceptionrp   rq   rr   )r1   r’   rú   rþ   ÚoptionsÚoptionr*   r;   s           r!   rð   zSourceEntry.parse3  s
  € ð ˆŒ	Ø�z‰z‹|ˆà�2Š:˜ šØˆDŒLØØ�‰7�cŠ>Ø ˆDŒMØ˜!˜"�X—^‘^Ó%×+Ñ+Ó-ˆFà˜!‘9Ð DÑDØ#�”Øà˜A˜B�x�à�I‰I�c‹NˆØˆqŠ5Ø  A¡ ˜=ˆDŒLØ˜˜�8ˆDà—‘˜dÓ#ˆäˆv‹;˜Š?ØˆDŒLØà˜1‘I—O‘OÓ%ˆŒ	à�9‰9Ð@Ñ@ØˆDŒLØà�!‰9�?‰?Ó˜QÑ 3Ò&Ø—j‘j “m×)Ñ)¨$Ó/×5Ñ5Ó7ˆGØ!ò ,�ð
,Ø!'§¡¨c°1Ó!5‘J�C˜ð ˜f’}Ø-2¯[©[¸Ó-=˜Õ*Ø 	Ò)Ü'.×'=Ñ'=¸eÓ'D˜�à'+˜�ð,ð ˜!‘9—?‘?Ó$ˆŒÜˆt�x‰x‹=˜1ÒØˆDŒLð ˜1‘I—O‘OÓ%ˆŒ	Üˆv‹;˜Š?à  ˜ˆD�JàˆD�Jøô+ !ò (Ø#'�D–Lð(ús   Ä8HÈHÈHÚ	new_valuec                 óà   — | | _         |r/| j                  j                  «       j                  d«      | _        y| j                  j                  «       d   dk7  rd| j                  z   | _        yy)z!set a line to enabled or disabledr   r   N)ro   r’   Úlstripr•   )r1   r  s     r!   rœ   zSourceEntry.set_enableds  s[   € à%˜ˆŒáØŸ	™	×(Ñ(Ó*×1Ñ1°#Ó6ˆD�Ið �y‰y�‰Ó  Ñ# sÒ*Ø $§)¡)™O�•	ð +r'   c                 ó>   — | j                  «       j                  «       S )zdebug helperr”   r~   s    r!   r–   zSourceEntry.__str__~  s   € à�x‰x‹z×ÑÓ!Ð!r'   c                 óº  — | j                   r| j                  S d}| j                  rd}|| j                  z  }| j                  rI| j
                  �=|dj                  dj                  | j                  «      | j
                  rdnd«      z  }nP| j
                  �|d| j
                  rdndz  z  }n-| j                  r!|ddj                  | j                  «      z  z  }|d	| j                  › d	| j                  › �z  }t        | j                  «      d
kD  r!|d	d	j                  | j                  «      z   z  }| j                  dk7  r|d| j                  z   z  }|dz  }|S )z!return the current line as stringrI   z# z [arch={} trusted={}]r  rˆ   r‰   z [trusted=%s]z
 [arch=%s]rM   r   z #ú
)r�   r’   ro   rC   rª   r†   ÚformatrN   rp   rq   r÷   rr   r   )r1   r’   s     r!   rB   zSourceEntry.str‚  s;  € à�<Š<Ø—9‘9ÐØˆØ�=Š=ØˆDà�—	‘	Ñˆà×Ò $§,¡,Ð":ØÐ+×2Ñ2Ø—‘˜×+Ñ+Ó,ØŸš‘¨4óñ ‰Dð �\‰\Ð%Ø�O°·²¡uÀ$ÑGÑG‰DØ×ÒØ�L 3§8¡8¨D×,>Ñ,>Ó#?Ñ?Ñ?ˆDØ�!�D—H‘H�:˜Q˜tŸy™y˜kÐ*Ñ*ˆÜˆt�z‰z‹?˜QÒØ�C˜#Ÿ(™( 4§:¡:Ó.Ñ.Ñ.ˆDØ�<‰<˜2ÒØ�D˜4Ÿ<™<Ñ'Ñ'ˆDØ�‰ˆØˆr'   c                 ó   — | j                   gS )z'deb822 compatible accessor for the typerÍ   r~   s    r!   r¦   zSourceEntry.types�  ó   € ð —	‘	ˆ{Ðr'   c                 ó   — | j                   gS )z&deb822 compatible accessor for the urirÒ   r~   s    r!   r§   zSourceEntry.uris¢  s   € ð —‘ˆzÐr'   c                 ó   — | j                   gS )z(deb822 compatible accessor for the suiterÐ   r~   s    r!   r¨   zSourceEntry.suites§  r  r'   r-   )r?   r@   rA   r/   rB   r2   r   rt   Ústaticmethodr$   rJ   rð   rÁ   rœ   r–   r¿   Úbuiltinsr¦   r§   r¨   rD   r'   r!   r   r   ì  s  „ Ù#ñ.˜Sð .¨¨d©
ó .ð(
˜Cð 
 Có 
ð ð#�cð #˜d 3™iò #ó ð#ðJ>˜#ð > $ó >ð@	, Tð 	,¨dó 	,ð"˜ó "ð�Só ð6 ð�t˜HŸL™LÑ)ò ó ðð ð�d˜8Ÿ<™<Ñ(ò ó ðð ð˜˜XŸ\™\Ñ*ò ó ñr'   r   c                   ó    — e Zd ZdZdedefd„Zy)r   za Matcher that does nothingr"   r   c                  ó   — y)NTrD   )r1   r"   s     r!   ÚmatchzNullMatcher.match¶  s   € Ør'   N)r?   r@   rA   r/   ÚAnyExplodedSourceEntryrÁ   r  rD   r'   r!   r   r   ³  s   „ Ù%ðÐ-ð °$ô r'   r   c                   ót  — 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 d	fdedededee   dededed	z  dee   ded	z  defd„Zdedd	fd„Zdedd	fd„Zd*ded	z  defd„Zdedd	fd „Zd!edefd"„Zd)d#„Zd)d$„Zd%ee	   deee	   eeee	   f   f   fd&„Zdee   fd'„Zy	)+r   z6represents the full sources.list + sources.list.d fileF)Údeb822ÚwithMatcherÚmatcherPathr   c                óˆ   — g | _         |  |rt        |«      | _        nt        «       | _        || _        | j                  «        y r-   )r$   r   Úmatcherr   r   Úrefresh)r1   r!  r"  r   s       r!   r2   zSourcesList.__init__½  s6   € ð +-ˆŒ	ÙÙÜ-¨kÓ:ˆD�Lä&›=ˆDŒLØˆŒØ�‰�r'   r   Nc                 ó¢  — g | _         t        j                  j                  d«      }|dk7  r0t        j
                  j                  |«      r| j                  |«       t        j                  j                  d«      }|dk7  r—t        j
                  j                  |«      rxt	        j                  |«      D ]`  }| j                  r|j                  d«      s|j                  d«      sŒ2| j                  t        j
                  j                  ||«      «       Œb | j                   D ]*  }|j                  rŒ| j                  j                  |«       Œ, y)z update the list of known entriesrë   z	/dev/nullúDir::Etc::sourcepartsrì   z.listN)r$   rƒ   rí   rî   ÚosÚpathÚexistsÚloadÚfind_dirÚlistdirr   rï   rN   r�   r$  r  )r1   r^   ÚpartsdirÚsources       r!   r%  zSourcesList.refreshÍ  sð   € àˆŒ	ä�~‰~×'Ñ'Ð(>Ó?ˆØ�;Ò¤2§7¡7§>¡>°$Ô#7Ø�I‰I�dŒOä—>‘>×*Ñ*Ð+BÓCˆØ�{Ò"¤r§w¡w§~¡~°hÔ'?ÜŸ
™
 8Ó,ò <�Ø—K’K D§M¡M°*Ô$=À$Ç-Á-ØõCð —I‘IœbŸg™gŸl™l¨8°TÓ:Õ;ð	<ð —i‘iò 	+ˆFØ—>“>Ø—‘×"Ñ" 6Õ*ñ	+r'   c              #   ó8   K  — | j                   E d{  –—†  y7 Œ­w)zGsimple iterator to go over self.list, returns SourceEntry
        typesN©r$   r~   s    r!   Ú__iter__zSourcesList.__iter__á  s   è ø€ ð —9‘9×Òús   ‚’“Ú
predicatesÚattrsc              /   ó4  ‡‡K  — ‰j                  dd «      }| j                  «       D ]m  Š|r:‰j                  r.|j                  d«      ‰j                  j                  d«      k7  rŒ?t	        ˆˆfd„‰D «       «      sŒUt	        ˆfd„|D «       «      sŒj‰–— Œo y ­w)Nrp   rm   c              3   óB   •K  — | ]  }t        ‰|«      ‰|   k(  –— Œ y ­wr-   )Úgetattr)r¡   r*   r4  r/  s     €€r!   r£   z%SourcesList.__find.<locals>.<genexpr>í  s!   øè ø€ ÒG¸#”7˜6 3Ó'¨5°©:Õ5ÑGùs   ƒc              3   ó.   •K  — | ]  } |‰«      –— Œ y ­wr-   rD   )r¡   Ú	predicater/  s     €r!   r£   z%SourcesList.__find.<locals>.<genexpr>í  s   øè ø€ ò PØ&/‘	˜&×!ñPùs   ƒ)r
  Úexploded_listrp   r   r«   )r1   r3  r4  rp   r/  s     ` @r!   Ú__findzSourcesList.__findæ  s‡   ùè ø€ ð �i‰i˜˜tÓ$ˆØ×(Ñ(Ó*ò 	ˆFÙ�v—z’z c§j¡j°£o¸¿¹×9JÑ9JÈ3Ó9OÒ&OØÜÔGÀÔGÕGÌCó PØ3=ôPõ Mð “ñ	ùs   „A7BÁ<BÂBrI   éÿÿÿÿrC   rp   rq   Ú
orig_compsr   Úposr^   rª   rQ   c
                 ó  ‡— |j                  «       }|j                  d«      }
|
r|dd j                  «       }t        ‰«      Š|dd }| j	                  ˆfd„|
d|||¬«      }|D ]>  }|D ]7  }||j
                  v sŒ||j                  |«      = t        |«      dk(  sŒ3|c c S  Œ@ | j	                  ˆfd„d|||¬	«      }|D ]�  }|j                  |
k(  rBt        |j
                  «      t        |«      k7  rt        |j
                  |z   «      |_        |c S |j                  sŒa|
rŒdt        |j
                  «      t        |«      k(  sŒ†d|_        |c S  |€t        j                  j                  d
«      }|j                  d«      r°t        d|| ¬«      }|	rVt        |	d|	«      }	t!        |	t        «      sJ ‚|	j"                  j$                  D ]  }|	j"                  |   |j"                  |<   Œ  |g|_        |g|_        |g|_        ||_        ‰rt-        ‰«      |_        ||j"                  _        |
|_        nw|
rdnd|‰rddj3                  ‰«      z  nd||g}|j5                  |«       |r|j7                  d|z   «       dj3                  d„ |D «       «      dz   }t9        |«      }|�||_        | j<                  j?                  |«       |dk  r| j,                  j7                  |«       |S | j,                  jA                  ||«       |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 r-   ©r%   rª   ©r"   rª   s    €r!   ú<lambda>z!SourcesList.add.<locals>.<lambda>  ó   ø€ ”c˜!Ÿ/™/Ó*¨mÑ;€ r'   F)ro   r�   rC   rp   rq   r   c                 ó4   •— t        | j                  «      ‰k(  S r-   rA  rB  s    €r!   rC  z!SourcesList.add.<locals>.<lambda>  rD  r'   )r�   rC   rp   rq   rë   rì   )r^   r$   rQ   rI   z	[arch=%s]r  rM   c              3   ó&   K  — | ]	  }|sŒ|–— Œ y ­wr-   rD   )r¡   Úparts     r!   r£   z"SourcesList.add.<locals>.<genexpr>P  s   è ø€ Ò; T²dœDÑ;ùs   ‚Šr  )!r•   Ú
startswithr  r%   Ú_SourcesList__findrr   r   r÷   ro   r&   rƒ   rí   rî   rï   r   r7  ra   r7   r­   r¦   r§   r¨   r$   rª   r}   rN   Úextendrø   r   r^   r$  r  rÞ   )r1   rC   rp   rq   r=  r   r>  r^   rª   rQ   ro   rr   Úsourcesr/  Únew_compÚ	new_entryÚkÚpartsr’   s           `          r!   rÅ   zSourcesList.addò  sù  ø€ ð$ �z‰z‹|ˆØ—?‘? 3Ó'ˆÙØ˜˜�8—?‘?Ó$ˆDÜ˜MÓ*ˆð ™1�ˆØ—+‘+Û;ØØØØØð ó 
ˆð ò 	&ˆFØ!ò &�Ø˜vŸ|™|Ò+ð ˜eŸk™k¨(Ó3Ð4Ü˜5“z Q“Ø%œñ&ð	&ð —+‘+Û;ØØØØð ó 
ˆð ò 	"ˆFØ�‰ (Ò*ô �v—|‘|Ó$¬¨E«
Ò2Ü#'¨¯©°uÑ(<Ó#=�F”LØ’Ø—“ªä�v—|‘|Ó$¬¨E«
Ó2Ø&+�F”OØ!’Mð	"ð ˆ<Ü—>‘>×+Ñ+Ð,BÓCˆDØ�=‰=˜Ô$Ü)¨$°TÀÔEˆIÙÜ  ¨°6Ó:�Ü! &Ô*;Ô<Ð<Ð<ØŸ™×,Ñ,ò =�AØ+1¯>©>¸!Ñ+<�I×%Ñ% aÒ(ð=à#˜fˆIŒOØ!˜UˆIŒNØ $˜vˆIÔØ#ˆIŒOÙÜ*.¨}Ó*=�	Ô'Ø'.ˆI×ÑÔ$Ø!)ˆIÕñ  ‘ RØÙ;H�˜sŸx™x¨Ó6Ò6ÈbØØðˆEð �L‰L˜ÔÙØ—‘˜S 7™]Ô+Ø—8‘8Ñ;¨UÔ;Ó;¸dÑBˆDä# DÓ)ˆIØÐØ!%�	”à�‰×Ñ˜9Ô%Ø�Š7Ø�I‰I×Ñ˜YÔ'ð Ðð �I‰I×Ñ˜S )Ô,ØÐr'   Úsource_entryc                 ó’   — t        |t        «      r|j                  «        |j                  }| j                  j                  |«       y)z0remove the specified entry from the sources.listN)ra   rT   rW   rQ   r$   rÜ   )r1   rP  s     r!   rÜ   zSourcesList.remove]  s6   € ä�lÔ$=Ô>Ø×"Ñ"Ô$Ø'×.Ñ.ˆLØ�	‰	×Ñ˜Õ&r'   Ú
backup_extc                 óæ  — t         j                  j                  d«      }t        j                  j                  ||z   «      r8t        j                  j                  |«      rt        j                  ||z   |«       t         j                  j                  d«      }t        j                  d|z  «      D ]>  }t        j                  j                  ||z   «      sŒ&t        j                  ||z   |«       Œ@ y)z8restore sources.list files based on the backup extensionrë   r'  z%s/*N)
rƒ   rí   rî   r(  r)  r*  ÚshutilÚcopyr,  Úglob)r1   rR  r^   r.  s       r!   Úrestore_backupzSourcesList.restore_backupd  s¨   € ä�~‰~×'Ñ'Ð(>Ó?ˆÜ�7‰7�>‰>˜$ Ñ+Ô,´·±·±ÀÔ1EÜ�K‰K˜˜zÑ)¨4Ô0ä—>‘>×*Ñ*Ð+BÓCˆÜ—I‘I˜f xÑ/Ó0ò 	5ˆDÜ�w‰w�~‰~˜d ZÑ/Õ0Ü—‘˜D :Ñ-¨tÕ4ñ	5r'   c                 ó8  — t        «       }|€t        j                  d«      }| j                  D ]i  }|j                  |vsŒt
        j                  j                  |j                  «      sŒ<t        j                  |j                  |j                  › |› �«       Œk |S )z€make a backup of the current source files, if no backup extension
        is given, the current date/time is used (and returned)z%y%m%d.%H%M)
r%   ÚtimeÚstrftimer$   r^   r(  r)  r*  rT  rU  )r1   rR  Úalready_backupedr/  s       r!   ÚbackupzSourcesList.backupo  s|   € ô +.«%ÐØÐÜŸ™ }Ó5ˆJØ—i‘iò 	GˆFØ�{‰{Ð"2Ò2´r·w±w·~±~ÀfÇkÁkÕ7RÜ—‘˜FŸK™K¨F¯K©K¨=¸¸Ð)EÕFð	Gð Ðr'   c           	      ó¬  — 	 t        |«      5 }|j                  d«      rBt        j                  |«      D ])  }| j                  j                  t        ||| ¬«      «       Œ+ n.|D ])  }t        ||«      }| j                  j                  |«       Œ+ ddd«       y# 1 sw Y   yxY w# t        $ r&}t        j                  d|› d|› d�«       Y d}~yd}~ww xY w)z(re)load the current sourcesrì   r1  Nzcould not open file 'z': r  )Úopenrï   r   ÚFiler$   rø   r   r   r  ÚloggingÚwarning)r1   r^   Úfr7   r’   r/  Úexcs          r!   r+  zSourcesList.loadz  sÈ   € ð
	FÜ�d“ð 1˜qØ—=‘= Ô,Ü#*§<¡<°£?ò V˜ØŸ	™	×(Ñ(Ô):¸7ÀDÈtÔ)TÕUñVð !"ò 1˜Ü!,¨T°4Ó!8˜ØŸ	™	×(Ñ(¨Õ0ð1÷1÷ 1ñ 1ûô ò 	FÜ�O‰OÐ3°D°6¸¸S¸EÀÐD×EÑEûð	Fús5   ‚B$ �BBÂB$ ÂB!ÂB$ Â!B$ Â$	CÂ-CÃCÚentryc                 ó¢   — t        |t        «      r%| j                  j                  |j                  «      S | j                  j                  |«      S r-   )ra   rT   r$   r   rQ   )r1   rd  s     r!   r   zSourcesList.indexˆ  s7   € Ü�eÔ6Ô7Ø—9‘9—?‘? 5§<¡<Ó0Ð0Ø�y‰y�‰˜uÓ%Ð%r'   c                 ó¤  — d}|rÌd}d}|dz   t        | j                  «      k  r©| j                  |   }t        |t        «      ri|dz   }|t        | j                  «      k  rL|j	                  | j                  |   «      r| j                  |= d}n|dz  }|t        | j                  «      k  rŒL|dz  }|dz   t        | j                  «      k  rŒ©|rŒËyy)z=Merge consecutive entries that have been split back together.Tr   Fr   N)r÷   r$   ra   r   r·   )r1   Úmergedrþ   rd  Újs        r!   r·   zSourcesList.merge�  s¾   € àˆÙØˆAØˆFØ�a‘%œ#˜dŸi™i›.Ò(ØŸ	™	 !™�Ü˜eÔ%6Ô7Ø˜A™�AØœc $§)¡)›nÒ,Ø Ÿ;™; t§y¡y°¡|Ô4Ø $§	¡	¨! Ø%)™Fà ™F˜Að œc $§)¡)›nÓ,ð �Q‘�ð �a‘%œ#˜dŸi™i›.Ó(ô r'   c                 óÜ  — i }t        | j                  «      dk(  rHt        j                  j	                  d«      }d}t        |d«      5 }|j                  |«       ddd«       y| j                  «        	 | j                  D ]Ž  }|j                  |vr$t        |j                  d«      ||j                  <   n.t        |t        «      r||j                     j                  d«       ||j                     j                  |j                  «       «       Œ� 	 |j                  «       D ]  }|j                  «        Œ y# 1 sw Y   yxY w# |j                  «       D ]  }|j                  «        Œ 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ƒ   rí   rî   r^  Úwriter·   r^   ra   r   rB   rK   Úclose)r1   Úfilesr)  r}   rb  r/  s         r!   ÚsavezSourcesList.saveŸ  s+  € à-/ˆäˆt�y‰y‹>˜QÒÜ—>‘>×+Ñ+Ð,BÓCˆDðEð ô �d˜C“ð   AØ—‘˜”÷ àà�
‰
Œð		ØŸ)™)ò 7�Ø—;‘; eÑ+Ü)-¨f¯k©k¸3Ó)?�E˜&Ÿ+™+Ò&Ü Ô(9Ô:Ø˜&Ÿ+™+Ñ&×,Ñ,¨TÔ2Ø�f—k‘kÑ"×(Ñ(¨¯©«Õ6ñ7ð —\‘\“^ò �Ø—‘•	ñ÷ àûð —\‘\“^ò �Ø—‘•	ñús   ÁD8Á4BE Ä8EÅ'E+rß   c                 ó&  — g }i }|D ]…  }|j                   €Œ|j                   j                  r,|j                   }||vrg ||<   ||   }|j                  |«       ŒRt        |j                   j                  «      dkD  sŒu|j                  |«       Œ‡ ||fS )z5get all parent and child channels in the sources listr   )rc   r¢   rø   r÷   rñ   )r1   rß   ÚparentsÚused_child_templatesr/  r*   Útemps          r!   Úcheck_for_relationszSourcesList.check_for_relations»  s    € ð ˆØEGÐØ"ò 	+ˆFà�‰Ð&Øð �‰×$Ò$Ø—o‘o�ØÐ2Ñ2Ø02Ð(¨Ñ-Ø+¨CÑ0�Ø—‘˜FÕ#ô �v—‘×/Ñ/Ó0°1Ó4Ø—N‘N 6Õ*ð	+ð$ Ð-Ð.Ð.r'   c                 ó   — g }| j                   D ]ì  }t        |t        «      r|j                  |«       Œ%t	        |j
                  «      dk(  rBt	        |j                  «      dk(  r*t	        |j                  «      dk(  r|j                  |«       Œ|j
                  D ]_  }|j                  D ]N  }|j                  D ]=  }|j                  t        ||||«      «       | j                  j                  |d   «       Œ? ŒP Œa Œî |S )aF  Present an exploded view of the list where each entry corresponds exactly to a Release file.

        A release file is uniquely identified by the triplet (type, uri, suite). Old style entries
        always referred to a single release file, but deb822 entries allow multiple values for each
        of those fields.
        r   r<  )r$   ra   r   rø   r÷   r¦   r§   r¨   rT   r$  r  )r1   Úresrd  r³   rp   Úsuis         r!   r:  zSourcesList.exploded_listÕ  sß   € ð -/ˆØ—Y‘Yò 	8ˆEÜ˜%¤Ô-Ø—
‘
˜5Õ!ä�E—K‘KÓ  AÒ%Ü˜Ÿ
™
“O qÒ(Ü˜Ÿ™Ó%¨Ò*à—
‘
˜5Õ!à Ÿ;™;ò 8�CØ$Ÿz™zò 8˜Ø#(§<¡<ò 8˜CØŸJ™JÔ'@ÀÈÈSÐRUÓ'VÔWØ ŸL™L×.Ñ.¨s°2©wÕ7ñ8ñ8ñ8ð	8ð  ˆ
r'   )Tz /usr/share/python-apt/templates/rç   r-   )r?   r@   rA   r/   rÁ   rB   r2   r%  r   rž   r2  r   r  r   rI  r$   Úintr   rÅ   rÜ   rW  r\  r+  r   r·   rn  ÚtupleÚdictr   rs  r:  rD   r'   r!   r   r   º  sÐ  „ Ù@ð !Ø=ðð
 òàðð ðð
 óó +ð(˜( >Ñ2ó ð

Ø#Ð%;Ð$<¸dÐ$BÑCð
ØNQð
à	Ð(Ñ	)ó
ð$ ØØØ')Ø04ñiàðið ðið ð	ið
 ˜‘Iðið ðið ðið �D‰jðið   ‘}ðið '¨Ñ-ðið 
 óiðV'Ð#9ð '¸dó 'ð	5¨ð 	5°ó 	5ñ	  t¡ð 	°só 	ðF˜ð F ó Fð&Ð1ð &°có &ó
ó$ð8/Ø$ ^Ñ4ð/à	ˆt�NÑ# T¨(°D¸Ñ4HÐ*HÑ%IÐIÑ	Jó/ð4˜tÐ$:Ñ;ô r'   r   c                   ó,   — e Zd ZdZdefd„Zdedefd„Zy)r   ztmatcher class to make a source entry look nice
    lots of predefined matchers to make it i18n/gettext friendly
    r"  c                 óF  — g | _         t        j                  d|z  «      }|D ]}  }t        j                  j	                  |«      }|j                  d«      }|d| }t        ||¬«      }|j                   D ]*  }|j                  €Œ| j                   j                  |«       Œ, Œ y )Nz	%s/*.infoz.infor   )Úbase_dir)	Ú	templatesrV  r(  r)  Úbasenamer	  r   Ú	match_urirø   )r1   r"  Ú
spec_filesrb  rþ   rq   rc   s          r!   r2   zSourceEntryMatcher.__init__õ  s™   € Ø)+ˆŒä—Y‘Y˜{¨[Ñ8Ó9ˆ
Øò 	4ˆAÜ—‘× Ñ  Ó#ˆAØ—‘�w“ˆAØ�!�A�ˆAÜ˜A¨Ô4ˆDØ ŸN™Nò 4�Ø×%Ñ%Ñ1Ø—N‘N×)Ñ)¨(Õ3ñ4ð	4ð 	r'   r/  r   c                 ó¬  — d}| j                   D �]A  }|j                  �|j                  €Œ|j                  �¬|j                  � |j                  �”|j                  �ˆt        j                  |j                  |j                  «      r^t        j                  |j                  |j                  «      r4|j                  |j                  k(  s|j                  dk(  rd}||_	         |S |j                  |j                  «      sŒñ|j                  €Œþ|j                  €�Œt        j                  |j                  |j                  «      s�Œ8d}||_	         |S  |S )z%Add a matching template to the sourceFr  T)r}  rp   rq   r  Ú
match_nameÚreÚsearchr  rC   rc   r   )r1   r/  Úfoundrc   s       r!   r  zSourceEntryMatcher.match  s  € àˆØŸ™ó 	ˆHØ�z‰zÐ! V§[¡[Ð%8Øà×"Ñ"Ð.Ø×'Ñ'Ð3Ø—J‘JÐ*Ø—K‘KÐ+Ü—I‘I˜h×0Ñ0°&·*±*Ô=Ü—H‘H˜X×0Ñ0°&·+±+Ô>ð —‘ §¡Ò-°·±À%Ò1Gà�Ø"*�”Øð ˆð ×"Ñ" 6§:¡:Õ.Ø×'Ñ'Ñ3Ø—K‘KÒ+Ü—H‘H˜X×0Ñ0°&·+±+Ö>à�Ø"*�”ØØˆð7	ð6 ˆr'   N)	r?   r@   rA   r/   rB   r2   r  rÁ   r  rD   r'   r!   r   r   ð  s'   „ ñð Có ðÐ2ð °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/ubunturç   )5r  rV  Úior`  Úos.pathr(  rƒ  rT  rY  re   Úcollections.abcr   r   r   Útypingr   r   r   r	   r
   rƒ   rI   r   Údistinfor   r   r   Ú__all__rB   rÁ   r   r$   r&   r¿   r)   rF   rP   rZ   r\   r   rT   r   rž   r  r   r   r   r?   Úinit_configrK  rd  ÚinfoÚmirrorrD   r'   r!   ú<module>r�     sà  ðó4 Û Û 	Û Û Û 	Û Û Û ß 8Ñ 8ß 9Õ 9ã å ß (ñ ˆCƒL€ò€ð˜#ð ¨Cð °Dó ð:ˆH�Q‰Kð ˜D ™Gó ô*˜(ô *ô&1˜ô 1ô /˜H g¨a¡jô /ð ˜Qð  1ó ó÷
z<ñ z<÷zN ñ N ÷b~ñ ~ðB �{Ð$5Ð5Ñ6€ØØÐ"Ð$=Ð=ñÐ ÷
ñ ÷sñ s÷l	1ñ 1ðj ˆzÒØ€G×ÑÔÙ‹m€Gàò /ˆØˆ�‰�Z %§)¡)£+Ñ-Õ.ð/ñ Ø+Ð-Só€Fð €G‡L�LÐ" VÑ+Ô,à€G‡L�LÙØ.Ð0Vó	
ôð
 €G‡L�LÙØ/Ð1Vó	
õð% r'   