o
    *b                     @   sB   d dl mZmZ d dlZd dlZd dlmZ G dd deeZdS )    )PluginRedHatPluginN)Pathc                   @   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 | g }tfd	d
jjj D  D ]}|||7 }q3 fdd|D }||}jd|ddd 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.setup.<locals>.get_env_path_listc              
      s   g }t j| ddD ]Z\}}}|r"|D ]  fdd|D |dd< q|D ],}||} ztt | jr<t|  } W n	 t	yF   Y q$w |
t j|  q$|D ]}|
t j|| qSq	|S )zReturn 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                       g | ]}| vr|qS r   r   ).0der   r   
<listcomp>)       z>Unpackaged.setup.<locals>.all_files_system.<locals>.<listcomp>N)r	   walk	path_joinstatS_ISLNKlstatst_moder   Zresolve	Exceptionappendpathrealpath)r   ZexcludeZ	file_listrootdirsfilesnameselfr   r   all_files_system   s*   

z*Unpackaged.setup.<locals>.all_files_systemc              	      sJ   g }| D ]}  |} |r|d|t| q|| q|S )z4Format the unpackaged list as a string.
            z{} -> {})r   Zpath_islinkr   formatr	   readlink)r#   Zexpandedffpr%   r   r   format_output8   s   

z'Unpackaged.setup.<locals>.format_outputT)cmdc                 3   s2    | ] t  fd dD rtj V  qdS )c                    s   g | ]}  |qS r   )
startswith)r   pxr   r   r   M   s    z.Unpackaged.setup.<locals>.<genexpr>.<listcomp>N)anyr	   r   r    )r   )pathsr0   r   	<genexpr>J   s    

z#Unpackaged.setup.<locals>.<genexpr>c                    r   r   r   )r   r1   )all_frpmr   r   r   R   r   z$Unpackaged.setup.<locals>.<listcomp>
r   )Zplug_dir)N)Ztest_predicatesetZpolicyZmangle_package_pathZpackage_managerZ	all_filesZadd_string_as_filejoin)r&   r   r'   r,   Zall_fsystemr   Znot_packagedZnot_packaged_expandedr   )r5   r3   r&   r   setup   s&   

zUnpackaged.setupN)__name__
__module____qualname__Z
short_descZplugin_namer9   r   r   r   r   r      s    r   )Zsos.report.pluginsr   r   r	   r   Zpathlibr   r   r   r   r   r   <module>   s
   