66 lines
1.8 KiB
Python
Executable file
66 lines
1.8 KiB
Python
Executable file
#! /bin/env python3
|
|
# encoding: utf-8
|
|
|
|
# library imports
|
|
import os
|
|
import over
|
|
import re
|
|
import sys
|
|
import time
|
|
|
|
# --------------------------------------------------
|
|
|
|
prefix = over.core.textui.prefix
|
|
_print = over.core.textui.Output('Find Orphans')
|
|
|
|
# --------------------------------------------------
|
|
# Functions
|
|
|
|
# --------------------------------------------------
|
|
# Classes
|
|
|
|
# --------------------------------------------------
|
|
|
|
if __name__ == '__main__':
|
|
main = over.core.app.Main('Find Orphans', None, 'AWARE-Overwatch Joint Software License')
|
|
main.add_option('filter', 'str', ['/home/*', '/var/*', '*.pyc'], 'Shell globs that should be filtered out.', plural=True)
|
|
main.add_option('null-separated', 'bool', False, 'Output each filename separated with a null character. Otherwise use a newline.', short_name='0')
|
|
main.add_help('Description', ['Finds files on Gentoo systems that aren\'t owned by any installed package and lists them.'])
|
|
main.enable_help('h')
|
|
main.parse()
|
|
|
|
if not main.targets:
|
|
_print('specify at least one directory to work on, e.g. \'/\'', prefix.fail)
|
|
main.exit(silent=True)
|
|
|
|
# --------------------------------------------------
|
|
# Create a file list
|
|
|
|
file_list = []
|
|
threads = [] # {proc, output_buffer}
|
|
|
|
for root in main.targets:
|
|
proc = over.core.cmd.Command('find', root, '-print0')
|
|
proc.run()
|
|
threads.append({'proc': proc, 'output_buffer': []})
|
|
|
|
_print('gathering file list using %d processes' %(len(threads)), prefix.start)
|
|
|
|
while True:
|
|
at_least_one_lives = False
|
|
|
|
for thread in threads:
|
|
tmp = thread['proc'].get_output()
|
|
|
|
if not tmp is None:
|
|
thread['output_buffer'].append(tmp)
|
|
at_least_one_lives = True
|
|
|
|
if at_least_one_lives:
|
|
time.sleep(1)
|
|
else:
|
|
break
|
|
|
|
_print('post-processing file list')
|
|
|
|
|