o
    O6ufë  ã                   @   sB   d dl mZ d dlZd dlZd dlmZmZ G dd„ deeƒZdS )é    )ÚPathN)ÚPluginÚRedHatPluginc                   @   s   e Zd ZdZdZdd„ ZdS )Ú
UnpackagedzDCollects a list of files that are not handled by the package managerÚ
unpackagedc           	         sÒ   dd„ }d‡fdd„	}‡fdd„}ˆj dd�sd S ˆ d	¡�A}|ƒ ‰g }t‡fd
d„ˆj ˆjj ¡ ¡D ƒƒ‰ ˆD ]}|||ƒ7 }q9‡ fdd„|D ƒ}||ƒ}| d |¡¡ W d   ƒ d S 1 sbw   Y  d S )Nc                   S   s   t jd  d¡S )z3Return a list of directories in $PATH.
            ÚPATHú:)ÚosÚenvironÚsplit© r   r   ú?/usr/lib/python3/dist-packages/sos/report/plugins/unpackaged.pyÚget_env_path_list   s   z-Unpackaged.collect.<locals>.get_env_path_listc              
      sà   g }t j| dd�D ]d\}}}|r"|D ]‰ ‡ fdd„|D ƒ|dd…< q|D ]2}ˆ ||¡} zt t  | ¡j¡r<t| ƒ ¡ } W n	 t	yF   Y q$w | 
ˆ ||¡t j | ¡g¡ q$|D ]}ˆ ||¡}| 
|t j |¡g¡ qYq	|S )zÞReturn a list of all files present on the system, excluding
                any directories listed in `exclude`.

            :param path: the starting path
            :param exclude: list of paths to exclude
            T)Útopdownc                    s   g | ]}|ˆ vr|‘qS r   r   )Ú.0Úd©Úexcr   r   Ú
<listcomp>(   s    z@Unpackaged.collect.<locals>.all_files_system.<locals>.<listcomp>N)r	   ÚwalkÚ	path_joinÚstatÚS_ISLNKÚlstatÚst_moder   ÚresolveÚ	ExceptionÚappendÚpathÚrealpath)r   ÚexcludeÚ	file_listÚrootÚdirsÚfilesÚname©Úselfr   r   Úall_files_system   s,   €ÿÿþz,Unpackaged.collect.<locals>.all_files_systemc                    sx   g }| D ]5}ˆ   |¡}|› }d}ˆ  |¡r2|dk r2t |¡}|d|› �7 }|d7 }ˆ  |¡r2|dk s| |d ¡ q|S )z4Format the unpackaged list as a string.
            r   é
   z -> é   Ú
)r   Úpath_islinkr	   Úreadlinkr   )r$   ÚexpandedÚfileÚoutÚlinksr&   r   r   Úformat_output9   s   

ýz)Unpackaged.collect.<locals>.format_outputT)Úcmdr   c                 3   s2   � | ]‰ t ‡ fd d„ˆD ƒƒrtj ˆ ¡V  qdS )c                 3   s   � | ]}ˆ   |¡V  qd S ©N)Ú
startswith)r   Úp©Úxr   r   Ú	<genexpr>V   s   € z/Unpackaged.collect.<locals>.<genexpr>.<genexpr>N)Úanyr	   r   r   )r   )Úpathsr7   r   r9   S   s   € ý

ÿz%Unpackaged.collect.<locals>.<genexpr>c                    s   g | ]
\}}|ˆ vr|‘qS r   r   )r   r8   Úrp)Úall_frpmr   r   r   [   s    z&Unpackaged.collect.<locals>.<listcomp>Ú r4   )	Útest_predicateÚcollection_fileÚsetÚpolicyÚmangle_package_pathÚpackage_managerÚ	all_filesÚwriteÚjoin)	r'   r   r(   r2   ÚufileÚall_fsystemr   Únot_packagedÚnot_packaged_expandedr   )r=   r;   r'   r   Úcollect   s&   
ÿÿ"òzUnpackaged.collectN)Ú__name__Ú
__module__Ú__qualname__Ú
short_descÚplugin_namerL   r   r   r   r   r      s    r   )Úpathlibr   r	   r   Úsos.report.pluginsr   r   r   r   r   r   r   Ú<module>   s
   