U
    *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s2d S | g }tfd	d
jjj D  D ]}|||7 }qf 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 ]\}}}|rD|D ]  fdd|D |dd< q$|D ]^}||} z"tt | jrxt|  } W n t	k
r   Y qHY nX |
t j|  qH|D ]}|
t j|| 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.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   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   M   s     z.Unpackaged.setup.<locals>.<genexpr>.<listcomp>N)anyr	   r   r   )r   )pathsr.   r   	<genexpr>J   s   z#Unpackaged.setup.<locals>.<genexpr>c                    s   g | ]}| kr|qS r   r   )r   r/   )all_frpmr   r   r   R   s      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   )r3   r1   r$   r   setup   s&    
zUnpackaged.setupN)__name__
__module____qualname__Z
short_descZplugin_namer7   r   r   r   r   r      s   r   )Zsos.report.pluginsr   r   r	   r   pathlibr   r   r   r   r   r   <module>	   s   