From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 1214A138247 for ; Tue, 21 Jan 2014 11:25:44 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 99448E0D64; Tue, 21 Jan 2014 11:25:43 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 1D014E0D64 for ; Tue, 21 Jan 2014 11:25:43 +0000 (UTC) Received: from spoonbill.gentoo.org (spoonbill.gentoo.org [81.93.255.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 29C8333FA19 for ; Tue, 21 Jan 2014 11:25:42 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by spoonbill.gentoo.org (Postfix) with ESMTP id C9B2718096 for ; Tue, 21 Jan 2014 11:25:40 +0000 (UTC) From: "slis" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "slis" Message-ID: <1390301312.4335bf979f374300ac6678765f490f92ee805ab4.slis@gentoo> Subject: [gentoo-commits] proj/gentoolkit:gentoolkit commit in: / X-VCS-Repository: proj/gentoolkit X-VCS-Committer: slis X-VCS-Committer-Name: slis X-VCS-Revision: 4335bf979f374300ac6678765f490f92ee805ab4 X-VCS-Branch: gentoolkit Date: Tue, 21 Jan 2014 11:25:40 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 339f83cb-0283-4e7a-b8c3-1deb1e673b61 X-Archives-Hash: cd2b15b825e62b4f23345515ca2b05c4 commit: 4335bf979f374300ac6678765f490f92ee805ab4 Author: slis gmail com> AuthorDate: Tue Jan 21 10:48:32 2014 +0000 Commit: slis gmail com> CommitDate: Tue Jan 21 10:48:32 2014 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=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: