commit:     4335bf979f374300ac6678765f490f92ee805ab4
Author:     slis <lis.slawek <AT> gmail <DOT> com>
AuthorDate: Tue Jan 21 10:48:32 2014 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jan 21 10:48:32 2014 +0000
URL:        https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=4335bf97

Merged revdep-rebuild branch

 bin/{enalyze => revdep-ng}                      |   9 +-
 pym/gentoolkit/revdep_rebuild/analyse.py        | 200 +++++++++++++++++-------
 pym/gentoolkit/revdep_rebuild/assign.py         |  23 ++-
 pym/gentoolkit/revdep_rebuild/cache.py          |  50 +++---
 pym/gentoolkit/revdep_rebuild/collect.py        |  33 ++--
 pym/gentoolkit/revdep_rebuild/rebuild.py        |  30 ++--
 pym/gentoolkit/revdep_rebuild/revdep-rebuild.py |  17 ++
 pym/gentoolkit/revdep_rebuild/runner.py         | 114 ++++++++++++++
 pym/gentoolkit/revdep_rebuild/stuff.py          |   4 +
 9 files changed, 364 insertions(+), 116 deletions(-)

diff --cc pym/gentoolkit/revdep_rebuild/analyse.py
index aad8f81,e630bc9..7b17517
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@@ -19,33 -14,35 +19,39 @@@ from .cache import save_cach
  
  
  def prepare_checks(files_to_check, libraries, bits, cmd_max_args):
 -      ''' Calls scanelf for all files_to_check, then returns found libraries 
and dependencies
 +      ''' Calls scanelf for all files_to_check,
 +      then returns found libraries and dependencies
        '''
  
 -      libs = [] # libs found by scanelf
 -      dependencies = [] # list of lists of files (from file_to_check) that 
uses
 -                                        # library (for dependencies[id] and 
libs[id] => id==id)
 +      # libs found by scanelf
 +      libs = []
 +      # list of lists of files (from file_to_check) that uses
 +      # library (for dependencies[id] and libs[id] => id==id)
 +      dependencies = []
-       for line in scan(
-               ['-M', str(bits), '-nBF', '%F %n'],
-               files_to_check, cmd_max_args
-               ):
 +
-               parts = line.strip().split(' ')
-               if len(parts) < 2: # no dependencies?
+       bits = []
+ 
+ 
+ #     from runner import ScanRunner
+ #     sr = ScanRunner(['-M', str(bits), '-nBF', '%F %n'], files_to_check, 
cmd_max_args)
+ #     sr.wait()
+ 
+       for line in scan(['-M', str(bits), '-nBF', '%F %n %M'], files_to_check, 
cmd_max_args):
+       #call_program(['scanelf', '-M', str(bits), '-nBF', '%F 
%n',]+files_to_check).strip().split('\n'):
+               r = line.strip().split(' ')
+               if len(r) < 2: # no dependencies?
                        continue
  
-               deps = parts[1].split(',')
-               for dep in deps:
-                       if dep in libs:
-                               index = libs.index(dep)
-                               dependencies[index].append(parts[0])
+               deps = r[1].split(',')
+               for d in deps:
+                       if d in libs:
+                               i = libs.index(d)
+                               dependencies[i].append(r[0])
                        else:
-                               libs.append(dep)
-                               dependencies.append([parts[0],])
- 
+                               #print d, 'bits:', r[2][8:] # 8: -> 
strlen('ELFCLASS')
+                               libs.append(d)
+                               dependencies.append([r[0],])
+       
        return (libs, dependencies)
  
  
@@@ -122,21 -136,40 +149,40 @@@ def find_broken(found_libs, system_libr
        return broken
  
  
+ def find_broken2(scanned_files, logger):
+       broken_libs = {}
+       for bits, libs in scanned_files.items():
+               logger.debug('Checking for bits: %s' % bits)
+               alllibs = '|'.join(libs.keys()) + '|'
+               for soname, needed in libs.items():
+                       for l in needed[1]:
+                               if not l+'|' in alllibs:
+                                       try:
+                                               broken_libs[bits][l].add(soname)
+                                       except KeyError:
+                                               try:
+                                                       broken_libs[bits][l] = 
set([soname])
+                                               except KeyError:
+                                                       broken_libs = {bits: 
{l: set([soname])}}
+ 
+       return broken_libs
+ 
+ 
 -def main_checks(found_libs, broken, dependencies, logger):
 +def main_checks(found_libs, broken_list, dependencies, logger):
        ''' Checks for broken dependencies.
                found_libs have to be the same as returned by prepare_checks
 -              broken is list of libraries found by scanelf
 +              broken_list is list of libraries found by scanelf
                dependencies is the value returned by prepare_checks
        '''
  
        broken_pathes = []
  
 -      for b in broken:
 -              f = found_libs[b]
 +      for broken in broken_list:
 +              found = found_libs[broken]
-               logger.info('Broken files that requires: ' + bold(found))
+               logger.info('Broken files that requires: ' + bold(f))
 -              for d in dependencies[b]:
 -                      logger.info(yellow(' * ') + d)
 -                      broken_pathes.append(d)
 +              for dep_path in dependencies[broken]:
 +                      logger.info(yellow(' * ') + dep_path)
 +                      broken_pathes.append(dep_path)
        return broken_pathes
  
  
@@@ -152,31 -197,20 +210,32 @@@ def analyse(settings, logger, libraries
        """
  
        if libraries and la_libraries and libraries_links and binaries:
 -              logger.info(blue(' * ') + bold('Found a valid cache, skipping 
collecting phase'))
 +              logger.info(blue(' * ') +
 +                      bold('Found a valid cache, skipping collecting phase'))
        else:
 -              #TODO: add partial cache (for ex. only libraries) when found 
for some reason
 +              #TODO: add partial cache (for ex. only libraries)
 +              # when found for some reason
  
 -              logger.warn(green(' * ') + bold('Collecting system binaries and 
libraries'))
 +              logger.warn(green(' * ') +
 +                      bold('Collecting system binaries and libraries'))
                bin_dirs, lib_dirs = prepare_search_dirs(logger, settings)
  
 -              masked_dirs, masked_files, ld = 
parse_revdep_config(settings['REVDEP_CONFDIR'])
 +              masked_dirs, masked_files, ld = \
 +                      parse_revdep_config(settings['REVDEP_CONFDIR'])
-               lib_dirs.update(ld)
-               bin_dirs.update(ld)
-               masked_dirs.update([
-                       '/lib/modules',
-                       '/lib32/modules',
-                       '/lib64/modules'
-                       ]
-                       )
+               lib_dirs = lib_dirs.union(ld)
+               bin_dirs = bin_dirs.union(ld)
 -              masked_dirs = masked_dirs.union(set(['/lib/modules', 
'/lib32/modules', '/lib64/modules',]))
 -
 -              logger.info(green(' * ') + bold('Collecting dynamic linking 
informations'))
 -              libraries, la_libraries, libraries_links, symlink_pairs = 
collect_libraries_from_dir(lib_dirs, masked_dirs, logger)
++              masked_dirs = masked_dirs.union(
++                      set([
++                              '/lib/modules',
++                              '/lib32/modules',
++                              '/lib64/modules',
++                      ])
++              )
 +
 +              logger.info(green(' * ') +
 +                      bold('Collecting dynamic linking informations'))
 +              libraries, la_libraries, libraries_links, symlink_pairs = \
 +                      collect_libraries_from_dir(lib_dirs, masked_dirs, 
logger)
                binaries = collect_binaries_from_dir(bin_dirs, masked_dirs, 
logger)
  
                if settings['USE_TMP_FILES']:
@@@ -188,56 -222,75 +247,79 @@@
                        )
  
  
-       logger.debug('Found '+ str(len(libraries)) +
-               ' libraries (+' + str(len(libraries_links)) +
-               ' symlinks) and ' + str(len(binaries)) +
-               ' binaries')
 -      logger.debug('Found '+ str(len(libraries)) + ' libraries (+' + 
str(len(libraries_links)) + ' symlinks) and ' + str(len(binaries)) + ' 
binaries')
++      logger.debug('Found %i libraries (+%i symlinks) and %i binaries' % 
++              (len(libraries), len(libraries_links), len(binaries))
++      )
+       logger.info(green(' * ') + bold('Scanning files'))
+       
+       libs_and_bins = libraries+binaries
  
+       scanned_files = scan_files(libs_and_bins, settings['CMD_MAX_ARGS'])
+       
        logger.warn(green(' * ') + bold('Checking dynamic linking consistency'))
-       logger.debug('Search for ' + str(len(binaries)+len(libraries)) +
-               ' within ' + str(len(libraries)+len(libraries_links)))
-       libs_and_bins = libraries+binaries
 -      logger.debug('Search for ' + str(len(binaries)+len(libraries)) + ' 
within ' + str(len(libraries)+len(libraries_links)))
++      logger.debug('Search for %i within %i' % 
++              (len(binaries)+len(libraries), 
len(libraries)+len(libraries_links))
++      )
+       
+       broken = find_broken2(scanned_files, logger)
+       broken_pathes = main_checks2(broken, scanned_files, logger)
+       
+       broken_la = extract_dependencies_from_la(la_libraries, 
libraries+libraries_links, _libs_to_check, logger)
+       broken_pathes += broken_la
  
-       found_libs = []
-       dependencies = []
+       logger.warn(green(' * ') + bold('Assign files to packages'))
+ 
+       return assign_packages(broken_pathes, logger, settings)
  
-       if _libs_to_check:
-               nltc = []
-               for ltc in _libs_to_check:
-                       if os.path.isfile(ltc):
-                               ltc = scan(['-nBSF', '%S'], [ltc,], 
settings['CMD_MAX_ARGS'])[0].split()[0]
-                       nltc += [ltc,]
-               _libs_to_check = nltc
+       import sys
+       sys.exit()
+       
+       #l = []
+       #for line in call_program(['scanelf', '-M', '64', '-BF', '%F',] + 
libraries).strip().split('\n'):
+               #l.append(line)
+       #libraries = l
  
-       _bits, linkg = platform.architecture()
-       if _bits.startswith('32'):
-               bits = 32
-       elif _bits.startswith('64'):
-               bits = 64
+       ## old version from here
+       #found_libs = []
+       #dependencies = []
  
-       broken = []
-       for av_bits in glob.glob('/lib[0-9]*') or ('/lib32',):
-               bits = int(av_bits[4:])
+       #if _libs_to_check:
+               #nltc = []
+               #for ltc in _libs_to_check:
+                       #if os.path.isfile(ltc):
+                               #ltc = scan(['-nBSF', '%S'], [ltc,], 
settings['CMD_MAX_ARGS'])[0].split()[0]
+                       #nltc += [ltc,]
+               #_libs_to_check = nltc
  
-               _libraries = libraries+libraries_links
+       #_bits, linkg = platform.architecture()
+       #if _bits.startswith('32'):
+               #bits = 32
+       #elif _bits.startswith('64'):
+               #bits = 64
  
-               found_libs, dependencies = prepare_checks(libs_and_bins,
-                       _libraries, bits, settings['CMD_MAX_ARGS'])
-               broken = find_broken(found_libs, _libraries, _libs_to_check)
+       #import time
+       #broken = []
+       #for av_bits in glob.glob('/lib[0-9]*') or ('/lib32',):
+               #bits = int(av_bits[4:])
  
-               bits /= 2
-               bits = int(bits)
+               ##_libraries = scan(['-M', str(bits), '-BF', '%F'], 
libraries+libraries_links, settings['CMD_MAX_ARGS'])
+               #_libraries = libraries+libraries_links
  
-       broken_la = extract_dependencies_from_la(la_libraries,
-               libraries+libraries_links, _libs_to_check, logger)
+               #found_libs, dependencies = prepare_checks(libs_and_bins, 
_libraries, bits, settings['CMD_MAX_ARGS'])
+               #broken = find_broken(found_libs, _libraries, _libs_to_check)
  
+               #bits /= 2
+               #bits = int(bits)
  
-       broken_pathes = main_checks(found_libs, broken, dependencies, logger)
-       broken_pathes += broken_la
+       #broken_la = extract_dependencies_from_la(la_libraries, 
libraries+libraries_links, _libs_to_check, logger)
  
-       logger.warn(green(' * ') + bold('Assign files to packages'))
  
-       return assign_packages(broken_pathes, logger, settings)
+       #broken_pathes = main_checks(found_libs, broken, dependencies, logger)
+       #broken_pathes += broken_la
+ 
+       #logger.warn(green(' * ') + bold('Assign files to packages'))
+ 
+       #return assign_packages(broken_pathes, logger, settings)
  
  
  
diff --cc pym/gentoolkit/revdep_rebuild/assign.py
index e8e87b3,bb9ec1f..2a93fe1
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@@ -27,34 -13,26 +27,49 @@@ def assign_packages(broken, logger, set
                Broken is list of files
        '''
        assigned = set()
-       if not broken:
-               return assigned
+       for group in os.listdir(settings['PKG_DIR']):
+               for pkg in os.listdir(settings['PKG_DIR'] + group):
+                       f = settings['PKG_DIR'] + group + '/' + pkg + 
'/CONTENTS'
+                       if os.path.exists(f):
+                               try:
+                                       with open(f, 'r') as cnt:
+                                               for line in cnt.readlines():
+                                                       m = re.match('^obj (/[^ 
]+)', line)
+                                                       if m is not None:
+                                                               m = m.group(1)
+                                                               if m in broken:
+                                                                       found = 
group+'/'+pkg
+                                                                       if 
found not in assigned:
+                                                                               
assigned.add(found)
+                                                                       
logger.info('\t' + m + ' -> ' + bold(found))
+                               except Exception as e:
+                                       logger.warn(red(' !! Failed to read ' + 
f))
  
-       pkgset = set(get_installed_cpvs())
+       return assigned
  
 +      # Map all files in CONTENTS database to package names
 +      fname_pkg_dict = {}
 +      for pkg in pkgset:
 +              contents = Package(pkg).parsed_contents()
 +              for fname in contents.keys():
 +                      if contents[fname][0] == "obj":
 +                              fname_pkg_dict[fname] = str(pkg)
 +
 +      for fname in broken:
 +              realname = os.path.realpath(fname)
 +              if realname in fname_pkg_dict.keys():
 +                      pkgname = fname_pkg_dict[realname]
 +              elif fname in fname_pkg_dict.keys():
 +                      pkgname = fname_pkg_dict[fname]
 +              else:
 +                      pkgname = None
 +              if pkgname and pkgname not in assigned:
 +                      assigned.add(pkgname)
 +              if not pkgname:
 +                      pkgname = "(none)"
 +              logger.info('\t' + fname + ' -> ' + bold(pkgname))
 +
 +      return assigned
  
  def get_best_match(cpv, cp, logger):
        """Tries to find another version of the pkg with the same slot
diff --cc pym/gentoolkit/revdep_rebuild/cache.py
index d6ef7ce,8b1a8ed..1be8cb0
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@@ -18,54 -12,42 +18,50 @@@ def read_cache(temp_path=DEFAULTS['DEFA
                This function does not checks if files exists nor timestamps,
                check_temp_files should be called first
                @param temp_path: directory where all temp files should reside
 -              @return tuple with values of: libraries, la_libraries, 
libraries_links, symlink_pairs, binaries
 +              @return tuple with values of:
 +                      libraries, la_libraries, libraries_links, 
symlink_pairs, binaries
        '''
  
 -      ret = {'libraries':[], 'la_libraries':[], 'libraries_links':[], 
'binaries':[]}
 +      ret = {
 +              'libraries':[],
 +              'la_libraries':[],
 +              'libraries_links':[],
 +              'binaries':[]
 +              }
        try:
-               for key, val in list(ret.items()):
-                       _file  = open(os.path.join(temp_path, key))
-                       for line in _file .readlines():
+               for key,val in ret.iteritems():
 -                      f = open(os.path.join(temp_path, key))
 -                      for line in f.readlines():
++                      _file = open(os.path.join(temp_path, key))
++                      for line in _file.readlines():
                                val.append(line.strip())
                        #libraries.remove('\n')
 -                      f.close()
 +                      _file .close()
        except EnvironmentError:
                pass
  
 -      return (ret['libraries'], ret['la_libraries'], ret['libraries_links'], 
ret['binaries'])
 +      return (ret['libraries'], ret['la_libraries'],
 +              ret['libraries_links'], ret['binaries'])
  
  
- def save_cache(logger, to_save=None, temp_path=DEFAULTS['DEFAULT_TMP_DIR']):
+ def save_cache(logger, to_save={}, temp_path=DEFAULTS['DEFAULT_TMP_DIR']):
        ''' Tries to store caching information.
                @param logger
 -              @param to_save have to be dict with keys: libraries, 
la_libraries, libraries_links and binaries
 +              @param to_save have to be dict with keys:
 +                      libraries, la_libraries, libraries_links and binaries
        '''
  
-       if to_save is None:
-               to_save = {}
- 
- # TODO: Don't blindly make the cache directory, see Bug 203414
- #     if not os.path.exists(temp_path):
- #             os.makedirs(temp_path)
+       if not os.path.exists(temp_path):
+               os.makedirs(temp_path)
  
        try:
 -              f = open(os.path.join(temp_path, 'timestamp'), 'w')
 -              f.write(str(int(time.time())))
 -              f.close()
 +              _file = open(os.path.join(temp_path, 'timestamp'), 'w')
 +              _file.write(str(int(time.time())))
 +              _file.close()
  
-               for key, val in list(to_save.items()):
+               for key,val in to_save.iteritems():
 -                      f = open(os.path.join(temp_path, key), 'w')
 +                      _file = open(os.path.join(temp_path, key), 'w')
                        for line in val:
 -                              f.write(line + '\n')
 -                      f.close()
 +                              _file.write(line + '\n')
 +                      _file.close()
        except Exception as ex:
                logger.warn(red('Could not save cache: %s' %str(ex)))
  
@@@ -106,31 -84,23 +101,30 @@@ def check_temp_files(temp_path=DEFAULTS
  
  
  if __name__ == '__main__':
 -      print 'Preparing cache ... '
 +      print('Preparing cache ... ')
  
 -      from collect import *
 +      from .collect import (prepare_search_dirs, parse_revdep_config,
 +              collect_libraries_from_dir, collect_binaries_from_dir)
- 
        import logging
  
-       bin_dirs, lib_dirs = prepare_search_dirs(logging, DEFAULTS)
+       bin_dirs, lib_dirs = prepare_search_dirs()
  
-       masked_dirs, masked_files, ld = 
parse_revdep_config("/etc/revdep-rebuild/")
-       lib_dirs.update(ld)
-       bin_dirs.update(ld)
-       masked_dirs = masked_dirs.update([
-                       '/lib/modules',
-                       '/lib32/modules',
-                       '/lib64/modules'
-                       ]
-               )
+       masked_dirs, masked_files, ld = parse_revdep_config()
+       lib_dirs = lib_dirs.union(ld)
+       bin_dirs = bin_dirs.union(ld)
 -      masked_dirs = masked_dirs.union(set(['/lib/modules', '/lib32/modules', 
'/lib64/modules',]))
++      masked_dirs = masked_dirs.union(
++              set([
++                      '/lib/modules', 
++                      '/lib32/modules', 
++                      '/lib64/modules',
++              ])
++      )
  
-       libraries, la_libraries, libraries_links, symlink_pairs = \
-               collect_libraries_from_dir(lib_dirs, masked_dirs, logging)
+       libraries, la_libraries, libraries_links, symlink_pairs = 
collect_libraries_from_dir(lib_dirs, masked_dirs, logging)
        binaries = collect_binaries_from_dir(bin_dirs, masked_dirs, logging)
  
-       save_cache(logger=logging,
-               to_save={'libraries':libraries, 'la_libraries':la_libraries,
+       save_cache(logger=logging, 
+               to_save={'libraries':libraries, 'la_libraries':la_libraries, 
                        'libraries_links':libraries_links, 'binaries':binaries}
                )
  
diff --cc pym/gentoolkit/revdep_rebuild/collect.py
index 740ae32,b7ed469..f8ee60d
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@@ -26,8 -22,8 +26,8 @@@ def parse_conf(conf_file, visited=None
  
        for conf in conf_file:
                try:
 -                      with open(conf) as f:
 -                              for line in f.readlines():
 +                      with open(conf) as _file:
-                               for line in _file:
++                              for line in _file.readlines():
                                        line = line.strip()
                                        if line.startswith('#'):
                                                continue
@@@ -66,13 -62,12 +66,13 @@@ def prepare_search_dirs(logger, setting
        lib_dirs = set(['/lib', '/usr/lib', ])
  
        #try:
 -      with open(os.path.join(portage.root, settings['DEFAULT_ENV_FILE']), 
'r') as f:
 -              for line in f.readlines():
 +      with open(os.path.join(
 +              portage.root, settings['DEFAULT_ENV_FILE']), 'r') as _file:
-               for line in _file:
++              for line in _file.readlines():
                        line = line.strip()
 -                      m = re.match("^export (ROOT)?PATH='([^']+)'", line)
 -                      if m is not None:
 -                              bin_dirs = 
bin_dirs.union(set(m.group(2).split(':')))
 +                      match = re.match("^export (ROOT)?PATH='([^']+)'", line)
 +                      if match is not None:
 +                              bin_dirs.update(set(match.group(2).split(':')))
        #except EnvironmentError:
                #logger.debug(yellow('Could not open file %s' % f))
  
@@@ -250,21 -230,17 +250,26 @@@ def collect_binaries_from_dir(dirs, mas
  
  if __name__ == '__main__':
        import logging
-       from .settings import DEFAULTS
-       mbin_dirs, mlib_dirs = prepare_search_dirs(logging, DEFAULTS)
- 
-       mmasked_dirs, mmasked_files, mld = 
parse_revdep_config("/etc/revdep-rebuild/")
-       mlib_dirs.update(mld)
-       mbin_dirs.update(mld)
-       mmasked_dirs.update(['/lib/modules', '/lib32/modules', 
'/lib64/modules'])
+       bin_dirs, lib_dirs = prepare_search_dirs(logging)
+ 
+       masked_dirs, masked_files, ld = parse_revdep_config()
+       lib_dirs = lib_dirs.union(ld)
+       bin_dirs = bin_dirs.union(ld)
 -      masked_dirs = masked_dirs.union(set(['/lib/modules', '/lib32/modules', 
'/lib64/modules',]))
 -
 -      libraries, la_libraries, libraries_links, symlink_pairs = 
collect_libraries_from_dir(lib_dirs, masked_dirs, logging)
 -      binaries = collect_binaries_from_dir(bin_dirs, masked_dirs, logging)
 -
 -      logging.debug('Found: %i binaries and %i libraries.' %(len(binaries), 
len(libraries)))
++      masked_dirs = masked_dirs.union(
++              set([
++                      '/lib/modules',
++                      '/lib32/modules',
++                      '/lib64/modules',
++              ])
++      )
 +
 +      libraries, la_libraries, libraries_links, msymlink_pairs = \
 +              collect_libraries_from_dir(mlib_dirs, mmasked_dirs, logging)
 +      binaries = collect_binaries_from_dir(mbin_dirs, mmasked_dirs, logging)
 +
 +      logging.debug(
 +              'Found: %i binaries and %i libraries.' %(
 +              len(binaries), len(libraries)))
  
  
  
diff --cc pym/gentoolkit/revdep_rebuild/rebuild.py
index 8d21b76,a943902..386ac33
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@@ -103,10 -103,10 +103,11 @@@ def parse_options()
                        'keep-temp', 'library=', 'no-ld-path', 'no-order',
                        'pretend', 'no-pretend', 'no-progress', 'quiet', 
'verbose'])
  
 +              do_help = False
                for key, val in opts:
                        if key in ('-h', '--help'):
-                               do_help = True
+                               print_usage()
+                               sys.exit(0)
                        elif key in ('-q', '--quiet'):
                                settings['quiet'] = True
                                settings['VERBOSITY'] = 0
@@@ -134,9 -134,6 +135,7 @@@
                print(red('Unrecognized option\n'))
                print_usage()
                sys.exit(2)
-       if do_help:
-               print_usage()
-               sys.exit(0)
++
        return settings
  
  
@@@ -195,25 -181,25 +194,33 @@@ def main(settings=None, logger=None)
        if not settings['stdout'].isatty() or settings['nocolor']:
                nocolor()
  
 +      #TODO: Development warning
 +      logger.warn(blue(' * ') +
 +              yellow('This is a development version, '
 +                      'so it may not work correctly'))
 +      logger.warn(blue(' * ') +
 +              yellow('The original revdep-rebuild script is '
 +                      'installed as revdep-rebuild.sh'))
 +
        if os.getuid() != 0 and not settings['PRETEND']:
 -              logger.warn(blue(' * ') + 
 +              logger.warn(blue(' * ') +
                        yellow('You are not root, adding --pretend to portage 
options'))
                settings['PRETEND'] = True
+       elif not settings['PRETEND'] \
+                       and settings['IS_DEV'] \
+                       and not settings['NO_PRETEND']:
+               logger.warn(blue(' * ') + 
+                       yellow('This is a development version, '
+                               'so it may not work correctly'))
+               logger.warn(blue(' * ') + 
+                       yellow('Adding --pretend to portage options anyway'))
+               logger.info(blue(' * ') + 
+                       'If you\'re sure, you can add --no-pretend to revdep 
options')
+               settings['PRETEND'] = True
  
-       if settings['library']:
-               logger.warn(green(' * ') +
-                       "Looking for libraries: %s" % (bold(', 
'.join(settings['library']))))
- 
+       analyze_cache = {}
        if settings['USE_TMP_FILES'] \
-                       and check_temp_files(settings['DEFAULT_TMP_DIR'], 
logger=logger):
+                       and check_temp_files(settings['DEFAULT_TMP_DIR']):
                libraries, la_libraries, libraries_links, binaries = read_cache(
                        settings['DEFAULT_TMP_DIR'])
                assigned = analyse(
diff --cc pym/gentoolkit/revdep_rebuild/stuff.py
index e78748c,7b287b1..0bebce2
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@@ -43,12 -31,11 +43,16 @@@ def scan(params, files, max_args)
        return out
  
  
+ def exithandler(signum, frame):
+       sys.exit(1)
+ 
+ 
  def get_masking_status(ebuild):
 +      """returns the masking status of an ebuild
 +
 +      @param ebuild: str
 +      @return list
 +      """
        try:
                status = portage.getmaskingstatus(ebuild)
        except KeyError:

Reply via email to