a
    Dc``ú  ã                   @   sP   d dl Z d dlZd dlmZ dd„ Zdd„ ZG dd„ deƒZG d	d
„ d
eƒZ	dS )é    N)Ú_c                 C   s   |   ¡ dv S )N)Ú1ZyesÚtrueÚwithZonÚenable)Úlower©Úvalue© r
   ú$/usr/share/apt-listchanges/ALCApt.pyÚ_parse_apt_bool   s    r   c                 C   s$   z
t | ƒW S  ty   Y dS 0 d S )Nr   )ÚintÚ	Exceptionr   r
   r
   r   Ú_parse_apt_int$   s    
r   c                   @   s   e Zd ZdS )ÚAptPipelineErrorN)Ú__name__Ú
__module__Ú__qualname__r
   r
   r
   r   r   ,   s   r   c                       sD   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z‡  Z	S )ÚAptPipelinec                    s   t ƒ  ¡  || _d S )N)ÚsuperÚ__init__Ú_config)ÚselfZconfig©Ú	__class__r
   r   r   0   s    
zAptPipeline.__init__c                 C   s˜   | j jrt tdƒ¡ |  ¡ .}|  |¡ |  |¡ |  |¡}W d   ƒ n1 sR0    Y  | j jr”t tdƒ¡ |D ]}t d| ¡ qvt d¡ |S )NzAPT pipeline messages:zPackages list:ú	%sÚ )r   ÚdebugÚALCLogr   Ú_open_apt_fdÚ_read_versionÚ_read_optionsÚ_read_packages)r   ÚfdZdebsÚdr
   r
   r   Úread4   s    


(
zAptPipeline.readc              
   C   sö   dt jvrttdƒƒ‚ztt jd ƒ}W n2 tyZ } zttdƒƒ|‚W Y d }~n
d }~0 0 | jjrvt tdƒ| ¡ |dkrŽt 	tdƒ¡ n|dk r¢ttdƒƒ‚zt  
|d	¡W S  tyð } z(ttd
ƒ|t|ƒdœ ƒ|‚W Y d }~n
d }~0 0 d S )NZAPT_HOOK_INFO_FDz{APT_HOOK_INFO_FD environment variable is not defined
(is Dpkg::Tools::Options::/usr/bin/apt-listchanges::InfoFD set to 20?)zDInvalid (non-numeric) value of APT_HOOK_INFO_FD environment variablez7Will read apt pipeline messages from file descriptor %dr   zÜIncorrect value (0) of APT_HOOK_INFO_FD environment variable.
If the warning persists after restart of the package manager (e.g. aptitude),
please check if the /etc/apt/apt.conf.d/20listchanges file was properly updated.é   zAPT_HOOK_INFO_FD environment variable is incorrectly defined
(Dpkg::Tools::Options::/usr/bin/apt-listchanges::InfoFD should be greater than 2).Zrtz3Cannot read from file descriptor %(fd)d: %(errmsg)s)r#   Úerrmsg)ÚosÚenvironr   r   r   r   r   r   r   ZwarningÚfdopenÚstr)r   Zapt_hook_info_fd_valÚexr
   r
   r   r   D   s,    

ÿÿÿzAptPipeline._open_apt_fdc                 C   s:   |  ¡  ¡ }|dkr ttdƒƒ‚| jjr6t d| ¡ d S )Nz	VERSION 2zqWrong or missing VERSION from apt pipeline
(is Dpkg::Tools::Options::/usr/bin/apt-listchanges::Version set to 2?)r   )ÚreadlineÚrstripr   r   r   r   r   )r   r#   Úversionr
   r
   r   r    `   s
    zAptPipeline._read_versionc                 C   sž   |  ¡  ¡ }| jjr"t d| ¡ |s*d S | jjsl| d¡rlt|tdƒd … ƒrld| j_	t
d| jjƒ| j_q | d¡r t
t|tdƒd … ƒ| jjƒ| j_q d S )Nr   zAPT::Get::Assume-Yes=Fé   zquiet=)r-   r.   r   r   r   Zignore_apt_assumeÚ
startswithr   ÚlenZconfirmÚmaxÚquietr   )r   r#   Úliner
   r
   r   r!   h   s    ÿþ
zAptPipeline._read_optionsc                 C   s  i }g }g }d}|  ¡ D ]Ž}| ¡ }| jjr:t d| ¡ |sB q¨| d d¡\}}}	}
}|	dkrbq|dksr|dkr~| |¡ q|dkrŠd}|d	krž| |¡ q|||< q|s°g S |D ]}||v r´||= q´g }|D ] }||v rÐ| || ¡ ||= qÐ| t| 	¡ ƒ¡ |S )
NFr   é   ú<z
**REMOVE**z	**ERROR**ú-Tz**CONFIGURE**)
Ú	readlinesr.   r   r   r   ÚsplitÚappendÚextendÚsortedÚvalues)r   r#   Ú	filenamesZtoconfigZtoremoveZ
hasupgradeZpkglineZpkgnameZ
oldversionZcompareZ
newversionÚfilenameÚpkgZordered_filenamesr
   r
   r   r"   y   sB    

zAptPipeline._read_packages)
r   r   r   r   r%   r   r    r!   r"   Ú__classcell__r
   r
   r   r   r   /   s   r   )
r(   r   ZALChacksr   r   r   r   r   Úobjectr   r
   r
   r
   r   Ú<module>   s   