
    W'Fgv                        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	 r
 " S
 S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S  S!\5      r " S" S#\5      rS$ rg)%    N   )log)OSDBc                   Z    \ rS rSrS rS r\S 5       rS rS r	S r
S rS	 rS
 rS rSrg)_DistroCache   c                     Xl         0 U l        S U l        S U l        S U l        S U l        SU l        S U l        SU l        S U l	        S U l
        S U l        S U l        S U l        g )NF)_fetcher
_filecache	_treeinfotreeinfo_familytreeinfo_versiontreeinfo_nametreeinfo_matchedsuse_contentchecked_for_suse_contentdebian_media_typemageia_versionlibosinfo_os_variantlibosinfo_mediaobjlibosinfo_treeobj)selffetchers     5/usr/share/virt-manager/virtinst/install/urldetect.py__init___DistroCache.__init__   sm    # $! % (-%!%"$(!"&!%    c                     XR                   ;  a*   U R                  R                  U5      nX R                   U'   U R                   U   $ ! [         a#  nS n[        R
                  " SX5         S nANES nAff = f)NzFailed to acquire file=%s: %s)r   r
   acquireFileContent
ValueErrorr   debug)r   pathcontentes       r   acquire_file_content!_DistroCache.acquire_file_content'   sn    &D--::4@ %,OOD!t$$	  D		94CCDs   A	 	
A6A11A6c                    U R                   (       a  U R                   $ U R                  S5      =(       d    U R                  S5      nUc  g [        R                  " 5       nUR	                  U5        UR                  SS5      U l        X l         [        R                  " SU R                  5        U R                   R                  SS5      (       aB  U R                   R                  SS5      U l
        [        R                  " SU R                  5        U R                   R                  SS5      (       aB  U R                   R                  SS5      U l        [        R                  " S	U R                  5        U R                   $ )
Nz	.treeinfotreeinfogeneralfamilyztreeinfo family=%sversionzFound treeinfo version=%snamezFound treeinfo name=%s)r   r%   configparserConfigParserread_stringgetr   r   r!   
has_optionr   r   )r   treeinfostrr(   s      r   r(   _DistroCache.treeinfo1   s#   >>>>! 00= 2%%j1 	
  ,,.[)'||Ix@!		&(<(<=>>$$Y	::$(NN$6$6y)$LD!II143H3HI>>$$Y77!%!3!3Iv!FDII.0B0BC~~r   c                     U R                   (       d  g[        [        R                  " XR                  5      5      nX l        U(       d  [        R                  " SU5        U$ )NFz%Didn't match treeinfo family regex=%s)r(   boolrematchr   r   r   r!   )r   famregexrets      r   treeinfo_family_regex"_DistroCache.treeinfo_family_regexV   sB    }}288H&:&:;< #II=xH
r   c                     U R                  U5      nUc  gUR                  5        H   n[        R                  " X$5      (       d  M     g   [        R
                  " SX5        g)z@
Fetch 'filename' and return True/False if it matches the regex
FTz+found filename=%s but regex=%s didn't match)r%   
splitlinesr6   r7   r   r!   )r   filenameregexr#   lines        r   content_regex_DistroCache.content_regex`   sX     ++H5?&&(Dxx$$ ) 			?	!r   c                    ^ ^ U U4S jn U" S5      U" S5      4/$ ! [          a    [        R                  " SSS9  / s $ f = f)zK
Pull kernel/initrd/boot.iso paths out of the treeinfo for
the passed data
c                    > TR                   R                  SS5      nTS:X  a  SnTR                   R                  SU-  U 5      $ )Nr)   archxenz	images-%s)r(   r0   )
media_name
image_typer   typs     r   _get_treeinfo_path;_DistroCache.get_treeinfo_media.<locals>._get_treeinfo_pathu   sA    **9f=Je|"
==$$[:%=zJJr   kernelinitrdz&Failed to parse treeinfo kernel/initrdT)exc_info)	Exceptionr   r!   )r   rI   rJ   s   `` r   get_treeinfo_media_DistroCache.get_treeinfo_mediap   sS    
	K	'1'13 4 4 	II>!#I	s    !A A c                     U R                   nS nSnU" U5      nUR                  S5      S:  a4  U" UR                  S5      S   5      nU" UR                  S5      S   5      n[        R                  " SXU5        XC4$ )Nc                 :     [        U 5      $ ! [         a     gf = f)Nr   )intrO   )cs    r   _safeint,_DistroCache.split_version.<locals>._safeint   s"    1v s   
 
r   .   z+converted verstr=%s to version=%s update=%s)r   countsplitr   r!   )r   verstrrV   updater+   s        r   split_version_DistroCache.split_version   s    &&	 6"<<!v||C034Gfll3/23F		?	)r   c                 6    U R                   R                  5       $ N)r
   is_isor   s    r   fetcher_is_iso_DistroCache.fetcher_is_iso   s    }}##%%r   c                 F   [         R                  " U R                  R                  5      nU(       d  gUu  U l        U l        U R
                  R                  5       (       a  U R
                  R                  5       (       d"  [        R                  " SU R
                  5        gg)NFzOlibosinfo didn't report any media kernel/initrd path for detected os_variant=%sT)
r   guess_os_by_isor
   locationr   r   get_kernel_pathget_initrd_pathr   r!   r   r9   s     r   guess_os_from_iso_DistroCache.guess_os_from_iso   s    ""4==#9#9:=@:!4#:''7799''7799 II <113 r   c                     [         R                  " U R                  R                  5      nU(       d  gUu  U l        U l        SU l        g)NFT)r   guess_os_by_treer
   rh   r   r   r   rk   s     r   guess_os_from_tree_DistroCache.guess_os_from_tree   s=    ##DMM$:$:;<?9!4#9 $r   )r
   r   r   r   r   r   r   r   r   r   r   r   r   r   N)__name__
__module____qualname____firstlineno__r   r%   propertyr(   r:   rA   rP   r^   rd   rl   rp   __static_attributes__ r   r   r   r      sD    &&% " "H &*& r   r   c                   0    \ rS rSrSrS rS rS rS rSr	g)	_SUSEContent   z0
Helper class tracking the SUSE 'content' files
c                    Xl         0 U l        U R                   R                  5        HI  nS H@  nUR                  US-   5      (       d  M  UR	                  SS5      S   U R                  U'   MB     MK     [
        R                  " SU R                  5        U R                  5       U l        U R                  5       U l
        U R                  5       U l        [
        R                  " SU R                  U R                  U R                  5        g )N)LABELDISTROVERSION	BASEARCHSDEFAULTBASEREPOID rY   zSUSE content dict: %sz<SUSE content product_name=%s product_version=%s tree_arch=%s)content_strcontent_dictr=   
startswithr[   r   r!   _get_tree_arch	tree_arch_get_product_nameproduct_name_get_product_versionproduct_version)r   r   r@   prefixs       r   r   _SUSEContent.__init__   s    &$$//1DA??6C<0004

30B10ED%%f-A 2 			)4+<+<=,,. 224#88:		  --t/C/CNN	r   c                 P   U R                   R                  S5      =(       d    U R                   R                  S5      nU(       d2  SU R                   ;   a"  U R                   S   R                  SS5      S   nU(       d  g UR                  5       nUR	                  S5      S:w  a  SnU$ )	Nr   r   r   /rY   zi586-x86_64x86_64)r   r0   rsplitstripfind)r   distro_archr   s      r   r   _SUSEContent._get_tree_arch   s    
 ((,,[9 <((,,]; 	x4+<+<<++H5<<S!DQGK%%'	>>-(B. Ir   c                     SnSU R                   ;   a  U R                   S   nOBSU R                   R                  SS5      ;   a"  U R                   S   R                  SS5      S   n[        R                  " SU5        U$ )zZ
Parse the SUSE product name. Examples:
SUSE Linux Enterprise Server 11 SP4
openSUSE 11.4
Nr}   ,r~    rY   zSUSE content product_name=%s)r   r0   r   r   r!   )r   r   s     r   r   _SUSEContent._get_product_name   sy    $ d''',,W5LD%%))(B77,,X6==c1EaHL		0,?r   c                    U R                   (       d  g U R                  R                  SS5      nSU;   a  UR                  SS5      S   nU(       dk  [        R
                  " SU R                  S   5      (       aB  U R                  S   R                  SS5      S   R                  5       R                  S	5      S
   nUR                  5       nSU R                   ;   d  SU R                   ;   a  U R                   R                  5       R                  S5      S
   n[        U R                   R                  5       R                  S5      5      S:  a5  US-   U R                   R                  5       R                  S5      S   S   -   nUnU$ )Nr   r   -rY   r   z^.*:.*,openSUSE*r~   r   :   
EnterpriseSLESr      rX   r   )	r   r   r0   r[   r6   r7   r   r   len)r   distro_versionsle_versions      r   r   !_SUSEContent._get_product_version   s]      **..y"=. +11#q9!<N HH'):):8)DEE!..x8??$uwvvc{16N'--/4,,,$:K:K0K++113::3?BK4$$**,33C89A=*S0))//188=a@C D(Nr   )r   r   r   r   r   N)
rr   rs   rt   ru   __doc__r   r   r   r   rw   rx   r   r   rz   rz      s    $$6!r   rz   c                    [         R                  " SUR                  5        U R                  R                  nU R                  R
                  nU R                  n[        U5      n[        U5      nU Hk  nUR                  U5      (       d  M  U" UR                  X4U5      n	[         R                  " SU	R                  R                  U	R                  5       5        U	s  $    U(       a  g Sn
UR                  5       (       d  S[        S5      -   n
[        S5      UR                  -  nX-  nUS-  nU[        S5      -  n[        U5      e)	Nz$Finding distro store for location=%szDetected class=%s osvariant=%sr   z: z2The URL could not be accessed, maybe you mistyped?z6Could not find an installable distribution at URL '%s'z

zrThe location must be the root directory of an install tree.
See virt-install man page for various distro examples.)r   r!   rh   osrE   os_typeosinfo_build_distro_listr   is_valid	__class__rr   get_osdict_info
can_access_r    )guestr   
skip_errorrE   _typeosobjstorescachesclassstoreextramsgmsgs               r   getDistroStorer     s-   II4g6F6FG88==DHHELLE&F!Eu%%w''e<		2oo..0E0E0G	I   HBCD EFCOC6MC1 C D DC
S/r   c                   Z    \ rS rSrSrSr/ rS rS rS r	\
S 5       rS rS	 rS
 rS rSrg)_DistroTreeiG  za
Class for determining the kernel/initrd path for an install
tree (URL, ISO, or local directory)
Nc                 B   X0l         X l        Xl        X@l        U R                  R                  (       a  U R                  R                  U l        OU R                  5       U l        U R
                  (       aM  [        R                  " U R
                  5      (       d(  [        R                  " SU R
                  5        S U l        / U l        U R                  R                  (       a+  U R                  R                  U R                   5      U l        g U R                  5         g )Nz2Detected os_variant as %s, which is not in osdict.)typerE   urir   r   _os_variant_detect_versionr   	lookup_osr   r!   _kernel_pathsr   rP   _set_manual_kernel_paths)r   rh   rE   vmtyper   s        r   r   _DistroTree.__init__O  s    		
::**#zz>>D#335Dt//00IIJ$$&#D::&&!%!>!>tyy!ID))+r   c                     g)z
If kernel/initrd path could not be determined from a source
like treeinfo, subclasses can override this to set a list
of manual paths
Nrx   rc   s    r   r   $_DistroTree._set_manual_kernel_pathsg  s    r   c                 2    [         R                  " SU 5        g)z1
Hook for subclasses to detect media os variant.
z*%s does not implement any osdict detectionN)r   r!   rc   s    r   r   _DistroTree._detect_versionn  s     			>Er   c                     [         era   )NotImplementedErrorclsr   s     r   r   _DistroTree.is_validz  s    !!r   c                     U R                   $ ra   )r   rc   s    r   get_kernel_paths_DistroTree.get_kernel_paths~  s    !!!r   c                     U R                   $ )z
Return detected osdict value
)r   rc   s    r   r   _DistroTree.get_osdict_info  s     r   c                 .    U R                   R                  $ )zF
Return an OsMedia wrapper around the detected libosinfo media object
)r   r   rc   s    r   get_os_media_DistroTree.get_os_media  s     zz,,,r   c                 .    U R                   R                  $ )zE
Return an OsTree wrapper around the detected libosinfo media object
)r   r   rc   s    r   get_os_tree_DistroTree.get_os_tree  s     zz+++r   )r   r   rE   r   r   r   )rr   rs   rt   ru   r   PRETTY_NAMEmatching_distrosr   r   r   classmethodr   r   r   r   r   rw   rx   r   r   r   r   G  sK     K,0 " "" -,r   r   c                   4    \ rS rSrSrS/r\S 5       rS rSr	g)_FedoraDistroi  Fedorafedorac                 (    SnUR                  U5      $ )Nz
.*Fedora.*r:   r   r   r8   s      r   r   _FedoraDistro.is_valid  s    **844r   c                 (   SnU R                   R                  nU(       d  [        R                  " SU5        U$ US;   a  [        R                  " SX!5        U$ SU-   n[        R
                  " U5      (       a  U$ [        R                  " SX2U5        U$ )Nzfedora-unknownz-No treeinfo version? Assume latest_variant=%s)developmentrawhideRawhidez,treeinfo version=%s, using latest_variant=%sr   zFvariant=%s from treeinfo version=%s not found, using latest_variant=%s)r   r   r   r!   r   r   )r   latest_variantr\   variants       r   r   _FedoraDistro._detect_version  s    ),,IIE"$!! ::IID,!! V#>>'""N		*+2N	L r   rx   N)
rr   rs   rt   ru   r   r   r   r   r   rw   rx   r   r   r   r     s&    K z5 5r   r   c                   8    \ rS rSrSrS/rSr\S 5       rS r	Sr
g)_RHELDistroi  zRed Hat Enterprise Linuxrhelc                 6    SnUR                  U5      (       a  gg )Nz#.*(Red Hat Enterprise Linux|RHEL).*Tr   r   s      r   r   _RHELDistro.is_valid  s"    
 9&&x00 1r   c                 B   U R                   R                  (       d  [        R                  " S5        g U R                   R	                  5       u  pU R
                  [        U5      -   nUS:  a3  USU-  -   n[        R                  " U5      (       a  U$ US-  nUS:  a  M2  g g )Nz.No treeinfo version? Not setting an os_variantr   .%srY   )	r   r   r   r!   r^   _variant_prefixstrr   r   r   r+   r]   basetryvars        r   r   _RHELDistro._detect_version  s    zz**IIFG**224 ##c'l2kEFN*F~~f%%aKF	 kr   rx   N)rr   rs   rt   ru   r   r   r   r   r   r   rw   rx   r   r   r   r     s+    ,KxO r   r   c                   2    \ rS rSrSrS/rSr\S 5       rSr	g)_CentOSDistroi  CentOScentosc                 `    UR                  S5      (       a  gUR                  S5      (       a  gg )Nz
.*CentOS.*Tz.*Scientific.*r   r   s     r   r   _CentOSDistro.is_valid  s0    &&|44&&'788 9r   rx   N)
rr   rs   rt   ru   r   r   r   r   r   rw   rx   r   r   r   r     s&    K zO r   r   c                   V    \ rS rSrSr/ r/ r\r\r	\
S 5       rS rS rS rS rS rS	rg)
_SuseDistroi  Nc                    UR                  U R                  5      (       a  gUR                  (       d-  SUl        UR                  S5      nUc  g [	        U5      Ul        UR
                  (       d  gU R                   H=  n[        R                  " XAR
                  R                  =(       d    S5      (       d  M=    g   g! [         a*  n[        R                  " S[        U5      5         S nAgS nAff = f)NTr#   Fz#Error parsing SUSE content file: %sr   )r:   r8   r   r%   rz   r   rO   r   r!   r   _suse_regexr6   r7   r   )r   r   r   r$   r?   s        r   r   _SuseDistro.is_valid  s    &&s||44---1E*44Y?K"%1+%>"
 !!__Exx11>>D"EE %   		?QHs   C   
C4
 C//C4c                    U R                   R                  R                  n[        R                  " SU5      (       a  SnSnSnUS:X  a
  US-  nUS-  nU R
                  S:X  a#  U R                  R                  SU-  S	U-  45        [        U R                  5      R                  S
5      (       aB  US:X  a  U R                  R                  S5        US:X  a  U R                  R                  S5        U R                  R                  SU-  SU-  45        U R                  R                  SU-  SU-  45        U R                  R                  SU-  SU-  45        g )Nzi[4-9]86i386linuxrM   r   64rF   zboot/%s/vmlinuz-xenzboot/%s/initrd-xen)sles11sled11s390x)zboot/s390x/vmrdr.ikrzboot/s390x/initrdppc64)zsuseboot/linux64zsuseboot/initrd64zboot/%s/linuxzboot/%s/initrdzboot/loader/%szboot/%s/loader/linuxzboot/%s/loader/initrd)r   r   r   r6   r7   r   r   appendr   r   r   )r   r   oldkernoldinits       r   r   $_SuseDistro._set_manual_kernel_paths  se   JJ++55	88K++I tOGtOG99%%&2%	134 t ++,@AAG#""))ACG#""))=? 	!!y(	)+	, 	!!'')	* 	!!#i/$y02	3r   c                    U R                   R                  (       d  g U R                   R                  R                  nU(       d  g UR                  SS5      S   R	                  5       n[        U R                  5      R                  S5      (       aY  Sn[        UR                  SS5      5      S:X  a&  SUR                  SS5      S   R	                  5       -   nU R                  U-   U-   $ U R                  U-   $ )NrX   rY   r   )slessledr   r   sp)	r   r   r   r[   r   r   r   r   r   )r   r   r+   
sp_versions       r    _detect_osdict_from_suse_content,_SuseDistro._detect_osdict_from_suse_content-  s    zz&&00@@ &&sA.q1779t##$//0@AAJ>''Q/0A5!N$8$8a$@$C$I$I$KK
'''1J>>##n44r   c                 N   Sn[         R                  " 5        Vs/ s H&  o"R                  R                  U5      (       d  M$  UPM(     nnU HR  nUR                  [	        U5      S  n[
        R                  " SU-  U R                  5      (       d  MF  UR                  s  $    g s  snf )Nopensuse/%s/)r   list_osr,   r   r   r6   searchr   )r   rootnosesr   codenames         r   _detect_osdict_from_url#_SuseDistro._detect_osdict_from_url@  sx    <<>E>aVV->->t-D>EEzz#d)*-Hyy(*DHH55zz!  Fs   #B"B"c                    U R                   R                  (       d  g [        R                  " SU R                   R                  5      (       a  gU R                   R	                  5       u  pU R
                  [        U5      -   nUS:  aQ  UnUS:  d  UR                  S5      (       d  USU-  -  n[        R                  " U5      (       a  U$ US-  nUS:  a  MP  g g )NzopenSUSE Tumbleweedopensusetumbleweedr   sler   rY   )
r   r   r6   r  r^   r   r   r   r   r   r   s        r   _detect_from_treeinfo!_SuseDistro._detect_from_treeinfoI  s    zz''99*DJJ,D,DEE'**224##c'l2kF z!7!7%&.(~~f%%aKF kr   c                     U R                  5       nU(       d  U R                  5       nU(       d  U R                  5       nU$ ra   )r(  r#  r  )r   vars     r   r   _SuseDistro._detect_version[  s7    ((*..0C779C
r   rx   )rr   rs   rt   ru   r   r  r   r   r   r8   r   r   r   r  r#  r(  r   rw   rx   r   r   r  r    sH    KK)O"H .&3P5&"$r   r  c                   .    \ rS rSrSrS/rSrSS/rSrSr	g)	_SLESDistroid  r   r  z.*SUSE Linux Enterprise Server*z.*SUSE SLES*.*SUSE Linux Enterprise.*rx   N
rr   rs   rt   ru   r   r   r   r  r8   rw   rx   r   r   r.  r.  d  s#    KxO4nEK*Hr   r.  c                   ,    \ rS rSrSrS/rSrS/rSrSr	g)_SLEDDistroil  SLEDr  z .*SUSE Linux Enterprise Desktop*r/  rx   Nr0  rx   r   r   r2  r2  l  s!    KxO56K*Hr   r2  c                   ,    \ rS rSrSrS/rSrS/rSrSr	g)_OpensuseDistroit  openSUSEr  z.*openSUSE.*rx   Nr0  rx   r   r   r5  r5  t  s!    K"| O!"KHr   r5  c                   P    \ rS rSrSrS/rSr\S 5       rS r	S r
S rS rS	 rS
rg)_DebianDistroi|  Debiandebianc                 B  ^ ^ UU 4S jnS nU" S5      (       a  SnOlU" S5      (       a  SnO\U" S5      (       a  SnOLTR                  SS	T R                  R                  5       -  5      (       a  TR                  5       (       a  S
nOSnU(       a  UTl        [        U5      $ )Nc                 x   > TR                   S:H  nTR                  U S5      (       a  U$ TR                  U S5      $ )Nubuntuz.*[Uu]buntu.*z.*[Dd]ebian.*)_debnamerA   )mfile	is_ubuntur   r   s     r   check_manifest._DebianDistro.is_valid.<locals>.check_manifest  s=    0I""5/::  &&uo>>r   zcurrent/images/MANIFESTurlzcurrent/legacy-images/MANIFEST
legacy_urlzdaily/MANIFESTdailyz
.disk/infoz%s.*diskmounted_iso_url)rA   r>  
capitalizerd   r   r5   )r   r   rA  
media_types   ``  r   r   _DebianDistro.is_valid  s    	? 
344J<==%J,-- J  00224 4 ##%%#
.
&0E#Jr   c                 z    U R                   R                  S:X  a  U R                  5         g U R                  5         g )NrF  )r   r   _set_installcd_paths_set_url_pathsrc   s    r   r   &_DebianDistro._set_manual_kernel_paths  s,    ::''61%%'!r   c                 P   S HK  n[         R                  " XR                  5      nU(       d  M,  [        R                  " SXS   5        US   s  $    S H5  nX R                  ;   d  M  [        R                  " SU5        US:X  a  SnUs  $    Sn[        R                  " S	U5        U$ )
N)z^.*/installer-(\w+)/?$z^.*/daily-images/(\w+)/?$z#Found pattern=%s treearch=%s in urir   )r  amd64r   arm64zFound treearch=%s in urir   rP  r  z/No treearch found in uri, defaulting to arch=%s)r6   findallr   r   r!   )r   patternrE   s      r   _find_treearch_DebianDistro._find_treearch  s    6G::gxx0DII;a"7N6 9Dxx		4d;8#"D 9 		CTJr   c                     SnU R                   R                  S:X  a  SnO9U R                   R                  S:X  a  SnOU R                   R                  S:X  a  SnU R                  5       nU< SU R                  < SU< S	3nS
nSnUS;   a  SnUS:X  a#  SU-  nSU R                  -  nSU R                  -  nU R                  S:X  a(  SU-  nU R
                  R                  US-   US
-   45        U R
                  R                  X5-   X4-   45        g )Nzcurrent/imagesrE  rG  installrD  zcurrent/legacy-imagesz	/netboot/z-installer/r   z	initrd.gzr	  )ppc64elvmlinuxr  z%s/generic/z	kernel.%sz	initrd.%srF   z%s/netboot/xen/vmlinuz)r   r   rT  r>  r   r   r  )r   
url_prefixr   hvmrootinitrd_basenamekernel_basenamexenroots          r   rM  _DebianDistro._set_url_paths  s   %
::''72 JZZ))->>"JZZ))\90J'')	3=y*%!#'O#j0G)DMM9O)DMM9O 99'*4G%%y('K*?@B!!*G,EF	Hr   c                 >   U R                   S:X  a  U R                  S:X  d  SnOdSnOaU R                  S:X  a  SnONU R                  S:X  a  SnO;U R                  S	:X  a  S
nO(U R                  S:X  a  SnOU R                  S:X  a  SnOSnU =R                  U/-  sl        g)Nr=  r  )zinstall/vmlinuzinstall/initrd.gz)zboot/kernel.ubuntuzboot/initrd.ubuntur   )zinstall.amd/vmlinuzzinstall.amd/initrd.gzi686)zinstall.386/vmlinuzzinstall.386/initrd.gzaarch64)zinstall.a64/vmlinuzzinstall.a64/initrd.gzppc64le)zinstall/vmlinuxrb  )zboot/linux_vmzboot/root.binT)r>  rE   r   )r   kpairs     r   rL  "_DebianDistro._set_installcd_paths  s    ==H$99'@DYY("DEYY& DEYY)#DEYY)#<EYY'!6E<Eug%r   c                    [         R                  " 5        Vs/ s H0  oR                  R                  U R                  5      (       d  M.  UPM2     nnU R
                  R                  S:X  a  [        R                  " S5        gU H  nUR                  (       a,  UR                  R                  5       S   R                  5       nO=SUR                  ;  a  MR  UR                  R                  5       S   R                  5       nSU-  U R                  ;   d  M  [        R                  " SU5        UR                  s  $    g s  snf )	NrE  z<Appears to be debian 'daily' URL, using latest debiantestingdebiantestingr   r   rY   r  z#Found codename=%s in the URL string)r   r  r,   r   r>  r   r   r   r!   r"  r[   lowerlabelr   )r   r   r!  r   r"  s        r   r   _DebianDistro._detect_version  s    <<>N>aVV->->t}}-M>N::''72II   !"E~~ >>//1!4::<ekk) ;;,,.q1779!dhh.		?Jzz!  Os   -D>	D>rx   N)rr   rs   rt   ru   r   r   r>  r   r   r   rT  rM  rL  r   rw   rx   r   r   r8  r8  |  sC     K zH   @"0H<*"r   r8  c                   "    \ rS rSrSrS/rSrSrg)_UbuntuDistroi  Ubuntur=  rx   N)rr   rs   rt   ru   r   r   r>  rw   rx   r   r   rn  rn    s    K zHr   rn  c                   :    \ rS rSrSrS/r\S 5       rS rS r	Sr
g)	_MageiaDistroi  Mageiamageiac                     UR                   (       dN  UR                  S5      nU(       d  g[        R                  " SU5      nU(       d  gUR	                  S5      Ul         [        UR                   5      $ )Nr   Fz^Mageia (\d+) .*rY   )r   r%   r6   r7   groupr5   )r   r   r#   ms       r   r   _MageiaDistro.is_valid  sY    ##00;G,g6A#$771:E E(())r   c                 h    U =R                   SU R                  -  SU R                  -  4/-  sl         g )Nzisolinux/%s/vmlinuzzisolinux/%s/all.rdz)r   rE   rc   s    r   r   &_MageiaDistro._set_manual_kernel_paths(  s5    "TYY."TYY.01 	1r   c                 p    SU R                   R                  -   n[        R                  " U5      (       a  U$ g )Nrs  )r   r   r   r   )r   r   s     r   r   _MageiaDistro._detect_version-  s/    TZZ666>>'""N #r   rx   N)rr   rs   rt   ru   r   r   r   r   r   r   rw   rx   r   r   rq  rq    s+    K z* *1
r   rq  c                   0    \ rS rSrSrSr/ r\S 5       rSr	g)_GenericTreeinfoDistroi4  z4
Generic catchall class for .treeinfo using distros
zGeneric Treeinfoc                 6    UR                   (       a  SUl        gg)NTF)r(   r   r   s     r   r   _GenericTreeinfoDistro.is_valid;  s    >>%)E"r   rx   N)
rr   rs   rt   ru   r   r   r   r   r   rw   rx   r   r   r}  r}  4  s&     %K r   r}  c                   6    \ rS rSrSrSr/ r\S 5       rS r	Sr
g)_LibosinfoDistroiC  z=
For ISO media detection that was fully handled by libosinfo
zLibosinfo detectedc                 l    UR                  5       (       a  UR                  5       $ UR                  5       $ ra   )rd   rl   rp   r   s     r   r   _LibosinfoDistro.is_validJ  s/    !!**,,''))r   c                     U =R                   U R                  R                  R                  5       U R                  R                  R	                  5       4/-  sl         g ra   )r   r   r   ri   rj   rc   s    r   r   )_LibosinfoDistro._set_manual_kernel_pathsP  sJ    ..>>@..>>@B
 	
r   rx   N)rr   rs   rt   ru   r   r   r   r   r   r   rw   rx   r   r   r  r  C  s+     'K* *

r   r  c                    [         [        [        [        [        [
        [        [        [        [        [        /nU R                  (       a  [        R                  " SU R                  U R                  5        S nU H!  nU R                  UR                  ;   d  M  UnM#     U(       a;  [        R                  " SU5        UR!                  U5        UR#                  SU5        O[        R                  " S5        [$        R&                  R)                  S5      nU(       a7  [+        [-        U5      5      (       a	  [         /nU$ UR!                  [         5        U$ )NzIvariant=%s has distro=%s, looking for matching distro store to prioritizezPrioritizing distro store=%sr   z2No matching store found, not prioritizing anything#VIRTINST_TEST_SUITE_FORCE_LIBOSINFO)r  r   r   r   r.  r2  r5  r8  rn  rq  r}  distror   r!   r,   r   removeinsertr   environr0   r5   rT   )r   	allstoresfound_storer   force_libosinfos        r   r   r   W  s    	I$ ||		 3jj%,,	0 E||u555#  II4kB[)Q,IIJKjjnn%JKOO$%%)*I  -.r   )r-   r   r6   loggerr   osdictr   objectr   rz   r   r   r   r   r   r  r.  r2  r5  r8  rn  rq  r}  r  r   rx   r   r   <module>r     s     	 	  _6 _Dd6 dN$VJ,& J,Z K  F+ B
K 
{+ {|++ +++ +k N"K N"bM K @[ 
{ 
(*r   