From cfeb731d0dc40988cf11f6c225e7082f563d5b18 Mon Sep 17 00:00:00 2001 From: Brian Dolbec Date: Mon, 10 Feb 2014 23:26:27 -0800 Subject: revdep_rebuild/analyse.py: Fix the bug that caused some breakage to not be detected. scan_files() was not tracking the filenames and needed correctly. This was causing data loss for files that need to be checked. I found there could be several filenames for any given soname. Each filename has a set of needed libs to track. find_broken2 and main_checks2 needed updating for the different scanned_files structure. --- pym/gentoolkit/revdep_rebuild/analyse.py | 50 ++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py index e2e1edd..131849b 100644 --- a/pym/gentoolkit/revdep_rebuild/analyse.py +++ b/pym/gentoolkit/revdep_rebuild/analyse.py @@ -32,11 +32,17 @@ def scan_files(libs_and_bins, cmd_max_args): if not soname: soname = sfilename - try: - scanned_files[bits][soname] = (filename, needed) - except KeyError: + if bits not in scanned_files: scanned_files[bits] = {} - scanned_files[bits][soname] = (filename, needed) + if soname not in scanned_files[bits]: + scanned_files[bits][soname] = {} + if filename not in scanned_files[bits][soname]: + scanned_files[bits][soname][filename] = set(needed) + else: + scanned_files[bits][soname][filename].update(needed) + + #print("scanned_files['64'] =") + #print(scanned_files['64']) return scanned_files @@ -91,18 +97,22 @@ def extract_dependencies_from_la(la, libraries, to_check, logger): 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: + logger.debug('find_broken2(), Checking for %s bit libs' % bits) + alllibs = '|'.join(sorted(libs)) + '|' + #print(alllibs) + #print() + for soname, filepaths in libs.items(): + for filename, needed in filepaths.items(): + for l in needed: + if l+'|' not in alllibs: try: - broken_libs[bits][l] = set([soname]) + broken_libs[bits][l].add(soname) except KeyError: - broken_libs = {bits: {l: set([soname])}} + try: + broken_libs[bits][l] = set([soname]) + except KeyError: + broken_libs = {bits: {l: set([soname])}} + #print("BROKEN:", soname, l) return broken_libs @@ -110,12 +120,14 @@ def find_broken2(scanned_files, logger): def main_checks2(broken, scanned_files, logger): broken_pathes = [] for bits, _broken in broken.items(): - for soname, needed in _broken.items(): - logger.info('Broken files that requires: %s (%s bits)' % (bold(soname), bits)) + for lib, needed in _broken.items(): + #print("lib, needed:", lib, needed) + logger.info('Broken files that requires: %s (%s bits)' % (bold(lib), bits)) for n in needed: - fp = scanned_files[bits][n][0] - logger.info(yellow(' * ') + n + ' (' + fp + ')') - broken_pathes.append(fp) + #print(sorted(needed)) + for fp in sorted(scanned_files[bits][n]): + logger.info(yellow(' * ') + n + ' (' + fp + ')') + broken_pathes.append(fp) return broken_pathes -- cgit v1.2.3