U
    -_g                     @   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s2d S d	v}| g }tfd
djjj D  D ]}|||7 }qr fdd|D }||}|d| W 5 Q R X 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 ]\}}}|rD|D ]  fdd|D |dd< q$|D ]j}||} z"tt | jrxt|  } W n t	k
r   Y qHY nX |
||t j| g qH|D ]&}||}|
|t j|g qq|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                    s   g | ]}| k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   Zresolve	Exceptionappendpathrealpath)r   ZexcludeZ	file_listrootdirsfilesnameselfr   r   all_files_system   s&    
z,Unpackaged.collect.<locals>.all_files_systemc                    sh   g }| D ]Z}  |}| }d} |rT|dk rTt|}|d| 7 }|d7 }q ||d  q|S )z4Format the unpackaged list as a string.
            r   
   z ->    
)r   Zpath_islinkr	   readlinkr   )r!   ZexpandedfileoutZlinksr#   r   r   format_output9   s    


z)Unpackaged.collect.<locals>.format_outputT)cmdr   c                 3   s0   | ]( 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   )pathsr0   r   r2   S   s   z%Unpackaged.collect.<locals>.<genexpr>c                    s   g | ]\}}| kr|qS r   r   )r   r1   Zrp)all_frpmr   r   r   [   s      z&Unpackaged.collect.<locals>.<listcomp> )N)	Ztest_predicateZcollection_filesetZpolicyZmangle_package_pathZpackage_managerZ	all_fileswritejoin)	r$   r   r%   r,   ZufileZall_fsystemr   Znot_packagedZnot_packaged_expandedr   )r5   r4   r$   r   collect   s$    
zUnpackaged.collectN)__name__
__module____qualname__Z
short_descZplugin_namer:   r   r   r   r   r      s   r   )pathlibr   r	   r   Zsos.report.pluginsr   r   r   r   r   r   r   <module>	   s   