a x j@sddlZddlZddlZddlZddlmZddlZddlZddlZddlZddl m Z e e Z e eje eejGddde ZGdddejdZGd d d eZeZdd d ZGdddejdZGdddeZddZddZddZdS)N)path)PlugincsPeZdZdZfddZddZddZdd Zd d Zd d Z ddZ Z S)UniversalHooksPluginzuniversal-hookscst||d|_dS)Nz/etc/dnf/universal-hooks)super__init__ hook_root)selfbaseZcli __class__?/usr/lib/python3.9/site-packages/dnf-plugins/universal_hooks.pyr,szUniversalHooksPlugin.__init__cCstt|j|jjtdSN)_run_dirrjoinr pre_config__name__LOGrr r r r0szUniversalHooksPlugin.pre_configcCstt|j|jjtdSr)rrrrconfigrrrr r r r3szUniversalHooksPlugin.configcCstt|j|jjtdSr)rrrrresolvedrrrr r r r6szUniversalHooksPlugin.resolvedcCstt|j|jjtdSr)rrrrsackrrrr r r r9szUniversalHooksPlugin.sackcCs8|jj}t|jt|t|jjtt |j|tdSr) pre_transactionr _run_pkg_dirsrrDnfTransactionInfor transactionrrrrnamer r r r<sz$UniversalHooksPlugin.pre_transactioncCs8|jj}t|jt|t|jjtt |j|tdSr) rrrrrrr rrrrr r r rAsz UniversalHooksPlugin.transaction) r __module__ __qualname__rrrrrrrr __classcell__r r r r r)s rc@sDeZdZejddZejddZejddZejddZd S) FileSystemcCsdSrr rpathnamer r r globHszFileSystem.globcCsdSrr r"r r r isdirLszFileSystem.isdircCsdSrr rrmoder r r accessPszFileSystem.accesscCsdSrr rr'encodingr r r NamedTemporaryFileTszFileSystem.NamedTemporaryFileN) rrrabcabstractmethodr$r%r(r+r r r r r!Gs   r!) metaclassc@s,eZdZddZddZddZddZd S) RealFileSystemcCs t|Sr)r$r"r r r r$ZszRealFileSystem.globcCs t|Sr)rr%r"r r r r%]szRealFileSystem.isdircCs t||Sr)osr(r&r r r r(`szRealFileSystem.accesscCstj||dS)Nr'r*)tempfiler+r)r r r r+csz!RealFileSystem.NamedTemporaryFileN)rrrr$r%r(r+r r r r r/Ysr/cCst|sdStt|dD]b}t|r0q t|tjrv|d|}tj|dd}d|j kr| d||j q | d|q dS)N/* T)shellrz!!! %s did not exit cleanly: %dz!!! %s is not executable) fsr%sortedr$r(r0X_OK subprocessrun returncodeerror)Zhook_dirlogargsZscriptZcmdlineZ completedr r r rjs   rc@seZdZejddZdS)TransactionInfocCsdSrr rr r r getMembers|szTransactionInfo.getMembersN)rrrr,r-rAr r r r r@{sr@c@s"eZdZddddZddZdS)rN)returncCs ||_dSrr)rrr r r rszDnfTransactionInfo.__init__cCs|jSrrCrr r r rAszDnfTransactionInfo.getMembers)rrrrrAr r r r rsrc Cst|d|}t|}i}tjddd}i}|} tt| dddD]d} | j} | |vr^qJd|| <| | d t t|d | ||| D]\} } | | rd|| <qqJ| |D]} t t|| |d |jqWd n1s0Yd S) zu :param str base_dir: :param logging.Logger log: :param str slot: :param TransactionInfo tinfo: Z multi_pkgswzutf-8r1cSs|jSr)r)mr r r z_run_pkg_dirs..)key Zpkgsz --pkg_list=N)rr_make_dir_matchersr7r+rAr8setrwriteritemssearchflush)base_dirr>ZslotZtinfoZ wildcard_path dir_matchersZwildcard_to_runZ temp_pkg_fileZ members_seenmembersmemberpkgZ wildcard_dirZmatcherr r r rs&   rcCsBi}t|dD]*}t|rtt|}t|||<q|S)Nr4)r7r$r%rbasenamenormpath_regex_from_dir)Z wc_slot_dirrRZpthr r r rKs  rKcCs|dd}td|dS)NZ __WILDCARD__z.*^$)replacerecompile)rexprr r r rXs rX)r3)r,r$Zloggingr0rr\r:sysr2ZdnfrZ getLoggerrrZsetLevelZERRORZ addHandlerZ StreamHandlerstderrrABCMetar!r/r7rr@rrrKrXr r r r s,     &