<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
_                 @   s  d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlZd dlZd dlZd dl	m
Z
 ejeZejej ejejej G dd de
ZG dd de jdZG d	d
 d
eZe ZdddZG dd de jdZG dd deZdd Zdd Zdd ZdS )    N)path)Pluginc                   sP   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
  ZS )UniversalHooksPluginzuniversal-hooksc                s   t  j|| d| _d S )Nz/etc/dnf/universal-hooks)super__init__	hook_root)selfbaseZcli)	__class__ %/usr/lib/python3.6/universal_hooks.pyr   ,   s    zUniversalHooksPlugin.__init__c             C   s   t tj| j| jjt d S )N)_run_dirr   joinr   
pre_config__name__LOG)r   r   r   r   r   0   s    zUniversalHooksPlugin.pre_configc             C   s   t tj| j| jjt d S )N)r   r   r   r   configr   r   )r   r   r   r   r   3   s    zUniversalHooksPlugin.configc             C   s   t tj| j| jjt d S )N)r   r   r   r   resolvedr   r   )r   r   r   r   r   6   s    zUniversalHooksPlugin.resolvedc             C   s   t tj| j| jjt d S )N)r   r   r   r   sackr   r   )r   r   r   r   r   9   s    zUniversalHooksPlugin.sackc             C   s8   | j j}t| jt|t| jj tt	j
| j|t d S )N)pre_transactionr   _run_pkg_dirsr   r   DnfTransactionInfor	   transactionr   r   r   )r   namer   r   r   r   <   s    z$UniversalHooksPlugin.pre_transactionc             C   s8   | j j}t| jt|t| jj  ttj	| j|t d S )N)
r   r   r   r   r   r   r	   r   r   r   )r   r   r   r   r   r   A   s    z UniversalHooksPlugin.transaction)r   
__module____qualname__r   r   r   r   r   r   r   r   __classcell__r   r   )r
   r   r   )   s   r   c               @   sD   e Zd Zejdd Zejdd Zejdd Zejdd Zd	S )

FileSystemc             C   s   d S )Nr   )r   pathnamer   r   r   globH   s    zFileSystem.globc             C   s   d S )Nr   )r   r   r   r   r   isdirL   s    zFileSystem.isdirc             C   s   d S )Nr   )r   r   moder   r   r   accessP   s    zFileSystem.accessc             C   s   d S )Nr   )r   r!   encodingr   r   r   NamedTemporaryFileT   s    zFileSystem.NamedTemporaryFileN)	r   r   r   abcabstractmethodr   r    r"   r$   r   r   r   r   r   G   s   r   )	metaclassc               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
RealFileSystemc             C   s
   t j |S )N)r   )r   r   r   r   r   r   Z   s    zRealFileSystem.globc             C   s
   t j|S )N)r   r    )r   r   r   r   r   r    ]   s    zRealFileSystem.isdirc             C   s   t j||S )N)osr"   )r   r   r!   r   r   r   r"   `   s    zRealFileSystem.accessc             C   s   t j||dS )N)r!   r#   )tempfiler$   )r   r!   r#   r   r   r   r$   c   s    z!RealFileSystem.NamedTemporaryFileN)r   r   r   r   r    r"   r$   r   r   r   r   r(   Y   s   r(    c             C   s   t j| sd S xxtt j| d D ]b}t j|r2q"t j|tjrx| d| }tj|dd}d|j	kr|j
d||j	 q"|j
d| q"W d S )Nz/* T)shellr   z!!! %s did not exit cleanly: %dz!!! %s is not executable)fsr    sortedr   r"   r)   X_OK
subprocessZrun
returncodeerror)Zhook_dirlogargsZscriptZcmdlineZ	completedr   r   r   r   j   s    


r   c               @   s   e Zd Zejdd ZdS )TransactionInfoc             C   s   d S )Nr   )r   r   r   r   
getMembers|   s    zTransactionInfo.getMembersN)r   r   r   r%   r&   r7   r   r   r   r   r6   {   s   r6   c               @   s"   e Zd ZddddZdd ZdS )r   N)returnc             C   s
   || _ d S )N)r   )r   r   r   r   r   r      s    zDnfTransactionInfo.__init__c             C   s   | j S )N)r   )r   r   r   r   r7      s    zDnfTransactionInfo.getMembers)r   r   r   r   r7   r   r   r   r   r      s   r   c             C   s   t j| d|}t|}i }tjddd}i }|j }	xtt|	dd dD ]h}
|
j}||kr`qLd||< |j	|d	  t
t j| d
||| x&|j D ]\}}|j|rd||< qW qLW |j  x&|D ]}t
t j|||d|j  qW W dQ R X dS )zu

    :param str base_dir:
    :param logging.Logger log:
    :param str slot:
    :param TransactionInfo tinfo:
    Z
multi_pkgswzutf-8)r!   r#   c             S   s   | j S )N)r   )mr   r   r   <lambda>   s    z_run_pkg_dirs.<locals>.<lambda>)key   
Zpkgsz--pkg_list=N)r   r   _make_dir_matchersr.   r$   r7   r/   setr   writer   itemssearchflush)Zbase_dirr4   ZslotZtinfoZwildcard_pathdir_matchersZwildcard_to_runZtemp_pkg_fileZmembers_seenmembersmemberZpkgZwildcard_dirZmatcherr   r   r   r      s&    	

r   c             C   sF   i }x<t j| d D ]*}t j|rtjtj|}t|||< qW |S )Nz/*)r.   r   r    r   basenamenormpath_regex_from_dir)Zwc_slot_dirrE   Zpthr   r   r   r?      s    
r?   c             C   s   | j dd}tjd| d S )NZ__WILDCARD__z.*^$)replacerecompile)r   exprr   r   r   rJ      s    rJ   )r+   )r%   r   Zloggingr)   r   rN   r1   sysr*   Zdnfr   Z	getLoggerr   r   ZsetLevelZERRORZ
addHandlerZStreamHandlerstderrr   ABCMetar   r(   r.   r   r6   r   r   r?   rJ   r   r   r   r   <module>   s,   

&	