a 2h@sddlmZddlmZddlmZddlmZddlZddl Zddl Z ddZ d d Z d d Z d dZedddddddddddddddddd d!d"d#d$d%d&d'Zd(d)Zd*d+ZdS),)absolute_import)unicode_literals) transaction) is_py3bytesNc Cstj|d}|tjtjBtjj}tjj }tj j rLt |d}t |d}tjj D]&}tj j rlt |d}z|d|}Wn>ttjfy}z tjdt|WYd}~n d}~00t|sqTz t|}Wn"tyd}tj|Yn0|d} d} d} zz|tj|} Wn*tyH|tj|d} Yn0|tj| } |tj| }| tjkr|r|d ||dfvr|} t|tj|tj|tjD]b\}} }t|trt |d}||kr| tjkr|r|} ||kr| tjkr|r|} qWntt t!fy2Yn0t"| rHt| d} t"| r\t| d} t"| rpt| d} | | | fSd S) zCalculate the release version for the system, including releasever_major and releasever_minor if they are overriden by the system-release-major or system-release-minor provides.)rootutf-8Zprovidesz Error: %sNz:Error: rpmdb failed to list provides. Try: rpm --rebuilddbversionutf8name)NNN)#rinitReadOnlyTransactionZ pushVSFlagsrpmZ_RPMVSF_NOSIGNATURESZ_RPMVSF_NODIGESTSdnfconstZDISTROVER_MAJOR_PKGZDISTROVER_MINOR_PKGZpycompZPY3bytesZ DISTROVERPKGZdbMatch TypeErrorerror exceptionsErrorstrlennext StopIterationZRPMTAG_PROVIDENAMEindex ValueErrordecodeZRPMTAG_PROVIDEFLAGSZRPMTAG_PROVIDEVERSIONZRPMSENSE_EQUALzip isinstanceKeyError IndexErrorr) installroottsZdistrover_major_pkgZdistrover_minor_pkgZ distroverpkgidxehdrmsg releaseverZreleasever_majorZreleasever_minorZoffflagZverZprovider(4/usr/lib/python3.9/site-packages/dnf/rpm/__init__.pydetect_releaseverssn    *           r*cCst|\}}}|S)z-Calculate the release version for the system.)r*)r r&_r(r(r)detect_releaseverdsr,c Cst}t|f}|}z||}Wn:tjyb}z tj d ||WYd}~n d}~00|WdS1s|0YdS)zReturn RPM header of the file.z {0}: '{1}'N) rr openfilenoZ hdrFromFdnor rrrrformat)pathr!packageZfdnor$r#r(r(r)_headerls *r2csfddDS)Ncs i|]}|D] }||qqSr(r().0kvZdctr(r) yz_invert..r(r6r(r6r)_invertxsr9)aarch64) alphaZalphaev4Z alphaev45Zalphaev5Z alphaev56Zalphaev6Z alphaev67Z alphaev68Zalphaev7Z alphapca56)Z armv5tejlZarmv5telZarmv5tlZarmv6lZarmv7lZarmv8l)Zarmv6hlZarmv7hlZarmv7hnlZarmv8hl)i386ZathlonZgeoder<Zi486Zi586Zi686)ia64)mips)mipsel)mips64)mips64el) loongarch64)noarch)ppc)ppc64Z ppc64iseriesZppc64p7Z ppc64pseries)ppc64le)riscv32)riscv64)riscv128)s390)s390x)sh3)sh4Zsh4a)sparcZsparc64Zsparc64vZsparcv8Zsparcv9Zsparcv9v)x86_64Zamd64Zia32e)r:r;ZarmZarmhfpr<r=r>r?r@rArBrCrDrErFrGrHrIrJrKrLrMrNrOcCst|S)N) _BASEARCH_MAP)Zarchr(r(r)basearchsrQcCs||}t|rt|d}|S)z Returns value of rpm_hdr[key] as a string. Rpm has switched from bytes to str and we need to handle both properly. r)rr)Zrpm_hdrkeyvaluer(r(r) getheaders rT)Z __future__rrrZ dnf.pycomprZ dnf.constrZdnf.exceptionsr r*r,r2r9rPrQrTr(r(r(r)sL    G