HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //proc/thread-self/root/usr/lib/python3/dist-packages/apt/__pycache__/debfile.cpython-38.pyc
U

&��cb��@s
dZddlmZddlZddlZddlZddlZddlZddlZzHddl	m
Z
mZmZm
Z
mZmZmZmZe
eee
eeeWnek
r�dd�ZYnXddlmZddlmZGd	d
�d
e�ZGdd�de�ZGd
d�de�Zdd�Zedk�re�dS)z;Classes for working with locally available Debian packages.�)�print_functionN)�Dict�Iterable�List�Optional�Set�Tuple�Union�castcCs|S�N�)�typ�objrr�-/usr/lib/python3/dist-packages/apt/debfile.pyr
'sr
)�gettext)�BytesIOc@seZdZdZdS)�NoDebArchiveExceptionz9Exception which is raised if a file is no Debian archive.N)�__name__�
__module__�__qualname__�__doc__rrrrr/src@sPeZdZdZed�\ZZZZdZ	dEdd�Z
dd�Zd	d
�Zdd�Z
ed
d��Zedd��ZdFdd�Zdd�Zdd�Zdd�Zdd�Zedd��Zedd��Zed d!��Zed"d#��Zd$d%�Zd&d'�Zd(d)�ZdGd+d,�ZdHd-d.�Zd/d0�Zd1d2�Z ed3d4��Z!ed5d6��Z"e#d7d8��Z$e#d9d:��Z%dId;d<�Z&d=d>�Z'd?d@�Z(dAdB�Z)dJdCdD�Z*dS)K�
DebPackagezA Debian Package (.deb file).�rNcCs`|dkrt��}||_ttjd�|_d|_d|_i|_	g|_
d|_d|_d|_
|r\|�|�dS)N�F)�apt�Cache�_cacher
�apt_inst�DebFile�_debfile�pkgname�filename�	_sections�
_need_pkgs�_check_was_run�_failure_string�
_multiarch�open��selfr!�cacherrr�__init__?szDebPackage.__init__cCsh|�dd|�g|_t�|_d|_||_t�|j�|_|jj	�
d�}t�|�|_
|j
d|_d|_dS)z open given debfile �z	open '%s'r�control�PackageFN)�_dbgr#�set�_installed_conflictsr%r!rrrr-�extractdata�apt_pkgZ
TagSectionr"r r$)r)r!r-rrrr'OszDebPackage.opencCs
|j|Sr�r"�r)�keyrrr�__getitem__]szDebPackage.__getitem__cCs
||jkSrr4r5rrr�__contains__aszDebPackage.__contains__csHg�z|jj��fdd��Wn$tk
rBtd�|jgYSX�S)z$return the list of files in the deb.cs��|j�Sr��append�name��item�data��filesrr�<lambda>k�z%DebPackage.filelist.<locals>.<lambda>z(List of files for '%s' could not be read)rr>�go�SystemError�_r!�r)rr?r�filelistes�zDebPackage.filelistcsLg�z|jj��fdd��Wn$tk
rBtd�|jgYSXt��S)z, return the list of files in control.tar.gz cs��|j�Srr9r<�r-rrrAxrBz-DebPackage.control_filelist.<locals>.<lambda>z0List of control files for '%s' could not be read)rr-rCrDrEr!�sortedrFrrHr�control_filelistqs
��zDebPackage.control_filelistFcCs�d|kr|S|js|S|j�|�r&|S||jkr`|j|jdk	r`ttjj|j|j�jdkr`|Sd||jf}||jkr||S|j|}|jdkr�|S|jj	}|j
|j@r�|S|r�|j
|j@s�|S|S)N�:�all�%s:%s)
r&r�is_virtual_package�	candidater
r�package�Version�architectureZ_candZ
multi_archZMULTI_ARCH_FOREIGNZMULTI_ARCH_SAME)r)r �in_conflict_checkingZmultiarch_pkgnameZ
multiarch_pkg�candrrr�_maybe_append_multiarch_suffixs<
�
���



�z)DebPackage._maybe_append_multiarch_suffixc	Cs�|�dd|�|D]�}|d}|d}|d}|�|�}||jkr�|j�|�r|�dd|�|j�|�D]}|jrldSqlq|j|j}|dk	r�t�|j	||�r�dS|s|jj|dd	�D](}|jr�|�dd
|j
|f�dSq�qdS)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)Zinclude_nonvirtualz'found installed '%s' that provides '%s'F)r/rUrrN�get_providing_packages�is_installed�	installedr3�	check_dep�versionr;)	r)�or_group�dep�depname�ver�oper�pkg�instZppkgrrr�_is_or_group_satisfied�sH

��
�
��z!DebPackage._is_or_group_satisfiedc
Cs|D]�}|\}}}|�|�}||jkrX|j�|�s4q|j�|�}t|�dkrNq|dj}|j|}|jj�|j�}|sxqt	�
|j||�s�q|�dd|�|j
�|�dSd}	|D]L}|	|d7}	|r�|r�|	d|d|df7}	||t|�dkr�|	d7}	q�|jtd	�|	7_d
S)zTry to satisfy the or_group.rWrrVzNeed to get: %sTrz (%s %s)�|z"Dependency is not satisfiable: %s
F)rUrrNrX�lenr;�	_depcacheZget_candidate_ver�_pkgr3r[Zver_strr/r#r:r%rE)
r)r]r^r_r`ra�	providersrbrTZor_strrrr�_satisfy_or_group�s@





��zDebPackage._satisfy_or_groupcCs�|�dd|||f�|j|}|jr>|jdk	s4t�|jj}n"|jr\|jdk	sRt�|jj}ndSt�	|||�r�|�
|||�s�|jtd�|j
7_|�dd|j
�dSdS)z@Return True if a pkg conflicts with a real installed/marked pkg.r,z8_check_single_pkg_conflict() pkg='%s' ver='%s' oper='%s'NFz)Conflicts with the installed package '%s'z!conflicts with installed pkg '%s'T)r/rrYrZ�AssertionErrorr\�marked_installrOr3r[�replaces_real_pkgr%rEr;)r)r r`rarb�pkgverrrr�_check_single_pkg_conflicts2��


��z%DebPackage._check_single_pkg_conflictcCs�|�dd|�|D]�}|d}|d}|d}|j|dd�}||jkr�|j�|�r|j�|�D]N}|�dd|j�|j|jkr�|�dd	�q`|�|j||�r`|j�	|j�q`q|�|||�r|j�	|�qt
|j�S)
z5Check the or-group for conflicts with installed pkgs.rVz _check_conflicts_or_group(): %s rrWT)rSr,zconflicts virtual check: %szconflict on self, ignoring)r/rUrrNrXr;r ror1�add�bool)r)r]r^r_r`rarbrrr�_check_conflicts_or_groups4�
�z$DebPackage._check_conflicts_or_groupcCs6d}zt�|j|d�WStk
r0gYSXdS)z/List of packages conflicting with this package.�	ConflictsFN�r3�
parse_dependsr"�KeyErrorr5rrr�	conflicts?s
zDebPackage.conflictsc	CsDg}dD]6}z|�t�|j|d��Wqtk
r<YqXq|S)z2List of packages on which this package depends on.)ZDependszPre-DependsF)�extendr3rur"rv)r)�dependsr6rrrryIs�zDebPackage.dependscCs6d}zt�|j|d�WStk
r0gYSXdS)z<List of virtual packages which are provided by this package.ZProvidesFNrtr5rrr�providesWs
zDebPackage.providescCs6d}zt�|j|d�WStk
r0gYSXdS)z4List of packages which are replaced by this package.ZReplacesFNrtr5rrr�replacesas
zDebPackage.replacescCs�|�dd|||f�|j|}d}|jrB|jdk	s8t�|jj}n"|jr`|jdk	sVt�|jj}nd}|jD]J}|D]@\}}}||krr|dks�t	�
|||�rr|�dd|�dSqrqjdS)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,zreplaces_real_pkg() %s %s %sNz?we have a replaces in our package for the conflict against '%s'TF)r/rrYrZrkr\rlrOr{r3r[)r)r rar`rbrnr]r;rrrrmks(



��zDebPackage.replaces_real_pkgcCs"d}|jD]}|�|�r
d}q
|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)rwrr)r)�resr]rrr�check_conflicts�s


zDebPackage.check_conflictsc
CsTtt|j��}tt|d�d�}|jd}|jd}dd�|jD�}t|j�D�]�\}}||dkr~|jj�	t|�|d�|j
s�qN|jd	k	s�t�|j
j}|jjD]~}	|	jD]r}
|
j|jkr�t�||
j|
j�s�|�d
d|j�|jtd�|j|
j|
j|
jd
�7_|jj��dSq�q�d|jkrN|jdD�]}|D]�}|jj|jk�r�|jj|k�r�t�||j|j��r�|�d
d|j�|jtd�|j|jj|j|jd�7_|jj��dS|jj|k�rB|j|jk�rB|�d
d|�|jtd�d� |�|j!|jj|jd�7_|jj��dS�qB�q8qN|jj��dS)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
        �2rWrQ�ArchitecturecSsg|]}|dd�qS)rr)�.0�xrrr�
<listcomp>�sz=DebPackage.check_breaks_existing_packages.<locals>.<listcomp>rgY@NrVzwould break (depends) %sz]Breaks existing package '%(pkgname)s' dependency %(depname)s (%(deprelation)s %(depversion)s))r r_ZdeprelationZ
depversionFrszwould break (conflicts) %szZBreaks existing package '%(pkgname)s' conflict: %(targetpkg)s (%(comptype)s %(targetver)s))r �	targetpkgZcomptypeZ	targetverz{Breaks existing package '%(pkgname)s' that conflict: '%(targetpkg)s'. But the '%(debfile)s' provides it via: '%(provides)s'�,)rzZdebfiler�r T)"�floatrfr�max�intr"rz�	enumerateZop_progress�updaterYrZrkrhZcurrent_verZdependenciesZor_dependenciesr;r r3r[Zrelationr\r/r%rEZdoneZdepends_listZ
target_pkgrRZ	comp_typeZ
target_ver�joinr!)
r)�sizeZsteps�debverZdebarchrz�irbr`Zdep_orr^Zconflicts_ver_listZc_orrrr�check_breaks_existing_packages�s�	


����

������

�����	z)DebPackage.check_breaks_existing_packagesTcCs�|�dd�|jd}|jd}d�||g�}|jd}|�dd|�||jkr�|j|}|rt|jd	k	rt|jj}n|s�|jd	k	r�|jj}n|jS|d	k	r�t�	||�}|�dd
|�|dkr�|j
S|dkr�|jS|dkr�|jS|jS)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_cacher.rrKrQrWz
debver: %sNz"CompareVersion(debver,instver): %sr)
r/r"r�rrZr\rO�VERSION_NONEr3Zversion_compare�VERSION_SAME�
VERSION_NEWER�VERSION_OUTDATED)r)Z
use_installedr rRr�rbZcacheverZcmprrrr��s.






z&DebPackage.compare_to_version_in_cachecCsD|�dd�d|_d|jkr6|�dd�td�|_dS|jd}|d	kr�|tj�d
�kr�|t��kr�||_	d|j
|j	f|_
|�dd|�n|�dd
�td�||_dS|s�|��|jkr�|j
|j
jr�td�|_dSd|_|��s�dS|��s�dS|�|j��s
dS|���sdS|j
jjdk�r@td�|_|j
��dSdS)z$Check if the package is installable.r,�checkTrrWzERROR: no architecture fieldz$No Architecture field in the packageFrLzAPT::ArchitecturerMzFound multiarch arch: '%s'zERROR: Wrong architecture dude!zVWrong architecture '%s' -- Run dpkg --add-architecture to add it and update afterwardsz$A later version is already installedrrz1Failed to satisfy all dependencies (broken cache))r/r$r"rEr%r3Zconfig�findZget_architecturesr&r r�r�rrZr}r��_satisfy_dependsryrgZbroken_count�clear)r)�allow_downgradeZarchrrrr�sN


���


zDebPackage.checkcCs|�t�|d��S)z-Satisfy the dependencies in the given string.F)r�r3ru)r)Z
dependsstrrrr�satisfy_depends_strQszDebPackage.satisfy_depends_strc	Cs�zt�|jj�}|Wntk
r*YnX|D]}|�|�s0|�|�s0dSq0|jD]L}z|j|jdd�WqVt	k
r�t
d�||_|j��YdSXqVdS)zSatisfy the dependencies.F)Z	from_userzCannot install '%s'T)
r3ZActionGrouprrg�AttributeErrorrdrjr#Zmark_installrDrEr%r�)r)ryZ_actiongroupr]rbrrrr�Vs"



zDebPackage._satisfy_dependscCs&|�dd|j�|js td��|jS)zReturn missing dependencies.rWzInstalling: %s�-property only available after check() was run)r/r#r$r�rFrrr�missing_depsns�zDebPackage.missing_depscCs�g}g}g}|jstd��|jD]h}|js0|jrv|jdk	s>t�|�|j�d}|jj	D]}||j
O}qV|sv|�|j�|jr |�|j�q |||fS)z�Get the changes required to satisfy the dependencies.

        Returns: a tuple with (install, remove, unauthenticated)
        r�NF)r$r�rrlZmarked_upgraderOrkr:r;ZoriginsZtrustedZ
marked_delete)r)�install�removeZunauthenticatedrbZ
authenticated�originrrr�required_changesxs&�
zDebPackage.required_changescCs>d}t|�D],\}}|ddkr(|d7}|dt|�7}q|S)Nr�Pr�
z%2.2x )r��ord)�in_data�hexr��crrr�to_hex�szDebPackage.to_hexcCsxd}t|t�rD|D].}t|�dks.t|�dkr8|d7}q||7}qn0|D]*}|dks\|dkrf|d7}qH|t|�7}qH|S)Nr�
�� )�
isinstance�strr��chr)r��sr��brrr�	to_strish�s


zDebPackage.to_strishc	Cs�|�d�r|dd�}|�|�}|�d�r\|r\t|�}tj|d�}td��d�}||��7}z|�	d�WSt
k
r�td�}||�|�7}|YSXdS)Nz./rVz.gz)ZfileobjzAutomatically decompressed:

zutf-8z,Automatically converted to printable ascii:
)�
startswithr2�endswithr�gzipZGzipFilerE�encode�read�decode�	Exceptionr�)	r)�partr;Zauto_decompressZauto_hexr>�ioZgzZnew_datarrr�_get_content�s

zDebPackage._get_contentcCs.z|�|jj|�WStk
r(YdSXdS�z6 return the content of a specific control.tar.gz file rN)r�rr-�LookupError�r)r;rrr�control_content�szDebPackage.control_contentcCs.z|�|jj|�WStk
r(YdSXdSr�)r�rr>r�r�rrr�data_content�szDebPackage.data_contentcCs||jkrt|tjd�dS)z%Write debugging output to sys.stderr.)�fileN)�debug�print�sys�stderr)r)�level�msgrrrr/�s
zDebPackage._dbgcCs�|jdkrt�d��|dkr2t�tjddd|j�Sz|��Wntk
rZ|��YnX|�	|j�}z|�
�Wntk
r�|��YnX|SdS)zInstall the package.NzNo filename specifiedZdpkgz-i)r!r3�Error�os�spawnlp�P_WAITZstart_updater�ZstartUpdate�runZ
finish_updateZfinishUpdate)r)Zinstall_progressr|rrrr��s

zDebPackage.install)NN)F)T)F)TT)N)+rrrr�ranger�r�r�r�r�r+r'r7r8�propertyrGrJrUrdrjrorrrwryrzr{rmr}r�r�r�r�r�r�r��staticmethodr�r�r�r�r�r/r�rrrrr3sb�


�
%/.!
	


	
	Y
$
?
	

	

rc@sPeZdZdZddd�Zedd��Zedd��Zed	d
��Zdd�Z	ddd�Z
dS)�
DscSrcPackagez#A locally available source package.NcCsTt�|d|�||_g|_g|_t�|_d|_g|_i|_	|jdk	rP|�
|j�dS)Nr)rr+r!�_depends�
_conflictsr0r1r �binariesr"r'r(rrrr+�s
zDscSrcPackage.__init__cCs|jS�z&Return the dependencies of the package)r�rFrrrry�szDscSrcPackage.dependscCs|jSr�)r�rFrrrrwszDscSrcPackage.conflictscCs|jd��ddd�S)z6Return the list of files associated with this dsc fileZFilesrVNr,)r"�splitrFrrrrGszDscSrcPackage.filelistc
Cs$ddg}ddg}t�|�}t�|�}t�|�}z�|D]�}|D]$}||krJq<|j�t�||��q<|D]$}||krtqf|j	�t�||��qfd|kr�|d|_
d|kr�dd�|d�d	�D�|_|�
�D]}||kr�|||j|<q�q4W5~|��Xtd
�|j
d�|j�f}	|	|jd<d
|_dS)zOpen the package.z
Build-DependszBuild-Depends-IndepzBuild-ConflictszBuild-Conflicts-IndepZSourceZBinarycSsg|]}|���qSr)�strip)r�r�rrrr�'sz&DscSrcPackage.open.<locals>.<listcomp>r�zBInstall Build-Dependencies for source package '%s' that builds %s
r�ZDescriptionFN)r3Zopen_maybe_clear_signed_filer��fdopenZTagFile�closer�rxZparse_src_dependsr�r r�r��keysr"rEr�r$)
r)r�Zdepends_tagsZconflicts_tags�fdZfobjZtagfileZsec�tagr�rrrr'sB



�

��
zDscSrcPackage.openFcCsN|��s<|jD],}|j|jjr,ttd���|j|��qd|_|�	|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}r1rrhZ	essentialr�rEZmark_deleter$r�ry)r)r�r rrrr�6s
zDscSrcPackage.check)NN)F)rrrrr+r�ryrwrGr'r�rrrrr��s




$r�c
Csddlm}ddlm}|�}d}td||�|�f�|�|�}td|�|D]}td|j�qRtt	j
d|�}td	|j�|��s�td
�t|j
�td|j�t|j�t|j�td�|�|��}t|�t|d
�}d}	t|�t�|	d���dS)z
Test functionr)r)�InstallProgresszwww-browserz%s virtual: %szProviders for %s :z %srWzDeb: %szcan't be satifiedzmissing deps: %szInstalling ...)r*z:libc6 (>= 2.3.2), libaio (>= 0.3.96) | libaio1 (>= 0.3.96)FN)Z	apt.cacherZapt.progress.baser�r�rNrXr;rr��argvr r�r%r�r�rGr�r�r�r3ru)
rr�r*Zvprirb�dZretr�Zdsrrr�_testHs.




r��__main__)rZ
__future__rrrr3r�r�r��typingrrrrrrr	r
�ImportErrorrrEr�r�IOErrorr�objectrr�r�rrrrr�<module>s@(AY'