§
    ­xkd‡  ã                   ó  — d 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	m
Z
mZmZmZmZmZmZmZ ddlmZ ddlmZ  G d„ de¦  «        Z G d	„ d
e¦  «        Z G d„ de¦  «        Zd„ Zedk    r e¦   «          dS dS )z;Classes for working with locally available Debian packages.é    )Úprint_functionN)ÚDictÚIterableÚListÚOptionalÚSetÚTupleÚUnionÚcast)Úgettext)ÚBytesIOc                   ó   — e Zd ZdZdS )ÚNoDebArchiveExceptionz9Exception which is raised if a file is no Debian archive.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú-/usr/lib/python3/dist-packages/apt/debfile.pyr   r   #   s   € € € € € ØCÐCÐCÐCr   r   c                   óœ  — e Zd ZdZ ed¦  «        \  ZZZZdZ	d&d„Z
d„ Zd„ Zd„ Zed	„ ¦   «         Zed
„ ¦   «         Zd'd„Zd„ Zd„ Zd„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Zd„ Zd(d„Zd'd„Zd„ Zd„ Z ed„ ¦   «         Z!ed„ ¦   «         Z"e#d„ ¦   «         Z$e#d „ ¦   «         Z%d)d!„Z&d"„ Z'd#„ Z(d$„ Z)d*d%„Z*dS )+Ú
DebPackagezA Debian Package (.deb file).é   r   Nc                 ó  — |€t          j        ¦   «         }|| _        t          t          j        d ¦  «        | _        d| _        d | _        i | _	        g | _
        d| _        d| _        d | _        |r|                      |¦  «         d S d S )NÚ F)ÚaptÚCacheÚ_cacher   Úapt_instÚDebFileÚ_debfileÚpkgnameÚfilenameÚ	_sectionsÚ
_need_pkgsÚ_check_was_runÚ_failure_stringÚ
_multiarchÚopen©Úselfr#   Úcaches      r   Ú__init__zDebPackage.__init__0   s�   € àˆ=Ý”I‘K”KˆEØˆŒÝ�XÔ-¨tÑ4Ô4ˆŒØˆŒØˆŒàð 	Œð ˆŒØ#ˆÔØ!ˆÔØˆŒØð 	 Ø�IŠI�hÑÔÐÐÐð	 ð 	 r   c                 óf  — |                       dd|z  ¦  «         g | _        t          ¦   «         | _        d| _        || _        t          j        | j        ¦  «        | _        | j        j	         
                    d¦  «        }t          j        |¦  «        | _        | j        d         | _        d| _        dS )zopen given debfileé   z	open '%s'r   ÚcontrolÚPackageFN)Ú_dbgr%   ÚsetÚ_installed_conflictsr'   r#   r   r    r!   r0   ÚextractdataÚapt_pkgÚ
TagSectionr$   r"   r&   )r+   r#   r0   s      r   r)   zDebPackage.openB   s™   € ð 	�	Š	�!�[ 8Ñ+Ñ,Ô,Ð,ØˆŒÝ$'¡E¤EˆÔ!Ø!ˆÔØ ˆŒÝ Ô(¨¬Ñ7Ô7ˆŒØ”-Ô'×3Ò3°IÑ>Ô>ˆÝ Ô+¨GÑ4Ô4ˆŒØ”~ iÔ0ˆŒØ#ˆÔÐÐr   c                 ó   — | j         |         S ©N©r$   ©r+   Úkeys     r   Ú__getitem__zDebPackage.__getitem__P   s   € àŒ~˜cÔ"Ð"r   c                 ó   — || j         v S r9   r:   r;   s     r   Ú__contains__zDebPackage.__contains__T   s   € à�d”nÐ$Ð$r   c                 ó¤   ‡— g Š	 | j         j                             ˆfd„¦  «         n(# t          $ r t	          d¦  «        | j        z  gcY S w xY w‰S )z$return the list of files in the deb.c                 ó8   •— ‰                      | j        ¦  «        S r9   ©ÚappendÚname)ÚitemÚdataÚfiless     €r   ú<lambda>z%DebPackage.filelist.<locals>.<lambda>^   s   ø€ °U·\²\À$Ä)Ñ5LÔ5L€ r   z(List of files for '%s' could not be read)r!   rF   ÚgoÚSystemErrorÚ_r#   )r+   rG   s    @r   ÚfilelistzDebPackage.filelistX   sy   ø€ ð ˆð	SØŒMÔ×!Ò!Ð"LÐ"LÐ"LÐ"LÑMÔMÐMÐMøÝð 	Sð 	Sð 	SÝÐ@ÑAÔAÀDÄMÑQÐRÐRÐRÐRð	Søøøàˆó   …"( ¨"AÁAc                 ó¾   ‡— g Š	 | j         j                             ˆfd„¦  «         n(# t          $ r t	          d¦  «        | j        z  gcY S w xY wt          ‰¦  «        S )z*return the list of files in control.tar.gzc                 ó8   •— ‰                      | j        ¦  «        S r9   rB   )rE   rF   r0   s     €r   rH   z-DebPackage.control_filelist.<locals>.<lambda>i   s   ø€ ¸¿ºÀtÄyÑ8QÔ8Q€ r   z0List of control files for '%s' could not be read)r!   r0   rI   rJ   rK   r#   Úsorted)r+   r0   s    @r   Úcontrol_filelistzDebPackage.control_filelistc   s…   ø€ ð ˆð	ØŒMÔ!×$Ò$Ð%QÐ%QÐ%QÐ%QÑRÔRÐRÐRøÝð 	ð 	ð 	åÐDÑEÔEÈÌÑUðð ð ð ð	øøøõ �g‰ŒÐrM   Fc                 óÀ  — d|v r|S | j         s|S | j                             |¦  «        r|S || j        v rL| j        |         j        �:t	          t
          j        j        | j        |         j        ¦  «        j        dk    r|S |›d| j         ›�}|| j        vr|S | j        |         }|j        €|S |j        j	        }|j
        |j        z  r|S |r|j
        |j        z  s|S |S )Nú:Úall)r(   r   Úis_virtual_packageÚ	candidater   r   ÚpackageÚVersionÚarchitectureÚ_candÚ
multi_archÚMULTI_ARCH_FOREIGNÚMULTI_ARCH_SAME)r+   r"   Úin_conflict_checkingÚmultiarch_pkgnameÚmultiarch_pkgÚcands         r   Ú_maybe_append_multiarch_suffixz)DebPackage._maybe_append_multiarch_suffixq   s  € ð �'ˆ>ˆ>ØˆNØŒð 
	ØˆNØŒ[×+Ò+¨GÑ4Ô4ð 	ØˆNà�t”{Ð"Ð"Ø”˜GÔ$Ô.Ð:Ý•S”[Ô(¨$¬+°gÔ*>Ô*HÑIÔIÔVØòð ð ˆNà'. w w°´°Ð@Ðà D¤KÐ/Ð/Ø$Ð$ØœÐ$5Ô6ˆØÔ"Ð*Ø$Ð$àÔ&Ô,ˆð Œ?˜TÔ4Ñ4ð 	ØˆNð  ð 	¨¬¸4Ô;OÑ)Oð 	ØˆNØ Ð r   c           
      ój  — |                       dd|z  ¦  «         |D �]}|d         }|d         }|d         }|                      |¦  «        }|| j        vr\| j                             |¦  «        rA|                       dd|z  ¦  «         | j                             |¦  «        D ]}|j        r  dS ŒŒ•| j        |         j        }|�t          j        |j	        ||¦  «        r dS |sL| j                             |d¬	¦  «        D ]/}|j        r&|                       dd
|j
        ›d|›d�¦  «           dS Œ0�ŒdS )zÉReturn True if at least one dependency of the or-group is satisfied.

        This method gets an 'or_group' and analyzes if at least one dependency
        of this group is already satisfied.
        é   z_checkOrGroup(): %s r   é   r/   z+_is_or_group_satisfied(): %s is virtual depTN)Úinclude_nonvirtualzfound installed 'z' that provides 'ú'F)r2   rb   r   rU   Úget_providing_packagesÚis_installedÚ	installedr6   Ú	check_depÚversionrD   )	r+   Úor_groupÚdepÚdepnameÚverÚoperÚpkgÚinstÚppkgs	            r   Ú_is_or_group_satisfiedz!DebPackage._is_or_group_satisfied–   s�  € ð 	�	Š	�!Ð+¨xÑ8Ñ9Ô9Ð9àð &	$ñ &	$ˆCØ˜!”fˆGØ�a”&ˆCØ�q”6ˆDð ×9Ò9¸'ÑBÔBˆGð ˜dœkÐ)Ð)Ø”;×1Ò1°'Ñ:Ô:ð (Ø—I’IØÐHÈ7ÑRñô ð ð  $œ{×AÒAÀ'ÑJÔJð (ð (˜ØÔ+ð (Ø#' 4 4 4ð(àà”;˜wÔ'Ô1ˆDØÐ¥GÔ$5°d´lÀDÈ#Ñ$NÔ$NÐØ�t�tð ð 
$Ø œK×>Ò>Ø°ð ?ñ ô ð 	$ð 	$�Dð Ô(ð $ØŸ	š	Ø˜Aà#œy˜y˜y¨'¨'¨'ð3ñô ð ð
  $˜t˜t˜tð$ùð ˆur   c                 óî  — |D �]}|\  }}}|                       |¦  «        }|| j        vrV| j                             |¦  «        sŒB| j                             |¦  «        }t	          |¦  «        dk    rŒp|d         j        }| j        |         }| j        j                             |j        ¦  «        }|sŒ±t          j
        |j        ||¦  «        sŒÍ|                      dd|z  ¦  «         | j                             |¦  «          dS d}	|D ]J}|	|d         z  }	|r|r|	d|d         ›d|d         ›d	�z  }	||t	          |¦  «        dz
           k    r|	d
z  }	ŒK| xj        t!          d¦  «        |	z  z  c_        dS )zTry to satisfy the or_group.re   r   rd   zNeed to get: %sTr   z (ú ú)ú|z"Dependency is not satisfiable: %s
F)rb   r   rU   rh   ÚlenrD   Ú	_depcacheÚget_candidate_verÚ_pkgr6   rk   Úver_strr2   r%   rC   r'   rK   )
r+   rm   rn   ro   rp   rq   Ú	providersrr   ra   Úor_strs
             r   Ú_satisfy_or_groupzDebPackage._satisfy_or_groupÈ   s½  € ð ð 	ñ 	ˆCØ!$ÑˆG�S˜$ð ×9Ò9¸'ÑBÔBˆGð ˜dœkÐ)Ð)Ø”{×5Ò5°gÑ>Ô>ð ØØ œK×>Ò>¸wÑGÔG�	õ �y‘>”> QÒ&Ð&ØØ# Aœ,Ô+�ð ”+˜gÔ&ˆCØ”;Ô(×:Ò:¸3¼8ÑDÔDˆDØð ØÝÔ$ T¤\°4¸Ñ=Ô=ð Øð �IŠI�aÐ*¨WÑ4Ñ5Ô5Ð5ØŒO×"Ò" 7Ñ+Ô+Ð+Ø�4�4ð ˆØð 	ð 	ˆCØ�c˜!”fÑˆFØð 8�tð 8Ø�¨¨A¬¨¨°°A´°°Ð7Ñ7�Ø�h�s 8™}œ}¨qÑ0Ô1Ò1Ð1Ø˜#‘�øØÐÔ¥Ð"GÑ HÔ HÈ6Ñ QÑQÐÔØˆur   c           
      ó¼  — |                       dd|›d|›d|›d�¦  «         | j        |         }|j        r|j        €J ‚|j        j        }n|j        r|j        €J ‚|j        j        }ndS t          j        |||¦  «        r\|  	                    |||¦  «        sE| xj
        t          d¦  «        |j        z  z  c_
        |                       dd	|j        z  ¦  «         d
S dS )z@Return True if a pkg conflicts with a real installed/marked pkg.r/   z"_check_single_pkg_conflict() pkg='z' ver='z' oper='rg   NFz)Conflicts with the installed package '%s'z!conflicts with installed pkg '%s'T)r2   r   ri   rj   rl   Úmarked_installrV   r6   rk   Úreplaces_real_pkgr'   rK   rD   )r+   r"   rp   rq   rr   Úpkgvers         r   Ú_check_single_pkg_conflictz%DebPackage._check_single_pkg_conflictõ   s  € ð
 	�	Š	ØˆAàˆwˆw˜˜˜˜T˜T˜Tð#ñ	
ô 	
ð 	
ð
 Œk˜'Ô"ˆØÔð 	Ø”=Ð,Ð,Ð,Ø”]Ô*ˆFˆFØÔð 	Ø”=Ð,Ð,Ð,Ø”]Ô*ˆFˆFà�5õ
 Ô˜V T¨3Ñ/Ô/ð 	¸×8NÒ8NØ�T˜3ñ9
ô 9
ð 	ð Ð Ô ÝÐ@ÑAÔAÀCÄHÑLñÐ Ô ð �IŠI�aÐ<¸s¼xÑGÑHÔHÐHØ�4Øˆur   c                 ó¬  — |                       dd|z  ¦  «         |D �]$}|d         }|d         }|d         }|                      |d¬¦  «        }|| j        vr¸| j                             |¦  «        r�| j                             |¦  «        D ]‚}|                       dd|j        z  ¦  «         | j        |j        k    r|                       dd	¦  «         ŒG|                      |j        ||¦  «        r| j         	                    |j        ¦  «         ŒƒŒó|                      |||¦  «        r| j         	                    |¦  «         �Œ&t          | j        ¦  «        S )
z5Check the or-group for conflicts with installed pkgs.rd   z _check_conflicts_or_group(): %s r   re   T)r^   r/   zconflicts virtual check: %szconflict on self, ignoring)r2   rb   r   rU   rh   rD   r"   r†   r4   ÚaddÚbool)r+   rm   rn   ro   rp   rq   rr   s          r   Ú_check_conflicts_or_groupz$DebPackage._check_conflicts_or_group  st  € ð 	�	Š	�!Ð7¸8ÑDÑEÔEÐEØð 	7ñ 	7ˆCØ˜!”fˆGØ�a”&ˆCØ�q”6ˆDð ×9Ò9Ø¨dð :ñ ô ˆGð
 ˜dœkÐ)Ð)ð ”;×1Ò1°'Ñ:Ô:ð DØ#œ{×AÒAÀ'ÑJÔJð Dð D˜ØŸ	š	 !Ð%BÀSÄXÑ%MÑNÔNÐNàœ<¨3¬8Ò3Ð3Ø ŸIšI aÐ)EÑFÔFÐFØ$Ø×:Ò:¸3¼8ÀSÈ$ÑOÔOð DØ Ô5×9Ò9¸#¼(ÑCÔCÐCøØØ×.Ò.¨w¸¸TÑBÔBð 7ØÔ)×-Ò-¨gÑ6Ô6Ð6ùÝ�DÔ-Ñ.Ô.Ð.r   c                 ól   — d}	 t          j        | j        |         d¦  «        S # t          $ r g cY S w xY w)z/List of packages conflicting with this package.Ú	ConflictsF©r6   Úparse_dependsr$   ÚKeyErrorr;   s     r   Ú	conflictszDebPackage.conflicts7  sL   € ð ˆð	ÝÔ(¨¬¸Ô)<¸eÑDÔDÐDøÝð 	ð 	ð 	ØˆIˆIˆIð	øøøó   „$ ¤3²3c                 óœ   — g }dD ]F}	 |                      t          j        | j        |         d¦  «        ¦  «         Œ7# t          $ r Y ŒCw xY w|S )z2List of packages on which this package depends on.)ÚDependszPre-DependsF)Úextendr6   rŽ   r$   r�   )r+   Údependsr<   s      r   r•   zDebPackage.dependsA  sk   € ð ˆà+ð 	ð 	ˆCðØ—’�wÔ4°T´^ÀCÔ5HÈ%ÑPÔPÑQÔQÐQÐQøÝð ð ð Ø�ðøøøàˆs   ˆ3<¼
A	ÁA	c                 ól   — d}	 t          j        | j        |         d¦  «        S # t          $ r g cY S w xY w)z<List of virtual packages which are provided by this package.ÚProvidesFr�   r;   s     r   ÚprovideszDebPackage.providesN  óL   € ð ˆð	ÝÔ(¨¬¸Ô)<¸eÑDÔDÐDøÝð 	ð 	ð 	ØˆIˆIˆIð	øøør‘   c                 ól   — d}	 t          j        | j        |         d¦  «        S # t          $ r g cY S w xY w)z4List of packages which are replaced by this package.ÚReplacesFr�   r;   s     r   ÚreplaceszDebPackage.replacesX  r™   r‘   c           	      óv  — |                       dd|›d|›d|›�¦  «         | j        |         }d}|j        r|j        €J ‚|j        j        }n|j        r|j        €J ‚|j        j        }nd}| j        D ]F}|D ]A\  }}}||k    r5|�t          j	        |||¦  «        r|                       dd|z  ¦  «           dS ŒBŒGdS )z´Return True if a given non-virtual package is replaced.

        Return True if the deb packages replaces a real (not virtual)
        packages named (pkgname, oper, ver).
        r/   zreplaces_real_pkg() rw   Nz?we have a replaces in our package for the conflict against '%s'TF)
r2   r   ri   rj   rl   rƒ   rV   rœ   r6   rk   )r+   r"   rq   rp   rr   r…   rm   rD   s           r   r„   zDebPackage.replaces_real_pkgb  s  € ð 	�	Š	�!�!°w°w°wÀÀÀÀcÀcÐJÑKÔKÐKØŒk˜'Ô"ˆØˆØÔð 	Ø”=Ð,Ð,Ð,Ø”]Ô*ˆFˆFØÔð 	Ø”=Ð,Ð,Ð,Ø”]Ô*ˆFˆFàˆFØœð 
	 ð 
	 ˆHØ#+ð 	 ð 	 ‘��c˜4Ø˜7’?�?Ø�N¥gÔ&7¸ÀÀcÑ&JÔ&J�Nà—I’IØð0Ø3:ñ<ñô ð ð
  ˜4˜4˜4øð	 ð ˆur   c                 óL   — d}| j         D ]}|                      |¦  «        rd}Œ|S )zÃCheck if there are conflicts with existing or selected packages.

        Check if the package conflicts with a existing or to be installed
        package. Return True if the pkg is OK.
        TF)r�   rŠ   )r+   Úresrm   s      r   Úcheck_conflictszDebPackage.check_conflicts�  s=   € ð ˆØœð 	ð 	ˆHØ×-Ò-¨hÑ7Ô7ð ð �øØˆ
r   c                 ó¢  — t          t          | j        ¦  «        ¦  «        }t          t	          |dz  ¦  «        d¦  «        }| j        d         }| j        d         }d„ | j        D ¦   «         }t          | j        ¦  «        D �]®\  }}||z  dk    r2| j        j         	                    t          |¦  «        |z  dz  ¦  «         |j
        sŒI|j        €J ‚|j        j        }|j        j        D ]¶}	|	j        D ]¬}
|
j        | j        k    ršt%          j        ||
j        |
j        ¦  «        sz|                      d	d
|j        z  ¦  «         | xj        t1          d¦  «        |j        |
j        |
j        |
j        dœz  z  c_        | j        j                             ¦   «             dS Œ­Œ·d|j        v �rƒ|j        d         D �]t}|D �]m}|j        j        | j        k    r¯|j        j        |k    rŸt%          j        ||j        |j        ¦  «        r|                      d	d|j        z  ¦  «         | xj        t1          d¦  «        |j        |j        j        |j        |j        dœz  z  c_        | j        j                             ¦   «             dS |j        j        |v r˜| j        |j        k    rˆ|                      d	d|z  ¦  «         | xj        t1          d¦  «        d                     |¦  «        | j         |j        j        |j        dœz  z  c_        | j        j                             ¦   «             dS �Œo�Œv�Œ°| j        j                             ¦   «          dS )zÏ
        check if installing the package would break exsisting
        package on the system, e.g. system has:
        smc depends on smc-data (= 1.4)
        and user tries to installs smc-data 1.6
        é2   re   rX   ÚArchitecturec                 ó*   — g | ]}|d          d          ‘ŒS )r   r   )Ú.0Úxs     r   ú
<listcomp>z=DebPackage.check_breaks_existing_packages.<locals>.<listcomp>ž  s    € Ð3Ð3Ð3 �A�a”D˜”GÐ3Ð3Ð3r   r   g      Y@Nrd   zwould break (depends) %sz]Breaks existing package '%(pkgname)s' dependency %(depname)s (%(deprelation)s %(depversion)s))r"   ro   ÚdeprelationÚ
depversionFrŒ   zwould break (conflicts) %szZBreaks existing package '%(pkgname)s' conflict: %(targetpkg)s (%(comptype)s %(targetver)s))r"   Ú	targetpkgÚcomptypeÚ	targetverz{Breaks existing package '%(pkgname)s' that conflict: '%(targetpkg)s'. But the '%(debfile)s' provides it via: '%(provides)s'ú,)r˜   Údebfilerª   r"   T)!Úfloatrz   r   ÚmaxÚintr$   r˜   Ú	enumerateÚop_progressÚupdateri   rj   r}   Úcurrent_verÚdependenciesÚor_dependenciesrD   r"   r6   rk   Úrelationrl   r2   r'   rK   ÚdoneÚdepends_listÚ
target_pkgrY   Ú	comp_typeÚ
target_verÚjoinr#   )r+   ÚsizeÚstepsÚdebverÚdebarchr˜   Úirr   rp   Údep_orrn   Úconflicts_ver_listÚc_ors                r   Úcheck_breaks_existing_packagesz)DebPackage.check_breaks_existing_packages�  s¦  € õ •S˜œÑ%Ô%Ñ&Ô&ˆÝ•C˜˜r™	‘N”N AÑ&Ô&ˆØ” 	Ô*ˆØ”. Ô0ˆà3Ð3 T¤]Ð3Ñ3Ô3ˆÝ ¤Ñ,Ô,ð N	)ñ N	)‰FˆAˆsØ�5‰y˜AŠ~ˆ~Ø”Ô'×.Ò.­u°Q©x¬x¸$©ÀÑ/FÑGÔGÐGØÔ#ð ØØ”=Ð,Ð,Ð,ð ”(Ô&ˆCØœ-Ô4ð )ð )�Ø!Ô1ð )ð )�CØ”x 4¤<Ò/Ð/Ý&Ô0°¸¼ÀsÄ{ÑSÔSð )Ø ŸIšI aÐ)CÀcÄhÑ)NÑOÔOÐOð
 !Ð0Ô0µAð!Cñ5ô 5ð
 ,/¬8Ø+.¬8Ø/2¬|Ø.1¬kð	!ð !ñ		5ñ 	Ð0Ô0ð !œKÔ3×8Ò8Ñ:Ô:Ð:Ø#( 5 5 5 5øð')ð, ˜cÔ.Ð.Ñ.Ø*-Ô*:¸;Ô*Gð -)ñ -)Ð&Ø 2ð ,)ñ ,)˜à œOÔ0°D´LÒ@Ð@Ø $¤Ô <ÀÒ GÐ Gå&Ô0Ø &¨¬¸¼ñ ô  ð -ð !%§	¢	¨!Ð-IÈCÌHÑ-TÑ UÔ UÐ Uð !%Ð 4Ô 4½ð%Cñ9"ô 9"ð
 03¬xØ15´Ô1EØ04´Ø15´ð	%"ð %"ñ		9"ñ 	!"Ð 4Ô 4ð !%¤Ô 7× <Ò <Ñ >Ô >Ð >Ø', u u u uà œOÔ0°HÐ<Ð<Ø $¤°´Ò 8Ð 8à ŸIšI aÐ)EÈÑ)PÑQÔQÐQØ Ð0Ô0µAð!1ñ5ô 5ð -0¯HªH°XÑ,>Ô,>Ø+/¬=Ø-1¬_Ô-AØ+.¬8ð	!ð !ñ
5ñ 
Ð0Ô0ð !œKÔ3×8Ò8Ñ:Ô:Ð:Ø#( 5 5 5 5ùñY,)ùðZ 	ŒÔ×$Ò$Ñ&Ô&Ð&Øˆtr   Tc                 ó*  — |                       dd¦  «         | j        d         }| j        d         }d                     ||g¦  «        }| j        d         }|                       dd|z  ¦  «         || j        v r—| j        |         }|r|j        �|j        j        }n|s|j        �|j        j        }n| j        S |�Ut          j	        ||¦  «        }|                       dd
|z  ¦  «         |dk    r| j
        S |dk     r| j        S |dk    r| j        S | j        S )a	  Compare the package to the version available in the cache.

        Checks if the package is already installed or availabe in the cache
        and if so in what version, returns one of (VERSION_NONE,
        VERSION_OUTDATED, VERSION_SAME, VERSION_NEWER).
        r/   Úcompare_to_version_in_cacher1   r£   rS   rX   re   z
debver: %sNz"CompareVersion(debver,instver): %sr   )r2   r$   r¾   r   rj   rl   rV   ÚVERSION_NONEr6   Úversion_compareÚVERSION_SAMEÚVERSION_NEWERÚVERSION_OUTDATED)r+   Úuse_installedr"   rY   rÁ   rr   ÚcacheverÚcmps           r   rÉ   z&DebPackage.compare_to_version_in_cacheñ  s7  € ð 	�	Š	�!Ð2Ñ3Ô3Ð3Ø”. Ô+ˆØ”~ nÔ5ˆð —(’(˜G \Ð2Ñ3Ô3ˆà” 	Ô*ˆØ�	Š	�!�\ FÑ*Ñ+Ô+Ð+Ø�d”kÐ!Ð!Ø”+˜gÔ&ˆCØð ) ¤Ð!:Øœ=Ô0��Ø"ð ) s¤}Ð'@Øœ=Ô0��àÔ(Ð(ØÐ#ÝÔ-¨h¸Ñ?Ô?�Ø—	’	˜!ÐAÀCÑGÑHÔHÐHØ˜!’8�8ØÔ,Ð,Ø˜1’W�WØÔ-Ð-Ø˜1’W�WØÔ0Ð0ØÔ Ð r   c                 óö  — |                       dd¦  «         d| _        d| j        vr,|                       dd¦  «         t          d¦  «        | _        dS | j        d         }|d	k    rž|t
          j                             d
¦  «        k    r{|t          j        ¦   «         v r7|| _	        | j
        ›d| j	        ›�| _
        |                       dd|z  ¦  «         n/|                       dd¦  «         t          d¦  «        |z  | _        dS |sJ|                      ¦   «         | j        k    r-| j        | j
                 j        rt          d¦  «        | _        dS d| _        |                      ¦   «         sdS |                      ¦   «         sdS |                      | j        ¦  «        sdS |                      ¦   «         sdS | j        j        j        dk    r/t          d¦  «        | _        | j                             ¦   «          dS dS )z$Check if the package is installable.r/   ÚcheckTr£   re   zERROR: no architecture fieldz$No Architecture field in the packageFrT   zAPT::ArchitecturerS   zFound multiarch arch: '%s'zERROR: Wrong architecture dude!zVWrong architecture '%s' -- Run dpkg --add-architecture to add it and update afterwardsz$A later version is already installedr   r   z1Failed to satisfy all dependencies (broken cache))r2   r&   r$   rK   r'   r6   ÚconfigÚfindÚget_architecturesr(   r"   rÉ   rÎ   r   rj   r    rÇ   Ú_satisfy_dependsr•   r{   Úbroken_countÚclear)r+   Úallow_downgradeÚarchs      r   rÓ   zDebPackage.check  s(  € ð 	�	Š	�!�WÑÔÐà"ˆÔð  ¤Ð/Ð/Ø�IŠI�aÐ7Ñ8Ô8Ð8Ý#$Ð%KÑ#LÔ#LˆDÔ Ø�5ØŒ~˜nÔ-ˆØ�5Š=ˆ=˜T¥W¤^×%8Ò%8Ð9LÑ%MÔ%MÒMÐMØ•wÔ0Ñ2Ô2Ð2Ð2Ø"&�”Ø*.¬,¨,¨,¸¼¸ÐH�”Ø—	’	˜!Ð9¸DÑ@ÑAÔAÐAÐAà—	’	˜!Ð>Ñ?Ô?Ð?åð7ñô ð
 ñð Ô$ð �uð  ð	à×0Ò0Ñ2Ô2°dÔ6KÒKÐKàŒ{˜4œ<Ô(Ô2ð å'(Ð)OÑ'PÔ'P�Ô$Ø�uð  "ˆÔð ×#Ò#Ñ%Ô%ð 	Ø�5ð ×2Ò2Ñ4Ô4ð 	Ø�5ð ×$Ò$ T¤\Ñ2Ô2ð 	Ø�5ð ×#Ò#Ñ%Ô%ð 	Ø�5àŒ;Ô Ô-°Ò1Ð1Ý#$ØFñ$ô $ˆDÔ ð ŒK×ÒÑÔÐØ�5Øˆtr   c                 óR   — |                       t          j        |d¦  «        ¦  «        S )z-Satisfy the dependencies in the given string.F)r×   r6   rŽ   )r+   Ú
dependsstrs     r   Úsatisfy_depends_strzDebPackage.satisfy_depends_str[  s%   € ð ×$Ò$¥WÔ%:¸:ÀuÑ%MÔ%MÑNÔNÐNr   c                 óª  — 	 t          j        | j        j        ¦  «        }| n# t          $ r Y nw xY w|D ]/}|                      |¦  «        s|                      |¦  «        s dS Œ0| j        D ]f}	 | j        |                              d¬¦  «         Œ%# t          $ r5 t          d¦  «        |z  | _        | j                             ¦   «          Y  dS w xY wdS )zSatisfy the dependencies.F)Ú	from_userzCannot install '%s'T)r6   ÚActionGroupr   r{   ÚAttributeErrorru   r�   r%   Úmark_installrJ   rK   r'   rÙ   )r+   r•   Ú_actiongrouprm   rr   s        r   r×   zDebPackage._satisfy_depends`  s  € ð	Ý"Ô.¨t¬{Ô/DÑEÔEˆLØˆLˆLøÝð 	ð 	ð 	ØˆDð	øøøð  ð 	!ð 	!ˆHØ×.Ò.¨xÑ8Ô8ð !Ø×-Ò-¨hÑ7Ô7ð !Ø ˜5˜5øà”?ð 	ð 	ˆCðØ”˜CÔ ×-Ò-¸Ð-Ñ>Ô>Ð>Ð>øÝð ð ð Ý'(Ð)>Ñ'?Ô'?À#Ñ'E�Ô$Ø”×!Ò!Ñ#Ô#Ð#Ø�u�u�uðøøøð ˆts   ‚ # £
0¯0Á/!BÂ:CÃCc                 óx   — |                       dd| j        z  ¦  «         | j        st          d¦  «        ‚| j        S )zReturn missing dependencies.re   zInstalling: %sú-property only available after check() was run)r2   r%   r&   râ   ©r+   s    r   Úmissing_depszDebPackage.missing_depsx  sC   € ð 	�	Š	�!Ð%¨¬Ñ7Ñ8Ô8Ð8ØÔ"ð 	RÝ Ð!PÑQÔQÐQØŒÐr   c                 ój  — g }g }g }| j         st          d¦  «        ‚| j        D ]‹}|j        s|j        rZ|j        €J ‚|                     |j        ¦  «         d}|j        j        D ]}||j	        z  }Œ|s|                     |j        ¦  «         |j
        r|                     |j        ¦  «         ŒŒ|||fS )z€Get the changes required to satisfy the dependencies.

        Returns: a tuple with (install, remove, unauthenticated)
        ræ   NF)r&   râ   r   rƒ   Úmarked_upgraderV   rC   rD   ÚoriginsÚtrustedÚmarked_delete)r+   ÚinstallÚremoveÚunauthenticatedrr   ÚauthenticatedÚorigins          r   Úrequired_changeszDebPackage.required_changes�  sê   € ð ˆØˆØˆØÔ"ð 	RÝ Ð!PÑQÔQÐQØ”;ð 	(ð 	(ˆCØÔ!ð 	5 SÔ%7ð 	5Ø”}Ð0Ð0Ð0Ø—’˜sœxÑ(Ô(Ð(ð !&�Ø!œmÔ3ð 4ð 4�FØ! V¤^Ñ3�M�MØ$ð 5Ø#×*Ò*¨3¬8Ñ4Ô4Ð4ØÔ ð (Ø—’˜cœhÑ'Ô'Ð'øØ˜ Ð1Ð1r   c                 óz   — d}t          | ¦  «        D ](\  }}|dz  dk    r|dz  }|dt          |¦  «        z  z  }Œ)|S )Nr   éP   r   ú
z%2.2x )r²   Úord)Úin_dataÚhexrÃ   Úcs       r   Úto_hexzDebPackage.to_hexœ  sV   € ð ˆÝ˜gÑ&Ô&ð 	%ð 	%‰DˆAˆqØ�2‰v˜Š{ˆ{Ø�t‘�Ø�8�c !™fœfÑ$Ñ$ˆCˆCØˆ
r   c                 óô   — d}t          | t          ¦  «        r7| D ]3}t          |¦  «        dk     st          |¦  «        dk    r|dz  }Œ.||z  }Œ4n)| D ]&}|dk     s|dk    r|dz  }Œ|t          |¦  «        z  }Œ'|S )Nr   é
   é   rw   )Ú
isinstanceÚstrr÷   Úchr)rø   Úsrú   Úbs       r   Ú	to_strishzDebPackage.to_strish¦  s¥   € ð ˆå�g�sÑ#Ô#ð 	 Øð ð �Ý�q‘6”6˜B’;�;¥# a¡&¤&¨3¢, ,Ø˜‘H�A�Aà˜‘F�A�Að	ð ð  ð  �Ø�r’6�6˜Q šW˜WØ˜‘H�A�Aà�˜Q™œ‘K�A�AØˆr   c                 óð  — |                      d¦  «        r
|dd …         }|                     |¦  «        }|                     d¦  «        r_|r]t          |¦  «        }t	          j        |¬¦  «        }t          d¦  «                             d¦  «        }||                     ¦   «         z  }	 | 	                    d¦  «        S # t          $ r, t          d¦  «        }||                      |¦  «        z  }|cY S w xY w)Nz./rd   z.gz)ÚfileobjzAutomatically decompressed:

zutf-8z,Automatically converted to printable ascii:
)Ú
startswithr5   Úendswithr   ÚgzipÚGzipFilerK   ÚencodeÚreadÚdecodeÚ	Exceptionr  )	r+   ÚpartrD   Úauto_decompressÚauto_hexrF   ÚioÚgzÚnew_datas	            r   Ú_get_contentzDebPackage._get_contentº  sû   € à�?Š?˜4Ñ Ô ð 	Ø˜˜˜”8ˆDØ×Ò Ñ%Ô%ˆà�=Š=˜ÑÔð 	 Oð 	Ý˜‘”ˆBÝ” rÐ*Ñ*Ô*ˆBÝÐ6Ñ7Ô7×>Ò>¸wÑGÔGˆDØ�B—G’G‘I”IÑˆDð	Ø—;’;˜wÑ'Ô'Ð'øÝð 	ð 	ð 	ÝÐHÑIÔIˆHØ˜Ÿš tÑ,Ô,Ñ,ˆHØˆOˆOˆOð	øøøs   Â*B? Â?3C5Ã4C5c                 óf   — 	 |                       | j        j        |¦  «        S # t          $ r Y dS w xY w©z4return the content of a specific control.tar.gz filer   )r  r!   r0   ÚLookupError©r+   rD   s     r   Úcontrol_contentzDebPackage.control_contentÍ  sD   € ð	Ø×$Ò$ T¤]Ô%:¸DÑAÔAÐAøÝð 	ð 	ð 	Ø�2�2ð	øøøó   ‚" ¢
0¯0c                 óf   — 	 |                       | j        j        |¦  «        S # t          $ r Y dS w xY wr  )r  r!   rF   r  r  s     r   Údata_contentzDebPackage.data_contentÕ  sD   € ð	Ø×$Ò$ T¤]Ô%7¸Ñ>Ô>Ð>øÝð 	ð 	ð 	Ø�2�2ð	øøør  c                 óV   — || j         k    rt          |t          j        ¬¦  «         dS dS )z%Write debugging output to sys.stderr.)ÚfileN)ÚdebugÚprintÚsysÚstderr)r+   ÚlevelÚmsgs      r   r2   zDebPackage._dbgÝ  s4   € ð �D”JÒÐÝ�#�CœJÐ'Ñ'Ô'Ð'Ð'Ð'ð Ðr   c                 óª  — | j         €t          j        d¦  «        ‚|€'t          j        t          j        ddd| j         ¦  «        S 	 |                     ¦   «          n$# t          $ r |                     ¦   «          Y nw xY w| 	                    | j         ¦  «        }	 | 
                    ¦   «          n$# t          $ r |                     ¦   «          Y nw xY w|S )zInstall the package.NzNo filename specifiedÚdpkgz-i)r#   r6   ÚErrorÚosÚspawnlpÚP_WAITÚstart_updaterâ   ÚstartUpdateÚrunÚfinish_updateÚfinishUpdate)r+   Úinstall_progressrŸ   s      r   rî   zDebPackage.installã  só   € ð Œ=Ð Ý”-Ð 7Ñ8Ô8Ð8ØÐ#Ý”:�bœi¨°¸¸t¼}ÑMÔMÐMð/Ø ×-Ò-Ñ/Ô/Ð/Ð/øÝ!ð /ð /ð /Ø ×,Ò,Ñ.Ô.Ð.Ð.Ð.ð/øøøà"×&Ò& t¤}Ñ5Ô5ˆCð0Ø ×.Ò.Ñ0Ô0Ð0Ð0øÝ!ð 0ð 0ð 0Ø ×-Ò-Ñ/Ô/Ð/Ð/Ð/ð0øøøàˆJs$   ÁA ÁA<Á;A<ÂB/ Â/CÃC©NN©F)T)TTr9   )+r   r   r   r   ÚrangerÊ   rÎ   rÌ   rÍ   r   r-   r)   r=   r?   ÚpropertyrL   rQ   rb   ru   r�   r†   rŠ   r�   r•   r˜   rœ   r„   r    rÇ   rÉ   rÓ   rÞ   r×   rè   ró   Ústaticmethodrû   r  r  r  r  r2   rî   r   r   r   r   r   '   s³  € € € € € Ø'Ð'ð EJÀEÈ!ÁHÄHÑA€\Ð# \°=à€Eð ð  ð  ð  ð$$ð $ð $ð#ð #ð #ð%ð %ð %ð ðð ñ „Xðð ð
ð 
ñ „Xð
ð#!ð #!ð #!ð #!ðJ0ð 0ð 0ðd+ð +ð +ðZð ð ðB/ð /ð /ðB ðð ñ „Xðð ð
ð 
ñ „Xð
ð ðð ñ „Xðð ðð ñ „Xððð ð ð>ð ð ð_ð _ð _ðB"!ð "!ð "!ð "!ðHDð Dð Dð DðLOð Oð Oð
ð ð ð0 ðð ñ „Xðð ð2ð 2ñ „Xð2ð4 ðð ñ „\ðð ðð ñ „\ðð&ð ð ð ð&ð ð ðð ð ð(ð (ð (ðð ð ð ð ð r   r   c                   ój   — e Zd ZdZd
d„Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Z	dd	„Z
dS )ÚDscSrcPackagez#A locally available source package.Nc                 óþ   — t                                | d |¦  «         || _        g | _        g | _        t          ¦   «         | _        d| _        g | _        i | _	        | j        �|  
                    | j        ¦  «         d S d S )Nr   )r   r-   r#   Ú_dependsÚ
_conflictsr3   r4   r"   Úbinariesr$   r)   r*   s      r   r-   zDscSrcPackage.__init__ú  sz   € å×Ò˜D $¨Ñ.Ô.Ð.Ø ˆŒØˆŒØˆŒÝ$'¡E¤EˆÔ!ØˆŒØˆŒØˆŒØŒ=Ð$Ø�IŠI�d”mÑ$Ô$Ð$Ð$Ð$ð %Ð$r   c                 ó   — | j         S ©z&Return the dependencies of the package)r:  rç   s    r   r•   zDscSrcPackage.depends  s   € ð Œ}Ðr   c                 ó   — | j         S r>  )r;  rç   s    r   r�   zDscSrcPackage.conflicts  s   € ð ŒÐr   c                 óR   — | j         d                              ¦   «         ddd…         S )z6Return the list of files associated with this dsc fileÚFilesrd   Nr/   )r$   Úsplitrç   s    r   rL   zDscSrcPackage.filelist  s(   € ð
 Œ~˜gÔ&×,Ò,Ñ.Ô.¨q¨t°!¨tÔ4Ð4r   c                 óD  — ddg}ddg}t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }	 |D ]ä}|D ]9}||vrŒ| j                             t          j        ||         ¦  «        ¦  «         Œ:|D ]9}||vrŒ| j                             t          j        ||         ¦  «        ¦  «         Œ:d|v r|d         | _	        d|v r*d„ |d          
                    d¦  «        D ¦   «         | _        |                     ¦   «         D ]}||v r||         | j        |<   ŒŒå	 ~|                     ¦   «          n# ~|                     ¦   «          w xY wt          d	¦  «        | j	        d
                     | j        ¦  «        fz  }	|	| j        d<   d| _        dS )zOpen the package.zBuild-DependszBuild-Depends-IndepzBuild-ConflictszBuild-Conflicts-IndepÚSourceÚBinaryc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   )Ústrip)r¥   r  s     r   r§   z&DscSrcPackage.open.<locals>.<listcomp>/  s    € Ð$QÐ$QÐ$Q°1 Q§W¢W¡Y¤YÐ$QÐ$QÐ$Qr   r­   zBInstall Build-Dependencies for source package '%s' that builds %s
rw   ÚDescriptionFN)r6   Úopen_maybe_clear_signed_filer)  ÚfdopenÚTagFiler:  r”   Úparse_src_dependsr;  r"   rB  r<  Úkeysr$   ÚcloserK   r¾   r&   )
r+   r  Údepends_tagsÚconflicts_tagsÚfdÚfobjÚtagfileÚsecÚtagr  s
             r   r)   zDscSrcPackage.open  sÚ  € ð (Ð)>Ð?ˆØ+Ð-DÐEˆÝÔ1°$Ñ7Ô7ˆÝŒy˜‰}Œ}ˆÝ”/ $Ñ'Ô'ˆð	Øð 7ð 7�Ø'ð Nð N�CØ #�~�~Ø Ø”M×(Ò(­Ô)BÀ3ÀsÄ8Ñ)LÔ)LÑMÔMÐMÐMØ)ð Pð P�CØ #�~�~Ø Ø”O×*Ò*­7Ô+DÀSÈÄXÑ+NÔ+NÑOÔOÐOÐOØ˜s�?�?Ø#& x¤=�D”LØ˜s�?�?Ø$QÐ$Q¸¸H¼×8KÒ8KÈCÑ8PÔ8PÐ$QÑ$QÔ$Q�D”MØŸ8š8™:œ:ð 7ð 7�CØ˜c�z�zØ.1°#¬h˜œ sÑ+øð7ð7ð" Ø�JŠJ‰LŒLˆLˆLøð Ø�JŠJ‰LŒLˆLˆLøøøåØTñ
ô 
àŒ\˜3Ÿ8š8 D¤MÑ2Ô2Ð3ñ4ˆð )*ˆŒ�}Ñ%Ø#ˆÔÐÐs   ÁC'E ÅEFc                 ó$  — |                       ¦   «         s\| j        D ]T}| j        |         j        j        rt          t          d¦  «        ¦  «        ‚| j        |                              ¦   «          ŒUd| _        |  	                    | j
        ¦  «        S )z‰Check if the package is installable.

        The second parameter is ignored and only exists for compatibility
        with parent type.z%An essential package would be removedT)r    r4   r   r}   Ú	essentialr  rK   Úmark_deleter&   r×   r•   )r+   rÚ   r"   s      r   rÓ   zDscSrcPackage.check=  s“   € ð ×#Ò#Ñ%Ô%ð 	3ØÔ4ð 3ð 3�Ø”;˜wÔ'Ô,Ô6ð PÝ#¥AÐ&MÑ$NÔ$NÑOÔOÐOØ”˜GÔ$×0Ò0Ñ2Ô2Ð2Ð2à"ˆÔð ×$Ò$ T¤\Ñ2Ô2Ð2r   r2  r3  )r   r   r   r   r-   r5  r•   r�   rL   r)   rÓ   r   r   r   r8  r8  ÷  s£   € € € € € Ø-Ð-ð%ð %ð %ð %ð ðð ñ „Xðð
 ðð ñ „Xðð
 ð5ð 5ñ „Xð5ð!$ð !$ð !$ðF3ð 3ð 3ð 3ð 3ð 3r   r8  c                  óh  — ddl m}  ddlm}  | ¦   «         }d}t	          |›d|                     |¦  «        ›�¦  «         |                     |¦  «        }t	          d|z  ¦  «         |D ]}t	          d|j        z  ¦  «         Œt          t          j
        d         |¦  «        }t	          d	|j        z  ¦  «         |                     ¦   «         s#t	          d
¦  «         t	          |j        ¦  «         t	          d|j        z  ¦  «         t	          |j        ¦  «         t	          |j        ¦  «         t	          d¦  «         |                      |¦   «         ¦  «        }t	          |¦  «         t%          |¬¦  «        }d}	t	          |                     t)          j        |	d¦  «        ¦  «        ¦  «         dS )zTest functionr   )r   )ÚInstallProgresszwww-browserz
 virtual: zProviders for %s :z %sre   zDeb: %szcan't be satifiedzmissing deps: %szInstalling ...)r,   z:libc6 (>= 2.3.2), libaio (>= 0.3.96) | libaio1 (>= 0.3.96)FN)Ú	apt.cacher   Úapt.progress.baserZ  r!  rU   rh   rD   r   r"  Úargvr"   rÓ   r'   rè   ró   rL   rî   r8  r×   r6   rŽ   )
r   rZ  r,   Úvpr   rr   ÚdÚretr  Údss
             r   Ú_testrb  O  s¸  € ð  ÐÐÐÐÐØ1Ð1Ð1Ð1Ð1Ð1àˆE‰GŒG€Eà	€BÝ	˜b˜b˜b %×":Ò":¸2Ñ">Ô">Ð">Ð
?Ñ@Ô@Ð@Ø×,Ò,¨RÑ0Ô0€IÝ	Ð
 Ñ
#Ñ$Ô$Ð$Øð  ð  ˆÝˆe�c”hÑÑÔÐÐå•3”8˜A”; Ñ&Ô&€AÝ	ˆ)�a”iÑ
Ñ Ô Ð Ø�7Š7‰9Œ9ð !ÝÐ!Ñ"Ô"Ð"ÝˆaÔÑ Ô Ð Ý	Ð
˜qœ~Ñ
-Ñ.Ô.Ð.Ý	ˆ!Ô
ÑÔÐå	ˆ!Œ*ÑÔÐå	Ð
ÑÔÐØ
�)Š)�O�OÑ%Ô%Ñ
&Ô
&€CÝ	ˆ#�J„J€Jõ 	˜EÐ"Ñ"Ô"€AØ	E€BÝ	ˆ!×
Ò
�WÔ2°2°uÑ=Ô=Ñ
>Ô
>Ñ?Ô?Ð?Ð?Ð?r   Ú__main__)r   Ú
__future__r   r   r   r6   r	  r)  r"  Útypingr   r   r   r   r   r	   r
   r   r   rK   r  r   ÚIOErrorr   Úobjectr   r8  rb  r   r   r   r   ú<module>rh     s…  ðð& BÐ AØ %Ð %Ð %Ð %Ð %Ð %à 
€
€
€
Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø 
€
€
€
à JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jà  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð ðDð Dð Dð Dð D˜Gñ Dô Dð DðMð Mð Mð Mð M�ñ Mô Mð Mð`U3ð U3ð U3ð U3ð U3�Jñ U3ô U3ð U3ðp$@ð $@ð $@ðN ˆzÒÐØ	€E�G„G€G€G€Gð Ðr   