aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Dolbec <dolsen@gentoo.org>2016-09-14 10:41:49 -0700
committerBrian Dolbec <dolsen@gentoo.org>2016-09-14 12:48:45 -0700
commitd1becbe15b5b13322b3b88a359e851d0d318aaa2 (patch)
tree90de114af8bb60f8846fd91a341028caddc57bb7 /pym/gentoolkit/revdep_rebuild/analyse.py
parentgentoolkit: Fix to allow a package name to end with a hyphen (diff)
downloadgentoolkit-d1becbe15b5b13322b3b88a359e851d0d318aaa2.tar.gz
gentoolkit-d1becbe15b5b13322b3b88a359e851d0d318aaa2.tar.bz2
gentoolkit-d1becbe15b5b13322b3b88a359e851d0d318aaa2.zip
revdep-rebuild: Fix filename matching for directories (bug 593672)
Also fixed all_masks not including lib32 lib64 (were added after all_masks was assigned). Fixed to ensure it does not match on partial directory names by splitting the paths on the os.sep boundaries. Test using realpaths as well.
Diffstat (limited to 'pym/gentoolkit/revdep_rebuild/analyse.py')
-rw-r--r--pym/gentoolkit/revdep_rebuild/analyse.py33
1 files changed, 24 insertions, 9 deletions
diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 9f018b5..b8fca4b 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -120,7 +120,8 @@ def extract_dependencies_from_la(la, libraries, to_check, logger):
class LibCheck(object):
- def __init__(self, scanned_files, logger, searchlibs=None, searchbits=None, all_masks=None):
+ def __init__(self, scanned_files, logger, searchlibs=None, searchbits=None,
+ all_masks=None, masked_dirs=None):
'''LibCheck init function.
@param scanned_files: optional dictionary if the type created by
@@ -135,6 +136,7 @@ class LibCheck(object):
self.searchlibs = searchlibs
self.searchbits = sorted(searchbits) or ['32', '64']
self.all_masks = all_masks
+ self.masked_dirs = masked_dirs
self.logger.debug("\tLibCheck.__init__(), new searchlibs: %s" %(self.searchbits))
if searchlibs:
self.smsg = '\tLibCheck.search(), Checking for %s bit dependants'
@@ -221,7 +223,10 @@ class LibCheck(object):
if l in self.all_masks:
self.logger.debug('\tLibrary %s ignored as it is masked' % l)
continue
- if filename in self.all_masks:
+ if (filename in self.all_masks or
+ os.path.realpath(filename) in self.all_masks or
+ self.is_masked(os.path.realpath(filename))
+ ):
self.logger.debug('\tFile %s ignored as it is masked' % filename)
continue
if not bits in found_libs:
@@ -240,6 +245,16 @@ class LibCheck(object):
return found_libs
+ def is_masked(self, filename):
+ for m in self.masked_dirs:
+ t = m.split(os.sep)
+ f = filename.split(os.sep)
+ # self.logger.debug("\tis_masked(); %s, %s" % (t, f))
+ if t == f[:min(len(t), len(f))]:
+ return True
+ return False
+
+
def process_results(self, found_libs, scanned_files=None):
'''Processes the search results, logs the files found
@@ -294,18 +309,17 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
]
)
+ if '64' not in searchbits:
+ masked_dirs.update(['/lib64', '/usr/lib64'])
+ elif '32' not in searchbits:
+ masked_dirs.update(['/lib32', '/usr/lib32'])
+
all_masks = masked_dirs.copy()
all_masks.update(masked_files)
logger.debug("\tall_masks:")
for x in sorted(all_masks):
logger.debug('\t\t%s' % (x))
-
- if '64' not in searchbits:
- masked_dirs.update(['/lib64', '/usr/lib64'])
- elif '32' not in searchbits:
- masked_dirs.update(['/lib32', '/usr/lib32'])
-
if libraries and la_libraries and libraries_links and binaries:
logger.info(blue(' * ') +
bold('Found a valid cache, skipping collecting phase'))
@@ -371,7 +385,8 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
% (len(libs_and_bins), len(libraries)+len(libraries_links))
)
- libcheck = LibCheck(scanned_files, logger, _libs_to_check, searchbits, all_masks)
+ libcheck = LibCheck(scanned_files, logger, _libs_to_check, searchbits,
+ all_masks, masked_dirs)
broken_pathes = libcheck.process_results(libcheck.search())