U
    id                     @   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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er   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ffpoutZlinksr#   r   r   format_output:   s    


z)Unpackaged.collect.<locals>.format_outputT)cmdr   c                 3   s0   | ]( t  fd dD rtj V  qdS )c                    s   g | ]}  |qS r   )
startswith)r   pxr   r   r   W   s     z0Unpackaged.collect.<locals>.<genexpr>.<listcomp>N)anyr	   r   r   )r   )pathsr1   r   	<genexpr>T   s   z%Unpackaged.collect.<locals>.<genexpr>c                    s   g | ]\}}| kr|qS r   r   )r   r2   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   )r6   r4   r$   r   collect   s$    
zUnpackaged.collectN)__name__
__module____qualname__Z
short_descZplugin_namer;   r   r   r   r   r      s   r   )Zsos.report.pluginsr   r   r	   r   pathlibr   r   r   r   r   r   <module>	   s   