Ë
    9môe‡  ã                   ó€  — d dl mZ d dlZd dlmZ d dlZd dlZd dlZd dlZd dl	Z	d dl
Z
	 d dlZd dl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 dej0                  v r8ej2                  j5                  dd«       ej2                  j5                  dd«        G d	„ d
e«      Z G d„ de«      Zy# e$ r dZY ŒŽw xY w)é    )Úprint_functionN)ÚFetchFailedException)ÚBytesIOÚopenÚAPT_CLONE_DEBUG_RESOLVERzDebug::pkgProblemResolverÚ1zDebug::pkgDepCache::AutoInstallc                   ó:   — e Zd ZdZdZd„ Zd„ Zd
d„Zd„ Zd„ Z	d	„ Z
y)ÚLowLevelCommandszN calls to the lowlevel operations to install debs
        or repack a deb
    z/usr/bin/dpkg-repackc                 óœ   — |syddg}|dk7  r$|j                  dd«       |j                  d|«       t        j                  ||z   «      }|dk(  S )NTÚdpkgz-iú/r   Úchrooté   )ÚinsertÚ
subprocessÚcall)ÚselfÚdebfilesÚ	targetdirÚinstall_cmdÚrets        ú7/usr/lib/python3/dist-packages/DistUpgrade/apt_clone.pyÚinstall_debszLowLevelCommands.install_debs6   sV   € ÙØØ˜t�nˆØ˜ÒØ×Ñ˜q (Ô+Ø×Ñ˜q )Ô,Ü�o‰o˜k¨HÑ4Ó5ˆØ�q‘Ðó    c                 óZ  — t         j                  j                  | j                  «      st	        d| j                  z  «      ‚| j                  g}t        j
                  «       dk(  s't         j                  j                  d«      syddg|z   }t        j                  ||gz   |¬«      }|dk(  S )z$ dpkg-repack pkgname into targetdir zno '%s' foundr   z/usr/bin/fakerootNÚfakerootz-u)Úcwd)ÚosÚpathÚexistsÚdpkg_repackÚIOErrorÚgetuidr   r   )r   Úpkgnamer   Ú
repack_cmdr   s        r   Ú
repack_debzLowLevelCommands.repack_deb@   sŽ   € ä�w‰w�~‰~˜d×.Ñ.Ô/Ü˜/¨D×,<Ñ,<Ñ<Ó=Ð=Ø×&Ñ&Ð'ˆ
Ü�y‰y‹{˜aÒÜ—7‘7—>‘>Ð"5Ô6ØØ$ dÐ+¨jÑ8ˆJÜ�o‰o˜j¨G¨9Ñ4¸)ÔDˆØ�q‘Ðr   Nc                 ó¨   — |€t         rt        j                  «       d   }|€t        j                  d«      }t        j                  d||g«      }|dk(  S )NÚCODENAMEzlsb_release --codename --shortÚdebootstrapr   )Úlsb_releaseÚget_distro_informationr   Ú	getoutputr   )r   r   Údistror   s       r   r)   zLowLevelCommands.debootstrapL   sQ   € Øˆ>�kÜ ×7Ñ7Ó9¸*ÑEˆFØˆ>Ü×)Ñ)Ð*JÓKˆFÜ�o‰o˜}¨f°iÐ@ÓAˆØ�q‘Ðr   c                 ó@   — t        j                  dd|d|g«      }|dk(  S )Nzapt-keyz	--keyringÚaddr   ©r   r   )r   ÚfromkeyfileÚintokeyfiler   s       r   Ú
merge_keyszLowLevelCommands.merge_keysT   s*   € Ü�o‰o˜y¨+°{Ø$ kð3ó 4ˆà�q‘Ðr   c                 ó>   — t        j                  dd||g«      }|dk(  S )NÚmountz--bindr   r0   )r   ÚolddirÚnewdirr   s       r   Ú
bind_mountzLowLevelCommands.bind_mountY   s#   € Ü�o‰o˜w¨°&¸&ÐAÓBˆØ�q‘Ðr   c                 ó:   — t        j                  d|g«      }|dk(  S )NÚumountr   r0   )r   Úbinddirr   s      r   Úbind_umountzLowLevelCommands.bind_umount]   s   € Ü�o‰o˜x¨Ð1Ó2ˆØ�q‘Ðr   ©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r   r&   r)   r3   r8   r<   © r   r   r
   r
   0   s,   „ ñð )€Kòò
óòò
ór   r
   c                   ó"  — e Zd ZdZd ej
                  «       d   z  ZdZ	 	 d&d„Z	 	 d'd„Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd(d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd)d„Z	 	 d*d„Zd+d„Zd+d„Zd„ Zd,d„Z d„ Z!d „ Z"d!„ Z#d"„ Z$d-d#„Z%d)d$„Z&d%„ Z'y).ÚAptClonezÙ clone the package selection/installation of a existing system
        using the information that apt provides

        If dpkg-repack is installed, it will be used to generate debs
        for the obsolete ones.
    zapt-clone-state-%s.tar.gzr   ú./Nc                 óx  — t        «       | _        t        «       | _        t        «       | _        |r|| _        n-t        j                  j                  j                  «       | _        |r|| _
        n-t        j                  j                  j                  «       | _
        |r|| _        y t        j                  | _        y r=   )ÚsetÚnot_downloadableÚversion_mismatchr
   ÚcommandsÚfetch_progressÚaptÚprogressÚtextÚAcquireProgressÚinstall_progressÚbaseÚInstallProgressÚ
_cache_clsÚCache)r   rK   rP   Ú	cache_clss       r   Ú__init__zAptClone.__init__m   sƒ   € ä #£ˆÔÜ #£ˆÔÜ(Ó*ˆŒáØ"0ˆDÕä#&§<¡<×#4Ñ#4×#DÑ#DÓ#FˆDÔáØ$4ˆDÕ!ä$'§L¡L×$5Ñ$5×$EÑ$EÓ$GˆDÔ!ñ Ø'ˆD�Oä!Ÿi™iˆD�Or   c                 ór  — t         j                  j                  |«      r+t         j                  j                  || j                  «      }n|j                  d«      s|dz  }|dk7  r†t        j                  «        t        j                  j                  d|«       t        j                  j                  dt         j                  j                  |d«      «       t        j                  «        t        j                  |d¬«      5 }| j                  |«       | j                  ||«       | j                  |«       | j!                  ||«       | j#                  |«       | j%                  |«       | j'                  ||«       |r| j)                  |«       |r| j+                  |«       d	d	d	«       y	# 1 sw Y   y	xY w)
zŽ save the current system state (installed pacakges, enabled
            repositories ...) into the apt-state.tar.gz file in targetdir
        z.tar.gzz.apt-clone.tar.gzr   ÚDirúDir::State::statuszvar/lib/dpkg/statuszw:gz)ÚnameÚmodeN)r   r   ÚisdirÚjoinÚCLONE_FILENAMEÚendswithÚapt_pkgÚinit_configÚconfigrG   Úinit_systemÚtarfiler   Ú_write_unameÚ_write_state_installed_pkgsÚ_write_state_auto_installedÚ_write_state_sources_listÚ_write_state_apt_preferencesÚ_write_state_apt_keyringÚ_write_state_extra_filesÚ_write_state_dpkg_statusÚ_dpkg_repack)r   Ú	sourcedirÚtargetÚwith_dpkg_repackÚwith_dpkg_statusÚscrub_sourcesÚextra_filesÚtars           r   Ú
save_statezAptClone.save_state…   sQ  € ô �7‰7�=‰=˜Ô Ü—W‘W—\‘\ &¨$×*=Ñ*=Ó>‰Fà—?‘? 9Ô-ØÐ-Ñ-�à˜ÒÜ×ÑÔ!Ü�N‰N×Ñ˜u iÔ0Ü�N‰N×ÑÐ3Ü!Ÿw™wŸ|™|¨IÐ7LÓMôOä×ÑÔ!ä�\‰\˜v¨FÔ3ð 	'°sØ×Ñ˜cÔ"Ø×,Ñ,¨Y¸Ô<Ø×,Ñ,¨SÔ1Ø×*Ñ*¨3°Ô>Ø×-Ñ-¨cÔ2Ø×)Ñ)¨#Ô.Ø×)Ñ)¨+°sÔ;ÙØ×-Ñ-¨cÔ2ÙØ×!Ñ! #Ô&÷	'÷ 	'ñ 	'ús   ÄB!F-Æ-F6c                 óÌ   — t        j                  «       d   t        j                  «       d   t        j                  «       d   t        j                  j	                  d«      dœ}|S )Nr   é   é   zAPT::Architecture)ÚhostnameÚkernelÚ
uname_archÚarch)r   Úunamer`   rb   Úfind)r   Ú	host_infos     r   Ú_get_host_info_dictzAptClone._get_host_info_dict¥   sK   € ä%'§X¡X£Z°¡]Ü&(§h¡h£j°¡mÜ&(§h¡h£j°¡mÜ&-§n¡n×&9Ñ&9Ð:MÓ&Nñˆ	ð
 Ðr   c           	      óL  — | j                  «       }t        j                  d¬«      }dj                  |j	                  «       D ��cg c]  \  }}|›d|›�‘Œ c}}«      }|j                  |dz   «       |j                  «        |j                  |j                  d¬«       y c c}}w )NÚw©r[   ú
z: z./var/lib/apt-clone/uname©Úarcname)	r€   ÚtempfileÚNamedTemporaryFiler]   ÚitemsÚwriteÚflushr/   rZ   )r   rt   r   ÚfÚkeyÚvalueÚinfos          r   re   zAptClone._write_uname®   s‹   € Ø×,Ñ,Ó.ˆ	ä×'Ñ'¨SÔ1ˆØ�y‰yØ.7¯o©oÓ.?÷AÙ*˜s Eò '*©5Ò1ó Aó Bˆà	�‰��T‘	ÔØ	�‰Œ	Ø�‰�—‘Ð ;ˆÕ<ùó	As   ÁB 
c                 óx   — |€y |D ]2  }t        j                   |«      D ]  }|j                  |d|z   ¬«       Œ Œ4 y )Nz./extra-filesr…   )Úglobr/   )r   rs   rt   ÚprŒ   s        r   rk   z!AptClone._write_state_extra_files¸   sF   € ØÐØØò 	6ˆAÜ—Y‘Y˜q“\ò 6�Ø—‘˜ ?°1Ñ#4�Õ5ñ6ñ	6r   c           	      ó>  — | j                  |¬«      }d}d}t        rt        j                  «       d   }nt        j                  d«      }|D �]z  }|j
                  sŒ||j                  ›d|j                  j                  ›dt        |j                  «      ›d�z  }|j                  r|j                  j                  s&| j                  j                  |j                  «       nQ|j                  j                  r|j                  j                  s%| j                  j                  |j                  «       |j                  j                   D ]y  }|j"                  dk(  r|j$                  dk(  rŒ"|j$                  |k7  rG||j                  ›d|j                  j                  ›d|j$                  dk7  r|j$                  nd›d�z  } �Œz �Œ} t'        j(                  d	«      }	|j+                  d
«      }t-        |«      |	_        t1        j0                  «       |	_        |j5                  |	t7        |«      «       t'        j(                  d«      }	|j+                  d
«      }t-        |«      |	_        t1        j0                  «       |	_        |j5                  |	t7        |«      «       y )N©ÚrootdirÚ ÚIDzlsb_release --id --shortú r„   ÚnowÚunknownz"./var/lib/apt-clone/installed.pkgsúutf-8z ./var/lib/apt-clone/foreign.pkgs)rS   r*   r+   r   r,   Úis_installedrZ   Ú	installedÚversionÚintÚis_auto_installedÚ	candidateÚdownloadablerH   r/   rI   ÚoriginsÚarchiveÚoriginrd   ÚTarInfoÚencodeÚlenÚsizeÚtimeÚmtimeÚaddfiler   )
r   rn   rt   ÚcacheÚsÚforeignÚ	distro_idÚpkgÚoÚtarinfos
             r   rf   z$AptClone._write_state_installed_pkgs¿   s÷  € Ø—‘¨	�Ó2ˆØˆØˆÝÜ#×:Ñ:Ó<¸TÑB‰Iä"×,Ñ,Ð-GÓHˆIØó 	ˆCØ×ÓàØ—H“H˜cŸm™m×3Ó3´S¸×9NÑ9NÕ5OðQñ Q�à—}’}¨C¯M©M×,FÒ,FØ×)Ñ)×-Ñ-¨c¯h©hÕ7ØŸ-™-×4Ò4ØŸ-™-×4Ò4Ø×)Ñ)×-Ñ-¨c¯h©hÔ7ØŸ™×.Ñ.ò �AØ—y‘y EÒ)¨a¯h©h¸"ªnØ Ø—x‘x 9Ò,ØØŸH›H c§m¡m×&;Ó&;Ø()¯©°Bª˜AŸHšH¸IÑEð$Gñ G˜ò òð	ô& —/‘/Ð"FÓGˆØ�H‰H�WÓˆÜ˜1“vˆŒÜŸ	™	›ˆŒØ�‰�GœW Q›ZÔ(ä—/‘/Ð"DÓEˆØ—.‘. Ó)ˆÜ˜7“|ˆŒÜŸ	™	›ˆŒØ�‰�GœW WÓ-Õ.r   c                 óh   — t         j                  j                  d«      }|j                  |d¬«       y )Núdir::state::statusz./var/lib/apt-clone/dpkg-statusr…   )r`   rb   Ú	find_filer/   )r   rt   Údpkg_statuss      r   rl   z!AptClone._write_state_dpkg_statusæ   s*   € ô —n‘n×.Ñ.Ð/CÓDˆØ�‰�Ð%FˆÕGr   c                 ó¦   — t         j                  j                  d«      }t        j                  j                  |«      r|j                  |d«       y y )NzDir::State::extended_statesz#./var/lib/apt-clone/extended_states)r`   rb   r¶   r   r   r    r/   )r   rt   Úextended_statess      r   rg   z$AptClone._write_state_auto_installedí   s=   € Ü!Ÿ.™.×2Ñ2Ø)ó+ˆä�7‰7�>‰>˜/Ô*Ø�G‰G�OÐ%JÕKð +r   c                 óL  — t         j                  j                  d«      }t        j                  j                  |«      r|j                  |d¬«       t         j                  j                  dd«      }t        j                  j                  |«      r|j                  |d¬«       y y )NzDir::Etc::preferencesz./etc/apt/preferencesr…   zDir::Etc::preferencespartsz/etc/apt/preferences.dz./etc/apt/preferences.d©r`   rb   r¶   r   r   r    r/   Úfind_dir©r   rt   rŒ   r’   s       r   ri   z%AptClone._write_state_apt_preferencesó   sx   € Ü�N‰N×$Ñ$Ð%<Ó=ˆÜ�7‰7�>‰>˜!ÔØ�G‰G�AÐ6ˆGÔ7Ü�N‰N×#Ñ#Ð$@Ø$<ó>ˆä�7‰7�>‰>˜!ÔØ�G‰G�AÐ8ˆGÕ9ð r   c                 óL  — t         j                  j                  d«      }t        j                  j                  |«      r|j                  |d¬«       t         j                  j                  dd«      }t        j                  j                  |«      r|j                  |d¬«       y y )NzDir::Etc::trustedz./etc/apt/trusted.gpgr…   zDir::Etc::trustedpartsz/etc/apt/trusted.gpg.dz./etc/apt/trusted.gpg.dr»   r½   s       r   rj   z!AptClone._write_state_apt_keyringü   sx   € Ü�N‰N×$Ñ$Ð%8Ó9ˆÜ�7‰7�>‰>˜!ÔØ�G‰G�AÐ6ˆGÔ7Ü�N‰N×#Ñ#Ð$<Ø$<ó>ˆä�7‰7�>‰>˜!ÔØ�G‰G�AÐ8ˆGÕ9ð r   c                 ó*  — t         j                  j                  d«      }| j                  |||d«       t         j                  j	                  d«      }t
        j                  j                  |«      r¢|j                  |dd¬«       t        j                  |«      D ]u  }|j                  d«      rŒ|j                  d«      s|j                  d	«      sŒ8|›d
|›�}t
        j                  j                  |«      rŒ_| j                  |||d|z   «       Œw y y )NúDir::Etc::sourcelistz./etc/apt/sources.listúDir::Etc::sourcepartsz./etc/apt/sources.list.dF)r†   Ú	recursiveú.z.listz.sourcesr   z./etc/apt/sources.list.d/)r`   rb   r¶   Ú$_add_file_to_tar_with_password_checkr¼   r   r   r    r/   ÚlistdirÚ
startswithr_   r\   )r   rt   ÚscrubÚsources_listÚsource_partsÚsourceÚsources_file_names          r   rh   z"AptClone._write_state_sources_list  sð   € Ü—~‘~×/Ñ/Ð0FÓGˆØ×1Ñ1°#°|ÀUØ$ô	&ä—~‘~×.Ñ.Ð/FÓGˆÜ�7‰7�>‰>˜,Ô'Ø�G‰G�LÐ*DØ#ð ô %äŸ*™* \Ó2ò 
8�Ø×$Ñ$ SÔ)ØØŸ™¨Ô0°F·O±OÀJÔ4OØÚ/;¹VÐ$DÐ!Ü—7‘7—=‘=Ð!2Ô3ØØ×9Ñ9¸#Ø% uØ/°Ñ6õ8ñ
8ð (r   c                 ó*  — |ræt        j                  d¬«      5 }t        |d«      5 }|j                  «       D ]�  }t	        |«      t
        u r|j                  d«      }t        j                  d|«      rt        j                  dd|«      }|j                  |j                  d«      «       |j                  «        Œƒ |j                  |j                  |¬«       d d d «       d d d «       y |j                  ||¬«       y # 1 sw Y   Œ&xY w# 1 sw Y   y xY w)	NÚwbrƒ   ÚrbzUTF-8z/[^/@:]*:[^/@:]*@z/USERNAME:PASSWORD@r›   r…   )r‡   rˆ   r   Ú	readlinesÚtypeÚbytesÚdecodeÚreÚsearchÚsubrŠ   r§   r‹   r/   rZ   )r   rt   ÚsourcesrÇ   r†   Úsource_copyrŒ   Úlines           r   rÄ   z-AptClone._add_file_to_tar_with_password_check  sô   € ÙÜ×,Ñ,°$Ô7ð ;¸;ÌÈWÐVZÓH[ð ;Ð_`ØŸK™K›Mò (�Dä˜D“z¤UÑ*Ø#Ÿ{™{¨7Ó3˜Ü—y‘yÐ!4°dÔ;Ü!Ÿv™vÐ&9Ø1°4ó 9˜ð  ×%Ñ% d§k¡k°'Ó&:Ô;Ø×%Ñ%Õ'ð(ð —‘˜×(Ñ(°'�Ô:÷;÷ ;ð ;ð  �G‰G�G WˆGÕ-÷!;ð ;ú÷ ;ð ;ús#   ™D	¦B2C=ÃD	Ã=D	ÄD	Ä	Dc                  ó   — y r=   rB   ©r   rt   s     r   Ú_write_modified_files_from_etcz'AptClone._write_modified_files_from_etc-  s   € àr   c                 óÖ   — t        j                  «       }| j                  D ]  }| j                  j	                  ||«       Œ  |j                  |d¬«       t        j                  |«       y )Nú./var/lib/apt-clone/debsr…   )r‡   ÚmkdtemprH   rJ   r&   r/   ÚshutilÚrmtree)r   rt   Útdirr$   s       r   rm   zAptClone._dpkg_repack1  sV   € Ü×ÑÓ!ˆØ×,Ñ,ò 	4ˆGØ�M‰M×$Ñ$ W¨dÕ3ð	4à�‰�Ð8ˆÔ9Ü�‰�dÕr   c                 óf   — |j                  «       d   j                  d«      rd| _        y d| _        y )NéÿÿÿÿrE   r–   )ÚgetnamesrÆ   Ú	TARPREFIXrÚ   s     r   Ú_detect_tarprefixzAptClone._detect_tarprefix:  s)   € à�<‰<‹>˜"Ñ×(Ñ(¨Ô.Ø!ˆD�NàˆD�Nr   c                 óÔ  — t        j                  |«      5 }| j                  |«       |j                  | j                  dz   «      }|j                  «       D ]{  }|j                  d«      }|j                  d«      s|j                  «       dk(  rŒ9|j                  «       }t        |«      dkD  sŒX|d   j                  d«      rŒm|d   c cd d d «       S  	 d d d «       y # 1 sw Y   y xY w)Nzetc/apt/sources.listr›   ú#r–   rw   r   )rd   r   ræ   Úextractfilerå   rÏ   rÒ   rÆ   ÚstripÚsplitr¨   r_   )r   Ú	statefilert   rŒ   rØ   Úls         r   Ú_get_info_distrozAptClone._get_info_distroB  sÇ   € Ü�\‰\˜)Ó$ð 
	 ¨Ø×"Ñ" 3Ô'à—‘ §¡Ð/EÑ EÓFˆAØŸ™›ò  �Ø—{‘{ 7Ó+�Ø—?‘? 3Ô'¨4¯:©:«<¸2Ò+=ØØ—J‘J“L�Ü�q“6˜A“: a¨¡d§m¡m°CÕ&8Ø˜Q™4‘K÷
	 ñ 
	 ñ ÷	
	 ð ÷
	 ð ús   –BCÂ.CÃCÃCÃC'c           	      ó†  — | j                  |«      xs d}t        j                  |«      5 }|j                  | j                  dz   «      }dx}}g }|j                  «       D ]m  }|j                  d«      }|j                  «       j                  «       \  }	}
}|dz  }t        |«      r|dz  }|	j                  d«      sŒ]|j                  |	«       Œo |j                  | j                  dz   «      }|j                  }d}d}| j                  dz   |j                  «       v re|j                  | j                  dz   «      j                  «       }t!        j"                  |«      }|j%                  dd«      }|j%                  d	d«      }||d
j'                  |«      ||t)        j*                  |«      |dœcd d d «       S # 1 sw Y   y xY w)Nrš   ú var/lib/apt-clone/installed.pkgsr   r›   r   z-desktopzvar/lib/apt-clone/unamery   r|   z, )ry   r-   Úmetar�   ÚautoinstalledÚdater|   )rî   rd   r   ré   rå   rÏ   rÒ   rê   rë   rŸ   r_   ÚappendÚ	getmemberr«   rä   Úreadr`   Ú
TagSectionÚgetr]   rª   Úctime)r   rì   r-   rt   rŒ   r�   rò   rñ   rØ   rZ   rž   ÚautoÚmró   ry   r|   r�   Úsections                     r   Ú_get_clone_info_dictzAptClone._get_clone_info_dictP  s¡  € Ø×&Ñ& yÓ1Ò>°Yˆä�\‰\˜)Ó$ð #	¨Ø—‘Ø—‘Ð!CÑCóEˆAà()Ð)ˆI˜ØˆDØŸ™›ò 	&�Ø—{‘{ 7Ó+�Ø(,¯
©
«×(:Ñ(:Ó(<Ñ%��w Ø˜Q‘�	Ü�t”9Ø! QÑ&�Mð —=‘= Õ,Ø—K‘K Õ%ð	&ð —‘Ø—‘Ð!CÑCóEˆAà—7‘7ˆDà ˆHØˆDØ�~‰~Ð7Ñ7¸3¿<¹<»>ÑIØ—‘Ø—N‘NÐ%>Ñ>ó@ß@DÁÃð ä!×,Ñ,¨TÓ2�Ø"Ÿ;™; z°9Ó=�Ø—{‘{ 6¨9Ó5�Ø"*Ø &Ø"Ÿi™i¨›oØ#,Ø'4Ü"Ÿj™j¨Ó.Ø"ñ÷9#	÷ #	ò #	ús   «BF7Â=C0F7Æ7G c                 ó*   — d| j                  |«      z  S )Nz“Hostname: %(hostname)s
Arch: %(arch)s
Distro: %(distro)s
Meta: %(meta)s
Installed: %(installed)s pkgs (%(autoinstalled)s automatic)
Date: %(date)s
)rý   )r   rì   s     r   r�   zAptClone.infox  s#   € ð"ð
 %)×$=Ñ$=¸iÓ$HñIð 	Ir   c                 óH  — t        j                  |«      5 }| j                  |«       |j                  | j                  |dd  z   «      }g }|j                  «       D ]"  }|j                  |j                  d«      «       Œ$ 	 d d d «       ||z   }t        j                  j                  |«      r%t        |«      5 }|j                  «       }	d d d «       ng }	t        j                  	d|z  |¬«      }
g }|
D ]  }|j                  |«       Œ |S # 1 sw Y   ŒŒxY w# 1 sw Y   ŒMxY w)Nr   r›   zcurrent-system%s)ÚfromfileÚtofile)rd   r   ræ   ré   rå   rÏ   rô   rÒ   r   r   r    ÚdifflibÚunified_diff)r   rì   Úsystem_filer   rt   Ú
clone_fileÚclone_file_linesrØ   ÚfpÚsystem_file_linesÚgenÚdiffs               r   Ú_get_file_diff_against_clonez%AptClone._get_file_diff_against_clone�  s#  € Ü�\‰\˜)Ó$ð 	>¨Ø×"Ñ" 3Ô'ØŸ™¨¯©¸ÀAÀB¸Ñ)GÓHˆJØ!Ðð #×,Ñ,Ó.ò >�Ø ×'Ñ'¨¯©°GÓ(<Õ=ñ>÷	>ð   Ñ+ˆÜ�7‰7�>‰>˜+Ô&Ü�kÓ"ð 3 bØ$&§L¡L£NÐ!÷3ð 3ð !#ÐÜ×"Ñ"ØÐ/Ø'¨+Ñ5¸kôKˆð ˆØò 	ˆDØ�K‰K˜Õð	àˆ÷)	>ð 	>ú÷3ð 3ús   –A*DÂ8DÄDÄD!c                 óÂ  — |dk7  r t         j                  j                  d|«       t        d«       | j	                  «       }| j                  |«      }|D ]]  }|j                  |d «      |j                  |d «      k7  sŒ)t        d|›d|j                  |d «      ›d|j                  |d «      ›d�«       Œ_ t        d«       d	}| j                  |||«      }|rt        dj                  |«      «       | j                  |¬
«      }t        j                  |«      5 }	|	j                  | j                  dz   «      }
i }|
j                  «       D ]S  }|j                  «       j!                  d«      }|j#                  d«      s|dk(  rŒ9|j%                  «       \  }}}||f||<   ŒU 	 d d d «       i }|D ]G  }|j&                  sŒ|j&                  j(                  t+        |j,                  «      f||j.                  <   ŒI t        |j1                  «       «      t        j1                  «       «      z
  }|r9t        d«       t        dj                  t3        |«      «      «       t        d«       t        |j1                  «       «      t        |j1                  «       «      z
  }|r9t        d«       t        dj                  t3        |«      «      «       t        d«       t        «       }t3        |«      D ]1  }||vrŒ||   \  }}||   \  }}||k7  sŒ|j5                  |||f«       Œ3 |r7t        d«       t        d«       |D ]  \  }}}t        d|›d|›d|›d�«       Œ y y # 1 sw Y   �Œ·xY w)Nr   úDPkg::Chroot-DirectoryzClone info differences: z 'z
': clone='z
' system='ú'r–   z/etc/apt/sources.listr”   rð   r›   rè   z2Installed on the system but not in the clone-file:r˜   r„   z2Installed in the clone-file but not in the system:zVersion differences: z-Pkgname <clone-file-version> <system-version>z  <z>   <ú>)r`   rb   rG   Úprintr€   rý   rø   r  r]   rS   rd   r   ré   rå   rÏ   rê   rÒ   rÆ   rë   r�   rž   Ústrr    rZ   ÚkeysÚsortedr/   )r   rì   r   r   Ú
clone_infor�   Úsources_list_systemr
  r­   rt   rŒ   Úinstalled_in_clonerØ   rZ   rž   rú   Úinstalled_on_systemr±   Úonly_on_systemÚonly_in_cloneÚpkgversion_differencesr$   Úclone_file_pkgversionÚclone_is_autoÚsystem_pkgversionÚsys_is_autoÚ	clone_verÚ
system_vers                               r   Ú	show_diffzAptClone.show_diff˜  s>  € Ø˜ÒÜ�N‰N×ÑÐ7¸ÔCô 	Ð(Ô)Ø×,Ñ,Ó.ˆ	Ø×.Ñ.¨yÓ9ˆ
Øò 	3ˆCØ�}‰}˜S $Ó'¨:¯>©>¸#¸tÓ+DÓDÝÚ˜ZŸ^™^¨C°Õ6Ø!Ÿ™ c¨4Õ0ð2õ 3ð	3ô
 	ˆbŒ	ð 6ÐØ×0Ñ0ØÐ*¨Ió7ˆáÜ�"—'‘'˜$“-Ô ð —‘¨	�Ó2ˆÜ�\‰\˜)Ó$ð 
	;¨Ø—‘Ø—‘Ð!CÑCóEˆAð "$ÐØŸ™›ò ;�Ø—z‘z“|×*Ñ*¨7Ó3�Ø—?‘? 3Ô'¨4°2ª:ØØ(,¯
©
«Ñ%��w Ø,3°T¨?Ð" 4Ò(ñ;÷
	;ð !ÐØò 	CˆCØ—=’=Øà—‘×%Ñ%¤s¨3×+@Ñ+@Ó'Að-CÐ §¡Ò)ð	Cô Ð0×5Ñ5Ó7Ó8¼3Ð?Q×?VÑ?VÓ?XÓ;YÑYˆÙÜÐFÔGÜ�#—(‘(œ6 .Ó1Ó2Ô3Ü�$ŒKäÐ/×4Ñ4Ó6Ó7¼#Ð>Q×>VÑ>VÓ>XÓ:YÑYˆÙÜÐFÔGÜ�#—(‘(œ6 -Ó0Ó1Ô2Ü�$ŒKô "%£ÐÜÐ0Ó1ò 	IˆGØÐ1Ñ1ØØ3EÀgÑ3NÑ0Ð! =Ø-@ÀÑ-IÑ*Ð˜{Ø$Ð(9Ó9Ø&×*Ñ*ØÐ3Ð5FÐGõIð	Iñ "ÜÐ)Ô*ÜÐAÔBØ2Hò MÑ.�˜ JÝªG²YÂ
ÐKÕLñMð "÷Q
	;ñ 
	;ús   ÄBMÍMc                 ó6  — |dk7  r”t         j                  j                  d|«       | j                  j	                  dt
        j                  j                  |d«      «       | j                  j	                  dt
        j                  j                  |d«      «       t        j                  |«      5 }| j                  |«       ddd«       t
        j                  j                  |«      s;t        d|z  «       | j                  |«      }| j                  j                  ||«       | j                  |||¬	«       | j!                  ||«       |r| j#                  ||«       | j%                  ||||«       | j'                  ||«       | j)                  ||«       |dk7  rs| j                  j+                  t
        j                  j                  |d«      «       | j                  j+                  t
        j                  j                  |d«      «       yy# 1 sw Y   �ŒOxY w)
z¯ take a statefile produced via (like apt-state.tar.gz)
            save_state() and restore the packages/repositories
            into targetdir (that is usually "/")
        r   r  z/procÚprocz/sysÚsysNz0Dir '%s' does not exist, need to bootstrap first)Úmirror)r`   rb   rG   rJ   r8   r   r   r]   rd   r   ræ   r    r  rî   r)   Ú_restore_sources_listÚ_restore_apt_keyringÚ_rewrite_sources_listÚ_restore_package_selectionÚ_restore_not_downloadable_debsÚ_restore_extra_filesr<   )	r   rì   r   Úexclude_pkgsÚ
new_distroÚprotect_installedr%  rt   r-   s	            r   Úrestore_statezAptClone.restore_stateã  sŸ  € ð ˜ÒÜ�N‰N×ÑÐ7¸ÔCØ�M‰M×$Ñ$ W¬b¯g©g¯l©l¸9ÀfÓ.MÔNØ�M‰M×$Ñ$ V¬R¯W©W¯\©\¸)ÀUÓ-KÔLô �\‰\˜)Ó$ð 	(¨Ø×"Ñ" 3Ô'÷	(ô �w‰w�~‰~˜iÔ(ÜÐDÀyÑPÔQØ×*Ñ*¨9Ó5ˆFØ�M‰M×%Ñ% i°Ô8à×"Ñ" 9¨iÀÐ"ÔGØ×!Ñ! )¨YÔ7ÙØ×&Ñ& y°*Ô=Ø×'Ñ'¨	°9Ð>OÐQ]Ô^ð 	×+Ñ+¨I°yÔAà×!Ñ! )¨YÔ7ð ˜ÒØ�M‰M×%Ñ%¤b§g¡g§l¡l°9¸fÓ&EÔFØ�M‰M×%Ñ%¤b§g¡g§l¡l°9¸eÓ&DÕEð ÷)	(ñ 	(ús   Â/HÈHc                 óö  — t        j                  «       }t        j                  j	                  d«      }t
        j                  j                  |t
        j                  j                  |«      z   «      s5t        j                  |t
        j                  j                  |«      z   «       t        j                  |||z   «       | j                  ||«       |r| j                  ||«       | j                  |¬«      }	 |j                  t         j"                  j$                  j'                  «       «       |j+                  «        | j-                  |||¬«      }t        j.                  |«       |S # t(        $ r Y ŒFw xY w)Nrµ   r”   )r,  )r‡   rÞ   r`   rb   r¶   r   r   r    ÚdirnameÚmakedirsrß   Úcopyr&  r(  rS   ÚupdaterL   rM   rQ   rO   r   r   Ú#_restore_package_selection_in_cacherà   )r   rì   r,  r-  ro   r·   r­   Úmissings           r   Úsimulate_restore_statezAptClone.simulate_restore_state	  s  € ä×!Ñ!Ó#ˆÜ—n‘n×.Ñ.Ð/CÓDˆÜ�w‰w�~‰~˜f¤R§W¡W§_¡_°[Ó%AÑAÔBÜ�K‰K˜œrŸw™wŸ™¨{Ó;Ñ;Ô<Ü�‰�K ¨Ñ!3Ô4à×"Ñ" 9¨fÔ5áØ×&Ñ& v¨zÔ:Ø—‘¨�Ó/ˆð	Ø�L‰LœŸ™×*Ñ*×:Ñ:Ó<Ô=ð
 	�
‰
Œà×:Ñ:¸9ÀeÐZfÐ:ÓgˆÜ�‰�fÔØˆøô $ò 	ñ ð	ús   Ã:7E, Å,	E8Å7E8c                 óX  — t        j                  |«      5 }t        j                  j	                  |ddd«      }t        j                  j                  |«      rt        j                  |d|z  «       |j                  |«       t        j                  j	                  |ddd«      }t        j                  |t        j                  t        j                  z  t        j                  z  t        j                  z  «       |ršddlm}m} t$        j&                  j)                  d|«        |d¬	«      }	|	j*                  d d  D ]G  }
|
j,                  s|
j.                  rŒt1        |
|«      r	|g|
_        Œ1|
j4                  |k7  sŒA||
_        ŒI |	j7                  «        d d d «       y # 1 sw Y   y xY w)
NÚetcrL   úsources.listú%s.apt-cloner   )ÚSourcesListÚDeb822SourceEntryrÀ   T©Údeb822)rd   r   r   r   r]   r    rß   r3  Ú
extractallÚchmodÚstatÚS_IRUSRÚS_IWUSRÚS_IRGRPÚS_IROTHÚaptsources.sourceslistr<  r=  r`   rb   rG   ÚlistÚinvalidÚdisabledÚ
isinstanceÚurisÚuriÚsave)r   rì   r   r%  rt   ÚexistingÚ
td_sourcesr<  r=  rÖ   Úentrys              r   r&  zAptClone._restore_sources_list"  s4  € Ü�\‰\˜)Ó$ð 	¨Ü—w‘w—|‘| I¨u°e¸^ÓLˆHÜ�w‰w�~‰~˜hÔ'Ü—‘˜H n°xÑ&?Ô@Ø�N‰N˜9Ô%ÜŸ™Ÿ™ i°¸¸~ÓNˆJÜ�H‰H�Z¤§¡´·±Ñ!<¼t¿|¹|Ñ!KÜ—\‘\ñ""ô #áßQÜ—‘×"Ñ"Ð#9¸:ÔFÙ%¨TÔ2�Ø$Ÿ\™\©!˜_ò .�EØ—}’}¨¯ªØ ä! %Ð):Ô;Ø&, X˜�
à Ÿ9™9¨Ó.Ø'-˜5�9ð.ð —‘”÷+	÷ 	ñ 	ús   –E'F Å>F Æ F)c                 ól  — t         j                  j                  |ddd«      }d|z  }t         j                  j                  |«      rt	        j
                  ||«       t        j                  |«      5 }	 |j                  | j                  dz   |«       	 |j                  | j                  dz   |«       t         j                  j                  |«      r1| j                  j                  ||«       t        j                  |«       d d d «       y # t        $ r Y Œ„w xY w# t        $ r Y Œsw xY w# 1 sw Y   y xY w)Nr9  rL   ztrusted.gpgr;  zetc/apt/trusted.gpgzetc/apt/trusted.gpg.d)r   r   r]   r    rß   r3  rd   r   Úextractrå   ÚKeyErrorrJ   r3   Úremove)r   rì   r   rO  Úbackuprt   s         r   r'  zAptClone._restore_apt_keyring:  sý   € Ü—7‘7—<‘< 	¨5°%¸ÓGˆØ (Ñ*ˆÜ�7‰7�>‰>˜(Ô#Ü�K‰K˜ &Ô)Ü�\‰\˜)Ó$ð 	"¨ðØ—‘˜DŸN™NÐ+@Ñ@À)ÔLðØ—‘˜DŸN™NÐ+BÑBÀIÔNô �w‰w�~‰~˜fÔ%Ø—‘×(Ñ(¨°Ô:Ü—	‘	˜&Ô!÷	"ð 	"øô ò Ùðûô ò Ùðú÷	"ð 	"úsO   Á2D*Á4DÂDÂ3AD*Ä	DÄD*ÄDÄD*Ä	D'Ä$D*Ä&D'Ä'D*Ä*D3c                 óD  — |€g }t        |«      }t        «       }t        «       }t        j                  |j                  «      }|r/|D ]*  }|j                  sŒ|j                  |j                  «       Œ, t        j                  |«      5 }	|	j                  | j                  dz   «      }
|j                  «       5  |
j                  «       D ]û  }|j                  «       j                  d«      }|j                  d«      s|dk(  rŒ9|j!                  «       \  }}}d„ } |||«      rŒZ|j#                  |«       t%        |«      }| }||v sŒ~	 |rR||   j'                  |d¬«       |j(                  dkD  rB|j+                  «        ||   j,                  s#t/        d	|z  «      ‚||   j'                  |¬
«       ||   j5                  |«       Œý 	 d d d «       d d d «       |j(                  dkD  r|j+                  «        |D ]I  }||vr|j#                  |«       Œ||   j                  rŒ)||   j,                  rŒ9|j#                  |«       ŒK |S # t.        $ r7}t1        j2                  d|›d|›d�«       |j#                  |«       Y d }~ŒÑd }~ww xY w# 1 sw Y   ŒÃxY w# 1 sw Y   ŒÇxY w)Nrð   r›   rè   r–   c                 óB   — |D ]  }t        j                   | |«      sŒ y y )NT)Úfnmatch)rZ   r,  Úexcls      r   Úis_excludedzAAptClone._restore_package_selection_in_cache.<locals>.is_excludedf  s"   € Ø$0ò ,˜DÜ&Ÿ™¨t°TÕ:Ù'+ñ,r   F)Ú	from_userÚauto_fixr   zpkg %s not marked upgrade)r\  z
can't add ú (ú))rG   r`   ÚProblemResolverÚ	_depcacherœ   ÚprotectÚ_pkgrd   r   ré   rå   ÚactiongrouprÏ   rê   rÒ   rÆ   rë   r/   rŸ   Úmark_installÚbroken_countÚresolveÚmarked_installÚSystemErrorÚloggingÚwarningÚ	mark_auto)r   rì   r­   r.  r,  r6  ÚpkgsÚresolverr±   rt   rŒ   rØ   rZ   rž   rú   r[  Úauto_installedr\  Úes                      r   r5  z,AptClone._restore_package_selection_in_cacheL  sw  € àÐØˆLÜ˜<Ó(ˆä“%ˆÜ‹uˆä×*Ñ*¨5¯?©?Ó;ˆÙØò /�Ø×#Ó#Ø×$Ñ$ S§X¡XÕ.ð/ô �\‰\˜)Ó$ð $	>¨Ø—‘Ø—‘Ð!CÑCóEˆAð ×"Ñ"Ó$ñ  >ØŸK™K›Mò >�DØŸ:™:›<×.Ñ.¨wÓ7�DØ—‘ sÔ+¨t°rªzØ Ø,0¯J©J«LÑ)�T˜7 Dò,ñ # 4¨Ô6Ø Ø—H‘H˜T”NÜ%(¨£Y�NØ$2Ð 2�IØ˜u’}ð.á0Ø % d¡× 8Ñ 8À9ÐW\Ð 8Ô ]Ø#(×#5Ñ#5¸Ò#9Ø$,×$4Ñ$4Ô$6Ø+0°©;×+EÒ+EÜ.9Ð:UÐX\Ñ:\Ó.]Ð(]ð !& d¡× 8Ñ 8À9Ð 8Ô Mð
 ˜d™×-Ñ-¨nÕ=ñ?>÷ >÷	$	>ðL ×Ñ Ò!Ø×ÑÔàò 	!ˆCØ˜%‘<Ø—‘˜CÔ ØØ˜#‘J×+Ó+¨u°S©z×/HÓ/HØ—‘˜CÕ ð	!ð ˆøô  +ò .Ü#ŸOšOÂ4ÊÐ,KÔLØ#ŸK™K¨×-Ñ-ûð.ú÷9 >ð  >ú÷	$	>ð $	>úsP   Â	/JÂ8BJ
ÅA)IÆ1J
ÇJÉ	J	É-J	É=J
ÊJ	ÊJ
Ê
J	ÊJÊJc                 óº  — | j                  |¬«      }t        j                  j                  j	                  dd«       t        j                  j                  j	                  dd«       	 |j                  | j                  «       |j                  «        | j                  ||||«       |j                  | j                  | j                  «       y # t        $ r Y ŒVw xY w)Nr”   zDir::Binr   zDir::Bin::dpkgz/usr/bin/dpkg)rS   rL   r`   rb   rG   r4  rK   r   r   r5  ÚcommitrP   )r   rì   r   r.  r,  r­   s         r   r)  z#AptClone._restore_package_selectionŒ  s¯   € à—‘¨	�Ó2ˆä�‰×Ñ×Ñ˜z¨3Ô/Ü�‰×Ñ×ÑÐ/°ÔAð	Ø�L‰L˜×,Ñ,Ô-ð
 	�
‰
ŒØ×0Ñ0°¸EÐCTÐVbÔcà�‰�T×(Ñ(¨$×*?Ñ*?Õ@øô $ò 	ñ ð	ús   Á(C Ã	CÃCc                 ó8  — t        j                  |«      5 }|j                  «       D ]\  }| j                  dz   }|j                  j                  |«      sŒ.|j                  t        |«      d  |_        |j                  ||«       Œ^ 	 d d d «       y # 1 sw Y   y xY w)Nzextra-files/)rd   r   Ú
getmembersrå   rZ   rÆ   r¨   rS  )r   rì   r   rt   rû   Úprefixs         r   r+  zAptClone._restore_extra_files�  s   € Ü�\‰\˜)Ó$ð 	.¨Ø—^‘^Ó%ò .�ØŸ™¨Ñ6�Ø—6‘6×$Ñ$ VÕ,àŸV™V¤C¨£K LÐ1�A”FØ—K‘K  9Õ-ñ.÷	.÷ 	.ñ 	.ús   –>BÁ1BÂBc                 ó’  — t        j                  |«      5 }	 |j                  «       D �cg c]-  }|j                  j	                  | j
                  dz   «      sŒ,|‘Œ/ }}|j                  ||«       	 d d d «       g }t        j                  j                  |d«      }t        j                  t        j                  j                  |d«      «      D ]3  }t        j                  j                  ||«      }	|j                  |	«       Œ5 | j                  j                  ||«       y c c}w # t        $ r Y d d d «       y w xY w# 1 sw Y   ŒÍxY w)Nzvar/lib/apt-clone/debs/rÝ   z*.deb)rd   r   rt  rZ   rÆ   rå   r@  rT  r   r   r]   r‘   rô   rJ   r   )
r   rì   r   rt   r³   ÚdebsdirÚdebsr   ÚdebÚdebpaths
             r   r*  z'AptClone._restore_not_downloadable_debs¦  s   € Ü�\‰\˜)Ó$ð 	¨ðØ36·>±>Ó3Cö  J¨ÀwÇ|Á|×G^ÑG^Ð_c×_mÑ_mð  oHñ  `Hõ  HIšGð  J�ð  JØ—‘˜y¨Õ1÷	ð ˆÜ�w‰w�|‰|˜IÐ'AÓBˆÜ—9‘9œRŸW™WŸ\™\¨$°Ó8Ó9ò 	!ˆCÜ—g‘g—l‘l 4¨Ó-ˆGØ�K‰K˜Õ ð	!ð 	�‰×"Ñ" 4¨Õ3ùò Jøäò Ø÷	ð 	ðú÷		ð 	ús?   –D=˜D&ª-D!ÁD!ÁD&Ä!D&Ä&	D:Ä/D=Ä9D:Ä:D=Ä=Ec                 ób  — ddl m}m}m} t        j
                  j                  dt        j                  j                  t        j                  j                  |ddd«      «      «       t        j
                  j                  dt        j                  j                  t        j                  j                  |ddd«      «      «        |d	¬
«      }|j                  d d  D ]«  }|j                  s|j                  rŒt        ||«      rC|j                  D �cg c]'  } dj                   |g|j#                  d«      dd  ¢­Ž ‘Œ) c}|_        Œkd}	dD ])  }
|j$                  j'                  d|
z  «      sŒ"|›d|
›�}	 n |	r|	|_        Œ¥||_        Œ­ t        j                  j                  |ddd«      }t        j
                  j)                  d«      }t        j                  j+                  |«      rst-        |d«      5 }|D ]C  } |||«      }|j                  s|j                  s||vsŒ)|j                  j/                  |«       ŒE 	 d d d «       t        j0                  |«       |j                  D ]�  }t        ||«      r5|j2                  D �cg c]  }|j5                  d«      sŒ|‘Œ c}sŒ<d	|_        ŒD|j6                  j5                  d«      sŒ`|j                  j1                  |«       |j                  j9                  d|«       d	|_        ŒŸ |j;                  «        y c c}w # 1 sw Y   ŒàxY wc c}w )Nr   )r<  ÚSourceEntryr=  rÀ   r9  rL   r:  rÁ   zsources.list.dTr>  z{}{}{}ú-r   r–   )ÚupdatesÚsecurityÚ	backportsz-%szsources.list.apt-cloneÚrzcdrom:)rG  r<  r|  r=  r`   rb   rG   r   r   Úabspathr]   rH  rI  rJ  rK  ÚsuitesÚformatÚ	partitionÚdistr_   r¶   r    r   rô   rU  rL  rÆ   rM  r   rN  )r   r   r-  r<  r|  r=  rÖ   rQ  r®   ÚreplacementÚpocketrO  Ú
sourcelistr  rØ   ÚsrcÚus                    r   r(  zAptClone._rewrite_sources_list´  s’  € ßVÑVÜ�‰×ÑØ"Ü�G‰G�O‰OœBŸG™GŸL™L¨°E¸5À.ÓQÓRô	Tô 	�‰×ÑØ#Ü�G‰G�O‰OœBŸG™GŸL™L¨°E¸5ÐBRÓSÓTô	Vñ  TÔ*ˆà—\‘\¡!�_ò 	,ˆEØ�}Š} §¢Øä˜%Ð!2Ô3ð #Ÿ\™\ö àð $�H—O‘O JÐF°·±¸SÓ1AÀ!À"Ð1EÔFò �•ð
 !�ØBò �FØ—z‘z×*Ñ*¨5°6©>Õ:Ú1;¹VÐ&D˜Ùðñ Ø!,�E•Jà!+�E•Jð%	,ô( —7‘7—<‘< 	¨5°%Ø 8ó:ˆä—^‘^×-Ñ-Ð.DÓEˆ
Ü�7‰7�>‰>˜(Ô#Ü�h Ó$ð 1¨Øò 1�DÙ% d¨JÓ7�CØŸš s§|¢|¸À7Ò8JØŸ™×+Ñ+¨CÕ0ñ1÷1ô
 �I‰I�hÔà—\‘\ò 	*ˆEÜ˜%Ð!2Ô3ð  %Ÿz™zÖD˜!¨Q¯\©\¸(Õ-C’AÔDØ%)�E•Nà—9‘9×'Ñ'¨Õ1à—L‘L×'Ñ'¨Ô.Ø—L‘L×'Ñ'¨¨5Ô1Ø%)�E•Nð	*ð 	�‰�ùòO ÷&1ð 1üò Es$   Ä,LÇ7+L È#L ÊL,ÊL,Ì L)c                 óæ  — |r!t         j                  j                  |d«      }nd}t        «       }t         j                  j	                  t
        j                  j                  d«      «      }t        j                  t         j                  j                  |dd«      «      D ]Q  }t        |d¬«      5 }|D ]3  }|j                  d«      sŒ|j                  |j                  «       «       Œ5 	 d d d «       ŒS t        «       }t        j                  |«      D ]O  \  }	}
}|D ]D  }t         j                  j                  |	t        |«      d  |«      }||vsŒ4|j                  |«       ŒF ŒQ |S # 1 sw Y   ŒÐxY w)	Nr9  z/etcrY   r�   z*.listr›   )Úencodingz/etc/)r   r   r]   rG   r1  r`   rb   rø   r‘   r   rÆ   r/   rê   Úwalkr¨   )r   rn   ÚetcdirÚownedÚdpkg_basedirrŒ   r  rØ   ÚunownedÚdirpathÚdirnamesÚ	filenamesrZ   Úfullnames                 r   Ú_find_unowned_in_etczAptClone._find_unowned_in_etcì  s3  € ÙÜ—W‘W—\‘\ )¨UÓ3‰FàˆFä“ˆÜ—w‘w—‘¤w§~¡~×'9Ñ'9Ð:NÓ'OÓPˆÜ—‘œ2Ÿ7™7Ÿ<™<¨°f¸hÓGÓHò 	0ˆAÜ�a 'Ô*ð 0¨bØò 0�DØ—‘ wÕ/ØŸ	™	 $§*¡*£,Õ/ñ0÷0ð 0ð	0ô “%ˆÜ,.¯G©G°F«Oò 	*Ñ(ˆG�X˜yØ!ò *�ÜŸ7™7Ÿ<™<¨´°I³°Ð(@À$ÓG�Ø 5Ò(Ø—K‘K Õ)ñ*ð	*ð
 ˆ÷0ð 0ús   Â0E'Ã!E'Å'E0	c                 óÀ  — |t         j                  j                  d«      z   }t        «       }t	        |«      5 }t        j
                  |«      }|D �]h  }d|v sŒ	|d   j                  d«      D �]H  }d }t        |j                  «       «      dk(  r|j                  «       \  }	}
}n|j                  «       \  }	}
||	z   }|
j                  «       }
|dk(  rŒet        j                  j                  |«      s*t        j                  d|z  «       |j                  |«       Œ®t        j                   «       }t	        |d«      5 }|j#                  |j%                  «       «       d d d «       |j'                  «       |
k7  s�Œt        j                  d|›d	|j'                  «       ›d
|
›d�«       |j                  |«       �ŒK �Œk 	 d d d «       |S # 1 sw Y   ŒmxY w# 1 sw Y   |S xY w)NrY   Ú	conffilesr„   é   Úobsoletezconffile %s removedrÎ   z	conffile r^  z != r_  )r`   rb   r~   rG   r   ÚTagFilerë   r¨   rê   r   r   r    rj  Údebugr/   ÚhashlibÚmd5r4  rö   Ú	hexdigest)r   rn   r·   Úmodifiedr  ÚtagrQ  rØ   r›  rZ   Úmd5sumr   rŸ  s                r   Ú_find_modified_conffilesz!AptClone._find_modified_conffiles  s�  € Ø¤§¡× 3Ñ 3Ð4HÓ IÑIˆÜ“5ˆä�+Óð 	/ "Ü—/‘/ "Ó%ˆCØó /�Ø %Ò'Ø % kÑ 2× 8Ñ 8¸Ó >ó /˜Ø#'˜Ü˜tŸz™z›|Ó,°Ò1Ø59·Z±Z³\Ñ2˜D &©(à+/¯:©:«<™L˜D &à(¨™~˜Ø!'§¡£˜à# zÒ1Ø$ä!Ÿw™wŸ~™~¨dÔ3Ü#ŸM™MÐ*?À$Ñ*FÔGØ$ŸL™L¨Ô.Ø$ä%Ÿk™k›m˜Ü! $¨Ó-ð 2°ØŸJ™J r§w¡w£yÔ1÷2àŸ=™=›?¨fÔ4Ü#ŸMšMÚ$(¨#¯-©-­/º6ð+Cô Dà$ŸL™L¨Ö.ò1/ñ/÷	/ð: ˆ÷2ð 2ú÷/	/ð: ˆús1   ¸ GÁC"GÄ; G	ÅGÅ8AGÇGÇGÇGc                 ó   — t        d«       y )Nznot implemented yet)r  )r   rn   s     r   Ú_dump_debconf_databasezAptClone._dump_debconf_database%  s   € ÜÐ#Õ$r   )NNN)FFFN)F)r   )r   NNFNr=   )FN)r–   )(r>   r?   r@   rA   r   r}   r^   rå   rV   ru   r€   re   rk   rf   rl   rg   ri   rj   rh   rÄ   rÛ   rm   ræ   rî   rý   r�   r  r!  r/  r7  r&  r'  r5  r)  r+  r*  r(  r—  r¤  r¦  rB   r   r   rD   rD   b   sì   „ ñð 1°8°2·8±8³:¸a±=Ñ@€Nà€Ià=AØó(ð2 =BØ48ó'ò@ò=ò6ò%/òNHòLò:ò:ó8ò(.ò(òò òò&òPIòó.GMðV DHØGKó#FóLó2ò0"ó$>ò@Aò".ò4ò6ópó,!óF%r   rD   )Ú
__future__r   rL   Ú	apt.cacher   r`   r  rY  r‘   rž  rj  r*   ÚImportErrorr   rÓ   rß   rB  r   rd   r‡   rª   Úior   r   Úenvironrb   rG   Úobjectr
   rD   rB   r   r   ú<module>r­     s¯   ðõ& &ã 
Ý *Û Û Û Û Û Û ðÛó 
Û 	Û Û Û Û Û Û ç à §¡Ñ+Ø‡N�N×ÑÐ2°CÔ8Ø‡N�N×ÑÐ8¸#Ô>ô/�vô /ôdD%ˆvõ D%øðG ò Ø‚Kðús   ªB3 Â3B=Â<B=