ó
    8.õg,U  ã                   óÌ   • S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJ r   " S S\	5      r
 " S S5      r " S S	\5      r " S
 S\5      r " S S\5      rS rSSSS/ 0 4S jrg)é    N)ÚElementTree)Úgettextc                   ó   • \ rS rSrSrg)ÚNoDistroTemplateExceptioné$   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    Ú3/usr/lib/python3/dist-packages/aptsources/distro.pyr   r   $   s   † Úr   r   c                   óf   • \ rS rSr/ 0 4S jrS rSS jrS rS rSS jr	S	 r
S
 rS rS rS rSrg)ÚDistributioné(   c                 ó†   • UR                  5       U l        X l        X0l        X@l        XPl        X`l        SU l        SU l        g)z0Container for distribution specific informationsÚdebzdeb-srcN)	ÚlowerÚidÚcodenameÚdescriptionÚreleaseÚis_likeÚlike_codenamesÚbinary_typeÚsource_type)Úselfr   r   r   r   r   r   s          r   Ú__init__ÚDistribution.__init__)   s<   € ð —(‘(“*ˆŒØ ŒØ&ÔØŒØŒØ,Ôà ˆÔØ$ˆÕr   c                 óR
  • Xl         SU l        / U l        / U l        / U l        / U l        / U l        / U l        / U l        / U l	        SU l
        / U l        SU l        SU l        SU l        / U l        U R                   R                   R"                   HG  nU R%                  UR&                  5      (       d  M%  UR(                  U R*                  :X  d  MA  X l          O   U R                  c'  [-        SU R*                  < SU R.                  < 35      e/ n/ n/ n/ nU R                   R1                  5        GH€  nUR2                  (       Gd‚  U R%                  UR4                  5      (       Gaa  UR6                  (       GaO  UR6                  R8                  (       Ga3  U R%                  UR6                  R&                  5      (       Ga  UR:                  R=                  S5      (       aI  UR>                  (       d8  U R
                  RA                  U5        URC                  URD                  5        GOŸUR:                  R=                  S5      (       a.  UR>                  (       a  U R
                  RA                  U5        GOQURF                  U RH                  :X  ac  UR>                  (       dR  U R                  RA                  U5        URC                  URD                  5        URA                  UR:                  5        OÔURF                  U RH                  :X  a-  UR>                  (       a  U R                  RA                  U5        O�URF                  U RJ                  :X  a-  UR>                  (       d  U R                  RA                  U5        OFURF                  U RJ                  :X  a,  UR>                  (       a  U R                  RA                  U5        UR2                  (       a  GM¬  UR6                  U R                  RL                  ;   d  GMÓ  UR>                  (       d8  URF                  U RH                  :X  a  U R                  RA                  U5        GM  UR>                  (       d8  URF                  U RJ                  :X  a  U R                  RA                  U5        GMe  U R                  RA                  U5        GMƒ     [O        U5      U l        [O        U5      U l        URC                  U5        URC                  U5        [O        U5      U l        [O        U5      U l	        U RQ                  5         g)zN
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   Úexploded_listÚinvalidÚdistÚtemplateÚofficialÚuriÚ
startswithÚdisabledÚappendÚextendÚcompsÚtyper   r   ÚchildrenÚsetÚget_mirrors)r   r%   r=   ÚmediarD   r-   r,   Úsources           r   Úget_sourcesÚDistribution.get_sources9   sª  € ð 'Ôà#ˆÔØˆÔØˆÔØ "ˆÔØˆÔØ ˆÔØˆÔØˆÔØˆŒØ$ˆÔØ#%ˆÔ ð !ˆÔØˆÔØ ˆÔØˆÔð ×(Ñ(×0Ñ0×:Ô:ˆHØ×Ñ §¡×.Ó.°8×3HÑ3HÈDÏGÉGÕ3Sð (0Ô$Ùñ ;ð ×ÑÑ'Ý+à—7”7˜DŸM›Mð+óð ð ˆØˆØˆØˆà×&Ñ&×4Ñ4×6ˆFà—N—N�NØ×$Ñ$ V§[¡[×1Ò1Ø—O—O�OØ—O‘O×,×,Ð,Ø×$Ñ$ V§_¡_×%9Ñ%9×:Ò:ð —:‘:×(Ñ(¨×2Ñ2¸6¿?¿?Ø×&Ñ&×-Ñ-¨fÔ5Ø×&Ñ& v§|¡|Ö4Ø—Z‘Z×*Ñ*¨8×4Ñ4¸¿¿Ø×&Ñ&×-Ñ-¨fÖ5Ø—[‘[ D×$4Ñ$4Ó4¸V¿_¿_Ø×%Ñ%×,Ñ,¨VÔ4Ø—L‘L §¡Ô.Ø—L‘L §¡Õ,Ø—[‘[ D×$4Ñ$4Ó4¸¿¿Ø×)Ñ)×0Ñ0°Õ8Ø—[‘[ D×$4Ñ$4Ó4¸V¿_¿_Ø×,Ñ,×3Ñ3°FÕ;Ø—[‘[ D×$4Ñ$4Ó4¸¿¿Ø×)Ñ)×0Ñ0°Ô8Ø—>—>’> f§o¡o¸×9MÑ9M×9VÑ9VÖ&VØ——¨6¯;©;¸$×:JÑ:JÓ+JØ×&Ñ&×-Ñ-¨f×5ØŸŸ¨V¯[©[¸D×<LÑ<LÓ-LØ×,Ñ,×3Ñ3°F×;à×)Ñ)×0Ñ0°×8ñ? 7ô@ " %›jˆÔÜ˜{Ó+ˆÔØ×Ñ˜UÔ#Ø×Ñ˜[Ô)Ü  Ó/ˆÔÜ˜e›*ˆŒØ×ÑÕr   Nc                 ó¤  • U R                   R                  U l        U R                   H6  nUR	                  S5      (       a  M  U R
                  R                  U5        M8     [        U R                  5      S:X  a  U R                  U l	        OU R                  S   R                  U l	        0 U l        Sn[        R                  R                  U5      (       a”  [        US9n[!        USS5      c  UR"                  Ul        UR%                  S5      nU HU  n UR&                  S   n UR&                  S
   n[*        R,                  " SU5      U R                  UR/                  5       '   MW     SU l        SU l        [        R4                  " SSS9n	U	R7                  S5      n
U	R7                  S5      nUS:X  a  [        U	5      nXšS-   U R/                  5       nU(       a	  X-  U l        XÀR                  ;   a  U R                  U   U l        XÀl        gg! [(         a    UR&                  S	   n GNf = f! [(         a    UR&                  S   n GNf = f)zB
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_namer8   Úalpha_2_codeÚalpha_3_codeÚiso_3166ÚLANGÚen_UK)ÚdefaultÚ_Ú.éÿÿÿÿé   )r&   Úbase_urir2   r.   r@   r4   rB   Úlenr(   r1   r?   Ú	countriesÚosÚpathÚexistsr   ÚgetattrÚgetiteratorrO   ÚattribÚKeyErrorr   Údgettextr   ÚcountryÚcountry_codeÚgetenvÚfindr3   )r   Úmirror_templateÚmediumÚfnameÚetÚitÚelmÚdescrÚcodeÚlocaleÚaÚzrh   s                r   rH   ÚDistribution.get_mirrors�   s  € ð
  ×/Ñ/×8Ñ8ˆÔð —o”oˆFØ×$Ñ$ X×.Ó.à×!Ñ!×(Ñ(¨Ö0ñ &ô
 ˆt× Ñ Ó! QÓ&Ø"&×"2Ñ"2ˆDÕà"&×"3Ñ"3°AÑ"6×":Ñ":ˆDÔð ˆŒØ7ˆÜ�7‰7�>‰>˜%× Ñ Ü %Ñ(ˆBô �r˜6 4Ó(Ñ0ØŸ.™.�”Ø—‘Ð)Ó*ˆBÛ�ð/ØŸJ™J }Ñ5�Eð6ØŸ:™: nÑ5�Dô 07×/?Ò/?À
ÈEÓ/R�—‘˜tŸz™z›|Ó,ñ ð ˆŒØ ˆÔÜ—’˜6¨7Ñ3ˆØ�K‰K˜ÓˆØ�K‰K˜ÓˆØ�‹7Ü�F“ˆAØ !™e aÐ(×.Ñ.Ó0ˆæØ"1Ñ"@ˆDÔàŸ>™>Ó)ØŸ>™>¨,Ñ7ˆDŒLØ ,Õð *øô+  ó /ØŸJ™J vÑ.“Eð/ûô  ó 6ØŸ:™: nÑ5“Dð6ús$   ÄHÄ'H2ÈH/È.H/È2IÉIc                 óþ   • SnUR                  S5      nUR                  S5      nUS:w  a  US:w  a  X[        S5      -   U nX R                  ;   a  [        S5      U R                  U   -  $ SUR	                  S5      -  $ )zgTry to get a human readable name for the main mirror of a country
Customize for different distributionsNz://z.archive.ubuntu.comrZ   úServer for %sú%sú/ )rj   r]   r^   rX   Úrstrip©r   Úserverrg   ÚiÚlis        r   Ú_get_mirror_nameÚDistribution._get_mirror_nameÇ   s|   € ð ˆØ�K‰K˜ÓˆØ�[‰[Ð.Ó/ˆØ�‹7�r˜R“xØ¤ U£™^¨bÐ1ˆGØ—n‘nÓ$ä�_Ó%¨¯©°wÑ(?Ñ?Ð?à˜&Ÿ-™-¨Ó-Ñ-Ð-r   c                 óÆ  • S n/ n[        U R                  5      S:  d>  [        U R                  5      S:X  a–  U" U R                  S   U R                  5      (       aq  UR                  [	        S5      U R                  S/5        U R
                  (       a7  UR                  U R                  U R
                  5      U R
                  S/5        U$ [        U R                  5      S:X  aæ  U" U R                  S   U R                  5      (       dÁ  UR                  [	        S5      U R                  S/5        U R                  S   nU R
                  (       aN  U" X0R
                  5      (       d7  UR                  U R                  U R
                  5      U R
                  S/5        U(       a#  UR                  U R                  U5      US/5        U$ [        U R                  5      S:”  aû  UR                  [	        S5      U R                  S/5        U R
                  (       a7  UR                  U R                  U R
                  5      U R
                  S/5        UR                  [	        S5      SS/5        U R                   H_  nU R                  U5      US/nU" X0R
                  5      (       d  U" X0R                  5      (       a  MG  XB;  d  MN  UR                  U5        Ma     U$ )	z+Return a list of used and suggested serversc                 ól   • [         R                  " U R                  S5      UR                  S5      5      $ )z[Helper function that handles comaprision of mirror urls
that could contain trailing slashesrz   )ÚreÚmatchÚstripr{   )Úmir1Úmir2s     r   Úcompare_mirrorsÚ5Distribution.get_server_list.<locals>.compare_mirrorsØ   s'   € ô —8’8˜DŸJ™J tÓ,¨d¯k©k¸$Ó.?Ó@Ð@r   r[   r   zMain serverTFzCustom serversN)r]   r4   r2   rB   rX   r3   r€   )r   r‰   Úmirrorsr}   Úmirror_entrys        r   Úget_server_listÚDistribution.get_server_listÕ   s‰  € ò	Að ˆÜˆt× Ñ Ó! AÓ%Ü�×!Ñ!Ó" aÓ'Ù × 1Ñ 1°!Ñ 4°d×6FÑ6F×GÑGà�N‰NœA˜mÓ,¨d×.>Ñ.>ÀÐEÔFØ×"×"Ø—‘à×-Ñ-¨d×.AÑ.AÓBØ×+Ñ+Øðôðd ˆôW �×"Ñ"Ó# qÓ(±Ø×Ñ˜aÑ  $×"2Ñ"2÷2
ñ 2
ð �N‰NœA˜mÓ,¨d×.>Ñ.>ÀÐFÔGà×&Ñ& qÑ)ˆFð ×"×"Ù& v×/BÑ/B×CÑCØ—N‘Nà ×1Ñ1°$×2EÑ2EÓFØ ×/Ñ/Ø!ðôö Ø—‘ × 5Ñ 5°fÓ =¸vÀtÐLÔMð2 ˆô/ �×"Ñ"Ó# aÓ'ð �N‰NœA˜mÓ,¨d×.>Ñ.>ÀÐFÔGØ×"×"Ø—‘à×-Ñ-¨d×.AÑ.AÓBØ×+Ñ+Øðôð �N‰NœAÐ.Ó/°°tÐ<Ô=Ø×+Ô+�Ø $× 5Ñ 5°fÓ =¸vÀuÐM�Ù" 6×+>Ñ+>×?Ñ?Á?Ø×,Ñ,÷Dñ Dñ Ø!Õ0Ø—N‘N <Ö0ñ ,ð ˆr   c                 óN  • Uc  U R                   nUc  U R                  nUc  [        U R                  5      nUc  U R                  nSnSn[        U R                  5      =(       d    [        U R                  5       H  nUR                  n  O   U R                  R                  XX4XVUS9nU R                  (       ak  XR                  :X  a[  U R                  R                  U R                  UUUUUR                  UU R                  R                  R                  U5      S-   S9  ggg)z#
Add distribution specific sources
N)ÚparentrN   r[   )rN   r�   Úpos)r1   r   Úlistr,   r   Úreversedr'   r(   rN   r%   Úaddr/   r   Úindex)	r   rE   r?   r<   rD   Úcommentr�   rN   Ú
new_sources	            r   Ú
add_sourceÚDistribution.add_source  s!  € ð ‰;à×%Ñ%ˆCØ‰<Ø—=‘=ˆDØ‰=Ü˜×+Ñ+Ó,ˆEØ‰<Ø×#Ñ#ˆDàˆØˆÜ˜t×1Ñ1Ó2×Q´h¸t×?PÑ?PÓ6QÒQˆFØ—;‘;ˆDÙñ Rð ×%Ñ%×)Ñ)Ø�t GÀð *ð 
ˆ
ð
 ×× D×,<Ñ,<Ó$<Ø×Ñ× Ñ Ø× Ñ ØØØØØ—_‘_Ø!Ø×$Ñ$×)Ñ)×/Ñ/°
Ó;¸aÑ?ð !ò 	ð %=Ðr   c                 óT  • [        U/5      nU R                   Hr  nUR                  R                   HU  nUR                  U:X  d  M  UR
                  (       d  M(  UR
                  U;  d  M:  UR                  UR
                  5        MW     Mt     U H  nU R                  U5        M     g)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(   r=   Ú
componentsr8   Úparent_componentrB   Ú_enable_component)r   ÚcomprD   rJ   Úcs        r   Úenable_componentÚDistribution.enable_component?  sƒ   € ô �d�V“ˆà×'Ô'ˆFØ—_‘_×/Ô/�Ø—6‘6˜T•> a×&8×&8Ñ&8Ø×)Ñ)°Õ6ØŸ™ Q×%7Ñ%7Ö8ó 0ñ (ó
 ˆAØ×"Ñ" 1Ö%ò r   c                 ó  ^• U4S jn/ nUR                  U R                  5        UR                  U R                  5        0 n0 nU Hu  nUR                  U R                  :X  d  M  UR
                  U;  a  [        5       XFR
                  '   UR                   H   nXFR
                     R                  U5        M"     Mw     U R                   Hu  nUR                  U R                  :X  d  M  UR
                  U;  a  [        5       XVR
                  '   UR                   H   nXVR
                     R                  U5        M"     Mw     [        U R                  5      S:  a  U R                  ST-  /S9  O,U H  nU" X„5        M     U R                   H  nU" X…5        M     U R                  (       aT  [        U R                  5      S:  a  U R                  U R                  ST-  /S9  g U R                   H  nU" X…5        M     g g )Nc                 ó²   >• U R                   U;  a  gTXR                      ;   a  gU R                  T/-   U l        XR                      R                  T5        g)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)r<   rD   r”   )rJ   Úcomps_per_distrž   s     €r   Úadd_component_only_onceÚ?Distribution._enable_component.<locals>.add_component_only_onceQ  sO   ø€ ð �{‰{ .Ó0Øð �~§k¡kÑ2Ó2Øà!Ÿ<™<¨4¨&Ñ0ˆFŒLØŸ;™;Ñ'×+Ñ+¨DÕ1r   r[   ry   )rD   )rE   rD   )rC   r(   r'   rE   r   r<   rG   rD   r”   r0   r   r]   r˜   r/   )	r   rž   r¥   Úsourcesr¤   Úcomps_per_sdistÚsrŸ   rJ   s	    `       r   r�   ÚDistribution._enable_componentP  s©  ø€ õ	2ð$ ˆØ�‰�t×(Ñ(Ô)Ø�‰�t×)Ñ)Ô*ð ˆØˆÛˆAØ�v‰v˜×)Ñ)Õ)Ø—6‘6 Ó/Ü-0«U�N§6¡6Ñ*ØŸœ�AØ"§6¡6Ñ*×.Ñ.¨qÖ1ó !ñ	 ð ×)Ô)ˆAØ�v‰v˜×)Ñ)Õ)Ø—6‘6 Ó0Ü.1«e�O§F¡FÑ+ØŸœ�AØ#§F¡FÑ+×/Ñ/°Ö2ó !ñ	 *ô ˆt× Ñ Ó! AÓ%à�O‰O 4¨$¡; -ˆOÒ0ó "�Ù'¨Ö?ñ "ð ×2Ô2�Ù'¨Ö@ñ 3ð ××Ü�4×+Ñ+Ó,¨qÓ0à—‘ T×%5Ñ%5¸dÀT¹k¸]�ÒKð #×6Ô6�FÙ+¨FÖDò 7ð  r   c                 óè  • / nUR                  U R                  5        UR                  U R                  5        UR                  U R                  5        XR                  ;   a  / nUR                  U R                  5        U Hm  nXR
                  ;   d  M  UR
                  nUR                  U5        XCl        [        UR
                  5      S:  d  MR  U R                  R                  U5        Mo     g)z`
Disable a component in all main, child and source code sources
(excluding cdrom based sources)
r[   N)	rC   r(   r'   r0   r-   rD   Úremover]   r%   )r   rž   r§   rJ   rD   s        r   Údisable_componentÚDistribution.disable_component�  sµ   € ð
 ˆØ�‰�t×(Ñ(Ô)Ø�‰�t×)Ñ)Ô*Ø�‰�t×/Ñ/Ô0Ø×#Ñ#Ó#ØˆGØ�N‰N˜4×,Ñ,Ô-ÛˆFØ—|‘|Õ#ØŸ™�Ø—‘˜TÔ"Ø$”Ü�v—|‘|Ó$ qÕ(Ø×$Ñ$×+Ñ+¨FÖ3ò r   c                 óJ  ^ • U 4S jn/ n/ nUT l         T R                   H  nU" XQU5        M     T R                   HI  nUR                  R                  b&  UR                  R                  UR
                  :w  d  M@  U" XQU5        MK     T R                   H  nU" XQU5        M     g)z@Change the server of all distro specific sources to
a given hostc                 óf  >• Xl         U R                   He  nU R                   U R                  U/U;   a  U R                  R                  U5        M=  UR	                  U R                   U R                  U/5        Mg     [        U R                  5      S:  a  TR                  R                  U 5        g g )Nr[   )r?   rD   r<   r¬   rB   r]   r%   )rJ   r?   Úseenrž   r   s       €r   Úchange_server_of_sourceÚ;Distribution.change_server.<locals>.change_server_of_source¥  s†   ø€ àŒJØŸœ�Ø—J‘J §¡¨TÐ2°dÓ:Ø—L‘L×'Ñ'¨Ö-à—K‘K §¡¨V¯[©[¸$Ð ?Ö@ñ	 %ô
 �6—<‘<Ó  1Ó$Ø× Ñ ×'Ñ'¨Õ/ð %r   N)r1   r(   r'   r=   r\   r?   r0   )r   r?   r²   Úseen_binaryÚseen_sourcerJ   s   `     r   Úchange_serverÚDistribution.change_server¡  s”   ø€ õ		0ð ˆØˆØ!ˆÔØ×'Ô'ˆFÙ# F°Ö=ñ (à×(Ô(ˆFð —‘×(Ñ(Ñ0Ø—?‘?×+Ñ+¨v¯z©zÕ9á'¨°[ÖAñ )ð ×.Ô.ˆFÙ# F°Ö=ò /r   c                 ó$   • XR                   :X  a  gg)z/Compare a given name with the release codename.TF)r   ©r   r8   s     r   r7   ÚDistribution.is_codename¿  s   € à—=‘=Ó Øàr   )r   r-   r*   r'   r   r^   rg   rh   r1   r   r)   r+   r,   r/   r   r   r   r2   r(   r3   r   r0   r&   r   r%   r.   r4   ©N)NNNNr"   )r	   r
   r   r   r   rK   rH   r€   r�   r˜   r    r�   r­   r¶   r7   r   r   r   r   r   r   (   sF   † à:<ÈRô%ò Tôl6-òp.òCôJ#òJ&ò";Eòz4ò(>õ<r   r   c                   ó*   • \ rS rSrSrS rS rS rSrg)ÚDebianDistributioniÇ  z)Class to support specific Debian featuresc                 óD   • XR                   :X  d  U R                  S;   a  gg)zuCompare 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   r7   ÚDebianDistribution.is_codenameÊ  s    € ð —=‘=Ó  D§L¡LÐ4KÓ$KØàr   c                 ó`  • SnUR                  S5      nUR                  S5      nUS:w  a  US:w  a  X[        S5      -   U nX R                  ;   aL  [        S5      [        R
                  " SU R                  U   R                  5       5      R                  5       -  $ SUR                  S5      -  $ )	zQTry to get a human readable name for the main mirror of a country
Debian specificNz://ftp.z.debian.orgrZ   rx   rT   ry   rz   )rj   r]   r^   rX   r   rf   r{   r|   s        r   r€   Ú#DebianDistribution._get_mirror_nameÒ  s¥   € ð ˆØ�K‰K˜	Ó"ˆØ�[‰[˜Ó'ˆØ�‹7�r˜R“xØ¤ Y£Ñ/°"Ð5ˆGØ—n‘nÓ$ô �/Ó"Ü×"Ò"Ø §¡¨wÑ 7× >Ñ >Ó @óç‘&“(ñðð ˜&Ÿ-™-¨Ó-Ñ-Ð-r   c                 ó,   • [         R                  U SS9  g )Nz http://ftp.%s.debian.org/debian/©rk   ©r   rH   ©r   s    r   rH   ÚDebianDistribution.get_mirrorså  s   € Ü× Ñ ØÐ"Dð 	!ò 	
r   r   N)	r	   r
   r   r   Ú__doc__r7   r€   rH   r   r   r   r   r½   r½   Ç  s   † Ù3òò.õ&
r   r½   c                   ó   • \ rS rSrSrS rSrg)ÚUbuntuDistributionië  z)Class to support specific Ubuntu featuresc                 ó,   • [         R                  U SS9  g )Nz$http://%s.archive.ubuntu.com/ubuntu/rÅ   rÆ   rÇ   s    r   rH   ÚUbuntuDistribution.get_mirrorsî  s   € Ü× Ñ ØÐ"Hð 	!ò 	
r   r   N©r	   r
   r   r   rÉ   rH   r   r   r   r   rË   rË   ë  s
   † Ù3õ
r   rË   c                   ó   • \ rS rSrSrS rSrg)ÚUbuntuRTMDistributioniô  z-Class to support specific Ubuntu RTM featuresc                 ó:   • U R                   R                  U l        g r»   )r&   r\   r2   rÇ   s    r   rH   Ú!UbuntuRTMDistribution.get_mirrors÷  s   € Ø×/Ñ/×8Ñ8ˆÕr   )r2   NrÎ   r   r   r   rÐ   rÐ   ô  s
   † Ù7õ9r   rÐ   c                  óv  • SSK n SSKJnJnJn   U" SS/UUSS9R                  5       S   nUR                  5        H0  nUR                  S5      (       d  M  UR                  S	S
5      S
   s  $    g! [         a=  nUR                   U R                  :w  a  [        R                  " SU-  5         SnAgSnAff = f)z=Get the current channel from system-image-cli -i if possible.r   N)ÚDEVNULLÚPIPEÚPopenzsystem-image-cliz-iT)ÚstdoutÚstderrÚuniversal_newlinesz	channel: z: r[   z+system-image-cli failed, using defaults: %s)ÚerrnoÚ
subprocessrÔ   rÕ   rÖ   ÚcommunicateÚ
splitlinesr@   ÚsplitÚOSErrorÚENOENTÚloggingÚwarning)rÚ   rÔ   rÕ   rÖ   ÚoutÚlineÚexcs          r   Ú_system_image_channelræ   û  s³   € ãß/Ñ/ðQÙØ Ð&ØØØ#ñ	
÷
 ‰+‹-˜ñˆð —N‘NÖ$ˆDØ�‰˜{×+Ó+Ø—z‘z $¨Ó*¨1Ñ-Ò-ñ %ð øô ó QØ�9‰9˜Ÿ™Ó$Ü�OŠOÐIÈCÑOÔPûØûðQús$   �AA1 ÁA1 Á.A1 Á1
B8Á;3B3Â3B8c                 ór  • U b  U R                  5       n U (       a  U(       a  U(       a  U(       dÃ  [        R                  " 5       nUS   n US   nUS   nUR                  S5      nUR                  S/ 5      nU H/  nUR                  SUR	                  5       -  S5      nUc  M+  X…U'   M1     U S:X  aA  [        5       n	U	b4  S	U	;   a.  S
n U	R                  SS5      S   R                  SS5      S   nUnUnU S:X  a  [        XX#XE5      $ U S
:X  a  [        XX#XE5      $ U S:X  a  [        XX#XE5      $ [        XX#XE5      $ )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
NÚIDÚVERSION_CODENAMEÚPRETTY_NAMEÚ
VERSION_IDÚID_LIKEz%s_VERSION_CODENAMEÚubuntuzubuntu-rtm/z
ubuntu-rtmr#   r[   Ú-r   Údebian)r   ÚplatformÚfreedesktop_os_releaseÚgetÚupperræ   ÚrsplitrÞ   rË   rÐ   r½   r   )
r   r   r   r   r   r   Ú
os_releaseÚlike_idÚlike_codenameÚchannels
             r   Ú
get_distrorù     s]  € ð  
�~Ø�X‰X‹ZˆÞ–8¦¶Ü×4Ò4Ó6ˆ
Ø˜ÑˆØÐ0Ñ1ˆØ  Ñ/ˆØ—.‘. Ó.ˆØ—.‘. ¨BÓ/ˆó ˆGØ&ŸN™NØ%¨¯©«Ñ7¸óˆMð Ó(Ø*7˜wÓ'ñ ð �‹>Ü+Ó-ˆGØÑ" }¸Ó'?Ø!�Ø"Ÿ>™>¨#¨qÓ1°!Ñ4×:Ñ:¸3ÀÓBÀ1ÑE�Ø&�Ø"�Ø	ˆXƒ~Ü!Ø˜+°ó
ð 	
ð 
ˆ\ÓÜ$Ø˜+°ó
ð 	
ð 
ˆx‹Ü!Ø˜+°ó
ð 	
ô ˜B¨+ÀÓXÐXr   )r   rá   r_   rð   r„   Úxml.etree.ElementTreer   Úapt_pkgrX   Ú	Exceptionr   r   r½   rË   rÐ   ræ   rù   r   r   r   Ú<module>rý      sz   ðó4 Û Û 	Û Û 	Ý -å  ô	 	ô 	÷\ñ \ô~!
˜ô !
ôH
˜ô 
ô9Ð.ô 9òð, ØØØØØõ5Yr   