+
     [;i  c                   s    ^ RI Ht ^ RIHt ]P                  ! 4       R9   d@   ^ RIHt ^RIHt ^ RI	H
t
 ^ RIHt ^ RIHtHt ^ RIHt ^ R	It^ R	It^ R	It ! R
 R]4      tR	# R	# )i    )absolute_import)System)listdir)IPackageManager)Package)PackagesCollection)LockedDatabaseDatabasePermissions)PY3Nc                   sv   a  ] tR t^#t o RtR t]R 4       tR tR t	R t
R tR tR	 tR
 tR tR tR tRtV tR# )Rpmz
Package manager class - RPM
c                s    Wn         R # Nopts)selfZkwargss   &,?/usr/lib/python3.14/site-packages/tracer/packageManagers/rpm.py__init__ZRpm.__init__*   s    9    c                s    \         # r
   )ZNotImplemented)r   s   &r   history_pathZRpm.history_path-   s    !//r   c                s   \         P                  P                  V P                  4      '       g   \	        . 4      # V P
                  P                  R4      '       d   RpMRp \	        4       pV P                  4       p\        P                  ! RV,           R,           RR7      p\        P                  Vn        VP                  4       pVP                  W!.4       VP                  4        F,  pVP                  \!        VR,          VR	,          4      4       K.  	  V#   \        P"                   d*   p\%        T4      R
8X  d   \'        4       h\)        4       hRp?ii ; i)zg
Returns list of packages which were modified between unix_time and present
Requires root permissions.
modern_swdbz
					SELECT DISTINCT rpm.name, trans.dt_end AS end

					FROM trans JOIN trans_item JOIN rpm
					ON trans.id=trans_item.trans_id
					AND trans_item.item_id=rpm.item_id

					WHERE trans.dt_begin > ?
					ORDER BY rpm.name
				aJ  
					SELECT DISTINCT pkgtups.name, trans_end.timestamp AS end

					FROM trans_beg JOIN trans_end JOIN trans_data_pkgs JOIN pkgtups
					ON trans_beg.tid=trans_end.tid
					AND trans_data_pkgs.tid=trans_beg.tid
					AND trans_data_pkgs.pkgtupid=pkgtups.pkgtupid

					WHERE trans_beg.timestamp > ?
					ORDER BY pkgtups.name
				zfile:z?mode=roT)ZurinameZendzdatabase is lockedN)ospathZexistsr   r   r   get_database_filesqlite3ZconnectZRowZrow_factorycursorZexecuteZfetchallZappendr   ZOperationalErrorstrr   r   )	r   Z	unix_timeZsqlpackagesZsqliteZconnr   ZresultZes	   &&       r   packages_newer_thanZRpm.packages_newer_than0   s    ''..**
+
+b!!
iimmM""	C
CX!#H  "F??7V+j8dCD{{D[[]F
NN3$//#__WVF^VE];< $ O

"
" X!!f(<<.
WBUBWWXs   "B8D E0$EEc                s   \         P                  ! 4       pVP                  RV4      p\        V4      pV'       g   . # \        '       d9   \         P
                  ! V^ ,          4      pV Uu. uF  qfP                  NK  	  up# \         P                  ! V^ ,          4      pV Uu. uF  qw^ ,          NK  	  up# u upi u upi )z
Returns list of files provided by package
See also: http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch04s02s03.html
r   )rpmTransactionSetdbMatchZlistr   filesr   Zfi)r   Zpkg_nametsmir   r    ZxZfs   &&      r   package_filesZRpm.package_filesb   s    
 	2


68$22h8 I	cIIhqk"E!"EqFFE""FF8A;E %QaDD%   # !s   *B6"B;c                s   V P                  V4      p\        P                  ! 4       pVP                  R V4      pV F  pV\        P                  ,          V^ ,          8X  g   K(  V\        P
                  ,          V^,          8X  g   KM  V\        P                  ,          V^,          8X  g   Kr  V\        P                  ,          V^,          8X  g   K  \        V4      pV P                  We4       Vu # 	  R# )r   N)

_splitEvrar   r   r   RPMTAG_EPOCHRPMTAG_VERSIONRPMTAG_RELEASEZRPMTAG_ARCHr   _load_package_info_from_hdr)r   r   evrar!   r"   hdrpackages   &&&    r   find_packageZRpm.find_packagev   s    
//$
42


64 2s
3Q'C0B0B,CtAw,NSVWZWiWiSjnrstnuSuz}  B  N  N  {O  SW  XY  SZ  {Zt}W	%%g3^  r   c           
     s   V'       g   R# \         P                  ! 4       pVP                  RVP                  4      p RpV F  pVf   TpK  \         P                  ! \        V\         P                  ,          4      \        V\         P                  ,          4      \        V\         P                  ,          4      3\        V\         P                  ,          4      \        V\         P                  ,          4      \        V\         P                  ,          4      34      pVR8X  g   K  TpK  	  Vf   R# V P                  W4       R# )zFFrom database load informations about given package and set them to itNr   )
r   r   r   r   labelComparer   r%   r&   r'   r(   )r   r+   r!   r"   Zlatestr*   Zcompares   &&     r   load_package_infoZRpm.load_package_info   s    
2


67<<(2<6s~VVC,<,<%=!>F3K]K]D^@_adeklol~l~e  bA  !B
3s !3s3+=+='>#?SI[I[E\A]^`W 	2f  n
##G4r   c                s    \         P                  ! \        VP                  4      \        VP                  4      \        VP
                  4      3\        VP                  4      \        VP                  4      \        VP
                  4      34      # )zW
labelCompare returns:
0 if the EVR matches
1 if EVR(1) > EVR(2)
-1 if EVR(2) > EVR(1)
)r   r.   r   epochversionrelease)r   Zp1Zp2s   &&&r   compare_packagesZRpm.compare_packages   sh     

CM3rzz?C

OLsSUS[S[}^abdblbl^morsus}s}o~N  A  Ar   c                s`   VP                   ^ ,          pV P                  VP                  4      pV'       dx   VP                  R8X  de   VP	                  4       R,           FI  p\
        P                  P                  V4      '       g   K*  V P                  V4      pV'       d   Vu # Ru # 	  V# R# )z8Returns name of package which provides given applicationzDevelopment/Languages:i   NNN)Z	instances_file_provided_byZexecategoryZcmdliner   r   Zisfile)r   ZappZprocessr+   Zargs   &&   r   provided_byZRpm.provided_by   s     ]]17##GKK0722!"%%			'',w g*d* & N
r   c                s    VP                  R4      pW^,           R pVRV P                  R4      pW^,           V pVRV P                  R4      pW^,           V pVP                  R4      pVR8X  d   Rp	MVRV p	WWS3# )z
Derived from rpmUtils.miscutils.splitFilename
https://github.com/rpm-software-management/yum/blob/master/rpmUtils/miscutils.py

Given: 9-123a.ia64
Return: (9, 123a, 1, ia64)
Z.NZ-Z:r-   )ZrfindZfind)
r   r)   Z	archIndexZarchZrelIndexZrelZverIndexZverZ
epochIndexr0   s
   &&        r   r$   ZRpm._splitEvra   s     zz#9
1}~
4:I$$S)8	l9	%39Ho##C(8	l8	$3		#:BE*E
c
r   c                s0   V\         P                  ,          Vn        V\         P                  ,          Vn        V\         P
                  ,          pV'       d   W1n        V\         P                  ,          Vn        V\         P                  ,          Vn
        R # r
   )r   ZRPMTAG_SUMMARYZdescriptionRPMTAG_GROUPr5   r%   r0   r&   r1   r'   r2   )r   r+   r*   r0   s   &&& r   r(   ZRpm._load_package_info_from_hdr   sd    S//07#**+7s 5M++,7?++,7?r   c                s   \         P                  ! 4       pVP                  RV4      pVP                  4       ^ 8X  d   R# \	        V4      p\        V\         P                  ,          4      pV\         P                  ,          Vn        V# )z1Returns name of package which provides given fileZ	basenamesN)	r   r   r   ZcountZnextr   ZRPMTAG_NAMEr7   r5   )r   filer!   ZdbZpkgZps   &&    r   r4   ZRpm._file_provided_by   sc    2


;%2hhjAo	b3s3??#$1C$$%1:
8r   c                s8   V P                   P                  R4      '       d   V P                  # \        \	        V P                  4      RR7       FH  pVP                  R4      '       g   K  VP                  R4      '       g   K5  V P                  V,           u # 	  R# )z)Returns path to yum history database filer   T)Zreversezhistory-z.sqliteN)r   r   r   Zsortedr   Z
startswithZendswith)r   r8   s   & r   r   ZRpm._database_file   sl    
iimmM""gd//0$?tz""t}}Y'?'?$$ @r   r   N)Z__name__Z
__module__Z__qualname__Z__firstlineno__Z__doc__r   Zpropertyr   r   r#   r,   r/   r3   r6   r$   r(   r4   r   Z__static_attributes__Z__classdictcell__)Z__classdict__s   @r   r	   r	   #   sY     
 / /0Xd!(52A 4	-
% %r   r	   )ZfedoraZrhelZcentoszcentos-7ZmageiaZol)Z
__future__r    Ztracer.resources.systemr   Zdistributionr   r   ZipackageManagerr   Ztracer.resources.packager   Ztracer.resources.collectionsr   Ztracer.resources.exceptionsr   r   Ztracer.resources.pycompr   r   r   r	   ) r   r   <module>r9      sP   & ' +	TT--<L(
I%? I% Ur   