3
ft` @ s d dl mZ d dl mZ ddlmZ d dlmZ d dlZd dl Zd dl
Z
dd Zd d
Zdd Z
e
dJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dEZdFdG ZdHdI ZdS )a )absolute_import)unicode_literals )transaction)is_py3bytesNc ) C s t j| d}|jtjtjB xztjjD ]l}tj j
rDt|d}y|jd|}W n< t
tjfk
r } ztjjdt| W Y dd}~X nX t|sq,yt|}W n$ tk
r d}tjj|Y nX |d }yy|tj j|}W n, tk
r |tj j|jd}Y nX |tj | } |tj | }
| tjkrd|
rd|d ||jdfkrd|
}W n tttfk
r Y nX t|rt|d}|S W dS )
z-Calculate the release version for the system.)rootzutf-8Zprovidesz Error: %sNz:Error: rpmdb failed to list provides. Try: rpm --rebuilddbversionutf8name)r initReadOnlyTransactionZpushVSFlagsrpmZ_RPMVSF_NOSIGNATURESZ_RPMVSF_NODIGESTSdnfconstZDISTROVERPKGZpycompZPY3bytesZdbMatch TypeErrorerror
exceptionsErrorstrlennext
StopIterationZRPMTAG_PROVIDENAMEindex
ValueErrordecodeZRPMTAG_PROVIDEFLAGSZRPMTAG_PROVIDEVERSIONZRPMSENSE_EQUALKeyError
IndexErrorr )ZinstallroottsZdistroverpkgidxehdrmsgZ
releaseverZoffflagZver r# /usr/lib/python3.6/__init__.pydetect_releasever sB
&
r% c C sp t j }t| V}|j }y|j|}W n8 tjk
r` } ztjj dj
|| W Y dd}~X nX |S Q R X dS )zReturn RPM header of the file.z
{0}: '{1}'N)r r openfilenoZhdrFromFdnor r r
r r format)pathr packageZfdnor r r# r# r$ _headerI s
&r+ c s fdd D S )Nc s i | ]} | D ]
}||qqS r# r# ).0kv)dctr# r$