3 _@sddlZddlZddlZddlZddlmZddlZddlZddlZddlZddl m Z ej e Z e jeje jejejGddde ZGdddejdZGd d d eZeZdd d ZGdddejdZGdddeZddZddZddZdS)N)path)PlugincsPeZdZdZfddZddZddZdd Zd d Zd d Z ddZ Z S)UniversalHooksPluginzuniversal-hookscstj||d|_dS)Nz/etc/dnf/universal-hooks)super__init__ hook_root)selfbaseZcli) __class__%/usr/lib/python3.6/universal_hooks.pyr,szUniversalHooksPlugin.__init__cCsttj|j|jjtdS)N)_run_dirrjoinr pre_config__name__LOG)rr r r r0szUniversalHooksPlugin.pre_configcCsttj|j|jjtdS)N)r rrrconfigrr)rr r r r3szUniversalHooksPlugin.configcCsttj|j|jjtdS)N)r rrrresolvedrr)rr r r r6szUniversalHooksPlugin.resolvedcCsttj|j|jjtdS)N)r rrrsackrr)rr r r r9szUniversalHooksPlugin.sackcCs8|jj}t|jt|t|jjtt j |j|tdS)N) pre_transactionr _run_pkg_dirsrrDnfTransactionInfor transactionr rr)rnamer r r r<sz$UniversalHooksPlugin.pre_transactioncCs8|jj}t|jt|t|jjttj |j|tdS)N) rrrrrrr r rr)rrr r r rAsz UniversalHooksPlugin.transaction) r __module__ __qualname__rrrrrrrr __classcell__r r )r r r)s rc@sDeZdZejddZejddZejddZejddZd S) FileSystemcCsdS)Nr )rpathnamer r r globHszFileSystem.globcCsdS)Nr )rrr r r isdirLszFileSystem.isdircCsdS)Nr )rrmoder r r accessPszFileSystem.accesscCsdS)Nr )rr!encodingr r r NamedTemporaryFileTszFileSystem.NamedTemporaryFileN) rrrabcabstractmethodrr r"r$r r r r rGsr) metaclassc@s,eZdZddZddZddZddZd S) RealFileSystemcCs tj|S)N)r)rrr r r rZszRealFileSystem.globcCs tj|S)N)rr )rrr r r r ]szRealFileSystem.isdircCs tj||S)N)osr")rrr!r r r r"`szRealFileSystem.accesscCstj||dS)N)r!r#)tempfiler$)rr!r#r r r r$csz!RealFileSystem.NamedTemporaryFileN)rrrrr r"r$r r r r r(Ysr(cCstj|sdSxxttj|dD]b}tj|r2q"tj|tjrx|d|}tj|dd}d|j kr|j d||j q"|j d|q"WdS)Nz/* T)shellrz!!! %s did not exit cleanly: %dz!!! %s is not executable) fsr sortedrr"r)X_OK subprocessZrun returncodeerror)Zhook_dirlogargsZscriptZcmdlineZ completedr r r r js   r c@seZdZejddZdS)TransactionInfocCsdS)Nr )rr r r getMembers|szTransactionInfo.getMembersN)rrrr%r&r7r r r r r6{sr6c@s"eZdZddddZddZdS)rN)returncCs ||_dS)N)r)rrr r r rszDnfTransactionInfo.__init__cCs|jS)N)r)rr r r r7szDnfTransactionInfo.getMembers)rrrrr7r r r r rsrcCstj|d|}t|}i}tjddd}i}|j} xtt| dddD]h} | j} | |kr`qLd|| <|j | d t tj|d | ||x&|j D]\} } | j | rd|| <qWqLW|j x&|D]} t tj|| |d |jqWWd QRXd S) zu :param str base_dir: :param logging.Logger log: :param str slot: :param TransactionInfo tinfo: Z multi_pkgswzutf-8)r!r#cSs|jS)N)r)mr r r sz_run_pkg_dirs..)key Zpkgsz --pkg_list=N)rr_make_dir_matchersr.r$r7r/setrwriter itemssearchflush)Zbase_dirr4ZslotZtinfoZ wildcard_path dir_matchersZwildcard_to_runZ temp_pkg_fileZ members_seenmembersmemberZpkgZ wildcard_dirZmatcherr r r rs&   rcCsFi}xs,     &