3 ÿ›ƒ_ã@sddlZddlZddlZddlZddlmZddlZddlZddlZddlZddl m Z ej e ƒZ e jejƒe jejejƒƒGdd„de ƒZGdd„dejd�ZGd d „d eƒZeƒZdd d „ZGdd„dejd�ZGdd„deƒZdd„Zdd„Zdd„ZdS)éN)Úpath)ÚPlugincsPeZdZdZ‡fdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z ‡Z S)ÚUniversalHooksPluginzuniversal-hookscstƒj||ƒd|_dS)Nz/etc/dnf/universal-hooks)ÚsuperÚ__init__Ú hook_root)ÚselfÚbaseZcli)Ú __class__©ú%/usr/lib/python3.6/universal_hooks.pyr,szUniversalHooksPlugin.__init__cCsttj|j|jjƒtƒdS)N)Ú_run_dirrÚjoinrÚ pre_configÚ__name__ÚLOG)rr r r r0szUniversalHooksPlugin.pre_configcCsttj|j|jjƒtƒdS)N)r rrrÚconfigrr)rr r r r3szUniversalHooksPlugin.configcCsttj|j|jjƒtƒdS)N)r rrrÚresolvedrr)rr r r r6szUniversalHooksPlugin.resolvedcCsttj|j|jjƒtƒdS)N)r rrrÚsackrr)rr r r r9szUniversalHooksPlugin.sackcCs8|jj}t|jt|t|jjƒƒtt j |j|ƒtƒdS)N) Úpre_transactionrÚ _run_pkg_dirsrrÚDnfTransactionInfor Ú transactionr rr)rÚnamer r r r<sz$UniversalHooksPlugin.pre_transactioncCs8|jj}t|jt|t|jjƒƒttj |j|ƒtƒdS)N) rrrrrrr r rr)rrr r r rAsz UniversalHooksPlugin.transaction) rÚ __module__Ú __qualname__rrrrrrrrÚ __classcell__r r )r r r)s rc@sDeZdZejdd„ƒZejdd„ƒZejdd„ƒZejdd„ƒZd S) Ú FileSystemcCsdS)Nr )rÚpathnamer r r ÚglobHszFileSystem.globcCsdS)Nr )rrr r r ÚisdirLszFileSystem.isdircCsdS)Nr )rrÚmoder r r ÚaccessPszFileSystem.accesscCsdS)Nr )rr!Úencodingr r r ÚNamedTemporaryFileTszFileSystem.NamedTemporaryFileN) rrrÚabcÚabstractmethodrr r"r$r r r r rGsr)Ú metaclassc@s,eZdZdd„Zdd„Zdd„Zdd„Zd 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||d�S)N)r!r#)Útempfiler$)rr!r#r r r r$csz!RealFileSystem.NamedTemporaryFileN)rrrrr r"r$r r r r r(Ysr(ÚcCsŒtj|ƒsdSxxttj|dƒƒD]b}tj|ƒr2q"tj|tjƒrx|›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Ú returncodeÚerror)Zhook_dirÚlogÚargsZscriptZcmdlineZ completedr r r r js   r c@seZdZejdd„ƒZdS)ÚTransactionInfocCsdS)Nr )rr r r Ú getMembers|szTransactionInfo.getMembersN)rrrr%r&r7r r r r r6{sr6c@s"eZdZddœdd„Zdd„ZdS)rN)ÚreturncCs ||_dS)N)r)rrr r r r‚szDnfTransactionInfo.__init__cCs|jS)N)r)rr r r r7…szDnfTransactionInfo.getMembers)rrrrr7r r r r r�srcCsötj|d|ƒ}t|ƒ}i}tjddd��Ä}i}|jƒ} x€tt| ƒdd„d�D]h} | j} | |kr`qLd|| <|j | d ƒt tj|d | |ƒ|ƒx&|j ƒD]\} } | j | ƒr–d|| <q–WqLW|j ƒx&|D]} t tj|| ƒ|d |jƒqÆWWd QRXd S) zu :param str base_dir: :param logging.Logger log: :param str slot: :param TransactionInfo tinfo: Z multi_pkgsÚwzutf-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/ÚsetrÚwriter ÚitemsÚsearchÚflush)Zbase_dirr4ZslotZtinfoZ wildcard_pathÚ dir_matchersZwildcard_to_runZ temp_pkg_fileZ members_seenÚmembersÚmemberZpkgZ wildcard_dirZmatcherr r r r‰s&   rcCsFi}xs,     &