Ë
    \þe6_  ã                   óê   — d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm Z	  G d„ de
«      Z G d„ d«      Z G d„ d	e«      Z G d
„ de«      Z G d„ de«      Zd„ Zd„ Z G d„ d«      Zddddg fd„Zy)é    N)ÚElementTree)Úgettextc                   ó   — e Zd Zy)ÚNoDistroTemplateExceptionN)Ú__name__Ú
__module__Ú__qualname__© ó    ú4/usr/lib/python3/dist-packages/DistUpgrade/distro.pyr   r   %   s   „ Ør   r   c                   óV   — e Zd Zg fd„Zd„ Zdd„Zd„ Zd„ Zdd„Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zy)ÚDistributionc                 óf   — || _         || _        || _        || _        || _        d| _        d| _        y)z0Container for distribution specific informationsÚdebzdeb-srcN)ÚidÚcodenameÚdescriptionÚreleaseÚis_likeÚbinary_typeÚsource_type)Úselfr   r   r   r   r   s         r   Ú__init__zDistribution.__init__*   s8   € ð ˆŒØ ˆŒØ&ˆÔØˆŒØˆŒà ˆÔØ$ˆÕr   c                 ó‚	  — || _         d| _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _	        d| _
        g | _        d| _        d| _        d| _        g | _        | j                   j                   j"                  D ]@  }| j%                  |j&                  «      sŒ|j(                  | j*                  k(  sŒ9|| _         n | j                  €%t-        d| j*                  ›d| j.                  ›�«      ‚g }g }g }g }| j                   j1                  «       D �]#  }|j2                  �sB| j%                  |j4                  «      �r&|j6                  �r|j6                  j8                  �r| j%                  |j6                  j&                  «      �rÜ|j:                  j=                  d«      rD|j>                  s8| j
                  jA                  |«       |jC                  |jD                  «       �n}|j:                  j=                  d«      r)|j>                  r| j
                  jA                  |«       �n9|jF                  | jH                  k(  r^|j>                  sR| j                  jA                  |«       |jC                  |jD                  «       |jA                  |j:                  «       nÂ|jF                  | jH                  k(  r(|j>                  r| j                  jA                  |«       n�|jF                  | jJ                  k(  r(|j>                  s| j                  jA                  |«       n@|jF                  | jJ                  k(  r'|j>                  r| j                  jA                  |«       |j2                  r�Œa|j6                  | j                  jL                  v s�Œ…|j>                  s6|jF                  | jH                  k(  r| j                  jA                  |«       �ŒÇ|j>                  s6|jF                  | jJ                  k(  r| j                  jA                  |«       �Œ	| j                  jA                  |«       �Œ& tO        |«      | _        tO        |«      | _        |jC                  |«       |jC                  |«       tO        |«      | _        tO        |«      | _	        | jQ                  «        y)zf
        Find the corresponding template, main and child sources
        for the distribution
        NFÚ z2Error: could not find a distribution template for ú/úcdrom:))ÚsourceslistÚsource_templateÚchild_sourcesÚmain_sourcesÚdisabled_sourcesÚcdrom_sourcesÚdownload_compsÚenabled_compsÚcdrom_compsÚ
used_mediaÚget_source_codeÚsource_code_sourcesÚdefault_serverÚmain_serverÚnearest_serverÚused_serversÚmatcherÚ	templatesÚis_codenameÚnameÚdistributionr   r   r   Úexploded_listÚinvalidÚdistÚtemplateÚofficialÚuriÚ
startswithÚdisabledÚappendÚextendÚcompsÚtyper   r   ÚchildrenÚsetÚget_mirrors)r   r   r6   Úmediar=   r&   r%   Úsources           r   Úget_sourceszDistribution.get_sources6   s   € ð 'ˆÔà#ˆÔØˆÔØˆÔØ "ˆÔØˆÔØ ˆÔØˆÔØˆÔØˆŒØ$ˆÔØ#%ˆÔ ð !ˆÔØˆÔØ ˆÔØˆÔð ×(Ñ(×0Ñ0×:Ñ:ò 	ˆHØ×Ñ §¡Õ.°8×3HÑ3HÈDÏGÉGÓ3Sð (0�Ô$Ùð	ð ×ÑÐ'Ý+à—7“7˜DŸMšMð+óð ð ˆØˆØˆØˆà×&Ñ&×4Ñ4Ó6ó 	9ˆFà—N“NØ×$Ñ$ V§[¡[Õ1Ø—O“OØ—O‘O×,Ó,Ø×$Ñ$ V§_¡_×%9Ñ%9Õ:ð —:‘:×(Ñ(¨Ô2¸6¿?º?Ø×&Ñ&×-Ñ-¨fÔ5Ø×&Ñ& v§|¡|Ö4Ø—Z‘Z×*Ñ*¨8Ô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ð?	9ô@ " %›jˆÔÜ˜{Ó+ˆÔØ×Ñ˜UÔ#Ø×Ñ˜[Ô)Ü  Ó/ˆÔÜ˜e›*ˆŒØ×ÑÕr   Nc                 ó~  — | j                   j                  | _        | j                  D ]/  }|j	                  d«      rŒ| j
                  j                  |«       Œ1 t        | j                  «      dk(  r| j                  | _	        n| j                  d   j                  | _	        i | _        d}t        j                  j                  |«      r“t        |¬«      }t!        |dd«      €|j"                  |_        |j%                  d«      }|D ]S  }	 |j&                  d   }	 |j&                  d
   }t+        j,                  d|«      | j                  |j/                  «       <   ŒU d| _        d| _        t        j4                  dd¬«      }	|	j7                  d«      }
|	j7                  d«      }|dk(  rt        |	«      }|	|
dz   | j/                  «       }|r
||z  | _        || j                  v r| j                  |   | _        || _        yy# t(        $ r |j&                  d	   }Y �Œw xY w# t(        $ r |j&                  d   }Y �Œw xY w)zR
        Provide a set of mirrors where you can get the distribution from
        r   r   z%/usr/share/xml/iso-codes/iso_3166.xml)ÚfileÚiterNÚiso_3166_entryÚcommon_namer1   Úalpha_2_codeÚalpha_3_codeÚiso_3166ÚLANGÚen_UK)ÚdefaultÚ_ú.éÿÿÿÿé   )r   Úbase_urir+   r'   r9   r-   r;   Úlenr!   r*   r8   Ú	countriesÚosÚpathÚexistsr   ÚgetattrÚgetiteratorrG   ÚattribÚKeyErrorr   ÚdgettextÚlowerÚcountryÚcountry_codeÚgetenvÚfindr,   )r   Úmirror_templateÚmediumÚfnameÚetÚitÚelmÚdescrÚcodeÚlocaleÚaÚzra   s                r   rA   zDistribution.get_mirrorsŒ   s  € ð
  ×/Ñ/×8Ñ8ˆÔð —o‘oò 	1ˆFØ×$Ñ$ XÕ.à×!Ñ!×(Ñ(¨Õ0ð	1ô
 ˆt× Ñ Ó! QÒ&Ø"&×"2Ñ"2ˆDÕà"&×"3Ñ"3°AÑ"6×":Ñ":ˆDÔð ˆŒØ7ˆÜ�7‰7�>‰>˜%Ô Ü %Ô(ˆBô �r˜6 4Ó(Ð0ØŸ.™.�”Ø—‘Ð)Ó*ˆBØò 	S�ð/ØŸJ™J }Ñ5�Eð6ØŸ:™: nÑ5�Dô 07×/?Ñ/?À
ÈEÓ/R�—‘˜tŸz™z›|Ò,ð	Sð ˆŒØ ˆÔÜ—‘˜6¨7Ô3ˆØ�K‰K˜ÓˆØ�K‰K˜ÓˆØ�Š7Ü�F“ˆAØ˜a !™e aÐ(×.Ñ.Ó0ˆáØ"1°LÑ"@ˆDÔà˜4Ÿ>™>Ñ)ØŸ>™>¨,Ñ7ˆDŒLØ ,ˆDÕð *øô+  ò /ØŸJ™J vÑ.“Eð/ûô  ò 6ØŸ:™: nÑ5“Dð6ús$   ÄHÄH ÈHÈHÈ H<È;H<c                 óú   — d}|j                  d«      }|j                  d«      }|dk7  r|dk7  r||t        d«      z   | }|| j                  v rt        d«      | j                  |   z  S d|j	                  d«      z  S )zoTry to get a human readable name for the main mirror of a country
        Customize for different distributionsNz://z.archive.ubuntu.comrR   úServer for %sú%sú/ )rc   rU   rV   rP   Úrstrip©r   Úserverr`   ÚiÚlis        r   Ú_get_mirror_namezDistribution._get_mirror_nameÄ   s€   € ð ˆØ�K‰K˜ÓˆØ�[‰[Ð.Ó/ˆØ�Š7�r˜R’xØ˜Q¤ U£™^¨bÐ1ˆGØ�d—n‘nÑ$ä�_Ó%¨¯©°wÑ(?Ñ?Ð?à˜&Ÿ-™-¨Ó-Ñ-Ð-r   c                 ó`  — d„ }g }t        | j                  «      dk  s8t        | j                  «      dk(  rŒ || j                  d   | j                  «      rl|j                  t	        d«      | j                  dg«       | j
                  r7|j                  | j                  | j
                  «      | j
                  dg«       |S t        | j                  «      dk(  rÓ || j                  d   | j                  «      s³|j                  t	        d«      | j                  dg«       | j                  d   }| j
                  rJ ||| j
                  «      s7|j                  | j                  | j
                  «      | j
                  dg«       |r#|j                  | j                  |«      |dg«       |S t        | j                  «      dkD  ré|j                  t	        d«      | j                  dg«       | j
                  r7|j                  | j                  | j
                  «      | j
                  dg«       |j                  t	        d«      ddg«       | j                  D ]S  }| j                  |«      |dg} ||| j
                  «      s ||| j                  «      rŒ>||vsŒC|j                  |«       ŒU |S )	z+Return a list of used and suggested serversc                 ój   — t        j                  | j                  d«      |j                  d«      «      S )zgHelper function that handles comaprision of mirror urls
            that could contain trailing slashesrr   )ÚreÚmatchÚstriprs   )Úmir1Úmir2s     r   Úcompare_mirrorsz5Distribution.get_server_list.<locals>.compare_mirrorsÕ   s'   € ô —8‘8˜DŸJ™J tÓ,¨d¯k©k¸$Ó.?Ó@Ð@r   rS   r   zMain serverTFzCustom serversN)rU   r-   r+   r;   rP   r,   rx   )r   r€   Úmirrorsru   Úmirror_entrys        r   Úget_server_listzDistribution.get_server_listÒ   s‚  € ò	Að ˆÜˆt× Ñ Ó! AÒ%Ü�×!Ñ!Ó" aÒ'Ù × 1Ñ 1°!Ñ 4°d×6FÑ6FÔGà�N‰NœA˜mÓ,¨d×.>Ñ.>ÀÐEÔFØ×"Ò"Ø—‘à×-Ñ-¨d×.AÑ.AÓBØ×+Ñ+Øðôðd ˆôW �×"Ñ"Ó# qÒ(±Ø×Ñ˜aÑ  $×"2Ñ"2ô2
ð �N‰NœA˜mÓ,¨d×.>Ñ.>ÀÐFÔGà×&Ñ& qÑ)ˆFð ×"Ò"Ù& v¨t×/BÑ/BÔ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Ð<Ô=Ø×+Ñ+ò 1�Ø $× 5Ñ 5°fÓ =¸vÀuÐM�Ù" 6¨4×+>Ñ+>Ô?Á?Ø˜D×,Ñ,ôDð Ø!¨Ò0Ø—N‘N <Õ0ð1ð ˆr   c                 óB  — |€| j                   }|€| j                  }|€t        | j                  «      }|€| j                  }d}d}t        | j                  «      xs t        | j                  «      D ]  }|j                  } n | j                  j                  |||||||¬«      }| j                  rn|| j                  k(  r^| j                  j                  | j                  |||||j                  || j                  j                  j                  |«      dz   ¬«       yyy)z3
        Add distribution specific sources
        N)ÚparentrF   rS   )rF   r…   Úpos)r*   r   Úlistr%   r   Úreversedr    r!   rF   r   Úaddr(   r   Úindex)	r   r>   r8   r5   r=   Úcommentr…   rF   Ú
new_sources	            r   Ú
add_sourcezDistribution.add_source  s*  € ð ˆ;à×%Ñ%ˆCØˆ<Ø—=‘=ˆDØˆ=Ü˜×+Ñ+Ó,ˆEØˆ<Ø×#Ñ#ˆDàˆØˆÜ˜t×1Ñ1Ó2ÒQ´h¸t×?PÑ?PÓ6Qò 	ˆFØ—;‘;ˆDÙð	ð ×%Ñ%×)Ñ)Ø�#�t˜U G°FÀð *ó 
ˆ
ð
 ×Ò D¨D×,<Ñ,<Ò$<Ø×Ñ× Ñ Ø× Ñ ØØØØØ—_‘_Ø!Ø×$Ñ$×)Ñ)×/Ñ/°
Ó;¸aÑ?ð !õ 	ð %=Ðr   c                 ó2  — t        |g«      }| j                  D ]d  }|j                  j                  D ]I  }|j                  |k(  sŒ|j
                  sŒ |j
                  |vsŒ/|j                  |j
                  «       ŒK Œf |D ]  }| j                  |«       Œ y)z³
        Enable a component in all main, child and source code sources
        (excluding cdrom based sources)

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

    If no paramter are given the distro will be auto detected via
    a call to lsb-release
    z#Provided only a subset of argumentsé   )Ú
stacklevelrÁ   rÀ   rÂ   rÃ   rö   ÚUbuntuzubuntu-rtm/z
Ubuntu-RTMr   rS   ú-r   r¿   )ÚwarningsÚwarnÚDeprecationWarningrà   rØ   râ   rÕ   rî   rÞ   ÚrsplitrÇ   rµ   r¹   rª   r   )	r   r   r   r   r   Ú
os_releaseÚ	os_resultÚ
lsb_resultÚchannels	            r   Ú
get_distror  W  sJ  € ñ ‘8¡±Ù‘™[©GÜ�M‰MØ5Ô7IÐVWõô  “\ˆ
Øˆ	Ü!“^ˆ
Ø×ÒØ"×)Ñ)ˆIô "“^ˆ
ØÐ(Ñ)ˆØ˜jÑ)ˆØ  Ñ/ˆØ˜YÑ'ˆà—-‘- 	¨2Ó.ˆØ�Š>Ü+Ó-ˆGØÐ" }¸Ñ'?Ø!�Ø"Ÿ>™>¨#¨qÓ1°!Ñ4×:Ñ:¸3ÀÓBÀ1ÑE�Ø&�Ø"�Ø	ˆX‚~Ü! " h°¸WÀgÓNÐNØ	ˆ\ÒÜ$ R¨°;ÀÈÓQÐQØ	ˆxŠÜ! " h°¸WÀgÓNÐNä˜B ¨+°wÀÓHÐHr   )r   rÓ   rW   r{   rþ   r  Úxml.etree.ElementTreer   Úapt_pkgrP   Ú	Exceptionr   r   rª   rµ   r¹   rØ   rÞ   rà   r  r
   r   r   ú<module>r     s†   ðó4 Û Û 	Û 	Û Û Ý -å  ô	 	ô 	÷Xñ Xôv!
˜ô !
ôH
˜ô 
ô9Ð.ô 9òò,÷*1ñ 1ðh  °4ÀÈrô 1Ir   