
    -_g                     H    d dl mZ d dlZd dlZd dlmZmZ  G d dee      Zy)    )PathN)PluginRedHatPluginc                       e Zd ZdZdZd Zy)
UnpackagedzDCollects a list of files that are not handled by the package manager
unpackagedc                     d }d	 fd	} fd} j                  d      sy  j                  d      5 } |       g }t        fd j                  j	                   j                  j
                  j                               D              }D ]  }| ||      z  } |D 	cg c]  \  }}	|	|vs| }
}}	 ||
      }|j                  dj                  |             d d d        y c c}	}w # 1 sw Y   y xY w)
Nc                  F    t         j                  d   j                  d      S )z3Return a list of directories in $PATH.
            PATH:)osenvironsplit     ?/usr/lib/python3/dist-packages/sos/report/plugins/unpackaged.pyget_env_path_listz-Unpackaged.collect.<locals>.get_env_path_list   s     ::f%++C00r   c                    g }t        j                  | d      D ]  \  }}}|r|D ]  }|D cg c]	  }||vs| c}|dd  |D ]  }	j                  ||      } 	 t        j                  t        j
                  |       j                        rt        |       j                         } |j                  	j                  ||      t         j                  j                  |       g        |D ]D  }	j                  ||      }|j                  |t         j                  j                  |      g       F  |S c c}w # t        $ r Y w xY w)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)topdownN)r   walk	path_joinstatS_ISLNKlstatst_moder   resolve	Exceptionappendpathrealpath)
r   exclude	file_listrootdirsfilesexcdnameselfs
            r   all_files_systemz,Unpackaged.collect.<locals>.all_files_system   sD    I%'WWT4%@ E!dE& D.2"Casl1"CQD! 	D>>$5D!<<(>(>?#':#5#5#7D $$d3RWW5E5Ed5KL	 ! ED>>$5D$$dBGG,<,<T,B%CDEE$  #D % ! !s   	D7D7AD<<	E	E	c                    g }| D ]{  }j                  |      }| }d}j                  |      r>|dk  r9t        j                  |      }|d| z  }|dz  }j                  |      r|dk  r9|j	                  |dz          } |S )z4Format the unpackaged list as a string.
            r   
   z ->    
)r   path_islinkr   readlinkr   )r%   expandedfileoutlinksr)   s        r   format_outputz)Unpackaged.collect.<locals>.format_output9   s     H ,~~d+
 &&t,;;t,DT$=(CQJE &&t, d
+, Or   T)cmdr   c              3      K   | ]7  t        fd D              r!t        j                  j                         9 yw)c              3   @   K   | ]  }j                  |        y wN)
startswith).0pxs     r   	<genexpr>z/Unpackaged.collect.<locals>.<genexpr>.<genexpr>V   s     8Qa8s   N)anyr   r   r    )r;   r=   pathss    @r   r>   z%Unpackaged.collect.<locals>.<genexpr>S   s6      ()8%88   #s   =A r9   )	test_predicatecollection_filesetpolicymangle_package_pathpackage_manager	all_fileswritejoin)r)   r   r*   r5   ufileall_fsystemall_frpmr   r=   rpnot_packagednot_packaged_expandedr@   s   `           @r   collectzUnpackaged.collect   s   	1
	:	( ""t",!!,/ 	85%'EK -1[[-L-LKK//99;. H  6/556-8O'1bBh<NAOLO$1,$?!KK 567	8 	8 P	8 	8s$   A0C0%C*2C*6+C0*C00C9N)__name__
__module____qualname__
short_descplugin_namerQ   r   r   r   r   r      s    $JKI8r   r   )pathlibr   r   r   sos.report.pluginsr   r   r   r   r   r   <module>rY      s#     	  3O8 O8r   