public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     68f8234770afccdd6d37916f6bb095cb4fb7a892
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 11 07:33:46 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:09:22 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=68f82347

revdep-rebuild: Add the function name to the debug messages

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 6f1787a..cdbf537 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -182,7 +182,7 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 			)
 
 
-	logger.debug('Found %i libraries (+%i symlinks) and %i binaries' %
+	logger.debug('analyse(), Found %i libraries (+%i symlinks) and %i binaries' %
 		(len(libraries), len(libraries_links), len(binaries))
 	)
 	logger.info(green(' * ') + bold('Scanning files'))
@@ -192,8 +192,8 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 	scanned_files = scan_files(libs_and_bins, settings['CMD_MAX_ARGS'])
 
 	logger.warn(green(' * ') + bold('Checking dynamic linking consistency'))
-	logger.debug('Search for %i within %i' %
-		(len(binaries)+len(libraries), len(libraries)+len(libraries_links))
+	logger.debug('analyse(), Searching for %i libs, bins within %i libraries and links' %
+		(len(libs_and_bins), len(libraries)+len(libraries_links))
 	)
 
 	broken = find_broken2(scanned_files, logger)


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2015-05-27 17:27 Mike Gilbert
  0 siblings, 0 replies; 115+ messages in thread
From: Mike Gilbert @ 2015-05-27 17:27 UTC (permalink / raw
  To: gentoo-commits

commit:     ea14aa4c915abbaf293d77ed70a947648143f401
Author:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Wed May 27 17:20:35 2015 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Wed May 27 17:20:35 2015 +0000
URL:        https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=ea14aa4c

revdep-rebuild: Remove broken NO_PRETEND setting

This hasn't worked since the argparse conversion.

 pym/gentoolkit/revdep_rebuild/rebuild.py  | 8 --------
 pym/gentoolkit/revdep_rebuild/settings.py | 5 -----
 2 files changed, 13 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index d35906e..23fa694 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -134,14 +134,6 @@ def main(settings=None, logger=None):
 		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('Adding --pretend to portage options'))
-		logger.info(blue(' * ') +
-			'If you\'re sure, you can add --no-pretend to revdep options')
-		settings['PRETEND'] = True
 
 	logger.debug("\tmain(), _libs_to_check = %s" % str(_libs_to_check))
 

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index 3a653a5..08220f8 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -27,11 +27,6 @@ DEFAULTS = {
 		#if program should use temporary files from previous run
 		'USE_TMP_FILES': True,
 
-		#True for dev. version, False for stable
-		#used when IS_DEV is True, False forces to call emerge with --pretend
-		# can be set True from the cli with the --no-pretend option
-		'IS_DEV': True,
-		'NO_PRETEND': False,
 		'VERBOSITY': 1,
 
 		'quiet': False,


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-11-12 21:29 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2014-11-12 21:29 UTC (permalink / raw
  To: gentoo-commits

commit:     758d932ca31ceb323bb988108e3f64e05cd5731d
Author:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
AuthorDate: Wed Nov 12 21:28:58 2014 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Wed Nov 12 21:28:58 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=758d932c

revdep-rebuild.py: Fix recent changes to work with Python 3

---
 pym/gentoolkit/revdep_rebuild/settings.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index fa91685..3a653a5 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -53,7 +53,7 @@ def parse_options():
 
 	# TODO: Verify: options: no-ld-path, no-order, no-progress
 	#are not appliable
-	from rebuild import VERSION, APP_NAME
+	from .rebuild import VERSION, APP_NAME
 	settings = DEFAULTS.copy()
 	
 	parser = argparse.ArgumentParser(


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-11-12  7:16 Slawek Lis
  0 siblings, 0 replies; 115+ messages in thread
From: Slawek Lis @ 2014-11-12  7:16 UTC (permalink / raw
  To: gentoo-commits

commit:     3a9aced06871aa68dcc27e5eba1e56608ecc587d
Author:     Slawek Lis <slis <AT> gentoo <DOT> org>
AuthorDate: Wed Nov 12 06:50:01 2014 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Wed Nov 12 06:50:01 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=3a9aced0

--library option - partial filename checking

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 33 +++++++++++++++-----------------
 1 file changed, 15 insertions(+), 18 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 556812d..c0e7231 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -148,24 +148,21 @@ class LibCheck(object):
 		'''Internal function.  Use the class's setlibs variable'''
 		sonames = []
 		for s in self.searchlibs:
-			par, soname = os.path.split(s)
-			if par:
-				# consider as this is full pathname
-				# we need soname only
-
-				if os.path.exists(s):
-					# try to extract some more info
-					for line in scan(['-BF', '%f %S %M'], [s], 1, self.logger):
-						_, soname, bits = line.split()
-						bits = bits[8:]
-						if bits == b:
-							# we don't want to look in inappropriate arch's libs
-							sonames.append(soname)
-					continue
-				sonames.append(soname)
-			else:
-				# this is only filename or it's part
-				sonames.append(soname)
+			if s in self.scanned_files[b].keys():
+				sonames.append(s)
+				continue
+
+			found_partial = [a for a in self.scanned_files[b].keys() if s in a]
+			if found_partial:
+				sonames += found_partial
+				continue
+
+			for k, v in self.scanned_files[b].items():
+				for vv in v.keys():
+					if s in vv:
+						sonames.append(k)
+						break
+
 		self.alllibs = '|'.join(sonames) + '|'
 		self.logger.debug("\tLibCheck._setslibs(), new alllibs: %s" %(self.alllibs))
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-11-07 20:41 Slawek Lis
  0 siblings, 0 replies; 115+ messages in thread
From: Slawek Lis @ 2014-11-07 20:41 UTC (permalink / raw
  To: gentoo-commits

commit:     17d016032df3a9af9cbdd8c6a1eec800fb4bd2f1
Author:     Slawek Lis <slis <AT> gentoo <DOT> org>
AuthorDate: Wed Nov  5 11:27:54 2014 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Wed Nov  5 11:27:54 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=17d01603

updated default cache location for non-root

---
 pym/gentoolkit/revdep_rebuild/settings.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index cadd5f2..744b730 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -17,7 +17,7 @@ DEFAULTS = {
 		'DEFAULT_ENV_FILE': os.path.join(portage.root, 'etc/profile.env'),
 		'REVDEP_CONFDIR': os.path.join(portage.root, 'etc/revdep-rebuild/'),
 		'PKG_DIR': os.path.join(portage.root, 'var/db/pkg/'),
-		'DEFAULT_TMP_DIR': os.path.join(portage.root, '/var/cache/revdep-rebuild'), #cache default location
+		'DEFAULT_TMP_DIR': os.path.join(portage.root, '/tmp/revdep-rebuild' if os.getgid() else '/var/cache/revdep-rebuild'), #cache default location
 
 		# number of maximum allowed files to be parsed at once
 		'CMD_MAX_ARGS': 1000,


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-11-07 20:41 Slawek Lis
  0 siblings, 0 replies; 115+ messages in thread
From: Slawek Lis @ 2014-11-07 20:41 UTC (permalink / raw
  To: gentoo-commits

commit:     615222489e54a707fd87342e6c8801c7e5eb1b68
Author:     Slawek Lis <slis <AT> gentoo <DOT> org>
AuthorDate: Wed Nov  5 12:46:24 2014 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Wed Nov  5 12:46:24 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=61522248

using debug logging

---
 pym/gentoolkit/revdep_rebuild/settings.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index 744b730..00c7e28 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -109,9 +109,9 @@ def parse_options():
 	parser.add_argument('portage_options', nargs='*')
 	
 	args = parser.parse_args()
-	
 	settings['VERBOSITY'] = 3 if args.debug else 2 if args.verbose else 0 if args.quiet else 1
 	settings['quiet'] = args.quiet
+	settings['debug'] = args.debug
 	settings['PRETEND'] = args.pretend
 	settings['nocolor'] = args.nocolor
 	if args.library:


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-11-07 20:41 Slawek Lis
  0 siblings, 0 replies; 115+ messages in thread
From: Slawek Lis @ 2014-11-07 20:41 UTC (permalink / raw
  To: gentoo-commits

commit:     c20844cad28caf6554e90d65f8da3d072a2adb9f
Author:     Slawek Lis <slis <AT> gentoo <DOT> org>
AuthorDate: Fri Nov  7 20:38:35 2014 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Fri Nov  7 20:38:35 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=c20844ca

logging level

---
 pym/gentoolkit/revdep_rebuild/rebuild.py | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index fcbd76e..d35906e 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -53,7 +53,7 @@ def init_logger(settings):
 		logger.setLevel(logging.ERROR)
 	elif settings['VERBOSITY'] == 2:
 		logger.setLevel(logging.INFO)
-	elif settings['VERBOSITY'] == 3:
+	elif settings['VERBOSITY'] == 3 or settings['debug']:
 		logger.setLevel(logging.DEBUG)
 	else:
 		logger.setLevel(logging.WARNING)
@@ -107,7 +107,6 @@ def main(settings=None, logger=None):
 	@param logger: python logging module defaults to init_logger(settings)
 	@return boolean  success/failure
 	"""
-
 	if settings is None:
 		print("NO Input settings, using defaults...")
 		settings = DEFAULTS.copy()


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-11-07 20:41 Slawek Lis
  0 siblings, 0 replies; 115+ messages in thread
From: Slawek Lis @ 2014-11-07 20:41 UTC (permalink / raw
  To: gentoo-commits

commit:     bb2f5a95536dedf3fe300f7bcf5a385d255c3331
Author:     Slawek Lis <slis <AT> gentoo <DOT> org>
AuthorDate: Fri Nov  7 20:08:48 2014 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Fri Nov  7 20:08:48 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=bb2f5a95

help text update

---
 pym/gentoolkit/revdep_rebuild/settings.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index e42a242..fa91685 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -79,8 +79,8 @@ def parse_options():
 	parser.add_argument('-L', '--library', 
 					 action='append', 
 					 help='Unconditionally emerge existing packages that use '
-						'the library with NAME. NAME can be a full or partial '
-						'name')
+						'the library with NAME. NAME can be a full path, full '
+						'or partial name')
 	parser.add_argument('-l', '--no-ld-path', 
 					 action='store_true', 
 					 help='Do not set LD_LIBRARY_PATH')
@@ -89,7 +89,7 @@ def parse_options():
 					 help='Do not check the build order '
 						'(Saves time, but may cause breakage.)')
 	parser.add_argument('-p', '--pretend', 
-					 action='store_true', 
+					 action='store_true',
 					 help='Do a trial run without actually emerging anything '
                         '(also passed to emerge command)')
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-11-07 20:41 Slawek Lis
  0 siblings, 0 replies; 115+ messages in thread
From: Slawek Lis @ 2014-11-07 20:41 UTC (permalink / raw
  To: gentoo-commits

commit:     09c1115e0a3c4d12549993fb8a8a13a5723f5094
Author:     Slawek Lis <slis <AT> gentoo <DOT> org>
AuthorDate: Fri Nov  7 12:11:33 2014 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Fri Nov  7 12:11:33 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=09c1115e

loggin update

---
 pym/gentoolkit/revdep_rebuild/settings.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index 00c7e28..e42a242 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -111,7 +111,6 @@ def parse_options():
 	args = parser.parse_args()
 	settings['VERBOSITY'] = 3 if args.debug else 2 if args.verbose else 0 if args.quiet else 1
 	settings['quiet'] = args.quiet
-	settings['debug'] = args.debug
 	settings['PRETEND'] = args.pretend
 	settings['nocolor'] = args.nocolor
 	if args.library:


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-11-07 20:41 Slawek Lis
  0 siblings, 0 replies; 115+ messages in thread
From: Slawek Lis @ 2014-11-07 20:41 UTC (permalink / raw
  To: gentoo-commits

commit:     1d42d9f56121932daff89a0676956fe16884c60f
Author:     Slawek Lis <slis <AT> gentoo <DOT> org>
AuthorDate: Fri Nov  7 20:39:54 2014 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Fri Nov  7 20:39:54 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=1d42d9f5

revdep --library fixes

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 29 ++++++++++++++++++++++++-----
 1 file changed, 24 insertions(+), 5 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index c553526..556812d 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -146,8 +146,27 @@ class LibCheck(object):
 
 	def _setslibs(self, l, b):
 		'''Internal function.  Use the class's setlibs variable'''
-		self.alllibs = '|'.join(
-			[x for x in self.searchlibs if ('lib%s' % (b) in x)]) + '|'
+		sonames = []
+		for s in self.searchlibs:
+			par, soname = os.path.split(s)
+			if par:
+				# consider as this is full pathname
+				# we need soname only
+
+				if os.path.exists(s):
+					# try to extract some more info
+					for line in scan(['-BF', '%f %S %M'], [s], 1, self.logger):
+						_, soname, bits = line.split()
+						bits = bits[8:]
+						if bits == b:
+							# we don't want to look in inappropriate arch's libs
+							sonames.append(soname)
+					continue
+				sonames.append(soname)
+			else:
+				# this is only filename or it's part
+				sonames.append(soname)
+		self.alllibs = '|'.join(sonames) + '|'
 		self.logger.debug("\tLibCheck._setslibs(), new alllibs: %s" %(self.alllibs))
 
 
@@ -248,15 +267,15 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 	"""
 
 	searchbits = set()
-	if _libs_to_check:
+	'''if _libs_to_check:
 		for lib in _libs_to_check:
 			if "lib64" in lib:
 				searchbits.add('64')
 			elif "lib32" in lib:
 				searchbits.add('32')
 	else:
-		_libs_to_check = set()
-		searchbits.update(['64', '32'])
+		_libs_to_check = set()'''
+	searchbits.update(['64', '32'])
 
 	if libraries and la_libraries and libraries_links and binaries:
 		logger.info(blue(' * ') +


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-10-30 18:56 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2014-10-30 18:56 UTC (permalink / raw
  To: gentoo-commits

commit:     ed4f69668755d222ae782d09e810c5bb1a94e67a
Author:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
AuthorDate: Thu Oct 30 18:55:25 2014 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Thu Oct 30 18:55:25 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=ed4f6966

revdep-rebuild: Fix python version to honor --debug

---
 pym/gentoolkit/revdep_rebuild/rebuild.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 216714c..fcbd76e 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -53,7 +53,7 @@ def init_logger(settings):
 		logger.setLevel(logging.ERROR)
 	elif settings['VERBOSITY'] == 2:
 		logger.setLevel(logging.INFO)
-	elif settings['debug']:
+	elif settings['VERBOSITY'] == 3:
 		logger.setLevel(logging.DEBUG)
 	else:
 		logger.setLevel(logging.WARNING)


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-08-28  7:37 Slawek Lis
  0 siblings, 0 replies; 115+ messages in thread
From: Slawek Lis @ 2014-08-28  7:37 UTC (permalink / raw
  To: gentoo-commits

commit:     d1452c3b44dddadbb4d46b9e813b25f8c742d54f
Author:     Slawek Lis <slis <AT> gentoo <DOT> org>
AuthorDate: Thu Aug 28 07:20:06 2014 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Thu Aug 28 07:20:06 2014 +0000
URL:        http://sources.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=d1452c3b

output all messages into stdout instead of stderr

---
 pym/gentoolkit/revdep_rebuild/rebuild.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 9d5bf9b..216714c 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -45,7 +45,7 @@ __productname__ = "revdep-ng"
 def init_logger(settings):
 	"""Creates and iitializes our logger according to the settings"""
 	logger = logging.getLogger()
-	log_handler = logging.StreamHandler()
+	log_handler = logging.StreamHandler(sys.stdout)
 	log_fmt = logging.Formatter('%(msg)s')
 	log_handler.setFormatter(log_fmt)
 	logger.addHandler(log_handler)


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-03-27  6:59 Slawek Lis
  0 siblings, 0 replies; 115+ messages in thread
From: Slawek Lis @ 2014-03-27  6:59 UTC (permalink / raw
  To: gentoo-commits

commit:     1f200fb1812faf22c048c83b17a7c27257b301c4
Author:     Slawek Lis <slis <AT> gentoo <DOT> org>
AuthorDate: Thu Mar 27 06:56:51 2014 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Thu Mar 27 06:56:51 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=1f200fb1

Fixed bug when no libraries are passed

---
 pym/gentoolkit/revdep_rebuild/settings.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index 4774cec..cadd5f2 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -114,7 +114,8 @@ def parse_options():
 	settings['quiet'] = args.quiet
 	settings['PRETEND'] = args.pretend
 	settings['nocolor'] = args.nocolor
-	settings['library'].update(set(args.library))
+	if args.library:
+		settings['library'].update(set(args.library))
 	settings['USE_TMP_FILES'] = not args.ignore
 	settings['pass_through_options'] = " " + " ".join(args.portage_options)
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-03-26  8:21 Slawek Lis
  0 siblings, 0 replies; 115+ messages in thread
From: Slawek Lis @ 2014-03-26  8:21 UTC (permalink / raw
  To: gentoo-commits

commit:     510e60106fdd7e12bfef37aa6d494f060bf30857
Author:     Slawek Lis <slis <AT> gentoo <DOT> org>
AuthorDate: Wed Mar 26 08:18:45 2014 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Wed Mar 26 08:18:45 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=510e6010

Switch from getopt to argparse

---
 pym/gentoolkit/revdep_rebuild/settings.py | 137 ++++++++++++++----------------
 1 file changed, 64 insertions(+), 73 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index 7909aa6..4774cec 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -4,7 +4,7 @@
 
 from __future__ import print_function
 
-import getopt
+import argparse
 import os
 import sys
 import re
@@ -48,84 +48,75 @@ DEFAULTS = {
 		}
 
 
-def print_usage():
-	"""Outputs the help message"""
-	print( APP_NAME + ': (' + VERSION +')')
-	print()
-	print('This is free software; see the source for copying conditions.')
-	print()
-	print('Usage: ' + APP_NAME + ' [OPTIONS] [--] [EMERGE_OPTIONS]')
-	print()
-	print('Broken reverse dependency rebuilder, python implementation.')
-	print()
-	print('Available options:')
-	print('''
-  -C, --nocolor         Turn off colored output
-  -d, --debug           Print debug informations
-  -e, --exact           Emerge based on exact package version
-  -h, --help            Print this usage
-  -i, --ignore          Ignore temporary files from previous runs
-                        (also won't create any)
-  -L, --library NAME    Unconditionally emerge existing packages that use
-      --library=NAME    the library with NAME. NAME can be a full or partial
-                        library name
-  -l, --no-ld-path      Do not set LD_LIBRARY_PATH
-  -o, --no-order        Do not check the build order
-                        (Saves time, but may cause breakage.)
-  -p, --pretend         Do a trial run without actually emerging anything
-                        (also passed to emerge command)
-  -q, --quiet           Be less verbose (also passed to emerge command)
-  -v, --verbose         Be more verbose (also passed to emerge command)
-''')
-	print( 'Calls emerge, options after -- are ignored by ' + APP_NAME)
-	print('and passed directly to emerge.')
-
-
 def parse_options():
 	"""Parses the command line options an sets settings accordingly"""
 
 	# TODO: Verify: options: no-ld-path, no-order, no-progress
 	#are not appliable
-
+	from rebuild import VERSION, APP_NAME
 	settings = DEFAULTS.copy()
-	try:
-		opts, args = getopt.getopt(sys.argv[1:],
-			'dehiklopqvCL:P',
-			['nocolor', 'debug', 'exact', 'help', 'ignore',
-			'keep-temp', 'library=', 'no-ld-path', 'no-order',
-			'pretend', 'no-pretend', 'no-progress', 'quiet', 'verbose'])
-
-		for key, val in opts:
-			if key in ('-h', '--help'):
-				print_usage()
-				sys.exit(0)
-			elif key in ('-q', '--quiet'):
-				settings['quiet'] = True
-				settings['VERBOSITY'] = 0
-			elif key in ('-v', '--verbose'):
-				settings['VERBOSITY'] = 2
-			elif key in ('-d', '--debug'):
-				settings['debug'] = True
-				settings['VERBOSITY'] = 3
-			elif key in ('-p', '--pretend'):
-				settings['PRETEND'] = True
-			elif key == '--no-pretend':
-				settings['NO_PRETEND'] = True
-			elif key in ('-e', '--exact'):
-				settings['EXACT'] = True
-			elif key in ('-C', '--nocolor', '--no-color'):
-				settings['nocolor'] = True
-			elif key in ('-L', '--library', '--library='):
-				settings['library'].update(val.split(','))
-			elif key in ('-i', '--ignore'):
-				settings['USE_TMP_FILES'] = False
-
-		settings['pass_through_options'] = " " + " ".join(args)
-	except getopt.GetoptError:
-		#logging.info(red('Unrecognized option\n'))
-		print(red('Unrecognized option\n'))
-		print_usage()
-		sys.exit(2)
+	
+	parser = argparse.ArgumentParser(
+		description='Broken reverse dependency rebuilder, python implementation.',
+		epilog='Calls emerge, options after -- are ignored by %s '
+				'and passed directly to emerge.' % APP_NAME,
+		add_help=False
+		)
+	
+	parser.add_argument('-h', '--help', 
+					 action='help', 
+					 help='Print this usage and exit')
+	parser.add_argument('-V', '--version', 
+					 action='version', 
+					 help='Show version informations',
+					 version='%(prog)s ' + VERSION)
+	
+	parser.add_argument('-i', '--ignore', 
+					 action='store_true', 
+					 help='Ignore temporary files from previous runs ' 
+						'(also won\'t create any)')
+
+	parser.add_argument('-L', '--library', 
+					 action='append', 
+					 help='Unconditionally emerge existing packages that use '
+						'the library with NAME. NAME can be a full or partial '
+						'name')
+	parser.add_argument('-l', '--no-ld-path', 
+					 action='store_true', 
+					 help='Do not set LD_LIBRARY_PATH')
+	parser.add_argument('-o', '--no-order', 
+					 action='store_true', 
+					 help='Do not check the build order '
+						'(Saves time, but may cause breakage.)')
+	parser.add_argument('-p', '--pretend', 
+					 action='store_true', 
+					 help='Do a trial run without actually emerging anything '
+                        '(also passed to emerge command)')
+
+	parser.add_argument('-C', '--nocolor', 
+					 action='store_true', 
+					 help='Turn off colored output')
+	parser.add_argument('-q', '--quiet', 
+					 action='store_true', 
+					 help='Be less verbose (also passed to emerge command)')
+	parser.add_argument('-v', '--verbose', 
+					 action='store_true', 
+					 help='Be more verbose (also passed to emerge command)')
+	parser.add_argument('-d', '--debug', 
+					 action='store_true', 
+					 help='Print debug informations')
+	
+	parser.add_argument('portage_options', nargs='*')
+	
+	args = parser.parse_args()
+	
+	settings['VERBOSITY'] = 3 if args.debug else 2 if args.verbose else 0 if args.quiet else 1
+	settings['quiet'] = args.quiet
+	settings['PRETEND'] = args.pretend
+	settings['nocolor'] = args.nocolor
+	settings['library'].update(set(args.library))
+	settings['USE_TMP_FILES'] = not args.ignore
+	settings['pass_through_options'] = " " + " ".join(args.portage_options)
 
 	return settings
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-03-24  7:17 Slawek Lis
  0 siblings, 0 replies; 115+ messages in thread
From: Slawek Lis @ 2014-03-24  7:17 UTC (permalink / raw
  To: gentoo-commits

commit:     4f2ad629e4802598878f5bc674462de23fcea51b
Author:     Slawek Lis <slis <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 24 07:14:57 2014 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Mon Mar 24 07:14:57 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=4f2ad629

parsing revdep config refactor, added environment config read (as sugggested here: https://bugs.gentoo.org/show_bug.cgi?id=504654#c28)

---
 pym/gentoolkit/revdep_rebuild/settings.py | 33 ++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 12 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index 057147c..7909aa6 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -130,13 +130,24 @@ def parse_options():
 	return settings
 
 
+def _parse_dirs_to_set(dir_str):
+	'''Changes space-delimited directory list into set with them
+	'''
+	_ret = set()
+	for search in dir_str.split():
+		if search == '-*':
+			break
+		_ret.update(glob.glob(search))
+	return _ret
+
+
 def parse_revdep_config(revdep_confdir):
 	''' Parses all files under and returns
 		tuple of: (masked_dirs, masked_files, search_dirs)'''
 
-	search_dirs = set()
-	masked_dirs = set()
-	masked_files = set()
+	search_dirs = os.environ.get('SEARCH_DIRS', '')
+	masked_dirs = os.environ.get('SEARCH_DIRS_MASK', '')
+	masked_files = os.environ.get('LD_LIBRARY_MASK', '')
 
 	for _file in os.listdir(revdep_confdir):
 		for line in open(os.path.join(revdep_confdir, _file)):
@@ -145,22 +156,20 @@ def parse_revdep_config(revdep_confdir):
 			if not line.startswith('#'):
 				match = re.match('LD_LIBRARY_MASK=\\"([^"]+)\\"', line)
 				if match is not None:
-					masks = match.group(1).split(' ')
-					masked_files.update(masks)
+					masked_files += ' ' + match.group(1)
 					continue
 				match = re.match('SEARCH_DIRS_MASK=\\"([^"]+)\\"', line)
 				if match is not None:
-					searches = match.group(1).split(' ')
-					for search in searches:
-						masked_dirs.update(glob.glob(search))
+					masked_dirs += ' ' + match.group(1)
 					continue
 				match = re.match('SEARCH_DIRS=\\"([^"]+)\\"', line)
 				if match is not None:
-					searches = match.group(1).split()
-					for search in searches:
-						search_dirs.update(glob.glob(search))
+					search_dirs += ' ' + match.group(1)
 					continue
 
-	print (masked_dirs, masked_files, search_dirs)
+	masked_files = set(masked_files.split(' '))
+	masked_dirs = _parse_dirs_to_set(masked_dirs)
+	search_dirs = _parse_dirs_to_set(search_dirs)
+
 	return (masked_dirs, masked_files, search_dirs)
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-03-24  7:17 Slawek Lis
  0 siblings, 0 replies; 115+ messages in thread
From: Slawek Lis @ 2014-03-24  7:17 UTC (permalink / raw
  To: gentoo-commits

commit:     39c99972049624c2504358c8455680da6acaee08
Author:     Slawek Lis <slis <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 24 06:32:53 2014 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Mon Mar 24 06:32:53 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=39c99972

Moved option and config parsing into settings module

---
 pym/gentoolkit/revdep_rebuild/collect.py  |  34 +--------
 pym/gentoolkit/revdep_rebuild/rebuild.py  |  83 +-------------------
 pym/gentoolkit/revdep_rebuild/settings.py | 121 ++++++++++++++++++++++++++++++
 3 files changed, 123 insertions(+), 115 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index 039dc76..2a431cb 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -12,6 +12,7 @@ import sys
 
 import portage
 from portage.output import blue, yellow
+from .settings import parse_revdep_config
 
 
 if sys.hexversion < 0x3000000:
@@ -87,39 +88,6 @@ def prepare_search_dirs(logger, settings):
 	return (bin_dirs, lib_dirs)
 
 
-def parse_revdep_config(revdep_confdir):
-	''' Parses all files under and returns
-		tuple of: (masked_dirs, masked_files, search_dirs)'''
-
-	search_dirs = set()
-	masked_dirs = set()
-	masked_files = set()
-
-	for _file in os.listdir(revdep_confdir):
-		for line in open(os.path.join(revdep_confdir, _file)):
-			line = line.strip()
-			#first check for comment, we do not want to regex all lines
-			if not line.startswith('#'):
-				match = re.match('LD_LIBRARY_MASK=\\"([^"]+)\\"', line)
-				if match is not None:
-					masks = match.group(1).split(' ')
-					masked_files.update(masks)
-					continue
-				match = re.match('SEARCH_DIRS_MASK=\\"([^"]+)\\"', line)
-				if match is not None:
-					searches = match.group(1).split(' ')
-					for search in searches:
-						masked_dirs.update(glob.glob(search))
-					continue
-				match = re.match('SEARCH_DIRS=\\"([^"]+)\\"', line)
-				if match is not None:
-					searches = match.group(1).split()
-					for search in searches:
-						search_dirs.update(glob.glob(search))
-					continue
-
-	return (masked_dirs, masked_files, search_dirs)
-
 
 def collect_libraries_from_dir(dirs, mask, logger):
 	''' Collects all libraries from specified list of directories.

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 314fb1f..9d5bf9b 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -18,7 +18,6 @@ from __future__ import print_function
 
 import os
 import sys
-import getopt
 import logging
 import subprocess
 import time
@@ -30,7 +29,7 @@ from portage.output import bold, red, blue, yellow, nocolor
 from .analyse import analyse
 from .cache import check_temp_files, read_cache
 from .assign import get_slotted_cps
-from .settings import DEFAULTS
+from .settings import DEFAULTS, parse_options
 from .stuff import filter_masked
 from . import __version__
 
@@ -43,39 +42,6 @@ __productname__ = "revdep-ng"
 
 # functions
 
-def print_usage():
-	"""Outputs the help message"""
-	print( APP_NAME + ': (' + VERSION +')')
-	print()
-	print('This is free software; see the source for copying conditions.')
-	print()
-	print('Usage: ' + APP_NAME + ' [OPTIONS] [--] [EMERGE_OPTIONS]')
-	print()
-	print('Broken reverse dependency rebuilder, python implementation.')
-	print()
-	print('Available options:')
-	print('''
-  -C, --nocolor         Turn off colored output
-  -d, --debug           Print debug informations
-  -e, --exact           Emerge based on exact package version
-  -h, --help            Print this usage
-  -i, --ignore          Ignore temporary files from previous runs
-                        (also won't create any)
-  -L, --library NAME    Unconditionally emerge existing packages that use
-      --library=NAME    the library with NAME. NAME can be a full or partial
-                        library name
-  -l, --no-ld-path      Do not set LD_LIBRARY_PATH
-  -o, --no-order        Do not check the build order
-                        (Saves time, but may cause breakage.)
-  -p, --pretend         Do a trial run without actually emerging anything
-                        (also passed to emerge command)
-  -q, --quiet           Be less verbose (also passed to emerge command)
-  -v, --verbose         Be more verbose (also passed to emerge command)
-''')
-	print( 'Calls emerge, options after -- are ignored by ' + APP_NAME)
-	print('and passed directly to emerge.')
-
-
 def init_logger(settings):
 	"""Creates and iitializes our logger according to the settings"""
 	logger = logging.getLogger()
@@ -94,53 +60,6 @@ def init_logger(settings):
 	return logger
 
 
-def parse_options():
-	"""Parses the command line options an sets settings accordingly"""
-
-	# TODO: Verify: options: no-ld-path, no-order, no-progress
-	#are not appliable
-
-	settings = DEFAULTS.copy()
-	try:
-		opts, args = getopt.getopt(sys.argv[1:],
-			'dehiklopqvCL:P',
-			['nocolor', 'debug', 'exact', 'help', 'ignore',
-			'keep-temp', 'library=', 'no-ld-path', 'no-order',
-			'pretend', 'no-pretend', 'no-progress', 'quiet', 'verbose'])
-
-		for key, val in opts:
-			if key in ('-h', '--help'):
-				print_usage()
-				sys.exit(0)
-			elif key in ('-q', '--quiet'):
-				settings['quiet'] = True
-				settings['VERBOSITY'] = 0
-			elif key in ('-v', '--verbose'):
-				settings['VERBOSITY'] = 2
-			elif key in ('-d', '--debug'):
-				settings['debug'] = True
-				settings['VERBOSITY'] = 3
-			elif key in ('-p', '--pretend'):
-				settings['PRETEND'] = True
-			elif key == '--no-pretend':
-				settings['NO_PRETEND'] = True
-			elif key in ('-e', '--exact'):
-				settings['EXACT'] = True
-			elif key in ('-C', '--nocolor', '--no-color'):
-				settings['nocolor'] = True
-			elif key in ('-L', '--library', '--library='):
-				settings['library'].update(val.split(','))
-			elif key in ('-i', '--ignore'):
-				settings['USE_TMP_FILES'] = False
-
-		settings['pass_through_options'] = " " + " ".join(args)
-	except getopt.GetoptError:
-		#logging.info(red('Unrecognized option\n'))
-		print(red('Unrecognized option\n'))
-		print_usage()
-		sys.exit(2)
-
-	return settings
 
 
 def rebuild(logger, assigned, settings):

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index 2d6046f..057147c 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -4,8 +4,11 @@
 
 from __future__ import print_function
 
+import getopt
 import os
 import sys
+import re
+import glob
 
 import portage
 
@@ -43,3 +46,121 @@ DEFAULTS = {
 		'stdin': sys.stdin,
 		'stderr': sys.stderr
 		}
+
+
+def print_usage():
+	"""Outputs the help message"""
+	print( APP_NAME + ': (' + VERSION +')')
+	print()
+	print('This is free software; see the source for copying conditions.')
+	print()
+	print('Usage: ' + APP_NAME + ' [OPTIONS] [--] [EMERGE_OPTIONS]')
+	print()
+	print('Broken reverse dependency rebuilder, python implementation.')
+	print()
+	print('Available options:')
+	print('''
+  -C, --nocolor         Turn off colored output
+  -d, --debug           Print debug informations
+  -e, --exact           Emerge based on exact package version
+  -h, --help            Print this usage
+  -i, --ignore          Ignore temporary files from previous runs
+                        (also won't create any)
+  -L, --library NAME    Unconditionally emerge existing packages that use
+      --library=NAME    the library with NAME. NAME can be a full or partial
+                        library name
+  -l, --no-ld-path      Do not set LD_LIBRARY_PATH
+  -o, --no-order        Do not check the build order
+                        (Saves time, but may cause breakage.)
+  -p, --pretend         Do a trial run without actually emerging anything
+                        (also passed to emerge command)
+  -q, --quiet           Be less verbose (also passed to emerge command)
+  -v, --verbose         Be more verbose (also passed to emerge command)
+''')
+	print( 'Calls emerge, options after -- are ignored by ' + APP_NAME)
+	print('and passed directly to emerge.')
+
+
+def parse_options():
+	"""Parses the command line options an sets settings accordingly"""
+
+	# TODO: Verify: options: no-ld-path, no-order, no-progress
+	#are not appliable
+
+	settings = DEFAULTS.copy()
+	try:
+		opts, args = getopt.getopt(sys.argv[1:],
+			'dehiklopqvCL:P',
+			['nocolor', 'debug', 'exact', 'help', 'ignore',
+			'keep-temp', 'library=', 'no-ld-path', 'no-order',
+			'pretend', 'no-pretend', 'no-progress', 'quiet', 'verbose'])
+
+		for key, val in opts:
+			if key in ('-h', '--help'):
+				print_usage()
+				sys.exit(0)
+			elif key in ('-q', '--quiet'):
+				settings['quiet'] = True
+				settings['VERBOSITY'] = 0
+			elif key in ('-v', '--verbose'):
+				settings['VERBOSITY'] = 2
+			elif key in ('-d', '--debug'):
+				settings['debug'] = True
+				settings['VERBOSITY'] = 3
+			elif key in ('-p', '--pretend'):
+				settings['PRETEND'] = True
+			elif key == '--no-pretend':
+				settings['NO_PRETEND'] = True
+			elif key in ('-e', '--exact'):
+				settings['EXACT'] = True
+			elif key in ('-C', '--nocolor', '--no-color'):
+				settings['nocolor'] = True
+			elif key in ('-L', '--library', '--library='):
+				settings['library'].update(val.split(','))
+			elif key in ('-i', '--ignore'):
+				settings['USE_TMP_FILES'] = False
+
+		settings['pass_through_options'] = " " + " ".join(args)
+	except getopt.GetoptError:
+		#logging.info(red('Unrecognized option\n'))
+		print(red('Unrecognized option\n'))
+		print_usage()
+		sys.exit(2)
+
+	return settings
+
+
+def parse_revdep_config(revdep_confdir):
+	''' Parses all files under and returns
+		tuple of: (masked_dirs, masked_files, search_dirs)'''
+
+	search_dirs = set()
+	masked_dirs = set()
+	masked_files = set()
+
+	for _file in os.listdir(revdep_confdir):
+		for line in open(os.path.join(revdep_confdir, _file)):
+			line = line.strip()
+			#first check for comment, we do not want to regex all lines
+			if not line.startswith('#'):
+				match = re.match('LD_LIBRARY_MASK=\\"([^"]+)\\"', line)
+				if match is not None:
+					masks = match.group(1).split(' ')
+					masked_files.update(masks)
+					continue
+				match = re.match('SEARCH_DIRS_MASK=\\"([^"]+)\\"', line)
+				if match is not None:
+					searches = match.group(1).split(' ')
+					for search in searches:
+						masked_dirs.update(glob.glob(search))
+					continue
+				match = re.match('SEARCH_DIRS=\\"([^"]+)\\"', line)
+				if match is not None:
+					searches = match.group(1).split()
+					for search in searches:
+						search_dirs.update(glob.glob(search))
+					continue
+
+	print (masked_dirs, masked_files, search_dirs)
+	return (masked_dirs, masked_files, search_dirs)
+


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-03-17  6:50 Slawek Lis
  0 siblings, 0 replies; 115+ messages in thread
From: Slawek Lis @ 2014-03-17  6:50 UTC (permalink / raw
  To: gentoo-commits

commit:     ae20dbd7f2ef2810d3150e870ece6f5b7278f676
Author:     slis <lis.slawek <AT> gmail <DOT> com>
AuthorDate: Mon Mar 17 06:48:19 2014 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Mon Mar 17 06:48:19 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=ae20dbd7

Fix for non-existing libraries version (https://bugs.gentoo.org/show_bug.cgi?id=504654#c5)

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index d7b210b..bd1b6b7 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -185,7 +185,11 @@ class LibCheck(object):
 			scanned_files = self.scanned_files
 		found_libs = {}
 		for bits in self.searchbits:
-			scanned = scanned_files[bits]
+			try:
+				scanned = scanned_files[bits]
+			except KeyError:
+				self.logger.debug('There are no %s-bit libraries'%bits) 
+				continue
 			self.logger.debug(self.smsg % bits)
 			self.setlibs(sorted(scanned), bits)
 			for soname, filepaths in scanned.items():


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-03-17  6:50 Slawek Lis
  0 siblings, 0 replies; 115+ messages in thread
From: Slawek Lis @ 2014-03-17  6:50 UTC (permalink / raw
  To: gentoo-commits

commit:     c5baf551987e2fb412caa396ae34f7f4341ad819
Author:     slis <lis.slawek <AT> gmail <DOT> com>
AuthorDate: Mon Mar 17 06:42:01 2014 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Mon Mar 17 06:42:01 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=c5baf551

Fix #504654 - problem with encoding for non-ascii filenames

---
 pym/gentoolkit/revdep_rebuild/stuff.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index cc3da7b..7a8373d 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -22,7 +22,7 @@ def call_program(args):
 	subp = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 	stdout, stderr = subp.communicate()
 	stdout = stdout.decode('utf-8')
-	return str(stdout)
+	return stdout
 
 
 def scan(params, files, max_args, logger):


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-03-11 21:43 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2014-03-11 21:43 UTC (permalink / raw
  To: gentoo-commits

commit:     c6286bab8c4e96a7e54e05ab26244ca648ae9787
Author:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
AuthorDate: Tue Mar 11 21:42:52 2014 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Mar 11 21:42:52 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=c6286bab

Remove unused revdep-rebuild.py

---
 pym/gentoolkit/revdep_rebuild/revdep-rebuild.py | 17 -----------------
 1 file changed, 17 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
deleted file mode 100755
index 2619ee0..0000000
--- a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-
-# Author: Sławomir Lis <lis.slawek@gmail.com>
-# revdep-rebuild original author: Stanislav Brabec
-# revdep-rebuild original rewrite Author: Michael A. Smith
-# Current Maintainer: Paul Varner <fuzzyray@gentoo.org>
-
-# Creation date: 2010/10/17
-# License: BSD
-
-from rebuild import APP_NAME, VERSION, main
-
-if __name__ == '__main__':
-    # instead of revdep-rebuild.py call rebuild.py
-    main()


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-03-11 21:22 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2014-03-11 21:22 UTC (permalink / raw
  To: gentoo-commits

commit:     e566d68dd4880a5bb6cfd2c8945f4eb23b40e8f3
Author:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
AuthorDate: Tue Mar 11 21:22:41 2014 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Mar 11 21:22:41 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=e566d68d

Remove development version warning

---
 pym/gentoolkit/revdep_rebuild/rebuild.py | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 0725c7c..314fb1f 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -220,10 +220,7 @@ def main(settings=None, logger=None):
 			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'))
+			yellow('Adding --pretend to portage options'))
 		logger.info(blue(' * ') +
 			'If you\'re sure, you can add --no-pretend to revdep options')
 		settings['PRETEND'] = True


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-19  5:01 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-19  5:01 UTC (permalink / raw
  To: gentoo-commits

commit:     e39db54a6071281d71084579995e1fe34846c72d
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 19 04:56:24 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Feb 19 04:56:24 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=e39db54a

revdep_rebuild/rebuild.py: Migrate an os.system() call to subprocess.call()

---
 pym/gentoolkit/revdep_rebuild/rebuild.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index c487b99..0725c7c 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -20,6 +20,7 @@ import os
 import sys
 import getopt
 import logging
+import subprocess
 import time
 current_milli_time = lambda: int(round(time.time() * 1000))
 
@@ -171,10 +172,9 @@ def rebuild(logger, assigned, settings):
 		bold(emerge_command))
 
 	stime = current_milli_time()
-	success = os.system(
-		'emerge ' + args +
-		' --oneshot --complete-graph=y ' +
-		emerge_command)
+	_args = 'emerge ' + args + ' --oneshot --complete-graph=y ' + emerge_command
+	_args = _args.split()
+	success = subprocess.call(_args)
 	ftime = current_milli_time()
 	logger.debug("\trebuild(); emerge call for %d ebuilds took: %s seconds"
 		% (len(_assigned), str((ftime-stime)/1000.0)))


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-19  4:33 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-19  4:33 UTC (permalink / raw
  To: gentoo-commits

commit:     06ef019388f27baccdc19dc5505c7c37321955f1
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 19 04:28:38 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Feb 19 04:28:38 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=06ef0193

revdep_rebuild/rebuild.py: Add debug timing info for the emerge call.

---
 pym/gentoolkit/revdep_rebuild/rebuild.py | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 7ce145a..c487b99 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -20,6 +20,10 @@ import os
 import sys
 import getopt
 import logging
+import time
+current_milli_time = lambda: int(round(time.time() * 1000))
+
+
 from portage.output import bold, red, blue, yellow, nocolor
 
 from .analyse import analyse
@@ -166,10 +170,14 @@ def rebuild(logger, assigned, settings):
 		' --oneshot --complete-graph=y ' +
 		bold(emerge_command))
 
+	stime = current_milli_time()
 	success = os.system(
 		'emerge ' + args +
 		' --oneshot --complete-graph=y ' +
 		emerge_command)
+	ftime = current_milli_time()
+	logger.debug("\trebuild(); emerge call for %d ebuilds took: %s seconds"
+		% (len(_assigned), str((ftime-stime)/1000.0)))
 	return success
 
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-19  4:33 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-19  4:33 UTC (permalink / raw
  To: gentoo-commits

commit:     7df61421473ab9bf366f2a0f6b318a780d8548df
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 19 04:27:27 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Feb 19 04:27:27 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=7df61421

revdep_rebuild/rebuild.py: Remove useless emerge_command reassignment to itself.

---
 pym/gentoolkit/revdep_rebuild/rebuild.py | 2 --
 1 file changed, 2 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index ea0c25a..7ce145a 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -161,8 +161,6 @@ def rebuild(logger, assigned, settings):
 		logger.warn(bold('\nThere is nothing to emerge. Exiting.'))
 		return 0
 
-	emerge_command = emerge_command
-
 	logger.warn(yellow(
 		'\nemerge') + args +
 		' --oneshot --complete-graph=y ' +


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-19  3:14 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-19  3:14 UTC (permalink / raw
  To: gentoo-commits

commit:     b681dae9a1de75c32b6c48965a4fbe2ab1cbbded
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 19 02:33:08 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Feb 19 02:33:08 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=b681dae9

revdep_rebuild/assign.py: Downgrade a logging.info message to logging.debug

---
 pym/gentoolkit/revdep_rebuild/assign.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index 5e56716..53e480d 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -77,7 +77,7 @@ def get_best_match(cpv, cp, logger):
 
 	slot = portage.db[portage.root]["vartree"].dbapi.aux_get(cpv, ["SLOT"])[0]
 	logger.warn('\t' + yellow('Warning: ebuild "' + cpv + '" not found.'))
-	logger.info('\tLooking for %s:%s' %(cp, slot))
+	logger.debug('\tLooking for %s:%s' %(cp, slot))
 	try:
 		match = portdb.match('%s:%s' %(cp, slot))
 	except portage.exception.InvalidAtom:


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-19  3:14 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-19  3:14 UTC (permalink / raw
  To: gentoo-commits

commit:     dc4ea0ab56c1849c0f64d72762bd66c74ae0a522
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 19 03:09:42 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Feb 19 03:09:42 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=dc4ea0ab

revdep_rebuild/assign.py: Improve a couple logger messages formatting.

---
 pym/gentoolkit/revdep_rebuild/assign.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index 53e480d..412ed49 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -76,8 +76,8 @@ def get_best_match(cpv, cp, logger):
 	"""
 
 	slot = portage.db[portage.root]["vartree"].dbapi.aux_get(cpv, ["SLOT"])[0]
-	logger.warn('\t' + yellow('Warning: ebuild "' + cpv + '" not found.'))
-	logger.debug('\tLooking for %s:%s' %(cp, slot))
+	logger.warn('\t%s "%s" %s.' % (yellow('* Warning:'), cpv,bold('ebuild not found.')))
+	logger.debug('\tget_best_match(); Looking for %s:%s' %(cp, slot))
 	try:
 		match = portdb.match('%s:%s' %(cp, slot))
 	except portage.exception.InvalidAtom:


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-19  3:14 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-19  3:14 UTC (permalink / raw
  To: gentoo-commits

commit:     b053a6e175467e0d28854e8ec6f008e3dbaf811c
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 19 02:30:20 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Feb 19 02:30:20 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=b053a6e1

revdep_rebuild: Fix pkgs to merge being incorrectly filtered.

Move masked package filtering to a function.
Relocate the masking check to rebuild() only for exact version rebuilds.
Filtering was already done in get_slotted_cps().

---
 pym/gentoolkit/revdep_rebuild/rebuild.py | 26 ++++++--------------------
 pym/gentoolkit/revdep_rebuild/stuff.py   | 26 ++++++++++++++++++++++++++
 2 files changed, 32 insertions(+), 20 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 3e91058..ea0c25a 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -20,13 +20,13 @@ import os
 import sys
 import getopt
 import logging
-from portage.output import bold, red, blue, yellow, green, nocolor
+from portage.output import bold, red, blue, yellow, nocolor
 
 from .analyse import analyse
-from .stuff import get_masking_status
 from .cache import check_temp_files, read_cache
 from .assign import get_slotted_cps
 from .settings import DEFAULTS
+from .stuff import filter_masked
 from . import __version__
 
 
@@ -143,9 +143,11 @@ def rebuild(logger, assigned, settings):
 
 	args = settings['pass_through_options']
 	if settings['EXACT']:
-		emerge_command = '=' + ' ='.join(assigned)
+		_assigned = filter_masked(assigned, logger)
+		emerge_command = '=' + ' ='.join(_assigned)
 	else:
-		emerge_command = ' '.join(get_slotted_cps(assigned, logger))
+		_assigned = get_slotted_cps(assigned, logger)
+		emerge_command = ' '.join(_assigned)
 	if settings['PRETEND']:
 		args += ' --pretend'
 	if settings['VERBOSITY'] >= 2:
@@ -253,22 +255,6 @@ def main(settings=None, logger=None):
 		for filename in orphaned:
 			logger.warn(red('\t* ') + filename)
 
-	has_masked = False
-	tmp = []
-	for ebuild in assigned:
-		if get_masking_status(ebuild):
-			has_masked = True
-			logger.warn(' !!! ' + red('All ebuilds that could satisfy: ') +
-				green(ebuild) + red(' have been masked'))
-		else:
-			tmp.append(ebuild)
-	assigned = tmp
-
-	if has_masked:
-		logger.info('\t' + red('* ') +
-			'Unmask all ebuild(s) listed above and call revdep-rebuild '
-			'again or manually emerge given packages.')
-
 	success = rebuild(logger, assigned, settings)
 	logger.debug("rebuild return code = %i" %success)
 	return success

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index e0fc7b5..cc3da7b 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -8,6 +8,7 @@ from __future__ import print_function
 import subprocess
 
 import portage
+from portage.output import green, red
 
 
 # util. functions
@@ -75,6 +76,31 @@ def _match_str_in_list(lst, stri):
 	return False
 
 
+def filter_masked(assigned, logger):
+	'''Filter out masked pkgs/ebuilds'''
+
+	def is_masked(ebuild):
+		if get_masking_status(ebuild):
+			logger.warn(' !!! ' + red('All ebuilds that could satisfy: ') +
+				green(ebuild) + red(' have been masked'))
+			return True
+		return False
+
+	has_masked = False
+	tmp = []
+	for ebuild in assigned:
+		if not is_masked(ebuild):
+			tmp.append(ebuild)
+		else:
+			has_masked = True
+	if has_masked:
+		logger.info('\t' + red('* ') +
+			'Unmask all ebuild(s) listed above and call revdep-rebuild '
+			'again or manually emerge given packages.')
+	return tmp
+
+
+
 
 if __name__ == '__main__':
 	print("There is nothing to run here.")


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-19  3:14 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-19  3:14 UTC (permalink / raw
  To: gentoo-commits

commit:     5943100c1a6b0e9e4ce95f5f635a90c9862c8c5c
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 18 22:29:20 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 18 23:02:17 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=5943100c

revdep_rebuild/analyse.py: Correctly set search bits for -L searches...

Determine the searchbits needed.
Limit the scan() return accordingly
Mask any unneeded search libs according to the searchbits set.
Modify the LibCheck class:
   - break the search into a set searchbit order.
   - replace _lambda() with _setslibs() to filter searchlibs
     to the bit length being searched.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 51 ++++++++++++++++++++++----------
 1 file changed, 35 insertions(+), 16 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index f65c503..09d88d6 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -19,7 +19,7 @@ from .cache import save_cache
 current_milli_time = lambda: int(round(time.time() * 1000))
 
 
-def scan_files(libs_and_bins, cmd_max_args, logger):
+def scan_files(libs_and_bins, cmd_max_args, logger, searchbits):
 	'''Calls stuff.scan() and processes the data into a dictionary
 	of scanned files information.
 
@@ -47,6 +47,8 @@ def scan_files(libs_and_bins, cmd_max_args, logger):
 		filename = os.path.realpath(filename)
 		needed = needed.split(',')
 		bits = bits[8:] # 8: -> strlen('ELFCLASS')
+		if bits not in searchbits:
+			continue
 		if not soname:
 			soname = sfilename
 
@@ -113,7 +115,7 @@ def extract_dependencies_from_la(la, libraries, to_check, logger):
 
 
 class LibCheck(object):
-	def __init__(self, scanned_files, logger, searchlibs=None):
+	def __init__(self, scanned_files, logger, searchlibs=None, searchbits=None):
 		'''LibCheck init function.
 
 		@param scanned_files: optional dictionary if the type created by
@@ -126,29 +128,30 @@ class LibCheck(object):
 		self.scanned_files = scanned_files
 		self.logger = logger
 		self.searchlibs = searchlibs
+		self.searchbits = sorted(searchbits) or ['32', '64']
 		if searchlibs:
 			self.smsg = '\tLibCheck.search(), Checking for %s bit dependants'
 			self.pmsg = yellow(" * ") + 'Files that depend on: %s (%s bits)'
-			self.alllibs = '|'.join(sorted(searchlibs)) + '|'
-			self.setlibs = self._lamda
+			self.setlibs = self._setslibs
 			self.check = self._checkforlib
 		else:
 			self.smsg = '\tLibCheck.search(), Checking for broken %s bit libs'
 			self.pmsg = green(' * ') + bold('Broken files that requires:') + ' %s (%s bits)'
 			self.setlibs = self._setlibs
 			self.check = self._checkbroken
-			self.alllibs = None
+		self.alllibs = None
 
 
-	@staticmethod
-	def _lamda(l):
+	def _setslibs(self, l, b):
 		'''Internal function.  Use the class's setlibs variable'''
-		pass
+		self.alllibs = '|'.join(
+			[x for x in self.searchlibs if ('lib%s' % (b) in x)]) + '|'
+		self.logger.debug("\tLibCheck._setslibs(), new alllibs: %s" %(self.alllibs))
 
 
-	def _setlibs(self, l):
+	def _setlibs(self, l, b):
 		'''Internal function.  Use the class's setlibs variable'''
-		self.alllibs = '|'.join(sorted(l)) + '|'
+		self.alllibs = '|'.join(l) + '|'
 
 
 	def _checkforlib(self, l):
@@ -178,10 +181,11 @@ class LibCheck(object):
 		if not scanned_files:
 			scanned_files = self.scanned_files
 		found_libs = {}
-		for bits, libs in scanned_files.items():
-			self.setlibs(libs)
+		for bits in self.searchbits:
+			scanned = scanned_files[bits]
 			self.logger.debug(self.smsg % bits)
-			for soname, filepaths in libs.items():
+			self.setlibs(sorted(scanned), bits)
+			for soname, filepaths in scanned.items():
 				for filename, needed in filepaths.items():
 					for l in needed:
 						if self.check(l):
@@ -235,8 +239,17 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 	@rtype list: list of pkgs that need rebuilding
 	"""
 
-	if _libs_to_check == None:
+	searchbits = set()
+	if _libs_to_check:
+		for lib in _libs_to_check:
+			if "lib64" in lib:
+				searchbits.add('64')
+			elif "lib32" in lib:
+				searchbits.add('32')
+	else:
 		_libs_to_check = set()
+		searchbits.update(['64', '32'])
+
 	if libraries and la_libraries and libraries_links and binaries:
 		logger.info(blue(' * ') +
 			bold('Found a valid cache, skipping collecting phase'))
@@ -260,6 +273,11 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 				'/lib64/modules',
 			])
 		)
+		if '64' not in searchbits:
+			masked_dirs.update(['/lib64', '/usr/lib64'])
+		elif '32' not in searchbits:
+			masked_dirs.update(['/lib32', '/usr/lib32'])
+
 		logger.debug('\tanalyse(), bin directories:')
 		for x in sorted(bin_dirs):
 			logger.debug('\t\t%s' % (x))
@@ -300,7 +318,8 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 
 	libs_and_bins = libraries.union(binaries)
 
-	scanned_files = scan_files(libs_and_bins, settings['CMD_MAX_ARGS'], logger)
+	scanned_files = scan_files(libs_and_bins, settings['CMD_MAX_ARGS'],
+		logger, searchbits)
 
 	logger.warn(green(' * ') + bold('Checking dynamic linking consistency'))
 	logger.debug(
@@ -308,7 +327,7 @@ 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)
+	libcheck = LibCheck(scanned_files, logger, _libs_to_check, searchbits)
 
 	broken_pathes = libcheck.process_results(libcheck.search())
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-19  3:14 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-19  3:14 UTC (permalink / raw
  To: gentoo-commits

commit:     3ecac0c4a444eca19f19542db19a8061d796a02f
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 18 22:30:37 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 18 23:10:19 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=3ecac0c4

revdep_rebuild/analyse.py: No need to convert to a set  before updating masked_directories.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 09d88d6..82393a6 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -266,12 +266,11 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 			parse_revdep_config(settings['REVDEP_CONFDIR'])
 		lib_dirs.update(ld)
 		bin_dirs.update(ld)
-		masked_dirs.update(
-			set([
-				'/lib/modules',
-				'/lib32/modules',
-				'/lib64/modules',
-			])
+		masked_dirs.update([
+			'/lib/modules',
+			'/lib32/modules',
+			'/lib64/modules',
+			]
 		)
 		if '64' not in searchbits:
 			masked_dirs.update(['/lib64', '/usr/lib64'])


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-19  3:14 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-19  3:14 UTC (permalink / raw
  To: gentoo-commits

commit:     f9b0cf555a5178883ab1e817bd801e4a7ff4b83c
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 19 00:37:20 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Feb 19 00:57:47 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=f9b0cf55

recdep_rebuild/analyse.py: Fix LibCheck.search() overwiting found_libs...

When multiple bit lengths were being searched, only the last bit length was surviving.
Added extra debug output to discover the problem.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 82393a6..5346c3e 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -129,6 +129,7 @@ class LibCheck(object):
 		self.logger = logger
 		self.searchlibs = searchlibs
 		self.searchbits = sorted(searchbits) or ['32', '64']
+		self.logger.debug("\tLibCheck.__init__(), new searchlibs: %s" %(self.searchbits))
 		if searchlibs:
 			self.smsg = '\tLibCheck.search(), Checking for %s bit dependants'
 			self.pmsg = yellow(" * ") + 'Files that depend on: %s (%s bits)'
@@ -189,15 +190,15 @@ class LibCheck(object):
 				for filename, needed in filepaths.items():
 					for l in needed:
 						if self.check(l):
+							if not bits in found_libs:
+								found_libs[bits] = {}
 							try:
 								found_libs[bits][l].add(filename)
 							except KeyError:
-								try:
-									found_libs[bits][l] = set([filename])
-									count += 1
-								except KeyError:
-									found_libs = {bits: {l: set([filename])}}
-									count += 1
+								found_libs[bits][l] = set([filename])
+								count += 1
+							self.logger.debug("\tLibCheck.search(); FOUND:"
+									" %s, %s, %s" % (bits, l, filename))
 		ftime = current_milli_time()
 		self.logger.debug("\tLibCheck.search(); total libs found: %d in %d milliseconds"
 			% (count, ftime-stime))


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-19  3:14 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-19  3:14 UTC (permalink / raw
  To: gentoo-commits

commit:     8cc0df2e105ae75edf81fd9133511b8a8edb8815
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 19 00:56:47 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Feb 19 00:58:03 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=8cc0df2e

revdep_rebuild/analyse.py: Improve LibCheck.search() totals debug output.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 5346c3e..d7b210b 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -140,6 +140,7 @@ class LibCheck(object):
 			self.pmsg = green(' * ') + bold('Broken files that requires:') + ' %s (%s bits)'
 			self.setlibs = self._setlibs
 			self.check = self._checkbroken
+		self.sfmsg = "\tLibCheck.search(); Total found: %(count)d libs, %(deps)d files in %(time)d milliseconds"
 		self.alllibs = None
 
 
@@ -179,6 +180,7 @@ class LibCheck(object):
 		'''
 		stime = current_milli_time()
 		count = 0
+		fcount = 0
 		if not scanned_files:
 			scanned_files = self.scanned_files
 		found_libs = {}
@@ -197,11 +199,12 @@ class LibCheck(object):
 							except KeyError:
 								found_libs[bits][l] = set([filename])
 								count += 1
+							fcount += 1
 							self.logger.debug("\tLibCheck.search(); FOUND:"
-									" %s, %s, %s" % (bits, l, filename))
+									" %sbit, %s, %s" % (bits, l, filename))
 		ftime = current_milli_time()
-		self.logger.debug("\tLibCheck.search(); total libs found: %d in %d milliseconds"
-			% (count, ftime-stime))
+		self.logger.debug(self.sfmsg % {'count': count, 'deps': fcount,
+			'time': ftime-stime})
 		return found_libs
 
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-19  3:14 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-19  3:14 UTC (permalink / raw
  To: gentoo-commits

commit:     b671399841845b2d9bb593b22a46852b48fb52bf
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 19 02:32:12 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Feb 19 02:32:12 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=b6713998

revdep_rebuild.py/assign.py: Fix a bug in the slot assignment.

---
 pym/gentoolkit/revdep_rebuild/assign.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index 22565e8..5e56716 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -75,7 +75,7 @@ def get_best_match(cpv, cp, logger):
 	@rtype tuple: ([cpv,...], SLOT)
 	"""
 
-	slot = portage.db[portage.root]["vartree"].dbapi.aux_get(cpv, ["SLOT"])
+	slot = portage.db[portage.root]["vartree"].dbapi.aux_get(cpv, ["SLOT"])[0]
 	logger.warn('\t' + yellow('Warning: ebuild "' + cpv + '" not found.'))
 	logger.info('\tLooking for %s:%s' %(cp, slot))
 	try:


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-18 18:51 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-18 18:51 UTC (permalink / raw
  To: gentoo-commits

commit:     8a154181f49888b7a68299ede1161e9c41d3ddb1
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 18 18:46:38 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 18 18:46:38 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=8a154181

revdep_rebuild: Remove unused symlink_pairs code.

Remove some other commented code left over from the sets() conversion.

---
 pym/gentoolkit/revdep_rebuild/analyse.py |  2 +-
 pym/gentoolkit/revdep_rebuild/collect.py | 18 +++---------------
 2 files changed, 4 insertions(+), 16 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 64aca04..f65c503 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -278,7 +278,7 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 		stime = current_milli_time()
 		logger.info(green(' * ') +
 			bold('Collecting dynamic linking informations'))
-		libraries, la_libraries, libraries_links, symlink_pairs = \
+		libraries, la_libraries, libraries_links = \
 			collect_libraries_from_dir(lib_dirs, masked_dirs, logger)
 		binaries = collect_binaries_from_dir(bin_dirs, masked_dirs, logger)
 		ftime = current_milli_time()

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index 550569d..039dc76 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -134,8 +134,6 @@ def collect_libraries_from_dir(dirs, mask, logger):
 	found_files = set()
 	found_symlinks = set()
 	found_la_files = set() # la libraries
-	symlink_pairs = []  # list of pairs symlink_id->library_id
-
 
 	for _dir in dirs:
 		if _dir in mask:
@@ -158,18 +156,9 @@ def collect_libraries_from_dir(dirs, mask, logger):
 						listing.endswith('.a') or
 						'.so.' in listing
 						):
-						#if listing in found_files or listing in found_symlinks:
-							#continue
 
 						if os.path.islink(listing):
 							found_symlinks.add(listing)
-							#abs_path = os.path.realpath(listing)
-							#if abs_path in found_files:
-								#index = found_files.index(abs_path)
-							#else:
-								#found_files.append(abs_path)
-								#index = len(found_files)-1
-							#symlink_pairs.append((len(found_symlinks)-1, index,))
 						else:
 							found_files.add(listing)
 						continue
@@ -195,13 +184,12 @@ def collect_libraries_from_dir(dirs, mask, logger):
 				blue('%s')  %str(ex)))
 
 	if found_directories:
-		_file, la_file, link, pair = \
+		_file, la_file, link = \
 			collect_libraries_from_dir(found_directories, mask, logger)
 		found_files.update(_file)
 		found_la_files.update(la_file)
 		found_symlinks.update(link)
-		symlink_pairs += pair
-	return (found_files, found_la_files, found_symlinks, symlink_pairs)
+	return (found_files, found_la_files, found_symlinks)
 
 
 def collect_binaries_from_dir(dirs, mask, logger):
@@ -269,7 +257,7 @@ if __name__ == '__main__':
 		])
 	)
 
-	libraries, la_libraries, libraries_links, msymlink_pairs = \
+	libraries, la_libraries, libraries_links = \
 		collect_libraries_from_dir(lib_dirs, masked_dirs, logging)
 	binaries = collect_binaries_from_dir(bin_dirs, masked_dirs, logging)
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-18 18:51 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-18 18:51 UTC (permalink / raw
  To: gentoo-commits

commit:     ddabed641fcf824d3f27e068674145211fa530dd
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 18 18:08:00 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 18 18:08:00 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=ddabed64

revdep_rebuild/analyse.py: Remove the -n option from the scanelf parameters. 

It is not needed when using the -F option.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 0c22b0e..64aca04 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -30,7 +30,7 @@ def scan_files(libs_and_bins, cmd_max_args, logger):
 	'''
 	stime = current_milli_time()
 	scanned_files = {} # {bits: {soname: (filename, needed), ...}, ...}
-	lines = scan(['-nBF', '%F %f %S %n %M'],
+	lines = scan(['-BF', '%F %f %S %n %M'],
 				 libs_and_bins, cmd_max_args, logger)
 	ftime = current_milli_time()
 	logger.debug("\tscan_files(); total time to get scanelf data is "


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-18 17:59 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-18 17:59 UTC (permalink / raw
  To: gentoo-commits

commit:     4ab0f13a7a736544b7a970ec6b1f3222db3cd731
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 18 17:55:17 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 18 17:55:17 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=4ab0f13a

revdep_rebuild/collect.py: Fix incorrect usage of set.union(), should have been set.update()

This reduced the total number of binaries significantly by not adding the recursive results
to the set.

---
 pym/gentoolkit/revdep_rebuild/collect.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index 9fba58a..550569d 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -248,7 +248,7 @@ def collect_binaries_from_dir(dirs, mask, logger):
 				blue('%s') %str(ex)))
 
 	if found_directories:
-		found_files.union(collect_binaries_from_dir(found_directories, mask, logger))
+		found_files.update(collect_binaries_from_dir(found_directories, mask, logger))
 
 	return found_files
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-18 17:23 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-18 17:23 UTC (permalink / raw
  To: gentoo-commits

commit:     6a1b982db786de23bd8a201827be4b3b34c53a75
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 18 17:16:16 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 18 17:16:16 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=6a1b982d

Revert "revdep-rebuild/analyse.py: Change the scanelf call parameters."

This reverts commit f47a75c4815415aa4da6a4b41fb2ba18ef753ef2.
I added the parameter incorrectly, then didn't notice the that
no info was returned.
When I add the --use-ldpath correctly, it seems to detect that
nearly everything is broken.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 595d4f5..0c22b0e 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -30,7 +30,7 @@ def scan_files(libs_and_bins, cmd_max_args, logger):
 	'''
 	stime = current_milli_time()
 	scanned_files = {} # {bits: {soname: (filename, needed), ...}, ...}
-	lines = scan(['--use-ldpath -BF', '%F %f %S %n %M'],
+	lines = scan(['-nBF', '%F %f %S %n %M'],
 				 libs_and_bins, cmd_max_args, logger)
 	ftime = current_milli_time()
 	logger.debug("\tscan_files(); total time to get scanelf data is "


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-18  7:30 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-18  7:30 UTC (permalink / raw
  To: gentoo-commits

commit:     f47a75c4815415aa4da6a4b41fb2ba18ef753ef2
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 18 07:25:17 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 18 07:25:17 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=f47a75c4

revdep-rebuild/analyse.py: Change the scanelf call parameters.

Remove the redundant -n option due to the -F option.
Add --use-ldpath to help prevent false detection of libs in a 
different path than the lib is linked to.
Changes recommended by: Douglas Freed

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 0c22b0e..595d4f5 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -30,7 +30,7 @@ def scan_files(libs_and_bins, cmd_max_args, logger):
 	'''
 	stime = current_milli_time()
 	scanned_files = {} # {bits: {soname: (filename, needed), ...}, ...}
-	lines = scan(['-nBF', '%F %f %S %n %M'],
+	lines = scan(['--use-ldpath -BF', '%F %f %S %n %M'],
 				 libs_and_bins, cmd_max_args, logger)
 	ftime = current_milli_time()
 	logger.debug("\tscan_files(); total time to get scanelf data is "


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-18  6:15 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-18  6:15 UTC (permalink / raw
  To: gentoo-commits

commit:     1d981aeb603714c0a75c4acacda3dd031ef6301d
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 18 06:09:32 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 18 06:09:32 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=1d981aeb

revdep-rebuild/cache.py: Convert cache loading to sets()

---
 pym/gentoolkit/revdep_rebuild/cache.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index 49ddc10..3d925d8 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -22,16 +22,16 @@ def read_cache(temp_path=DEFAULTS['DEFAULT_TMP_DIR']):
 	'''
 
 	ret = {
-		'libraries':[],
-		'la_libraries':[],
-		'libraries_links':[],
-		'binaries':[]
+		'libraries': set(),
+		'la_libraries': set(),
+		'libraries_links': set(),
+		'binaries': set()
 		}
 	try:
 		for key,val in ret.items():
 			_file = open(os.path.join(temp_path, key))
 			for line in _file.readlines():
-				val.append(line.strip())
+				val.add(line.strip())
 			#libraries.remove('\n')
 			_file .close()
 	except EnvironmentError:


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-17 10:31 Slawek Lis
  0 siblings, 0 replies; 115+ messages in thread
From: Slawek Lis @ 2014-02-17 10:31 UTC (permalink / raw
  To: gentoo-commits

commit:     228e257887a48de8b27e36e9f8305d8bf6c0a579
Author:     slis <lis.slawek <AT> gmail <DOT> com>
AuthorDate: Mon Feb 17 10:29:49 2014 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Mon Feb 17 10:29:49 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=228e2578

fixed commented out rebuild

---
 pym/gentoolkit/revdep_rebuild/rebuild.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 257bc02..3e91058 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -269,7 +269,7 @@ def main(settings=None, logger=None):
 			'Unmask all ebuild(s) listed above and call revdep-rebuild '
 			'again or manually emerge given packages.')
 
-	#success = rebuild(logger, assigned, settings)
+	success = rebuild(logger, assigned, settings)
 	logger.debug("rebuild return code = %i" %success)
 	return success
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-17  8:50 Slawek Lis
  0 siblings, 0 replies; 115+ messages in thread
From: Slawek Lis @ 2014-02-17  8:50 UTC (permalink / raw
  To: gentoo-commits

commit:     b2130a2aca2a202444ddd57ab6fe65f05c5c3571
Author:     slis <lis.slawek <AT> gmail <DOT> com>
AuthorDate: Mon Feb 17 08:48:20 2014 +0000
Commit:     Slawek Lis <slis <AT> gentoo <DOT> org>
CommitDate: Mon Feb 17 08:48:20 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=b2130a2a

Using sets in collect module

---
 pym/gentoolkit/revdep_rebuild/analyse.py |  4 +--
 pym/gentoolkit/revdep_rebuild/collect.py | 57 ++++++++++++++++----------------
 pym/gentoolkit/revdep_rebuild/rebuild.py |  2 +-
 3 files changed, 32 insertions(+), 31 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index d844906..0c22b0e 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -298,7 +298,7 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 	)
 	logger.info(green(' * ') + bold('Scanning files'))
 
-	libs_and_bins = set(libraries + binaries)
+	libs_and_bins = libraries.union(binaries)
 
 	scanned_files = scan_files(libs_and_bins, settings['CMD_MAX_ARGS'], logger)
 
@@ -313,7 +313,7 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 	broken_pathes = libcheck.process_results(libcheck.search())
 
 	broken_la = extract_dependencies_from_la(la_libraries,
-		libraries+libraries_links, _libs_to_check, logger)
+		libraries.union(libraries_links), _libs_to_check, logger)
 	broken_pathes += broken_la
 
 	logger.warn(green(' * ') + bold('Assign files to packages'))

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index 4ce0e7b..9fba58a 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -130,12 +130,13 @@ def collect_libraries_from_dir(dirs, mask, logger):
 
 	# contains list of directories found
 	# allows us to reduce number of fnc calls
-	found_directories = []
-	found_files = []
-	found_symlinks = []
-	found_la_files = [] # la libraries
+	found_directories = set()
+	found_files = set()
+	found_symlinks = set()
+	found_la_files = set() # la libraries
 	symlink_pairs = []  # list of pairs symlink_id->library_id
 
+
 	for _dir in dirs:
 		if _dir in mask:
 			continue
@@ -151,43 +152,43 @@ def collect_libraries_from_dir(dirs, mask, logger):
 						#we do not want scan symlink-directories
 						pass
 					else:
-						found_directories.append(listing)
+						found_directories.add(listing)
 				elif os.path.isfile(listing):
 					if (listing.endswith('.so') or
 						listing.endswith('.a') or
 						'.so.' in listing
 						):
-						if listing in found_files or listing in found_symlinks:
-							continue
+						#if listing in found_files or listing in found_symlinks:
+							#continue
 
 						if os.path.islink(listing):
-							found_symlinks.append(listing)
-							abs_path = os.path.realpath(listing)
-							if abs_path in found_files:
-								index = found_files.index(abs_path)
-							else:
-								found_files.append(abs_path)
-								index = len(found_files)-1
-							symlink_pairs.append((len(found_symlinks)-1, index,))
+							found_symlinks.add(listing)
+							#abs_path = os.path.realpath(listing)
+							#if abs_path in found_files:
+								#index = found_files.index(abs_path)
+							#else:
+								#found_files.append(abs_path)
+								#index = len(found_files)-1
+							#symlink_pairs.append((len(found_symlinks)-1, index,))
 						else:
-							found_files.append(listing)
+							found_files.add(listing)
 						continue
 					elif listing.endswith('.la'):
 						if listing in found_la_files:
 							continue
 
-						found_la_files.append(listing)
+						found_la_files.add(listing)
 					else:
 						# sometimes there are binaries in libs' subdir,
 						# for example in nagios
 						if not os.path.islink(listing):
-							if listing in found_files or listing in found_symlinks:
-								continue
+							#if listing in found_files or listing in found_symlinks:
+								#continue
 							prv = os.stat(listing)[stat.ST_MODE]
 							if prv & stat.S_IXUSR == stat.S_IXUSR or \
 									prv & stat.S_IXGRP == stat.S_IXGRP or \
 									prv & stat.S_IXOTH == stat.S_IXOTH:
-								found_files.append(listing)
+								found_files.add(listing)
 		except Exception as ex:
 			logger.debug('\t' +
 				yellow('Exception collecting libraries: ' +
@@ -196,9 +197,9 @@ def collect_libraries_from_dir(dirs, mask, logger):
 	if found_directories:
 		_file, la_file, link, pair = \
 			collect_libraries_from_dir(found_directories, mask, logger)
-		found_files += _file
-		found_la_files += la_file
-		found_symlinks += link
+		found_files.update(_file)
+		found_la_files.update(la_file)
+		found_symlinks.update(link)
 		symlink_pairs += pair
 	return (found_files, found_la_files, found_symlinks, symlink_pairs)
 
@@ -212,8 +213,8 @@ def collect_binaries_from_dir(dirs, mask, logger):
 
 	# contains list of directories found
 	# allows us to reduce number of fnc calls
-	found_directories = []
-	found_files = []
+	found_directories = set()
+	found_files = set()
 
 	for _dir in dirs:
 		if _dir in mask:
@@ -230,7 +231,7 @@ def collect_binaries_from_dir(dirs, mask, logger):
 						#we do not want scan symlink-directories
 						pass
 					else:
-						found_directories.append(listing)
+						found_directories.add(listing)
 				elif os.path.isfile(listing):
 					# we're looking for binaries
 					# and with binaries we do not need links
@@ -240,14 +241,14 @@ def collect_binaries_from_dir(dirs, mask, logger):
 						if prv & stat.S_IXUSR == stat.S_IXUSR or \
 								prv & stat.S_IXGRP == stat.S_IXGRP or \
 								prv & stat.S_IXOTH == stat.S_IXOTH:
-							found_files.append(listing)
+							found_files.add(listing)
 		except Exception as ex:
 			logger.debug('\t' +
 				yellow('Exception during binaries collecting: '+
 				blue('%s') %str(ex)))
 
 	if found_directories:
-		found_files += collect_binaries_from_dir(found_directories, mask, logger)
+		found_files.union(collect_binaries_from_dir(found_directories, mask, logger))
 
 	return found_files
 

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 3e91058..257bc02 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -269,7 +269,7 @@ def main(settings=None, logger=None):
 			'Unmask all ebuild(s) listed above and call revdep-rebuild '
 			'again or manually emerge given packages.')
 
-	success = rebuild(logger, assigned, settings)
+	#success = rebuild(logger, assigned, settings)
 	logger.debug("rebuild return code = %i" %success)
 	return success
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-16 20:55 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-16 20:55 UTC (permalink / raw
  To: gentoo-commits

commit:     4d043024d6d94a87dd495d07f4ac645e90812d8a
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sun Feb 16 20:51:03 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Sun Feb 16 20:51:03 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=4d043024

revdep-rebuild/analyse.py: Add bin, lib, masked directories and files to the debug output.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index c118369..d844906 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -260,6 +260,19 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 				'/lib64/modules',
 			])
 		)
+		logger.debug('\tanalyse(), bin directories:')
+		for x in sorted(bin_dirs):
+			logger.debug('\t\t%s' % (x))
+		logger.debug('\tanalyse(), lib directories:')
+		for x in sorted(lib_dirs):
+			logger.debug('\t\t%s' % (x))
+		logger.debug('\tanalyse(), masked directories:')
+		for x in sorted(masked_dirs):
+			logger.debug('\t\t%s' % (x))
+		logger.debug('\tanalyse(), masked files:')
+		for x in sorted(masked_files):
+			logger.debug('\t\t%s' % (x))
+
 		ftime = current_milli_time()
 		logger.debug('\ttime to complete task: %d milliseconds' % (ftime-stime))
 		stime = current_milli_time()


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-13 22:08 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2014-02-13 22:08 UTC (permalink / raw
  To: gentoo-commits

commit:     8efbfa771e341b1aac91a098fac7d7fb89e261b5
Author:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
AuthorDate: Thu Feb 13 22:07:26 2014 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Thu Feb 13 22:07:26 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=8efbfa77

Open CONTENTS files as utf-8 to prevent UnicodeDecodeError.

---
 pym/gentoolkit/revdep_rebuild/assign.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index 2df6532..22565e8 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -7,6 +7,7 @@ Functions used for determining the package the broken lib belongs to.
 from __future__ import print_function
 
 import os
+import io
 import re
 import time
 current_milli_time = lambda: int(round(time.time() * 1000))
@@ -39,7 +40,7 @@ def assign_packages(broken, logger, settings):
 			f = pkgpath + '/CONTENTS'
 			if os.path.exists(f):
 				try:
-					with open(f, 'r') as cnt:
+					with io.open(f, 'r', encoding='utf_8') as cnt:
 						for line in cnt.readlines():
 							m = re.match('^obj (/[^ ]+)', line)
 							if m is not None:


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-12 21:12 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2014-02-12 21:12 UTC (permalink / raw
  To: gentoo-commits

commit:     0bb06b4a715d4d16be5d7983ec5aa19c6b9bd4ee
Author:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 12 21:11:25 2014 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Wed Feb 12 21:11:25 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=0bb06b4a

Update warning to indicate prerelease and where to file bugs.

---
 pym/gentoolkit/revdep_rebuild/rebuild.py | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 843f611..3e91058 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -195,11 +195,14 @@ def main(settings=None, logger=None):
 
 	#TODO: Development warning
 	logger.warn(blue(' * ') +
-		yellow('This is a development version, '
+		yellow('This is a prerelease version, '
 			'so it may not work correctly'))
 	logger.warn(blue(' * ') +
 		yellow('The original revdep-rebuild script is '
 			'installed as revdep-rebuild.sh'))
+	logger.warn(blue(' * ') +
+		yellow('Please files bugs at: '
+			'https://bugs.gentoo.org/'))
 
 	if os.getuid() != 0 and not settings['PRETEND']:
 		logger.warn(blue(' * ') +


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-12 16:20 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-12 16:20 UTC (permalink / raw
  To: gentoo-commits

commit:     cd686cb56a3d7653066d749296b455ef6692e79b
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 12 16:14:47 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Feb 12 16:14:47 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=cd686cb5

revdep_rebuild: Add task timing information to debug output.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 37 ++++++++++++++++++++++++++++----
 pym/gentoolkit/revdep_rebuild/assign.py  |  7 ++++++
 2 files changed, 40 insertions(+), 4 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 3194f48..c118369 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -6,6 +6,7 @@ from __future__ import print_function
 
 import os
 import re
+import time
 
 from portage.output import bold, blue, yellow, green
 
@@ -15,6 +16,8 @@ from .collect import (prepare_search_dirs, parse_revdep_config,
 from .assign import assign_packages
 from .cache import save_cache
 
+current_milli_time = lambda: int(round(time.time() * 1000))
+
 
 def scan_files(libs_and_bins, cmd_max_args, logger):
 	'''Calls stuff.scan() and processes the data into a dictionary
@@ -25,9 +28,16 @@ def scan_files(libs_and_bins, cmd_max_args, logger):
 	@param logger: python style Logging function to use for output.
 	@returns dict: {bit_length: {soname: {filename: set(needed)}}}
 	'''
+	stime = current_milli_time()
 	scanned_files = {} # {bits: {soname: (filename, needed), ...}, ...}
-	for line in scan(['-nBF', '%F %f %S %n %M'],
-					 libs_and_bins, cmd_max_args, logger):
+	lines = scan(['-nBF', '%F %f %S %n %M'],
+				 libs_and_bins, cmd_max_args, logger)
+	ftime = current_milli_time()
+	logger.debug("\tscan_files(); total time to get scanelf data is "
+		"%d milliseconds" % (ftime-stime))
+	stime = current_milli_time()
+	count = 0
+	for line in lines:
 		parts = line.split(' ')
 		if len(parts) < 5:
 			logger.error("\tscan_files(); error processing lib: %s" % line)
@@ -46,9 +56,12 @@ def scan_files(libs_and_bins, cmd_max_args, logger):
 			scanned_files[bits][soname] = {}
 		if filename not in scanned_files[bits][soname]:
 			scanned_files[bits][soname][filename] = set(needed)
+			count += 1
 		else:
 			scanned_files[bits][soname][filename].update(needed)
-
+	ftime = current_milli_time()
+	logger.debug("\tscan_files(); total filenames found: %d in %d milliseconds"
+		% (count, ftime-stime))
 	return scanned_files
 
 
@@ -160,6 +173,8 @@ class LibCheck(object):
 				scan_files(). Defaults to the class instance of scanned_files
 		@ returns: dict: {bit_length: {found_lib: set(file_paths)}}.
 		'''
+		stime = current_milli_time()
+		count = 0
 		if not scanned_files:
 			scanned_files = self.scanned_files
 		found_libs = {}
@@ -175,8 +190,13 @@ class LibCheck(object):
 							except KeyError:
 								try:
 									found_libs[bits][l] = set([filename])
+									count += 1
 								except KeyError:
 									found_libs = {bits: {l: set([filename])}}
+									count += 1
+		ftime = current_milli_time()
+		self.logger.debug("\tLibCheck.search(); total libs found: %d in %d milliseconds"
+			% (count, ftime-stime))
 		return found_libs
 
 
@@ -188,6 +208,7 @@ class LibCheck(object):
 				scan_files().  Defaults to the class instance of scanned_files
 		@ returns: list: of filepaths from teh search results.
 		'''
+		stime = current_milli_time()
 		if not scanned_files:
 			scanned_files = self.scanned_files
 		found_pathes = []
@@ -197,6 +218,9 @@ class LibCheck(object):
 				for fp in sorted(files):
 					self.logger.info('\t' +yellow('* ') + fp)
 					found_pathes.append(fp)
+		ftime = current_milli_time()
+		self.logger.debug("\tLibCheck.process_results(); total filepaths found: "
+			"%d in %d milliseconds" % (len(found_pathes), ftime-stime))
 		return found_pathes
 
 
@@ -220,6 +244,7 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 		#TODO: add partial cache (for ex. only libraries)
 		# when found for some reason
 
+		stime = current_milli_time()
 		logger.warn(green(' * ') +
 			bold('Collecting system binaries and libraries'))
 		bin_dirs, lib_dirs = prepare_search_dirs(logger, settings)
@@ -235,12 +260,16 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 				'/lib64/modules',
 			])
 		)
-
+		ftime = current_milli_time()
+		logger.debug('\ttime to complete task: %d milliseconds' % (ftime-stime))
+		stime = current_milli_time()
 		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)
+		ftime = current_milli_time()
+		logger.debug('\ttime to complete task: %d milliseconds' % (ftime-stime))
 
 		if settings['USE_TMP_FILES']:
 			save_cache(logger=logger,

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index 40d04b7..2df6532 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -8,6 +8,8 @@ from __future__ import print_function
 
 import os
 import re
+import time
+current_milli_time = lambda: int(round(time.time() * 1000))
 
 import portage
 from portage import portdb
@@ -23,6 +25,7 @@ def assign_packages(broken, logger, settings):
 	''' Finds and returns packages that owns files placed in broken.
 		Broken is list of files
 	'''
+	stime = current_milli_time()
 	assigned_pkgs = set()
 	assigned_filenames = set()
 	for group in os.listdir(settings['PKG_DIR']):
@@ -53,6 +56,10 @@ def assign_packages(broken, logger, settings):
 
 	broken_filenames = set(broken)
 	orphaned = broken_filenames.difference(assigned_filenames)
+	ftime = current_milli_time()
+	logger.debug("\tassign_packages(); assigned "
+		"%d packages, %d orphans in %d milliseconds"
+		% (len(assigned_pkgs), len(orphaned), ftime-stime))
 
 	return (assigned_pkgs, orphaned)
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-12 16:20 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-12 16:20 UTC (permalink / raw
  To: gentoo-commits

commit:     456fd8bbc43d877b1df6f8fa0fca97cccfa4fd2c
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 12 16:15:39 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Feb 12 16:15:39 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=456fd8bb

revdep_rebuild/collect.py: Minor grmmar correction.

---
 pym/gentoolkit/revdep_rebuild/collect.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index c4c7a40..4ce0e7b 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -190,7 +190,7 @@ def collect_libraries_from_dir(dirs, mask, logger):
 								found_files.append(listing)
 		except Exception as ex:
 			logger.debug('\t' +
-				yellow('Exception during collecting libraries: ' +
+				yellow('Exception collecting libraries: ' +
 				blue('%s')  %str(ex)))
 
 	if found_directories:


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-12 10:42 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-12 10:42 UTC (permalink / raw
  To: gentoo-commits

commit:     2b2c74c74a042ce20acd74a6f03b1af026e56ffa
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 12 10:37:07 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Feb 12 10:37:07 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=2b2c74c7

revdep_rebuild/assign.py: Add missed green import

---
 pym/gentoolkit/revdep_rebuild/assign.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index 5704974..40d04b7 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -11,7 +11,7 @@ import re
 
 import portage
 from portage import portdb
-from portage.output import bold, red, yellow
+from portage.output import bold, red, yellow, green
 
 # Make all str conversions unicode
 try:


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-12 10:22 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-12 10:22 UTC (permalink / raw
  To: gentoo-commits

commit:     35a2f04842ceb544dcd6685b5ef87da5b5860c8a
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 12 10:11:25 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Feb 12 10:11:25 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=35a2f048

revdep_rebuild/rebuild.py: Add library search message type for orphaned files.

---
 pym/gentoolkit/revdep_rebuild/rebuild.py | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 37909b1..843f611 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -241,6 +241,12 @@ def main(settings=None, logger=None):
 	elif orphaned:
 		# blank line for beter visibility of the following lines
 		logger.warn('')
+		if settings['library']:
+			logger.warn(red(' !!! Dependant orphaned files: ') +
+				bold('No installed package was found for the following:'))
+		else:
+			logger.warn(red(' !!! Broken orphaned files: ') +
+				bold('No installed package was found for the following:'))
 		for filename in orphaned:
 			logger.warn(red('\t* ') + filename)
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-12 10:22 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-12 10:22 UTC (permalink / raw
  To: gentoo-commits

commit:     ec50e457e860d12faeb41563ff47ca31e14f1541
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 12 10:12:26 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Feb 12 10:12:26 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=ec50e457

revdep_rebuild/analyse.py: Add docstring to scan_files()

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index b5daff9..3194f48 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -17,7 +17,14 @@ from .cache import save_cache
 
 
 def scan_files(libs_and_bins, cmd_max_args, logger):
-
+	'''Calls stuff.scan() and processes the data into a dictionary
+	of scanned files information.
+
+	@param libs_and_bins: set of libraries and binaries to scan for lib links.
+	@param cmd_max_args: maximum number of files to pass into scanelf calls.
+	@param logger: python style Logging function to use for output.
+	@returns dict: {bit_length: {soname: {filename: set(needed)}}}
+	'''
 	scanned_files = {} # {bits: {soname: (filename, needed), ...}, ...}
 	for line in scan(['-nBF', '%F %f %S %n %M'],
 					 libs_and_bins, cmd_max_args, logger):


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-12 10:22 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-12 10:22 UTC (permalink / raw
  To: gentoo-commits

commit:     d41016eee6a5d40fc77e283a7d49c950d8a171f7
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 12 10:09:36 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Feb 12 10:09:36 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=d41016ee

revdep_rebuild: Unify debug and detail output for a more consistent look.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 13 +++++++------
 pym/gentoolkit/revdep_rebuild/assign.py  | 13 +++++++------
 pym/gentoolkit/revdep_rebuild/cache.py   |  4 ++--
 pym/gentoolkit/revdep_rebuild/collect.py | 10 +++++-----
 pym/gentoolkit/revdep_rebuild/rebuild.py | 10 +++++-----
 pym/gentoolkit/revdep_rebuild/stuff.py   |  4 ++--
 6 files changed, 28 insertions(+), 26 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index daeb4fc..b5daff9 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -23,8 +23,8 @@ def scan_files(libs_and_bins, cmd_max_args, logger):
 					 libs_and_bins, cmd_max_args, logger):
 		parts = line.split(' ')
 		if len(parts) < 5:
-			logger.error("scan_files(); error processing lib: %s" % line)
-			logger.error("scan_files(); parts = %s" % str(parts))
+			logger.error("\tscan_files(); error processing lib: %s" % line)
+			logger.error("\tscan_files(); parts = %s" % str(parts))
 			continue
 		filename, sfilename, soname, needed, bits = parts
 		filename = os.path.realpath(filename)
@@ -86,7 +86,7 @@ def extract_dependencies_from_la(la, libraries, to_check, logger):
 								if not _break:
 									continue
 
-							logger.info(yellow(' * ') + _file +
+							logger.info('\t' + yellow(' * ') + _file +
 								' is broken (requires: ' + bold(el)+')')
 							broken.append(_file)
 	return broken
@@ -244,7 +244,7 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 			)
 
 
-	logger.debug('      analyse(), Found %i libraries (+%i symlinks) and %i binaries' %
+	logger.debug('\tanalyse(), Found %i libraries (+%i symlinks) and %i binaries' %
 		(len(libraries), len(libraries_links), len(binaries))
 	)
 	logger.info(green(' * ') + bold('Scanning files'))
@@ -254,8 +254,9 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 	scanned_files = scan_files(libs_and_bins, settings['CMD_MAX_ARGS'], logger)
 
 	logger.warn(green(' * ') + bold('Checking dynamic linking consistency'))
-	logger.debug('      analyse(), Searching for %i libs, bins within %i libraries and links' %
-		(len(libs_and_bins), len(libraries)+len(libraries_links))
+	logger.debug(
+		'\tanalyse(), Searching for %i libs, bins within %i libraries and links'
+		% (len(libs_and_bins), len(libraries)+len(libraries_links))
 	)
 
 	libcheck = LibCheck(scanned_files, logger, _libs_to_check)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index 8575532..5704974 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -45,7 +45,8 @@ def assign_packages(broken, logger, settings):
 									found = group+'/'+pkg
 									assigned_pkgs.add(found)
 									assigned_filenames.add(m)
-									logger.info('\t' + m + ' -> ' + bold(found))
+									logger.info('\t' + green('* ') + m +
+												' -> ' + bold(found))
 				except Exception as e:
 					logger.warn(red(' !! Failed to read ' + f))
 					logger.warn(red(' !! Error was:' + str(e)))
@@ -67,20 +68,20 @@ def get_best_match(cpv, cp, logger):
 	"""
 
 	slot = portage.db[portage.root]["vartree"].dbapi.aux_get(cpv, ["SLOT"])
-	logger.warn(yellow('Warning: ebuild "' + cpv + '" not found.'))
-	logger.info('Looking for %s:%s' %(cp, slot))
+	logger.warn('\t' + yellow('Warning: ebuild "' + cpv + '" not found.'))
+	logger.info('\tLooking for %s:%s' %(cp, slot))
 	try:
 		match = portdb.match('%s:%s' %(cp, slot))
 	except portage.exception.InvalidAtom:
 		match = None
 
 	if not match:
-		logger.warn(red('!!') + ' ' + yellow(
+		logger.warn('\t' + red('!!') + ' ' + yellow(
 			'Could not find ebuild for %s:%s' %(cp, slot)))
 		slot = ['']
 		match = portdb.match(cp)
 		if not match:
-			logger.warn(red('!!') + ' ' +
+			logger.warn('\t' + red('!!') + ' ' +
 				yellow('Could not find ebuild for ' + cp))
 	return match, slot
 
@@ -100,7 +101,7 @@ def get_slotted_cps(cpvs, logger):
 		except KeyError:
 			match, slot = get_best_match(cpv, cp, logger)
 			if not match:
-				logger.warn(red("Installed package: "
+				logger.warn('\t' + red("Installed package: "
 					"%s is no longer available" %cp))
 				continue
 

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index 862638d..49ddc10 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -62,7 +62,7 @@ def save_cache(logger, to_save={}, temp_path=DEFAULTS['DEFAULT_TMP_DIR']):
 				_file.write(line + '\n')
 			_file.close()
 	except Exception as ex:
-		logger.warn(red('Could not save cache: %s' %str(ex)))
+		logger.warn('\t' + red('Could not save cache: %s' %str(ex)))
 
 
 
@@ -90,7 +90,7 @@ def check_temp_files(temp_path=DEFAULTS['DEFAULT_TMP_DIR'], max_delay=3600,
 		_file .close()
 	except Exception as ex:
 		if logger:
-			logger.debug("check_temp_files(); error retrieving"
+			logger.debug("\tcheck_temp_files(); error retrieving"
 				" timestamp_path:\n" + str(ex))
 		timestamp = 0
 		return False

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index a044398..c4c7a40 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -51,7 +51,7 @@ def parse_conf(conf_file, visited=None, logger=None):
 					else:
 						lib_dirs.add(line)
 		except EnvironmentError:
-			logger.warn(yellow('Error when parsing file %s' %conf))
+			logger.warn('\t' + yellow('Error when parsing file %s' %conf))
 
 	if visited is None:
 		visited = set()
@@ -81,7 +81,7 @@ def prepare_search_dirs(logger, settings):
 			if match is not None:
 				bin_dirs.update(set(match.group(2).split(':')))
 	#except EnvironmentError:
-		#logger.debug(yellow('Could not open file %s' % f))
+		#logger.debug('\t' + yellow('Could not open file %s' % f))
 
 	lib_dirs = parse_conf(settings['DEFAULT_LD_FILE'], logger=logger)
 	return (bin_dirs, lib_dirs)
@@ -189,8 +189,8 @@ def collect_libraries_from_dir(dirs, mask, logger):
 									prv & stat.S_IXOTH == stat.S_IXOTH:
 								found_files.append(listing)
 		except Exception as ex:
-			logger.debug(
-				yellow('      Exception during collecting libraries: ' +
+			logger.debug('\t' +
+				yellow('Exception during collecting libraries: ' +
 				blue('%s')  %str(ex)))
 
 	if found_directories:
@@ -242,7 +242,7 @@ def collect_binaries_from_dir(dirs, mask, logger):
 								prv & stat.S_IXOTH == stat.S_IXOTH:
 							found_files.append(listing)
 		except Exception as ex:
-			logger.debug(
+			logger.debug('\t' +
 				yellow('Exception during binaries collecting: '+
 				blue('%s') %str(ex)))
 

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 21ede45..37909b1 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -217,6 +217,8 @@ def main(settings=None, logger=None):
 			'If you\'re sure, you can add --no-pretend to revdep options')
 		settings['PRETEND'] = True
 
+	logger.debug("\tmain(), _libs_to_check = %s" % str(_libs_to_check))
+
 	if settings['USE_TMP_FILES'] \
 			and check_temp_files(settings['DEFAULT_TMP_DIR'], logger=logger):
 		libraries, la_libraries, libraries_links, binaries = read_cache(
@@ -239,24 +241,22 @@ def main(settings=None, logger=None):
 	elif orphaned:
 		# blank line for beter visibility of the following lines
 		logger.warn('')
-		logger.warn(red('!!! Broken orphaned files: ') +
-			bold('No installed package was found for the following:'))
 		for filename in orphaned:
-			logger.warn(red(' * ') + filename)
+			logger.warn(red('\t* ') + filename)
 
 	has_masked = False
 	tmp = []
 	for ebuild in assigned:
 		if get_masking_status(ebuild):
 			has_masked = True
-			logger.warn('!!! ' + red('All ebuilds that could satisfy: ') +
+			logger.warn(' !!! ' + red('All ebuilds that could satisfy: ') +
 				green(ebuild) + red(' have been masked'))
 		else:
 			tmp.append(ebuild)
 	assigned = tmp
 
 	if has_masked:
-		logger.info(red(' * ') +
+		logger.info('\t' + red('* ') +
 			'Unmask all ebuild(s) listed above and call revdep-rebuild '
 			'again or manually emerge given packages.')
 

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index 0608702..e0fc7b5 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -36,7 +36,7 @@ def scan(params, files, max_args, logger):
 
 		@return scanelf output (joined if was called several times)
 	'''
-	logger.debug("      scan(), scanelf params = %s, # files: %d" % (params, len(files)))
+	logger.debug("\tscan(), scanelf params = %s, # files: %d" % (params, len(files)))
 	# change it to a sorted list for group processing
 	_files = sorted(files)
 	out = []
@@ -46,7 +46,7 @@ def scan(params, files, max_args, logger):
 		output = [x for x in output if x != '']
 		if output:
 			out.extend(output)
-	logger.debug("      scan(), final output length: %d" % len(out))
+	logger.debug("\tscan(), final output length: %d" % len(out))
 	return out
 
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-12 10:22 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-12 10:22 UTC (permalink / raw
  To: gentoo-commits

commit:     da09ff6866ac6a7425996af920d716d8e2ce5d0b
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 12 10:06:51 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Feb 12 10:06:51 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=da09ff68

revdep_rebuild/analyse.py: Create LibCheck class for searching & processing the data.

Move find_broken2() and main_checks2() into the new class.
Rename them to search(), process_results() to better reflect their roles.
Enable the class to do both broken libs searches and specified lib searches.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 128 ++++++++++++++++++++++++-------
 1 file changed, 100 insertions(+), 28 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index fb75bc8..daeb4fc 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -92,34 +92,105 @@ def extract_dependencies_from_la(la, libraries, to_check, logger):
 	return broken
 
 
-def find_broken2(scanned_files, logger):
-	broken_libs = {}
-	for bits, libs in scanned_files.items():
-		logger.debug('find_broken2(), Checking for %s bit libs' % bits)
-		alllibs = '|'.join(sorted(libs)) + '|'
-		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].add(filename)
-						except KeyError:
+class LibCheck(object):
+	def __init__(self, scanned_files, logger, searchlibs=None):
+		'''LibCheck init function.
+
+		@param scanned_files: optional dictionary if the type created by
+				scan_files().  Defaults to the class instance of scanned_files
+		@param logger: python style Logging function to use for output.
+		@param searchlibs: optional set() of libraries to search for. If defined
+				it toggles several settings to configure this class for
+				a target search rather than a broken libs search.
+		'''
+		self.scanned_files = scanned_files
+		self.logger = logger
+		self.searchlibs = searchlibs
+		if searchlibs:
+			self.smsg = '\tLibCheck.search(), Checking for %s bit dependants'
+			self.pmsg = yellow(" * ") + 'Files that depend on: %s (%s bits)'
+			self.alllibs = '|'.join(sorted(searchlibs)) + '|'
+			self.setlibs = self._lamda
+			self.check = self._checkforlib
+		else:
+			self.smsg = '\tLibCheck.search(), Checking for broken %s bit libs'
+			self.pmsg = green(' * ') + bold('Broken files that requires:') + ' %s (%s bits)'
+			self.setlibs = self._setlibs
+			self.check = self._checkbroken
+			self.alllibs = None
+
+
+	@staticmethod
+	def _lamda(l):
+		'''Internal function.  Use the class's setlibs variable'''
+		pass
+
+
+	def _setlibs(self, l):
+		'''Internal function.  Use the class's setlibs variable'''
+		self.alllibs = '|'.join(sorted(l)) + '|'
+
+
+	def _checkforlib(self, l):
+		'''Internal function.  Use the class's check variable'''
+		if l:
+			return l+'|' in self.alllibs
+		return False
+
+
+	def _checkbroken(self, l):
+		'''Internal function.  Use the class's check variable'''
+		if l:
+			return l+'|' not in self.alllibs
+		return False
+
+
+	def search(self, scanned_files=None):
+		'''Searches the scanned files for broken lib links
+		or for libs to search for
+
+		@param scanned_files: optional dictionary if the type created by
+				scan_files(). Defaults to the class instance of scanned_files
+		@ returns: dict: {bit_length: {found_lib: set(file_paths)}}.
+		'''
+		if not scanned_files:
+			scanned_files = self.scanned_files
+		found_libs = {}
+		for bits, libs in scanned_files.items():
+			self.setlibs(libs)
+			self.logger.debug(self.smsg % bits)
+			for soname, filepaths in libs.items():
+				for filename, needed in filepaths.items():
+					for l in needed:
+						if self.check(l):
 							try:
-								broken_libs[bits][l] = set([filename])
+								found_libs[bits][l].add(filename)
 							except KeyError:
-								broken_libs = {bits: {l: set([filename])}}
-	return broken_libs
-
-
-def main_checks2(broken, scanned_files, logger):
-	broken_pathes = []
-	for bits, _broken in broken.items():
-		for lib, files in _broken.items():
-			logger.info('Broken files that requires: %s (%s bits)' % (bold(lib), bits))
-			for fp in sorted(files):
-				logger.info(yellow(' * ') + fp)
-				broken_pathes.append(fp)
-	return broken_pathes
+								try:
+									found_libs[bits][l] = set([filename])
+								except KeyError:
+									found_libs = {bits: {l: set([filename])}}
+		return found_libs
+
+
+	def process_results(self, found_libs, scanned_files=None):
+		'''Processes the search results, logs the files found
+
+		@param found_libs: dictionary of the type returned by search()
+		@param scanned_files: optional dictionary if the type created by
+				scan_files().  Defaults to the class instance of scanned_files
+		@ returns: list: of filepaths from teh search results.
+		'''
+		if not scanned_files:
+			scanned_files = self.scanned_files
+		found_pathes = []
+		for bits, found in found_libs.items():
+			for lib, files in found.items():
+				self.logger.info(self.pmsg  % (bold(lib), bits))
+				for fp in sorted(files):
+					self.logger.info('\t' +yellow('* ') + fp)
+					found_pathes.append(fp)
+		return found_pathes
 
 
 def analyse(settings, logger, libraries=None, la_libraries=None,
@@ -187,8 +258,9 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 		(len(libs_and_bins), len(libraries)+len(libraries_links))
 	)
 
-	broken = find_broken2(scanned_files, logger)
-	broken_pathes = main_checks2(broken, scanned_files, logger)
+	libcheck = LibCheck(scanned_files, logger, _libs_to_check)
+
+	broken_pathes = libcheck.process_results(libcheck.search())
 
 	broken_la = extract_dependencies_from_la(la_libraries,
 		libraries+libraries_links, _libs_to_check, logger)


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11 19:39 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11 19:39 UTC (permalink / raw
  To: gentoo-commits

commit:     392a3de48db2d7b56a0919603f5c6e7f80970551
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 11 19:14:04 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 19:14:04 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=392a3de4

recdep_rebuild: Python 3 fixes.

---
 pym/gentoolkit/revdep_rebuild/cache.py   | 4 ++--
 pym/gentoolkit/revdep_rebuild/collect.py | 9 ++++++++-
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index 06f4c67..862638d 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -28,7 +28,7 @@ def read_cache(temp_path=DEFAULTS['DEFAULT_TMP_DIR']):
 		'binaries':[]
 		}
 	try:
-		for key,val in ret.iteritems():
+		for key,val in ret.items():
 			_file = open(os.path.join(temp_path, key))
 			for line in _file.readlines():
 				val.append(line.strip())
@@ -56,7 +56,7 @@ def save_cache(logger, to_save={}, temp_path=DEFAULTS['DEFAULT_TMP_DIR']):
 		_file.write(str(int(time.time())))
 		_file.close()
 
-		for key,val in to_save.iteritems():
+		for key,val in to_save.items():
 			_file = open(os.path.join(temp_path, key), 'w')
 			for line in val:
 				_file.write(line + '\n')

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index 55a244c..a044398 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -8,11 +8,18 @@ import re
 import os
 import glob
 import stat
+import sys
 
 import portage
 from portage.output import blue, yellow
 
 
+if sys.hexversion < 0x3000000:
+	_basestring = basestring
+else:
+	_basestring = str
+
+
 def parse_conf(conf_file, visited=None, logger=None):
 	''' Parses supplied conf_file for libraries pathes.
 		conf_file is file or files to parse
@@ -21,7 +28,7 @@ def parse_conf(conf_file, visited=None, logger=None):
 	lib_dirs = set()
 	to_parse = set()
 
-	if isinstance(conf_file, basestring):
+	if isinstance(conf_file, _basestring):
 		conf_file = [conf_file]
 
 	for conf in conf_file:


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11 18:49 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11 18:49 UTC (permalink / raw
  To: gentoo-commits

commit:     bf0c591a818d6ddc13b3bb7929f924c529482bed
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 11 18:31:13 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 18:36:11 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=bf0c591a

revdep_rebuild/assign.py: Remove dead code.

---
 pym/gentoolkit/revdep_rebuild/assign.py | 24 ------------------------
 1 file changed, 24 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index fb2058c..fc10187 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -12,7 +12,6 @@ import re
 import portage
 from portage import portdb
 from portage.output import bold, red, yellow
-#from gentoolkit.package import Package
 
 # Make all str conversions unicode
 try:
@@ -51,29 +50,6 @@ def assign_packages(broken, logger, settings):
 
 	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


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11 18:49 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11 18:49 UTC (permalink / raw
  To: gentoo-commits

commit:     c5db713779edc9483b8ec30c23338d244a3d406f
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 11 18:35:31 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 18:36:25 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=c5db7137

revdep_rebuild/analyse.py: Cleanup some debug code, remove a blank line.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 8b6bb23..fb75bc8 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -45,7 +45,6 @@ def scan_files(libs_and_bins, cmd_max_args, logger):
 	return scanned_files
 
 
-
 def extract_dependencies_from_la(la, libraries, to_check, logger):
 	broken = []
 
@@ -98,8 +97,6 @@ def find_broken2(scanned_files, logger):
 	for bits, libs in scanned_files.items():
 		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:


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11 18:49 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11 18:49 UTC (permalink / raw
  To: gentoo-commits

commit:     fe9ab48e320da2f78325b493bf7b41c8799cb019
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 11 18:33:45 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 18:36:25 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=fe9ab48e

revdep_rebuild: Track and report broken orphaned files.

---
 pym/gentoolkit/revdep_rebuild/assign.py  | 11 ++++++++---
 pym/gentoolkit/revdep_rebuild/rebuild.py | 13 ++++++++++---
 2 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index fc10187..8575532 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -23,7 +23,8 @@ def assign_packages(broken, logger, settings):
 	''' Finds and returns packages that owns files placed in broken.
 		Broken is list of files
 	'''
-	assigned = set()
+	assigned_pkgs = set()
+	assigned_filenames = set()
 	for group in os.listdir(settings['PKG_DIR']):
 		grppath = settings['PKG_DIR'] + group
 		if not os.path.isdir(grppath):
@@ -42,13 +43,17 @@ def assign_packages(broken, logger, settings):
 								m = m.group(1)
 								if m in broken:
 									found = group+'/'+pkg
-									assigned.add(found)
+									assigned_pkgs.add(found)
+									assigned_filenames.add(m)
 									logger.info('\t' + m + ' -> ' + bold(found))
 				except Exception as e:
 					logger.warn(red(' !! Failed to read ' + f))
 					logger.warn(red(' !! Error was:' + str(e)))
 
-	return assigned
+	broken_filenames = set(broken)
+	orphaned = broken_filenames.difference(assigned_filenames)
+
+	return (assigned_pkgs, orphaned)
 
 
 def get_best_match(cpv, cp, logger):

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 81e2b34..21ede45 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -221,7 +221,7 @@ def main(settings=None, logger=None):
 			and check_temp_files(settings['DEFAULT_TMP_DIR'], logger=logger):
 		libraries, la_libraries, libraries_links, binaries = read_cache(
 			settings['DEFAULT_TMP_DIR'])
-		assigned = analyse(
+		assigned, orphaned = analyse(
 			settings=settings,
 			logger=logger,
 			libraries=libraries,
@@ -230,12 +230,19 @@ def main(settings=None, logger=None):
 			binaries=binaries,
 			_libs_to_check=_libs_to_check)
 	else:
-		assigned = analyse(settings, logger, _libs_to_check=_libs_to_check)
+		assigned, orphaned = analyse(settings, logger, _libs_to_check=_libs_to_check)
 
-	if not assigned:
+	if not assigned and not orphaned:
 		logger.warn('\n' + bold('Your system is consistent'))
 		# return the correct exit code
 		return 0
+	elif orphaned:
+		# blank line for beter visibility of the following lines
+		logger.warn('')
+		logger.warn(red('!!! Broken orphaned files: ') +
+			bold('No installed package was found for the following:'))
+		for filename in orphaned:
+			logger.warn(red(' * ') + filename)
 
 	has_masked = False
 	tmp = []


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11 18:49 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11 18:49 UTC (permalink / raw
  To: gentoo-commits

commit:     8ba9173f9c082a432a965621b4282e5bbf510e47
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 11 18:21:20 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 18:21:20 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=8ba9173f

Fix incorrect reporting of some broken files, pkgs.

Fixes previous commit.
commit: cfeb731d0dc40988cf11f6c225e7082f563d5b18
Brian Dolbec <dolsen <AT> gentoo.org> (Tue 11 Feb 2014 12:08:38 AM PST)
revdep_rebuild/analyse.py: Fix the bug that caused some breakage to not be detected.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 8b64835..c416c3c 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -106,28 +106,23 @@ def find_broken2(scanned_files, logger):
 				for l in needed:
 					if l+'|' not in alllibs:
 						try:
-							broken_libs[bits][l].add(soname)
+							broken_libs[bits][l].add(filename)
 						except KeyError:
 							try:
-								broken_libs[bits][l] = set([soname])
+								broken_libs[bits][l] = set([filename])
 							except KeyError:
-								broken_libs = {bits: {l: set([soname])}}
-						#print("BROKEN:", soname, l)
-
+								broken_libs = {bits: {l: set([filename])}}
 	return broken_libs
 
 
 def main_checks2(broken, scanned_files, logger):
 	broken_pathes = []
 	for bits, _broken in broken.items():
-		for lib, needed in _broken.items():
-			#print("lib, needed:", lib, needed)
+		for lib, files in _broken.items():
 			logger.info('Broken files that requires: %s (%s bits)' % (bold(lib), bits))
-			for n in needed:
-				#print(sorted(needed))
-				for fp in sorted(scanned_files[bits][n]):
-					logger.info(yellow(' * ') + n + ' (' + fp + ')')
-					broken_pathes.append(fp)
+			for fp in sorted(files):
+				logger.info(yellow(' * ') + fp)
+				broken_pathes.append(fp)
 	return broken_pathes
 
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11 18:49 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11 18:49 UTC (permalink / raw
  To: gentoo-commits

commit:     a731b473410c133c9f6b9f5ecf86c00b8cc51669
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 11 18:27:41 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 18:27:41 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=a731b473

revdep_rebuild: Minor indent changes for debug messages, improves output.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 4 ++--
 pym/gentoolkit/revdep_rebuild/collect.py | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index c774d9f..8b6bb23 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -176,7 +176,7 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 			)
 
 
-	logger.debug('analyse(), Found %i libraries (+%i symlinks) and %i binaries' %
+	logger.debug('      analyse(), Found %i libraries (+%i symlinks) and %i binaries' %
 		(len(libraries), len(libraries_links), len(binaries))
 	)
 	logger.info(green(' * ') + bold('Scanning files'))
@@ -186,7 +186,7 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 	scanned_files = scan_files(libs_and_bins, settings['CMD_MAX_ARGS'], logger)
 
 	logger.warn(green(' * ') + bold('Checking dynamic linking consistency'))
-	logger.debug('analyse(), Searching for %i libs, bins within %i libraries and links' %
+	logger.debug('      analyse(), Searching for %i libs, bins within %i libraries and links' %
 		(len(libs_and_bins), len(libraries)+len(libraries_links))
 	)
 

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index b1d1eeb..55a244c 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -183,7 +183,7 @@ def collect_libraries_from_dir(dirs, mask, logger):
 								found_files.append(listing)
 		except Exception as ex:
 			logger.debug(
-				yellow('Exception during collecting libraries: ' +
+				yellow('      Exception during collecting libraries: ' +
 				blue('%s')  %str(ex)))
 
 	if found_directories:


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11 18:49 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11 18:49 UTC (permalink / raw
  To: gentoo-commits

commit:     d9f4c8c06b9536de14d5b0d88c32957755df6108
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 11 18:24:16 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 18:24:16 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=d9f4c8c0

revdep_rebuild: Add logger parameter to scan_files(), scan()

Convert earlier debug print()s to logging.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 13 ++++++-------
 pym/gentoolkit/revdep_rebuild/stuff.py   |  8 ++++----
 2 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index c416c3c..c774d9f 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -16,14 +16,15 @@ from .assign import assign_packages
 from .cache import save_cache
 
 
-def scan_files(libs_and_bins, cmd_max_args):
+def scan_files(libs_and_bins, cmd_max_args, logger):
 
 	scanned_files = {} # {bits: {soname: (filename, needed), ...}, ...}
-	for line in scan(['-nBF', '%F %f %S %n %M'], libs_and_bins, cmd_max_args):
+	for line in scan(['-nBF', '%F %f %S %n %M'],
+					 libs_and_bins, cmd_max_args, logger):
 		parts = line.split(' ')
 		if len(parts) < 5:
-			print("scan_files(); error processing lib: %s" % line)
-			print("scan_files(); parts = %s" % str(parts))
+			logger.error("scan_files(); error processing lib: %s" % line)
+			logger.error("scan_files(); parts = %s" % str(parts))
 			continue
 		filename, sfilename, soname, needed, bits = parts
 		filename = os.path.realpath(filename)
@@ -41,8 +42,6 @@ def scan_files(libs_and_bins, cmd_max_args):
 		else:
 			scanned_files[bits][soname][filename].update(needed)
 
-	#print("scanned_files['64'] =")
-	#print(scanned_files['64'])
 	return scanned_files
 
 
@@ -184,7 +183,7 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 
 	libs_and_bins = set(libraries + binaries)
 
-	scanned_files = scan_files(libs_and_bins, settings['CMD_MAX_ARGS'])
+	scanned_files = scan_files(libs_and_bins, settings['CMD_MAX_ARGS'], logger)
 
 	logger.warn(green(' * ') + bold('Checking dynamic linking consistency'))
 	logger.debug('analyse(), Searching for %i libs, bins within %i libraries and links' %

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index 7f8c574..0608702 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -24,7 +24,7 @@ def call_program(args):
 	return str(stdout)
 
 
-def scan(params, files, max_args):
+def scan(params, files, max_args, logger):
 	''' Calls scanelf with given params and files to scan.
 		@param params is list of parameters that should
 			be passed into scanelf app.
@@ -36,8 +36,8 @@ def scan(params, files, max_args):
 
 		@return scanelf output (joined if was called several times)
 	'''
-	#print("SCAN(), params = ", params, len(files))
-	# change it to a list for group processing
+	logger.debug("      scan(), scanelf params = %s, # files: %d" % (params, len(files)))
+	# change it to a sorted list for group processing
 	_files = sorted(files)
 	out = []
 	for i in range(0, len(_files), max_args):
@@ -46,7 +46,7 @@ def scan(params, files, max_args):
 		output = [x for x in output if x != '']
 		if output:
 			out.extend(output)
-	#print("SCAN(), final output length:", len(out))
+	logger.debug("      scan(), final output length: %d" % len(out))
 	return out
 
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     f6a7b7cad3df68cc62a2784f7f922adaa91848f2
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 11 08:00:38 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:09:23 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=f6a7b7ca

revdep_rebuild/stuff.py: Sort the set of files to scan.

Comment out the debug print()s.
Sorting was also a double check that the new scan_files() processing was correct.
It previously failed to find the same breakage when the list was sorted.

---
 pym/gentoolkit/revdep_rebuild/stuff.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index 817396e..7f8c574 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -36,9 +36,9 @@ def scan(params, files, max_args):
 
 		@return scanelf output (joined if was called several times)
 	'''
-	print("SCAN(), params = ", params, len(files))
-	# change it to a sorted list for group processing
-	_files = list(files)
+	#print("SCAN(), params = ", params, len(files))
+	# change it to a list for group processing
+	_files = sorted(files)
 	out = []
 	for i in range(0, len(_files), max_args):
 		output = call_program(
@@ -46,7 +46,7 @@ def scan(params, files, max_args):
 		output = [x for x in output if x != '']
 		if output:
 			out.extend(output)
-	print("SCAN(), final output length:", len(out))
+	#print("SCAN(), final output length:", len(out))
 	return out
 
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     f8fa6f768bfd8b1682724dc5f0ee2bf41bb1d5e1
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 11 07:35:50 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:09:22 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=f8fa6f76

revdep_rebuild/collect.py: Fix unknown variables.

---
 pym/gentoolkit/revdep_rebuild/collect.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index 281c156..6057080 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -264,8 +264,8 @@ if __name__ == '__main__':
 	)
 
 	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)
+		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.' %(


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     5ed37394edd07ed052f7da897c6112324385d510
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 11 07:34:32 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:09:22 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=5ed37394

revdep_rebuild/analyse.py: Fix a long line.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index cdbf537..8b64835 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -199,7 +199,8 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 	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_la = extract_dependencies_from_la(la_libraries,
+		libraries+libraries_links, _libs_to_check, logger)
 	broken_pathes += broken_la
 
 	logger.warn(green(' * ') + bold('Assign files to packages'))


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     283a06f819c669268bbc06c5f7f4e640566cf2dc
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 11 07:36:34 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:09:22 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=283a06f8

revdep_rebuild/collect.py: remove some blank lines.

---
 pym/gentoolkit/revdep_rebuild/collect.py | 2 --
 1 file changed, 2 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index 6057080..b1d1eeb 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -186,7 +186,6 @@ def collect_libraries_from_dir(dirs, mask, logger):
 				yellow('Exception during collecting libraries: ' +
 				blue('%s')  %str(ex)))
 
-
 	if found_directories:
 		_file, la_file, link, pair = \
 			collect_libraries_from_dir(found_directories, mask, logger)
@@ -194,7 +193,6 @@ def collect_libraries_from_dir(dirs, mask, logger):
 		found_la_files += la_file
 		found_symlinks += link
 		symlink_pairs += pair
-
 	return (found_files, found_la_files, found_symlinks, symlink_pairs)
 
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     8f70e214507ce7aa4a2e0170ad427536e71768ca
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 11 07:37:50 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:09:23 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=8f70e214

revdep_rebuild/assign.py: assigned is a set, remove redundant if statement.

---
 pym/gentoolkit/revdep_rebuild/assign.py | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index fe56129..fb2058c 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -43,8 +43,7 @@ def assign_packages(broken, logger, settings):
 								m = m.group(1)
 								if m in broken:
 									found = group+'/'+pkg
-									if found not in assigned:
-										assigned.add(found)
+									assigned.add(found)
 									logger.info('\t' + m + ' -> ' + bold(found))
 				except Exception as e:
 					logger.warn(red(' !! Failed to read ' + f))


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     cfeb731d0dc40988cf11f6c225e7082f563d5b18
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 11 07:26:27 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:08:38 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=cfeb731d

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
 
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     f8360d99befc33909d0769464c209806777e7db2
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 10 20:27:45 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:07:35 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=f8360d99

revdep_rebuild: Remove duplicate files for the scanelf checks.

Convert the file lists to a set to remove teh duplicates.  This can reduce the number of files to nealry half.
Convert it back to a list for the scanelf loop for easier batch processing.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 2 +-
 pym/gentoolkit/revdep_rebuild/stuff.py   | 8 ++++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 6ef4d90..9cee906 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -256,7 +256,7 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 	)
 	logger.info(green(' * ') + bold('Scanning files'))
 
-	libs_and_bins = libraries+binaries
+	libs_and_bins = set(libraries + binaries)
 
 	scanned_files = scan_files(libs_and_bins, settings['CMD_MAX_ARGS'])
 

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index ea27ef2..817396e 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -36,13 +36,17 @@ def scan(params, files, max_args):
 
 		@return scanelf output (joined if was called several times)
 	'''
+	print("SCAN(), params = ", params, len(files))
+	# change it to a sorted list for group processing
+	_files = list(files)
 	out = []
-	for i in range(0, len(files), max_args):
+	for i in range(0, len(_files), max_args):
 		output = call_program(
-			['scanelf'] + params + files[i:i+max_args]).strip().split('\n')
+			['scanelf'] + params + _files[i:i+max_args]).strip().split('\n')
 		output = [x for x in output if x != '']
 		if output:
 			out.extend(output)
+	print("SCAN(), final output length:", len(out))
 	return out
 
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     276eabfceb04d74aad206d2e85394759bdc00658
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 10 16:48:07 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:06:34 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=276eabfc

revdep_rebuild/cache.py: Remove inccorrect bash shebang.

---
 pym/gentoolkit/revdep_rebuild/cache.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index 0a250d3..45b86bd 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -1,4 +1,3 @@
-#!/bin/bash
 
 """Caching module
 Functions for reading, saving and verifying the data caches


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     7b700febab305270afd3a05e4742ab733eddfc1d
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 10 17:01:16 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:07:14 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=7b700feb

revdep_rebuild/stuff.py: Remove unused exithandler()

---
 pym/gentoolkit/revdep_rebuild/stuff.py | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index aa91be2..ea27ef2 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -46,10 +46,6 @@ 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
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     6f420c5883d10511f7d339a6843de3be74b0eb68
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 11 07:31:59 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:09:22 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=6f420c58

revdep-rebuild: Use set().update() instead of set().union().

---
 pym/gentoolkit/revdep_rebuild/analyse.py |  6 +++---
 pym/gentoolkit/revdep_rebuild/cache.py   |  6 +++---
 pym/gentoolkit/revdep_rebuild/collect.py | 18 +++++++++---------
 pym/gentoolkit/revdep_rebuild/rebuild.py |  2 +-
 4 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 131849b..6f1787a 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -157,9 +157,9 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 
 		masked_dirs, masked_files, ld = \
 			parse_revdep_config(settings['REVDEP_CONFDIR'])
-		lib_dirs = lib_dirs.union(ld)
-		bin_dirs = bin_dirs.union(ld)
-		masked_dirs = masked_dirs.union(
+		lib_dirs.update(ld)
+		bin_dirs.update(ld)
+		masked_dirs.update(
 			set([
 				'/lib/modules',
 				'/lib32/modules',

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index 45b86bd..06f4c67 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -110,9 +110,9 @@ if __name__ == '__main__':
 	bin_dirs, lib_dirs = prepare_search_dirs()
 
 	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(
+	lib_dirs.update(ld)
+	bin_dirs.update(ld)
+	masked_dirs.update(
 		set([
 			'/lib/modules',
 			'/lib32/modules',

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index f8ee60d..281c156 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -40,7 +40,7 @@ def parse_conf(conf_file, visited=None, logger=None):
 							else:
 								path = included
 
-							to_parse = to_parse.union(glob.glob(path))
+							to_parse.update(glob.glob(path))
 					else:
 						lib_dirs.add(line)
 		except EnvironmentError:
@@ -49,10 +49,10 @@ def parse_conf(conf_file, visited=None, logger=None):
 	if visited is None:
 		visited = set()
 
-	visited = visited.union(conf_file)
+	visited.update(conf_file)
 	to_parse = to_parse.difference(visited)
 	if to_parse:
-		lib_dirs = lib_dirs.union(parse_conf(to_parse, visited, logger=logger))
+		lib_dirs.update(parse_conf(to_parse, visited, logger=logger))
 
 	return lib_dirs
 
@@ -96,19 +96,19 @@ def parse_revdep_config(revdep_confdir):
 				match = re.match('LD_LIBRARY_MASK=\\"([^"]+)\\"', line)
 				if match is not None:
 					masks = match.group(1).split(' ')
-					masked_files = masked_files.union(masks)
+					masked_files.update(masks)
 					continue
 				match = re.match('SEARCH_DIRS_MASK=\\"([^"]+)\\"', line)
 				if match is not None:
 					searches = match.group(1).split(' ')
 					for search in searches:
-						masked_dirs = masked_dirs.union(glob.glob(search))
+						masked_dirs.update(glob.glob(search))
 					continue
 				match = re.match('SEARCH_DIRS=\\"([^"]+)\\"', line)
 				if match is not None:
 					searches = match.group(1).split()
 					for search in searches:
-						search_dirs = search_dirs.union(glob.glob(search))
+						search_dirs.update(glob.glob(search))
 					continue
 
 	return (masked_dirs, masked_files, search_dirs)
@@ -253,9 +253,9 @@ if __name__ == '__main__':
 	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(
+	lib_dirs.update(ld)
+	bin_dirs.update(ld)
+	masked_dirs.update(
 		set([
 			'/lib/modules',
 			'/lib32/modules',

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 888fa47..81e2b34 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -124,7 +124,7 @@ def parse_options():
 			elif key in ('-C', '--nocolor', '--no-color'):
 				settings['nocolor'] = True
 			elif key in ('-L', '--library', '--library='):
-				settings['library'] = settings['library'].union(val.split(','))
+				settings['library'].update(val.split(','))
 			elif key in ('-i', '--ignore'):
 				settings['USE_TMP_FILES'] = False
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     1ef7ee6bde1b12946471db650f27d0b0de9226e5
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 11 03:34:45 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:08:06 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=1ef7ee6b

revdep_rebuild/analyse.py: Remove unused or commented out code

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 132 -------------------------------
 1 file changed, 132 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 9cee906..e2e1edd 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -16,43 +16,6 @@ from .assign import assign_packages
 from .cache import save_cache
 
 
-def prepare_checks(files_to_check, libraries, bits, cmd_max_args):
-	''' Calls scanelf for all files_to_check,
-	then returns found libraries and dependencies
-	'''
-
-	# 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 = []
-
-	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 = r[1].split(',')
-		for d in deps:
-			if d in libs:
-				i = libs.index(d)
-				dependencies[i].append(r[0])
-			else:
-				#print d, 'bits:', r[2][8:] # 8: -> strlen('ELFCLASS')
-				libs.append(d)
-				dependencies.append([r[0],])
-
-	return (libs, dependencies)
-
-
 def scan_files(libs_and_bins, cmd_max_args):
 
 	scanned_files = {} # {bits: {soname: (filename, needed), ...}, ...}
@@ -125,32 +88,6 @@ def extract_dependencies_from_la(la, libraries, to_check, logger):
 	return broken
 
 
-def find_broken(found_libs, system_libraries, to_check):
-	''' Search for broken libraries.
-		Check if system_libraries contains found_libs, where
-		system_libraries is list of obsolute pathes and found_libs
-		is list of library names.
-	'''
-
-	# join libraries and looking at it as string
-	# is way faster than for-jumping
-
-	broken = []
-	syslibs = '|'.join(system_libraries)
-
-	if not to_check:
-		for found in found_libs:
-			if found + '|' not in syslibs:
-				broken.append(found_libs.index(found))
-	else:
-		for tc in to_check:
-			for found in found_libs:
-				if tc in found:# and found+'|' not in syslibs:
-					broken.append(found_libs.index(found))
-
-	return broken
-
-
 def find_broken2(scanned_files, logger):
 	broken_libs = {}
 	for bits, libs in scanned_files.items():
@@ -170,24 +107,6 @@ def find_broken2(scanned_files, logger):
 	return broken_libs
 
 
-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_list is list of libraries found by scanelf
-		dependencies is the value returned by prepare_checks
-	'''
-
-	broken_pathes = []
-
-	for broken in broken_list:
-		found = found_libs[broken]
-		logger.info('Broken files that requires: ' + bold(found))
-		for dep_path in dependencies[broken]:
-			logger.info(yellow(' * ') + dep_path)
-			broken_pathes.append(dep_path)
-	return broken_pathes
-
-
 def main_checks2(broken, scanned_files, logger):
 	broken_pathes = []
 	for bits, _broken in broken.items():
@@ -275,57 +194,6 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 
 	return assign_packages(broken_pathes, logger, settings)
 
-	#import sys
-	#sys.exit()
-
-	#l = []
-	#for line in call_program(['scanelf', '-M', '64', '-BF', '%F',] + libraries).strip().split('\n'):
-		#l.append(line)
-	#libraries = l
-
-	## old version from here
-	#found_libs = []
-	#dependencies = []
-
-	#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
-
-	#_bits, linkg = platform.architecture()
-	#if _bits.startswith('32'):
-		#bits = 32
-	#elif _bits.startswith('64'):
-		#bits = 64
-
-	#import time
-	#broken = []
-	#for av_bits in glob.glob('/lib[0-9]*') or ('/lib32',):
-		#bits = int(av_bits[4:])
-
-		##_libraries = scan(['-M', str(bits), '-BF', '%F'], libraries+libraries_links, settings['CMD_MAX_ARGS'])
-		#_libraries = libraries+libraries_links
-
-		#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_la = extract_dependencies_from_la(la_libraries, libraries+libraries_links, _libs_to_check, logger)
-
-
-	#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)
-
-
 
 if __name__ == '__main__':
 	print("This script shouldn't be called directly")


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     7f9d43fa1cc2b5c3785443d0ae8ec97ddd3a5deb
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 10 17:03:02 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:07:35 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=7f9d43fa

revdep_rebuild/analyse.py: Fix default parameter assignment.

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 079157a..6ef4d90 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -201,7 +201,7 @@ def main_checks2(broken, scanned_files, logger):
 
 
 def analyse(settings, logger, libraries=None, la_libraries=None,
-		libraries_links=None, binaries=None, _libs_to_check=set()):
+		libraries_links=None, binaries=None, _libs_to_check=None):
 	"""Main program body.  It will collect all info and determine the
 	pkgs needing rebuilding.
 
@@ -211,6 +211,8 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 	@rtype list: list of pkgs that need rebuilding
 	"""
 
+	if _libs_to_check == None:
+		_libs_to_check = set()
 	if libraries and la_libraries and libraries_links and binaries:
 		logger.info(blue(' * ') +
 			bold('Found a valid cache, skipping collecting phase'))


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     def28142f9b0106486c03a0b3f86e9a4aa014b70
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 10 16:44:53 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:05:14 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=def28142

revdep_rebuild/rebuild.py: Add missing logger.warn() call

---
 pym/gentoolkit/revdep_rebuild/rebuild.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index a4f6544..48a8ec6 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -211,6 +211,7 @@ def main(settings=None, logger=None):
 		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')


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     a479fdadc1f806fa018887512cf4c32f6a298bd8
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 10 16:47:20 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:06:11 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=a479fdad

revdep_rebuild: Fix missing logger variable in check_temp_files().

---
 pym/gentoolkit/revdep_rebuild/cache.py   | 3 ++-
 pym/gentoolkit/revdep_rebuild/rebuild.py | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index 42bf1ea..0a250d3 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -67,7 +67,8 @@ def save_cache(logger, to_save={}, temp_path=DEFAULTS['DEFAULT_TMP_DIR']):
 
 
 
-def check_temp_files(temp_path=DEFAULTS['DEFAULT_TMP_DIR'], max_delay=3600):
+def check_temp_files(temp_path=DEFAULTS['DEFAULT_TMP_DIR'], max_delay=3600,
+		logger=None):
 	''' Checks if temporary files from previous run are still available
 		and if they aren't too old
 		@param temp_path is directory, where temporary files should be found

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 48a8ec6..888fa47 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -218,7 +218,7 @@ def main(settings=None, logger=None):
 		settings['PRETEND'] = True
 
 	if settings['USE_TMP_FILES'] \
-			and check_temp_files(settings['DEFAULT_TMP_DIR']):
+			and check_temp_files(settings['DEFAULT_TMP_DIR'], logger=logger):
 		libraries, la_libraries, libraries_links, binaries = read_cache(
 			settings['DEFAULT_TMP_DIR'])
 		assigned = analyse(


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     aed173120942ee652be1844b6a020136de31f4c7
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 10 16:29:40 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:02:48 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=aed17312

revdep_rebuild: Fix tracebacks due to empy results returned from scanelf calls.

Add blank line removal to scan().
Add incorrect parts length detection to scan_files()  (just in case)

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 7 ++++++-
 pym/gentoolkit/revdep_rebuild/stuff.py   | 5 ++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 7b17517..a32ea05 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -60,7 +60,12 @@ def scan_files(libs_and_bins, cmd_max_args):
 
 	scanned_files = {} # {bits: {soname: (filename, needed), ...}, ...}
 	for line in scan(['-nBF', '%F %f %S %n %M'], libs_and_bins, cmd_max_args):
-		filename, sfilename, soname, needed, bits = line.split(' ')
+		parts = line.split(' ')
+		if len(parts) < 5:
+			print("scan_files(); error processing lib: %s" % line)
+			print("scan_files(); parts = %s" % str(parts))
+			continue
+		filename, sfilename, soname, needed, bits = parts
 		filename = os.path.realpath(filename)
 		needed = needed.split(',')
 		bits = bits[8:] # 8: -> strlen('ELFCLASS')

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index 0bebce2..aa91be2 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -38,8 +38,11 @@ def scan(params, files, max_args):
 	'''
 	out = []
 	for i in range(0, len(files), max_args):
-		out += call_program(
+		output = call_program(
 			['scanelf'] + params + files[i:i+max_args]).strip().split('\n')
+		output = [x for x in output if x != '']
+		if output:
+			out.extend(output)
 	return out
 
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     4e1cf9a4949072a02c7857dd5715e0dd42116238
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 10 16:38:19 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:03:54 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=4e1cf9a4

revdep_rebuild: Whitespace cleanup

---
 pym/gentoolkit/revdep_rebuild/analyse.py | 18 +++++++++---------
 pym/gentoolkit/revdep_rebuild/cache.py   |  8 ++++----
 pym/gentoolkit/revdep_rebuild/rebuild.py |  5 ++---
 3 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 4b79c2b..079157a 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -49,7 +49,7 @@ def prepare_checks(files_to_check, libraries, bits, cmd_max_args):
 				#print d, 'bits:', r[2][8:] # 8: -> strlen('ELFCLASS')
 				libs.append(d)
 				dependencies.append([r[0],])
-	
+
 	return (libs, dependencies)
 
 
@@ -68,7 +68,7 @@ def scan_files(libs_and_bins, cmd_max_args):
 		bits = bits[8:] # 8: -> strlen('ELFCLASS')
 		if not soname:
 			soname = sfilename
-		
+
 		try:
 			scanned_files[bits][soname] = (filename, needed)
 		except KeyError:
@@ -249,23 +249,23 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 			)
 
 
-	logger.debug('Found %i libraries (+%i symlinks) and %i 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 %i within %i' % 
+	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
 
@@ -273,9 +273,9 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 
 	return assign_packages(broken_pathes, logger, settings)
 
-	
 	#import sys
 	#sys.exit()
+
 	#l = []
 	#for line in call_program(['scanelf', '-M', '64', '-BF', '%F',] + libraries).strip().split('\n'):
 		#l.append(line)

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index 1be8cb0..42bf1ea 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -114,8 +114,8 @@ if __name__ == '__main__':
 	bin_dirs = bin_dirs.union(ld)
 	masked_dirs = masked_dirs.union(
 		set([
-			'/lib/modules', 
-			'/lib32/modules', 
+			'/lib/modules',
+			'/lib32/modules',
 			'/lib64/modules',
 		])
 	)
@@ -123,8 +123,8 @@ if __name__ == '__main__':
 	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 --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 386ac33..95f2b5e 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -209,12 +209,11 @@ def main(settings=None, logger=None):
 	elif not settings['PRETEND'] \
 			and settings['IS_DEV'] \
 			and not settings['NO_PRETEND']:
-		logger.warn(blue(' * ') + 
+		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(' * ') + 
+		logger.info(blue(' * ') +
 			'If you\'re sure, you can add --no-pretend to revdep options')
 		settings['PRETEND'] = True
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     38c80ed1434f0b03b0d7c5fa2095f3310f913c36
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 10 16:41:04 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:04:10 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=38c80ed1

revdep_rebuild/assign.py: Make assign_packages() ignore files found in /var/db/pkg/

---
 pym/gentoolkit/revdep_rebuild/assign.py | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index 4842ea9..11f7178 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -26,8 +26,14 @@ def assign_packages(broken, logger, settings):
 	'''
 	assigned = set()
 	for group in os.listdir(settings['PKG_DIR']):
-		for pkg in os.listdir(settings['PKG_DIR'] + group):
-			f = settings['PKG_DIR'] + group + '/' + pkg + '/CONTENTS'
+		grppath = settings['PKG_DIR'] + group
+		if not os.path.isdir(grppath):
+			continue
+		for pkg in os.listdir(grppath):
+			pkgpath = settings['PKG_DIR'] + group + '/' + pkg
+			if not os.path.isdir(pkgpath):
+				continue
+			f = pkgpath + '/CONTENTS'
 			if os.path.exists(f):
 				try:
 					with open(f, 'r') as cnt:


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     70edf148e08d843abe5c2a8bea262dc5e98330e1
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 10 16:36:15 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:03:31 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=70edf148

revdep_rebuild: Initial pyflakes import and variable cleanup.

Comment out some unused code for now which were causing some variable errors in pyflakes.

---
 pym/gentoolkit/revdep_rebuild/analyse.py |  9 ++----
 pym/gentoolkit/revdep_rebuild/assign.py  | 50 +++++++++++++++-----------------
 2 files changed, 27 insertions(+), 32 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index a32ea05..4b79c2b 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -6,8 +6,6 @@ from __future__ import print_function
 
 import os
 import re
-import platform
-import glob
 
 from portage.output import bold, blue, yellow, green
 
@@ -56,7 +54,6 @@ def prepare_checks(files_to_check, libraries, bits, cmd_max_args):
 
 
 def scan_files(libs_and_bins, cmd_max_args):
-	import os
 
 	scanned_files = {} # {bits: {soname: (filename, needed), ...}, ...}
 	for line in scan(['-nBF', '%F %f %S %n %M'], libs_and_bins, cmd_max_args):
@@ -184,7 +181,7 @@ def main_checks(found_libs, broken_list, dependencies, logger):
 
 	for broken in broken_list:
 		found = found_libs[broken]
-		logger.info('Broken files that requires: ' + bold(f))
+		logger.info('Broken files that requires: ' + bold(found))
 		for dep_path in dependencies[broken]:
 			logger.info(yellow(' * ') + dep_path)
 			broken_pathes.append(dep_path)
@@ -276,9 +273,9 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 
 	return assign_packages(broken_pathes, logger, settings)
 
-	import sys
-	sys.exit()
 	
+	#import sys
+	#sys.exit()
 	#l = []
 	#for line in call_program(['scanelf', '-M', '64', '-BF', '%F',] + libraries).strip().split('\n'):
 		#l.append(line)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index 2a93fe1..4842ea9 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -10,11 +10,9 @@ import os
 import re
 
 import portage
-from portage.versions import catpkgsplit
 from portage import portdb
 from portage.output import bold, red, yellow
-from gentoolkit.helpers import get_installed_cpvs
-from gentoolkit.package import Package
+#from gentoolkit.package import Package
 
 # Make all str conversions unicode
 try:
@@ -47,29 +45,29 @@ def assign_packages(broken, logger, settings):
 
 	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
+	## 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


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     4146685fe619563f014e70613409ff26a891b808
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 10 16:43:55 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:04:53 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=4146685f

revdep_rebuild/rebuild.pt: Remove unused variables

---
 pym/gentoolkit/revdep_rebuild/rebuild.py | 2 --
 1 file changed, 2 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 95f2b5e..a4f6544 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -103,7 +103,6 @@ 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'):
 				print_usage()
@@ -217,7 +216,6 @@ def main(settings=None, logger=None):
 			'If you\'re sure, you can add --no-pretend to revdep options')
 		settings['PRETEND'] = True
 
-	analyze_cache = {}
 	if settings['USE_TMP_FILES'] \
 			and check_temp_files(settings['DEFAULT_TMP_DIR']):
 		libraries, la_libraries, libraries_links, binaries = read_cache(


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2014-02-11  8:40 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2014-02-11  8:40 UTC (permalink / raw
  To: gentoo-commits

commit:     ab9e5871becd130c7463c9944e1a8f5f6e0f60c9
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 10 16:45:38 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue Feb 11 08:05:36 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=ab9e5871

revdep_rebuild/assign.py: Fix unused error assignment

---
 pym/gentoolkit/revdep_rebuild/assign.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index 11f7178..fe56129 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -48,6 +48,7 @@ def assign_packages(broken, logger, settings):
 									logger.info('\t' + m + ' -> ' + bold(found))
 				except Exception as e:
 					logger.warn(red(' !! Failed to read ' + f))
+					logger.warn(red(' !! Error was:' + str(e)))
 
 	return assigned
 


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2012-11-09 14:16 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2012-11-09 14:16 UTC (permalink / raw
  To: gentoo-commits

commit:     800b1f431fe35dcb9ed76e7170f6853664196e09
Author:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
AuthorDate: Fri Nov  9 14:08:25 2012 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Fri Nov  9 14:08:25 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=800b1f43

Fix bug 381581 - revdep-rebuild unicode error

Changed the function to use gentoolkit functions instead of
reading the vardb directly.

---
 pym/gentoolkit/revdep_rebuild/assign.py |   66 +++++++++++++++---------------
 1 files changed, 33 insertions(+), 33 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index 76b41fc..96b7eaa 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -13,49 +13,49 @@ import portage
 from portage.versions import catpkgsplit
 from portage import portdb
 from portage.output import bold, red, yellow
+from gentoolkit.helpers import get_installed_cpvs
+from gentoolkit.package import Package
 
-# ignore these files or directories if found
-IGNORED = ['.cache', 'world', 'world~', 'world.bak']
+# Make all str conversions unicode
+try:
+	str = unicode
+except NameError:
+	pass
 
 def assign_packages(broken, logger, settings):
 	''' Finds and returns packages that owns files placed in broken.
 		Broken is list of files
 	'''
 	assigned = set()
-	for group in os.listdir(settings['PKG_DIR']):
-		if group in IGNORED:
-			continue
-		elif os.path.isfile(settings['PKG_DIR'] + group):
-			if not group.startswith('.keep_'):
-				logger.warn(yellow(" * Invalid category found in the installed pkg db: ") +
-					bold(settings['PKG_DIR'] + group))
-			continue
-		for pkg in os.listdir(settings['PKG_DIR'] + group):
-			if '-MERGING-' in pkg:
-				logger.warn(yellow(" * Invalid/incomplete package merge found in the installed pkg db: ") +
-						bold(settings['PKG_DIR'] + pkg))
-				continue
-			_file = settings['PKG_DIR'] + group + '/' + pkg + '/CONTENTS'
-			if os.path.exists(_file):
-				try:
-					with open(_file, 'r') as cnt:
-						for line in cnt:
-							matches = re.match('^obj (/[^ ]+)', line)
-							if matches is not None:
-								match = matches.group(1)
-								if match in broken:
-									found = group+'/'+pkg
-									if found not in assigned:
-										assigned.add(found)
-									logger.info('\t' + match + ' -> '
-										+ bold(found))
-				except Exception as ex:
-					logger.warn(red(' !! Failed to read ' + _file) +
-						" Original exception was:\n" + str(ex))
+	if not broken:
+		return assigned
+
+	pkgset = set(get_installed_cpvs())
+
+	# 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
 	as the deprecated installed version.  Failing that attempt to get any version


^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2012-03-19  6:50 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2012-03-19  6:50 UTC (permalink / raw
  To: gentoo-commits

commit:     fd5b792c965f9d8e2a01b01c23ecf4f835a5eb99
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 19 06:49:20 2012 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Mon Mar 19 06:49:20 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=fd5b792c

fix a missed hardcoded path not using the portage.root.

---
 pym/gentoolkit/revdep_rebuild/settings.py |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index 3c8b9d3..54d7f9e 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -14,7 +14,7 @@ DEFAULTS = {
 		'DEFAULT_ENV_FILE': os.path.join(portage.root, 'etc/profile.env'),
 		'REVDEP_CONFDIR': os.path.join(portage.root, 'etc/revdep-rebuild/'),
 		'PKG_DIR': os.path.join(portage.root, 'var/db/pkg/'),
-		'DEFAULT_TMP_DIR': '/var/cache/revdep-rebuild', #cache default location
+		'DEFAULT_TMP_DIR': os.path.join(portage.root, '/var/cache/revdep-rebuild'), #cache default location
 
 		# number of maximum allowed files to be parsed at once
 		'CMD_MAX_ARGS': 1000, 



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2012-03-04  7:41 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2012-03-04  7:41 UTC (permalink / raw
  To: gentoo-commits

commit:     602246c01709980ada3036cc995e74f6e06c90ef
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sun Mar  4 07:40:54 2012 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Sun Mar  4 07:40:54 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=602246c0

Add ignored files/directories check.
Add a warning for incomplete pkg merges with -MERGING- in the name.

---
 pym/gentoolkit/revdep_rebuild/assign.py |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index 73f20a9..76b41fc 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -14,6 +14,8 @@ from portage.versions import catpkgsplit
 from portage import portdb
 from portage.output import bold, red, yellow
 
+# ignore these files or directories if found
+IGNORED = ['.cache', 'world', 'world~', 'world.bak']
 
 def assign_packages(broken, logger, settings):
 	''' Finds and returns packages that owns files placed in broken.
@@ -21,12 +23,18 @@ def assign_packages(broken, logger, settings):
 	'''
 	assigned = set()
 	for group in os.listdir(settings['PKG_DIR']):
-		if os.path.isfile(settings['PKG_DIR'] + group):
+		if group in IGNORED:
+			continue
+		elif os.path.isfile(settings['PKG_DIR'] + group):
 			if not group.startswith('.keep_'):
 				logger.warn(yellow(" * Invalid category found in the installed pkg db: ") +
 					bold(settings['PKG_DIR'] + group))
 			continue
 		for pkg in os.listdir(settings['PKG_DIR'] + group):
+			if '-MERGING-' in pkg:
+				logger.warn(yellow(" * Invalid/incomplete package merge found in the installed pkg db: ") +
+						bold(settings['PKG_DIR'] + pkg))
+				continue
 			_file = settings['PKG_DIR'] + group + '/' + pkg + '/CONTENTS'
 			if os.path.exists(_file):
 				try:



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2012-03-02 17:47 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2012-03-02 17:47 UTC (permalink / raw
  To: gentoo-commits

commit:     2d303c857523978de043c0844f213567113feda5
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Fri Mar  2 17:46:28 2012 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Fri Mar  2 17:46:28 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=2d303c85

fix bug 406613. ignore any .keep_* files in /var/db/pkg.  Print a warning for any other files found.

---
 pym/gentoolkit/revdep_rebuild/assign.py |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index af82b27..73f20a9 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -21,6 +21,11 @@ def assign_packages(broken, logger, settings):
 	'''
 	assigned = set()
 	for group in os.listdir(settings['PKG_DIR']):
+		if os.path.isfile(settings['PKG_DIR'] + group):
+			if not group.startswith('.keep_'):
+				logger.warn(yellow(" * Invalid category found in the installed pkg db: ") +
+					bold(settings['PKG_DIR'] + group))
+			continue
 		for pkg in os.listdir(settings['PKG_DIR'] + group):
 			_file = settings['PKG_DIR'] + group + '/' + pkg + '/CONTENTS'
 			if os.path.exists(_file):



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-10-10 17:36 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2011-10-10 17:36 UTC (permalink / raw
  To: gentoo-commits

commit:     dc41d03793e898319b791b3844b452fab211fdae
Author:     dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Mon Oct 10 17:34:56 2011 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Mon Oct 10 17:34:56 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=dc41d037

reverse the logging message in analyse.py since it is not correct.

---
 pym/gentoolkit/revdep_rebuild/analyse.py |    2 --
 1 files changed, 0 insertions(+), 2 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 79b8fe3..f992db0 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -206,8 +206,6 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 		for ltc in _libs_to_check:
 			if os.path.isfile(ltc):
 				ltc = scan(['-nBSF', '%S'], [ltc,], settings['CMD_MAX_ARGS'])[0].split()[0]
-			else:
-				logger.warn(yellow(' * ') + bold('Library "%s" was not found' % ltc))
 			nltc += [ltc,]
 		_libs_to_check = nltc
 



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-10-10 16:09 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2011-10-10 16:09 UTC (permalink / raw
  To: gentoo-commits

commit:     4fd527a67416ea278e450602c2bc73fe97ef06bc
Author:     dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Mon Oct 10 16:03:32 2011 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Mon Oct 10 16:03:32 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=4fd527a6

add --library output to revdep-rebuild.

---
 pym/gentoolkit/revdep_rebuild/analyse.py |    2 ++
 pym/gentoolkit/revdep_rebuild/rebuild.py |    4 ++++
 2 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index f992db0..79b8fe3 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -206,6 +206,8 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 		for ltc in _libs_to_check:
 			if os.path.isfile(ltc):
 				ltc = scan(['-nBSF', '%S'], [ltc,], settings['CMD_MAX_ARGS'])[0].split()[0]
+			else:
+				logger.warn(yellow(' * ') + bold('Library "%s" was not found' % ltc))
 			nltc += [ltc,]
 		_libs_to_check = nltc
 

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index c8e0b37..fe00069 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -205,6 +205,10 @@ def main(settings=None, logger=None):
 			yellow('You are not root, adding --pretend to portage options'))
 		settings['PRETEND'] = True
 
+	if settings['library']:
+		logger.warn(green(' * ') + 
+			"Looking for libraries: %s" % (bold(', '.join(settings['library']))))
+
 	if settings['USE_TMP_FILES'] \
 			and check_temp_files(settings['DEFAULT_TMP_DIR'], logger=logger):
 		libraries, la_libraries, libraries_links, binaries = read_cache(



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-14 18:29 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-14 18:29 UTC (permalink / raw
  To: gentoo-commits

commit:     8e3f935090fe8680fea7eb5980142e4bb3e6e88e
Author:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 14 18:27:44 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Thu Jul 14 18:27:44 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=8e3f9350

Change default cache directory to '/var/cache/revdep-rebuild'

---
 pym/gentoolkit/revdep_rebuild/cache.py    |    5 +++--
 pym/gentoolkit/revdep_rebuild/settings.py |    2 +-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index 2bb9f59..d62fe12 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -52,8 +52,9 @@ def save_cache(logger, to_save=None, temp_path=DEFAULTS['DEFAULT_TMP_DIR']):
 	if to_save is None:
 		to_save = {}
 
-	if not os.path.exists(temp_path):
-		os.makedirs(temp_path)
+# TODO: Don't blindly make the cache directory, see Bug 203414
+#	if not os.path.exists(temp_path):
+#		os.makedirs(temp_path)
 
 	try:
 		_file = open(os.path.join(temp_path, 'timestamp'), 'w')

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index c0e5aa7..3c8b9d3 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -14,7 +14,7 @@ DEFAULTS = {
 		'DEFAULT_ENV_FILE': os.path.join(portage.root, 'etc/profile.env'),
 		'REVDEP_CONFDIR': os.path.join(portage.root, 'etc/revdep-rebuild/'),
 		'PKG_DIR': os.path.join(portage.root, 'var/db/pkg/'),
-		'DEFAULT_TMP_DIR': '/tmp/revdep-rebuild', #cache default location
+		'DEFAULT_TMP_DIR': '/var/cache/revdep-rebuild', #cache default location
 
 		# number of maximum allowed files to be parsed at once
 		'CMD_MAX_ARGS': 1000, 



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-14 18:29 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-14 18:29 UTC (permalink / raw
  To: gentoo-commits

commit:     b150d5882b03a35a9b83707e4ed505446ab06b8a
Author:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 14 18:29:09 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Thu Jul 14 18:29:09 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=b150d588

Fix call_program to actually return stdout as string under py3k

---
 pym/gentoolkit/revdep_rebuild/stuff.py |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index 43be461..a2c317e 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -18,9 +18,9 @@ def call_program(args):
 	@param, args: arument list to pass to subprocess
 	@return str
 	'''
-	subp = subprocess.Popen(args, stdout=subprocess.PIPE, \
-								stderr=subprocess.PIPE)
+	subp = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 	stdout, stderr = subp.communicate()
+	stdout = stdout.decode('utf-8')
 	return str(stdout)
 
 



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-14  2:32 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-14  2:32 UTC (permalink / raw
  To: gentoo-commits

commit:     e3369415de42875dba4523b352f9a2d2899d2aac
Author:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 14 02:31:41 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Thu Jul 14 02:31:41 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=e3369415

Make development warning always print

---
 pym/gentoolkit/revdep_rebuild/rebuild.py |   17 ++++++++---------
 1 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 5f64473..c8e0b37 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -192,19 +192,18 @@ 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(' * ') + 
 			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('The original revdep-rebuild script is '
-				'installed as revdep-rebuild.sh'))
 
 	if settings['USE_TMP_FILES'] \
 			and check_temp_files(settings['DEFAULT_TMP_DIR'], logger=logger):



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-14  1:44 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2011-07-14  1:44 UTC (permalink / raw
  To: gentoo-commits

commit:     59abbce2ffb3a430f22d450a77f2fc91ac13274b
Author:     dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Thu Jul 14 01:37:51 2011 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Thu Jul 14 01:37:51 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=59abbce2

major pylint cleanup, 2 probable bugs fixed along the way.

---
 pym/gentoolkit/revdep_rebuild/analyse.py |  154 +++++++++++++++++-------------
 pym/gentoolkit/revdep_rebuild/assign.py  |   52 ++++++-----
 pym/gentoolkit/revdep_rebuild/cache.py   |   79 ++++++++++------
 pym/gentoolkit/revdep_rebuild/collect.py |  151 +++++++++++++++--------------
 pym/gentoolkit/revdep_rebuild/rebuild.py |    5 +-
 pym/gentoolkit/revdep_rebuild/stuff.py   |   16 ++-
 6 files changed, 258 insertions(+), 199 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 5494270..f992db0 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -9,36 +9,42 @@ import re
 import platform
 import glob
 
-from portage.output import bold, red, blue, yellow, green, nocolor
+from portage.output import bold, blue, yellow, green
 
 from .stuff import scan
-from .collect import prepare_search_dirs, parse_revdep_config, collect_libraries_from_dir, collect_binaries_from_dir
+from .collect import (prepare_search_dirs, parse_revdep_config,
+	collect_libraries_from_dir, collect_binaries_from_dir)
 from .assign import assign_packages
 from .cache import save_cache
 
 
 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
+		):
 
-	for line in scan(['-M', str(bits), '-nBF', '%F %n'], 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?
+		parts = line.strip().split(' ')
+		if len(parts) < 2: # no dependencies?
 			continue
 
-		deps = r[1].split(',')
-		for d in deps:
-			if d in libs:
-				i = libs.index(d)
-				dependencies[i].append(r[0])
+		deps = parts[1].split(',')
+		for dep in deps:
+			if dep in libs:
+				index = libs.index(dep)
+				dependencies[index].append(parts[0])
 			else:
-				libs.append(d)
-				dependencies.append([r[0],])
+				libs.append(dep)
+				dependencies.append([parts[0],])
 	
 	return (libs, dependencies)
 
@@ -47,25 +53,27 @@ def extract_dependencies_from_la(la, libraries, to_check, logger):
 	broken = []
 
 	libnames = []
-	for l in libraries:
-		m = re.match('.+\/(.+)\.(so|la|a)(\..+)?', l)
-		if m is not None:
-			ln = m.group(1)
-			if ln not in libnames:
-				libnames += [ln, ]
-
-	for f in la:
-		if not os.path.exists(f):
+	for lib in libraries:
+		match = re.match('.+\/(.+)\.(so|la|a)(\..+)?', lib)
+		if match is not None:
+			libname = match.group(1)
+			if libname not in libnames:
+				libnames += [libname, ]
+
+	for _file in la:
+		if not os.path.exists(_file):
 			continue
 
-		for line in open(f, 'r').readlines():
+		for line in open(_file, 'r').readlines():
 			line = line.strip()
 			if line.startswith('dependency_libs='):
-				m = re.match("dependency_libs='([^']+)'", line)
-				if m is not None:
-					for el in m.group(1).split(' '):
+				match = re.match("dependency_libs='([^']+)'", line)
+				if match is not None:
+					for el in match.group(1).split(' '):
 						el = el.strip()
-						if len(el) < 1 or el.startswith('-L') or el.startswith('-R'):
+						if (len(el) < 1 or el.startswith('-L')
+							or el.startswith('-R')
+							):
 							continue
 
 						if el.startswith('-l') and 'lib'+el[2:] in libnames:
@@ -82,8 +90,9 @@ def extract_dependencies_from_la(la, libraries, to_check, logger):
 								if not _break:
 									continue
 
-							logger.info(yellow(' * ') + f + ' is broken (requires: ' + bold(el)+')')
-							broken.append(f)
+							logger.info(yellow(' * ') + _file + 
+								' is broken (requires: ' + bold(el)+')')
+							broken.append(_file)
 	return broken
 
 
@@ -94,39 +103,40 @@ def find_broken(found_libs, system_libraries, to_check):
 		is list of library names.
 	'''
 
-	# join libraries and looking at it as string is way too faster than for-jumping
+	# join libraries and looking at it as string
+	# is way faster than for-jumping
 
 	broken = []
-	sl = '|'.join(system_libraries)
+	syslibs = '|'.join(system_libraries)
 
 	if not to_check:
-		for f in found_libs:
-			if f+'|' not in sl:
-				broken.append(found_libs.index(f))
+		for found in found_libs:
+			if found + '|' not in syslibs:
+				broken.append(found_libs.index(found))
 	else:
 		for tc in to_check:
-			for f in found_libs:
-				if tc in f:# and f+'|' not in sl:
-					broken.append(found_libs.index(f))
+			for found in found_libs:
+				if tc in found:# and found+'|' not in syslibs:
+					broken.append(found_libs.index(found))
 
 	return broken
 
 
-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]
-		logger.info('Broken files that requires: ' + bold(f))
-		for d in dependencies[b]:
-			logger.info(yellow(' * ') + d)
-			broken_pathes.append(d)
+	for broken in broken_list:
+		found = found_libs[broken]
+		logger.info('Broken files that requires: ' + bold(found))
+		for dep_path in dependencies[broken]:
+			logger.info(yellow(' * ') + dep_path)
+			broken_pathes.append(dep_path)
 	return broken_pathes
 
 
@@ -142,20 +152,31 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 	"""
 
 	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 = masked_dirs.union(set(['/lib/modules', '/lib32/modules', '/lib64/modules',]))
+		masked_dirs.update([
+			'/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)
+		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']:
@@ -167,17 +188,16 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 			)
 
 
-	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.warn(green(' * ') + bold('Checking dynamic linking consistency'))
-	logger.debug('Search for ' + str(len(binaries)+len(libraries)) + ' within ' + str(len(libraries)+len(libraries_links)))
+	logger.debug('Search for ' + str(len(binaries)+len(libraries)) +
+		' within ' + str(len(libraries)+len(libraries_links)))
 	libs_and_bins = libraries+binaries
 
-	#l = []
-	#for line in call_program(['scanelf', '-M', '64', '-BF', '%F',] + libraries).strip().split('\n'):
-		#l.append(line)
-	#libraries = l
-
 	found_libs = []
 	dependencies = []
 
@@ -195,21 +215,21 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 	elif _bits.startswith('64'):
 		bits = 64
 
-	import time
 	broken = []
 	for av_bits in glob.glob('/lib[0-9]*') or ('/lib32',):
 		bits = int(av_bits[4:])
 
-		#_libraries = scan(['-M', str(bits), '-BF', '%F'], libraries+libraries_links, settings['CMD_MAX_ARGS'])
 		_libraries = libraries+libraries_links
 
-		found_libs, dependencies = prepare_checks(libs_and_bins, _libraries, bits, settings['CMD_MAX_ARGS'])
+		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_la = extract_dependencies_from_la(la_libraries, libraries+libraries_links, _libs_to_check, logger)
+	broken_la = extract_dependencies_from_la(la_libraries,
+		libraries+libraries_links, _libs_to_check, logger)
 
 
 	broken_pathes = main_checks(found_libs, broken, dependencies, logger)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index bbe409b..af82b27 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -10,8 +10,9 @@ import os
 import re
 
 import portage
+from portage.versions import catpkgsplit
 from portage import portdb
-from portage.output import bold, red, blue, yellow, green, nocolor
+from portage.output import bold, red, yellow
 
 
 def assign_packages(broken, logger, settings):
@@ -21,21 +22,23 @@ def assign_packages(broken, logger, settings):
 	assigned = set()
 	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):
+			_file = settings['PKG_DIR'] + group + '/' + pkg + '/CONTENTS'
+			if os.path.exists(_file):
 				try:
-					with open(f, 'r') as cnt:
+					with open(_file, 'r') as cnt:
 						for line in cnt:
-							m = re.match('^obj (/[^ ]+)', line)
-							if m is not None:
-								m = m.group(1)
-								if m in broken:
+							matches = re.match('^obj (/[^ ]+)', line)
+							if matches is not None:
+								match = matches.group(1)
+								if match 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))
+									logger.info('\t' + match + ' -> '
+										+ bold(found))
+				except Exception as ex:
+					logger.warn(red(' !! Failed to read ' + _file) +
+						" Original exception was:\n" + str(ex))
 
 	return assigned
 
@@ -54,24 +57,24 @@ def get_best_match(cpv, cp, logger):
 	logger.warn(yellow('Warning: ebuild "' + cpv + '" not found.'))
 	logger.info('Looking for %s:%s' %(cp, slot))
 	try:
-		m = portdb.match('%s:%s' %(cp, slot))
+		match = portdb.match('%s:%s' %(cp, slot))
 	except portage.exception.InvalidAtom:
-		m = None
+		match = None
 
-	if not m:
-		logger.warn(red('!!') + ' ' + yellow('Could not find ebuild for %s:%s' %(cp, slot)))
+	if not match:
+		logger.warn(red('!!') + ' ' + yellow(
+			'Could not find ebuild for %s:%s' %(cp, slot)))
 		slot = ['']
-		m = portdb.match(cp)
-		if not m:
-			logger.warn(red('!!') + ' ' + yellow('Could not find ebuild for ' + cp))
-	return m, slot
+		match = portdb.match(cp)
+		if not match:
+			logger.warn(red('!!') + ' ' + 
+				yellow('Could not find ebuild for ' + cp))
+	return match, slot
 
 
 def get_slotted_cps(cpvs, logger):
 	"""Uses portage to reduce the cpv list into a cp:slot list and returns it
 	"""
-	from portage.versions import catpkgsplit
-	from portage import portdb
 
 	cps = []
 	for cpv in cpvs:
@@ -80,9 +83,10 @@ def get_slotted_cps(cpvs, logger):
 		try:
 			slot = portdb.aux_get(cpv, ["SLOT"])
 		except KeyError:
-			m, slot = get_best_match(cpv, cp, logger)
-			if not m:
-				logger.warn(red("Installed package: %s is no longer available" %cp))
+			match, slot = get_best_match(cpv, cp, logger)
+			if not match:
+				logger.warn(red("Installed package: "
+					"%s is no longer available" %cp))
 				continue
 
 		if slot[0]:

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index 7dc9a8d..2bb9f59 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -18,53 +18,65 @@ def read_cache(temp_path=DEFAULTS['DEFAULT_TMP_DIR']):
 		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()):
-			f = open(os.path.join(temp_path, key))
-			for line in f.readlines():
+		for key, val in list(ret.items()):
+			_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={}, temp_path=DEFAULTS['DEFAULT_TMP_DIR']):
+def save_cache(logger, to_save=None, 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 = {}
 
 	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()):
-			f = open(os.path.join(temp_path, key), 'w')
+		for key, val in list(to_save.items()):
+			_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)))
 
 
 
-def check_temp_files(temp_path=DEFAULTS['DEFAULT_TMP_DIR'], max_delay=3600):
+def check_temp_files(temp_path=DEFAULTS['DEFAULT_TMP_DIR'], max_delay=3600,
+		logger=None):
 	''' Checks if temporary files from previous run are still available
 		and if they aren't too old
 		@param temp_path is directory, where temporary files should be found
-		@param max_delay is maximum time difference (in seconds) when those files
-				are still considered fresh and useful
+		@param max_delay is maximum time difference (in seconds) 
+			when those files are still considered fresh and useful
 		returns True, when files can be used, or False, when they don't
 		exists or they are too old
 	'''
@@ -77,10 +89,13 @@ def check_temp_files(temp_path=DEFAULTS['DEFAULT_TMP_DIR'], max_delay=3600):
 		return False
 
 	try:
-		f = open(timestamp_path)
-		timestamp = int(f.readline())
-		f.close()
-	except:
+		_file = open(timestamp_path)
+		timestamp = int(_file.readline())
+		_file .close()
+	except Exception as ex:
+		if logger:
+			logger.debug("check_temp_files(); error retrieving"
+				" timestamp_path:\n" + str(ex))
 		timestamp = 0
 		return False
 
@@ -92,17 +107,25 @@ def check_temp_files(temp_path=DEFAULTS['DEFAULT_TMP_DIR'], max_delay=3600):
 if __name__ == '__main__':
 	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()
+	bin_dirs, lib_dirs = prepare_search_dirs(logging, DEFAULTS)
 
-	masked_dirs, masked_files, ld = parse_revdep_config()
+	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_dirs.update([
+			'/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, 

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index 8239feb..3aae709 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -10,7 +10,7 @@ import glob
 import stat
 
 import portage
-from portage.output import bold, red, blue, yellow, green, nocolor
+from portage.output import blue, yellow
 
 
 def parse_conf(conf_file, visited=None, logger=None):
@@ -66,12 +66,13 @@ def prepare_search_dirs(logger, settings):
 	lib_dirs = set(['/lib', '/usr/lib', ])
 
 	#try:
-	with open(os.path.join(portage.root, settings['DEFAULT_ENV_FILE']), 'r') as _file:
+	with open(os.path.join(
+		portage.root, settings['DEFAULT_ENV_FILE']), 'r') as _file:
 		for line in _file:
 			line = line.strip()
-			m = re.match("^export (ROOT)?PATH='([^']+)'", line)
-			if m is not None:
-				bin_dirs.update(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))
 
@@ -80,35 +81,34 @@ def prepare_search_dirs(logger, settings):
 
 
 def parse_revdep_config(revdep_confdir):
-	''' Parses all files under /etc/revdep-rebuild/ and returns
+	''' Parses all files under and returns
 		tuple of: (masked_dirs, masked_files, search_dirs)'''
 
 	search_dirs = set()
 	masked_dirs = set()
 	masked_files = set()
 
-	#TODO: remove hard-coded path
 	for _file in os.listdir(revdep_confdir):
-		for line in open(os.path.join('/etc/revdep-rebuild', _file)):
+		for line in open(os.path.join(revdep_confdir, _file)):
 			line = line.strip()
 			#first check for comment, we do not want to regex all lines
 			if not line.startswith('#'): 
-				m = re.match('LD_LIBRARY_MASK=\\"([^"]+)\\"', line)
-				if m is not None:
-					s = m.group(1).split(' ')
-					masked_files = masked_files.union(s)
+				match = re.match('LD_LIBRARY_MASK=\\"([^"]+)\\"', line)
+				if match is not None:
+					masks = match.group(1).split(' ')
+					masked_files = masked_files.union(masks)
 					continue
-				m = re.match('SEARCH_DIRS_MASK=\\"([^"]+)\\"', line)
-				if m is not None:
-					s = m.group(1).split(' ')
-					for ss in s:
-						masked_dirs = masked_dirs.union(glob.glob(ss))
+				match = re.match('SEARCH_DIRS_MASK=\\"([^"]+)\\"', line)
+				if match is not None:
+					searches = match.group(1).split(' ')
+					for search in searches:
+						masked_dirs = masked_dirs.union(glob.glob(search))
 					continue
-				m = re.match('SEARCH_DIRS=\\"([^"]+)\\"', line)
-				if m is not None:
-					s = m.group(1).split()
-					for ss in s:
-						search_dirs = search_dirs.union(glob.glob(ss))
+				match = re.match('SEARCH_DIRS=\\"([^"]+)\\"', line)
+				if match is not None:
+					searches = match.group(1).split()
+					for search in searches:
+						search_dirs = search_dirs.union(glob.glob(search))
 					continue
 
 	return (masked_dirs, masked_files, search_dirs)
@@ -129,54 +129,58 @@ def collect_libraries_from_dir(dirs, mask, logger):
 	found_la_files = [] # la libraries
 	symlink_pairs = []  # list of pairs symlink_id->library_id
 
-	for d in dirs:
-		if d in mask:
+	for _dir in dirs:
+		if _dir in mask:
 			continue
 
 		try:
-			for l in os.listdir(d):
-				l = os.path.join(d, l)
-				if l in mask:
+			for listing in os.listdir(_dir):
+				listing = os.path.join(_dir, listing)
+				if listing in mask:
 					continue
 
-				if os.path.isdir(l):
-					if os.path.islink(l):
+				if os.path.isdir(listing):
+					if os.path.islink(listing):
 						#we do not want scan symlink-directories
 						pass
 					else:
-						found_directories.append(l)
-				elif os.path.isfile(l):
-					if l.endswith('.so') or l.endswith('.a') or '.so.' in l:
-						if l in found_files or l in found_symlinks:
+						found_directories.append(listing)
+				elif os.path.isfile(listing):
+					if (listing.endswith('.so') or 
+						listing.endswith('.a') or 
+						'.so.' in listing
+						):
+						if listing in found_files or listing in found_symlinks:
 							continue
 
-						if os.path.islink(l):
-							found_symlinks.append(l)
-							abs_path = os.path.realpath(l)
+						if os.path.islink(listing):
+							found_symlinks.append(listing)
+							abs_path = os.path.realpath(listing)
 							if abs_path in found_files:
-								i = found_files.index(abs_path)
+								index = found_files.index(abs_path)
 							else:
 								found_files.append(abs_path)
-								i = len(found_files)-1
-							symlink_pairs.append((len(found_symlinks)-1, i,))
+								index = len(found_files)-1
+							symlink_pairs.append((len(found_symlinks)-1, index,))
 						else:
-							found_files.append(l)
+							found_files.append(listing)
 						continue
-					elif l.endswith('.la'):
-						if l in found_la_files:
+					elif listing.endswith('.la'):
+						if listing in found_la_files:
 							continue
 
-						found_la_files.append(l)
+						found_la_files.append(listing)
 					else:
-						# sometimes there are binaries in libs' subdir, for example in nagios
-						if not os.path.islink(l):
-							if l in found_files or l in found_symlinks:
+						# sometimes there are binaries in libs' subdir,
+						# for example in nagios
+						if not os.path.islink(listing):
+							if listing in found_files or listing in found_symlinks:
 								continue
-							prv = os.stat(l)[stat.ST_MODE]
+							prv = os.stat(listing)[stat.ST_MODE]
 							if prv & stat.S_IXUSR == stat.S_IXUSR or \
 									prv & stat.S_IXGRP == stat.S_IXGRP or \
 									prv & stat.S_IXOTH == stat.S_IXOTH:
-								found_files.append(l)
+								found_files.append(listing)
 		except Exception as ex:
 			logger.debug(
 				yellow('Exception during collecting libraries: ' + 
@@ -184,18 +188,20 @@ def collect_libraries_from_dir(dirs, mask, logger):
 
 
 	if found_directories:
-		f, a, l, p = collect_libraries_from_dir(found_directories, mask, logger)
-		found_files += f
-		found_la_files += a
-		found_symlinks += l
-		symlink_pairs += p
+		_file, la_file, link, pair = \
+			collect_libraries_from_dir(found_directories, mask, logger)
+		found_files += _file
+		found_la_files += la_file
+		found_symlinks += link
+		symlink_pairs += pair
 
 	return (found_files, found_la_files, found_symlinks, symlink_pairs)
 
 
 def collect_binaries_from_dir(dirs, mask, logger):
 	''' Collects all binaries from specified list of directories.
-		mask is list of pathes, that are ommited in scanning, can be eighter single file or entire directory
+		mask is list of pathes, that are ommited in scanning,
+		can be eighter single file or entire directory
 		Returns list of binaries
 	'''
 
@@ -204,36 +210,36 @@ def collect_binaries_from_dir(dirs, mask, logger):
 	found_directories = []  
 	found_files = []
 
-	for d in dirs:
-		if d in mask:
+	for _dir in dirs:
+		if _dir in mask:
 			continue
 
 		try:
-			for l in os.listdir(d):
-				l = os.path.join(d, l)
-				if d in mask:
+			for listing in os.listdir(_dir):
+				listing = os.path.join(_dir, listing)
+				if listing in mask:
 					continue
 
-				if os.path.isdir(l):
-					if os.path.islink(l):
+				if os.path.isdir(listing):
+					if os.path.islink(listing):
 						#we do not want scan symlink-directories
 						pass
 					else:
-						found_directories.append(l)
-				elif os.path.isfile(l):
+						found_directories.append(listing)
+				elif os.path.isfile(listing):
 					# we're looking for binaries
 					# and with binaries we do not need links
 					# thus we can optimize a bit
-					if not os.path.islink(l):
-						prv = os.stat(l)[stat.ST_MODE]
+					if not os.path.islink(listing):
+						prv = os.stat(listing)[stat.ST_MODE]
 						if prv & stat.S_IXUSR == stat.S_IXUSR or \
 								prv & stat.S_IXGRP == stat.S_IXGRP or \
 								prv & stat.S_IXOTH == stat.S_IXOTH:
-							found_files.append(l)
-		except Exception as e:
+							found_files.append(listing)
+		except Exception as ex:
 			logger.debug(
 				yellow('Exception during binaries collecting: '+
-				blue('%s') %str(e)))
+				blue('%s') %str(ex)))
 
 	if found_directories:
 		found_files += collect_binaries_from_dir(found_directories, mask, logger)
@@ -244,15 +250,16 @@ def collect_binaries_from_dir(dirs, mask, logger):
 
 if __name__ == '__main__':
 	import logging
-	mbin_dirs, mlib_dirs = prepare_search_dirs(logging)
+	from .settings import DEFAULTS
+	mbin_dirs, mlib_dirs = prepare_search_dirs(logging, DEFAULTS)
 
-	mmasked_dirs, mmasked_files, mld = parse_revdep_config()
+	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'])
 
-	libraries, la_libraries, libraries_links, msymlink_pairs = collect_libraries_from_dir(
-		mlib_dirs, mmasked_dirs, logging)
+	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(

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index b529f37..5f64473 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -16,7 +16,6 @@ License: BSD
 
 from __future__ import print_function
 
-import subprocess
 import os
 import sys
 import getopt
@@ -24,7 +23,7 @@ import logging
 from portage.output import bold, red, blue, yellow, green, nocolor
 
 from .analyse import analyse
-from .stuff import exithandler, get_masking_status
+from .stuff import get_masking_status
 from .cache import check_temp_files, read_cache
 from .assign import get_slotted_cps
 from .settings import DEFAULTS
@@ -208,7 +207,7 @@ def main(settings=None, logger=None):
 				'installed as revdep-rebuild.sh'))
 
 	if settings['USE_TMP_FILES'] \
-			and check_temp_files(settings['DEFAULT_TMP_DIR']):
+			and check_temp_files(settings['DEFAULT_TMP_DIR'], logger=logger):
 		libraries, la_libraries, libraries_links, binaries = read_cache(
 			settings['DEFAULT_TMP_DIR'])
 		assigned = analyse(

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index bffb936..43be461 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -12,7 +12,12 @@ import portage
 
 # util. functions
 def call_program(args):
-	''' Calls program with specified parameters and returns stdout as a str object '''
+	''' Calls program with specified parameters
+	and returns the stdout as a str object.
+	
+	@param, args: arument list to pass to subprocess
+	@return str
+	'''
 	subp = subprocess.Popen(args, stdout=subprocess.PIPE, \
 								stderr=subprocess.PIPE)
 	stdout, stderr = subp.communicate()
@@ -21,7 +26,8 @@ def call_program(args):
 
 def scan(params, files, max_args):
 	''' Calls scanelf with given params and files to scan.
-		@param params is list of parameters that should be passed into scanelf app.
+		@param params is list of parameters that should
+			be passed into scanelf app.
 		@param files list of files to scan.
 		@param max_args number of files to process at once
 
@@ -56,9 +62,9 @@ def _match_str_in_list(lst, stri):
 	@param stri: string
 	@return boolean or list menber that matches stri.endswith(member)
 	"""
-	for l in lst:
-		if stri.endswith(l):
-			return l
+	for item in lst:
+		if stri.endswith(item):
+			return item
 	return False
 
 



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-14  1:44 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2011-07-14  1:44 UTC (permalink / raw
  To: gentoo-commits

commit:     c639b2341b63d784840c039ea08ef5f08e21bde8
Author:     dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Wed Jul 13 22:37:00 2011 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Jul 13 22:37:00 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=c639b234

partial pylint cleanup

---
 pym/gentoolkit/revdep_rebuild/collect.py  |   67 +++++++++++++++++-----------
 pym/gentoolkit/revdep_rebuild/rebuild.py  |   42 ++++++++++--------
 pym/gentoolkit/revdep_rebuild/settings.py |   17 ++++---
 pym/gentoolkit/revdep_rebuild/stuff.py    |   20 ++++++--
 4 files changed, 89 insertions(+), 57 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index e8075d8..d1b23c0 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -1,5 +1,7 @@
 #!/usr/bin/python
 
+"""Data collection module"""
+
 import re
 import os
 import glob
@@ -22,8 +24,8 @@ def parse_conf(conf_file, visited=None, logger=None):
 
 	for conf in conf_file:
 		try:
-			with open(conf) as f:
-				for line in f:
+			with open(conf) as _file:
+				for line in _file:
 					line = line.strip()
 					if line.startswith('#'):
 						continue
@@ -62,8 +64,8 @@ def prepare_search_dirs(logger, settings):
 	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:
+	with open(os.path.join(portage.root, settings['DEFAULT_ENV_FILE']), 'r') as _file:
+		for line in _file:
 			line = line.strip()
 			m = re.match("^export (ROOT)?PATH='([^']+)'", line)
 			if m is not None:
@@ -84,10 +86,11 @@ def parse_revdep_config(revdep_confdir):
 	masked_files = set()
 
 	#TODO: remove hard-coded path
-	for f in os.listdir(revdep_confdir):
-		for line in open(os.path.join('/etc/revdep-rebuild', f)):
+	for _file in os.listdir(revdep_confdir):
+		for line in open(os.path.join('/etc/revdep-rebuild', _file)):
 			line = line.strip()
-			if not line.startswith('#'): #first check for comment, we do not want to regex all lines
+			#first check for comment, we do not want to regex all lines
+			if not line.startswith('#'): 
 				m = re.match('LD_LIBRARY_MASK=\\"([^"]+)\\"', line)
 				if m is not None:
 					s = m.group(1).split(' ')
@@ -116,8 +119,9 @@ def collect_libraries_from_dir(dirs, mask, logger):
 		(symlink_id, library_id) for resolving dependencies
 	'''
 
-
-	found_directories = []  # contains list of directories found; allow us to reduce number of fnc calls
+	# contains list of directories found
+	# allows us to reduce number of fnc calls
+	found_directories = []  
 	found_files = []
 	found_symlinks = []
 	found_la_files = [] # la libraries
@@ -172,15 +176,17 @@ def collect_libraries_from_dir(dirs, mask, logger):
 									prv & stat.S_IXOTH == stat.S_IXOTH:
 								found_files.append(l)
 		except Exception as ex:
-			logger.debug(yellow('Exception during collecting libraries: ' + blue('%s')  %str(ex)))
+			logger.debug(
+				yellow('Exception during collecting libraries: ' + 
+				blue('%s')  %str(ex)))
 
 
 	if found_directories:
-		f,a,l,p = collect_libraries_from_dir(found_directories, mask, logger)
-		found_files+=f
-		found_la_files+=a
-		found_symlinks+=l
-		symlink_pairs+=p
+		f, a, l, p = collect_libraries_from_dir(found_directories, mask, logger)
+		found_files += f
+		found_la_files += a
+		found_symlinks += l
+		symlink_pairs += p
 
 	return (found_files, found_la_files, found_symlinks, symlink_pairs)
 
@@ -191,7 +197,9 @@ def collect_binaries_from_dir(dirs, mask, logger):
 		Returns list of binaries
 	'''
 
-	found_directories = []  # contains list of directories found; allow us to reduce number of fnc calls
+	# contains list of directories found
+	# allows us to reduce number of fnc calls
+	found_directories = []  
 	found_files = []
 
 	for d in dirs:
@@ -211,7 +219,9 @@ def collect_binaries_from_dir(dirs, mask, logger):
 					else:
 						found_directories.append(l)
 				elif os.path.isfile(l):
-					#we're looking for binaries, and with binaries we do not need links, thus we can optimize a bit
+					# we're looking for binaries
+					# and with binaries we do not need links
+					# thus we can optimize a bit
 					if not os.path.islink(l):
 						prv = os.stat(l)[stat.ST_MODE]
 						if prv & stat.S_IXUSR == stat.S_IXUSR or \
@@ -219,7 +229,9 @@ def collect_binaries_from_dir(dirs, mask, logger):
 								prv & stat.S_IXOTH == stat.S_IXOTH:
 							found_files.append(l)
 		except Exception as e:
-			logger.debug(yellow('Exception during binaries collecting: '+blue('%s') %str(e)))
+			logger.debug(
+				yellow('Exception during binaries collecting: '+
+				blue('%s') %str(e)))
 
 	if found_directories:
 		found_files += collect_binaries_from_dir(found_directories, mask, logger)
@@ -230,17 +242,20 @@ def collect_binaries_from_dir(dirs, mask, logger):
 
 if __name__ == '__main__':
 	import logging
-	bin_dirs, lib_dirs = prepare_search_dirs(logging)
+	mbin_dirs, mlib_dirs = prepare_search_dirs(logging)
 
-	masked_dirs, masked_files, ld = parse_revdep_config()
-	lib_dirs.update(ld)
-	bin_dirs.update(ld)
-	masked_dirs.update(['/lib/modules', '/lib32/modules', '/lib64/modules'])
+	mmasked_dirs, mmasked_files, mld = parse_revdep_config()
+	mlib_dirs.update(mld)
+	mbin_dirs.update(mld)
+	mmasked_dirs.update(['/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)
+	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)))
+	logging.debug(
+		'Found: %i binaries and %i libraries.' %(
+		len(binaries), len(libraries)))
 
 
 

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 9ac4811..04fb96c 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -10,18 +10,10 @@
 # Creation date: 2010/10/17
 # License: BSD
 
-import subprocess
 import os
 import sys
-import re
 import getopt
-import signal
-import stat
-import time
-import glob
-import portage
 import logging
-from portage import portdb
 from portage.output import bold, red, blue, yellow, green, nocolor
 
 from analyse import analyse
@@ -41,6 +33,7 @@ __productname__ = "revdep-ng"
 # functions
 
 def print_usage():
+	"""Outputs the help message"""
 	print( APP_NAME + ': (' + VERSION +')')
 	print
 	print('This is free software; see the source for copying conditions.')
@@ -93,8 +86,8 @@ def init_logger(settings):
 def parse_options():
 	"""Parses the command line options an sets settings accordingly"""
 
-	# @TODO: Verify: options: no-ld-path, no-order, no-progress are not appliable 
-	# for revdep-ng
+	# TODO: Verify: options: no-ld-path, no-order, no-progress
+	#are not appliable
 
 	settings = DEFAULTS.copy()
 	try:
@@ -161,14 +154,25 @@ def rebuild(logger, assigned, settings):
 
 	emerge_command = emerge_command
 
-	logger.warn(yellow('\nemerge') + args + ' --oneshot --complete-graph=y ' + bold(emerge_command))
+	logger.warn(yellow(
+		'\nemerge') + args + 
+		' --oneshot --complete-graph=y ' +
+		bold(emerge_command))
 	
-	success = os.system('emerge ' + args + ' --oneshot --complete-graph=y ' + emerge_command)
+	success = os.system(
+		'emerge ' + args + 
+		' --oneshot --complete-graph=y ' + 
+		emerge_command)
 	return success
 
 
-# Runs from here
 def main(settings=None, logger=None):
+	"""Main program operation method....
+	
+	@param settings: dict.  defaults to settings.DEFAULTS
+	@param logger: python logging module defaults to init_logger(settings)
+	@return boolean  success/failure
+	"""
 
 	if settings is None:
 		print("NO Input settings, using defaults...")
@@ -193,9 +197,9 @@ def main(settings=None, logger=None):
 			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'))
+			yellow('The original revdep-rebuild script is '
+				'installed as revdep-rebuild.sh'))
 
-	analyze_cache = {}
 	if settings['USE_TMP_FILES'] \
 			and check_temp_files(settings['DEFAULT_TMP_DIR']):
 		libraries, la_libraries, libraries_links, binaries = read_cache(
@@ -218,13 +222,13 @@ def main(settings=None, logger=None):
 
 	has_masked = False
 	tmp = []
-	for a in assigned:
-		if get_masking_status(a):
+	for ebuild in assigned:
+		if get_masking_status(ebuild):
 			has_masked = True
 			logger.warn('!!! ' + red('All ebuilds that could satisfy: ') + 
-				green(a) + red(' have been masked'))
+				green(ebuild) + red(' have been masked'))
 		else:
-			tmp.append(a)
+			tmp.append(ebuild)
 	assigned = tmp
 
 	if has_masked:

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index 96aa491..b56f812 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -1,5 +1,7 @@
 #!/usr/bin/python
 
+"""Default settings"""
+
 import os
 import sys
 
@@ -12,17 +14,18 @@ DEFAULTS = {
 		'PKG_DIR': os.path.join(portage.root, 'var/db/pkg/'),
 		'DEFAULT_TMP_DIR': '/tmp/revdep-rebuild', #cache default location
 
-
-		'USE_TMP_FILES': True, #if program should use temporary files from previous run
-		'CMD_MAX_ARGS': 1000, # number of maximum allowed files to be parsed at once
+		# number of maximum allowed files to be parsed at once
+		'CMD_MAX_ARGS': 1000, 
 
 		'PRETEND': False,     #pretend only
 		'EXACT': False,      #exact package version
-		'USE_TMP_FILES': True, #if program should use temporary files from previous run
+		#if program should use temporary files from previous run
+		'USE_TMP_FILES': True, 
 
-		'IS_DEV': True,       #True for dev. version, False for stable
-				#used when IS_DEV is True, False forces to call emerge with --pretend
-				# can be set True from the cli with the --no-pretend option
+		#True for dev. version, False for stable
+		#used when IS_DEV is True, False forces to call emerge with --pretend
+		# can be set True from the cli with the --no-pretend option
+		'IS_DEV': True,
 		'NO_PRETEND': False,
 		'VERBOSITY': 1,
 		

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index 1ab21f2..163cc7d 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -1,5 +1,8 @@
 #!/usr/bin/python
 
+"""Utilities submodule"""
+
+
 import subprocess
 
 import portage
@@ -27,15 +30,17 @@ def scan(params, files, max_args):
 	'''
 	out = []
 	for i in range(0, len(files), max_args):
-		out += call_program(['scanelf'] + params + files[i:i+max_args]).strip().split('\n')
+		out += call_program(
+			['scanelf'] + params + files[i:i+max_args]).strip().split('\n')
 	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:
@@ -44,6 +49,11 @@ def get_masking_status(ebuild):
 
 
 def _match_str_in_list(lst, stri):
+	"""
+	@param lst: list
+	@param stri: string
+	@return boolean or list menber that matches stri.endswith(member)
+	"""
 	for l in lst:
 		if stri.endswith(l):
 			return l



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-13 20:06 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-13 20:06 UTC (permalink / raw
  To: gentoo-commits

commit:     0f177509d8384c822240f62d4416afa1ea56d540
Author:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
AuthorDate: Wed Jul 13 20:06:13 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Wed Jul 13 20:06:13 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=0f177509

Fix python 3 incompatible code

---
 pym/gentoolkit/revdep_rebuild/analyse.py |    8 ++++----
 pym/gentoolkit/revdep_rebuild/cache.py   |    8 ++++----
 pym/gentoolkit/revdep_rebuild/collect.py |    2 +-
 pym/gentoolkit/revdep_rebuild/rebuild.py |   12 ++++++------
 pym/gentoolkit/revdep_rebuild/stuff.py   |    4 ++--
 5 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index f0ef323..700c966 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -9,10 +9,10 @@ import glob
 
 from portage.output import bold, red, blue, yellow, green, nocolor
 
-from stuff import scan
-from collect import prepare_search_dirs, parse_revdep_config, collect_libraries_from_dir, collect_binaries_from_dir
-from assign import assign_packages
-from cache import save_cache
+from .stuff import scan
+from .collect import prepare_search_dirs, parse_revdep_config, collect_libraries_from_dir, collect_binaries_from_dir
+from .assign import assign_packages
+from .cache import save_cache
 
 
 def prepare_checks(files_to_check, libraries, bits, cmd_max_args):

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index a1cb1ec..ca2ab1b 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -5,7 +5,7 @@ import os
 import time
 
 from portage.output import red
-from settings import DEFAULTS
+from .settings import DEFAULTS
 
 
 def read_cache(temp_path=DEFAULTS['DEFAULT_TMP_DIR']):
@@ -18,7 +18,7 @@ def read_cache(temp_path=DEFAULTS['DEFAULT_TMP_DIR']):
 
 	ret = {'libraries':[], 'la_libraries':[], 'libraries_links':[], 'binaries':[]}
 	try:
-		for key,val in ret.iteritems():
+		for key,val in list(ret.items()):
 			f = open(os.path.join(temp_path, key))
 			for line in f.readlines():
 				val.append(line.strip())
@@ -44,7 +44,7 @@ def save_cache(logger, to_save={}, temp_path=DEFAULTS['DEFAULT_TMP_DIR']):
 		f.write(str(int(time.time())))
 		f.close()
 
-		for key,val in to_save.iteritems():
+		for key,val in list(to_save.items()):
 			f = open(os.path.join(temp_path, key), 'w')
 			for line in val:
 				f.write(line + '\n')
@@ -87,7 +87,7 @@ def check_temp_files(temp_path=DEFAULTS['DEFAULT_TMP_DIR'], max_delay=3600):
 if __name__ == '__main__':
 	print('Preparing cache ... ')
 
-	from collect import *
+	from .collect import *
 	import logging
 
 	bin_dirs, lib_dirs = prepare_search_dirs()

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index b9e9c0d..3f05161 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -18,7 +18,7 @@ def parse_conf(conf_file, visited=None, logger=None):
 	lib_dirs = set()
 	to_parse = set()
 
-	if isinstance(conf_file, basestring):
+	if isinstance(conf_file, str):
 		conf_file = [conf_file]
 
 	for conf in conf_file:

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index d26e186..aa802bb 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -25,12 +25,12 @@ import logging
 from portage import portdb
 from portage.output import bold, red, blue, yellow, green, nocolor
 
-from analyse import analyse
-from stuff import exithandler, get_masking_status
-from cache import check_temp_files, read_cache
-from assign import get_slotted_cps
-from settings import DEFAULTS
-from gentoolkit.revdep_rebuild import __version__
+from .analyse import analyse
+from .stuff import exithandler, get_masking_status
+from .cache import check_temp_files, read_cache
+from .assign import get_slotted_cps
+from .settings import DEFAULTS
+from . import __version__
 
 
 APP_NAME = sys.argv[0]

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index 66f5769..64b9601 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -8,11 +8,11 @@ import portage
 
 # util. functions
 def call_program(args):
-	''' Calls program with specified parameters and returns stdout '''
+	''' Calls program with specified parameters and returns stdout as a str object '''
 	subp = subprocess.Popen(args, stdout=subprocess.PIPE, \
 								stderr=subprocess.PIPE)
 	stdout, stderr = subp.communicate()
-	return stdout
+	return str(stdout)
 
 
 def scan(params, files, max_args):



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-13 16:01 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-13 16:01 UTC (permalink / raw
  To: gentoo-commits

commit:     4aea8eb88ca81e2c977634567d94f9f68ba0a06c
Author:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
AuthorDate: Wed Jul 13 16:00:52 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Wed Jul 13 16:00:52 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=4aea8eb8

Add from __future__ import print_function for python 3 compatability

---
 pym/gentoolkit/revdep_rebuild/analyse.py  |    2 ++
 pym/gentoolkit/revdep_rebuild/assign.py   |    1 +
 pym/gentoolkit/revdep_rebuild/cache.py    |    1 +
 pym/gentoolkit/revdep_rebuild/collect.py  |    1 +
 pym/gentoolkit/revdep_rebuild/rebuild.py  |    9 +++++----
 pym/gentoolkit/revdep_rebuild/settings.py |    1 +
 pym/gentoolkit/revdep_rebuild/stuff.py    |    1 +
 7 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 69651ca..f0ef323 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -1,5 +1,7 @@
 #!/usr/bin/python
 
+from __future__ import print_function
+
 import os
 import re
 import platform

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index 5ed938e..ed0f698 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -1,5 +1,6 @@
 #!/usr/bin/python
 
+from __future__ import print_function
 import os
 import re
 

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index ef46314..a1cb1ec 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -1,5 +1,6 @@
 #!/bin/bash
 
+from __future__ import print_function
 import os
 import time
 

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index e8075d8..b9e9c0d 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -1,5 +1,6 @@
 #!/usr/bin/python
 
+from __future__ import print_function
 import re
 import os
 import glob

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 9ac4811..d26e186 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -10,6 +10,7 @@
 # Creation date: 2010/10/17
 # License: BSD
 
+from __future__ import print_function
 import subprocess
 import os
 import sys
@@ -42,13 +43,13 @@ __productname__ = "revdep-ng"
 
 def print_usage():
 	print( APP_NAME + ': (' + VERSION +')')
-	print
+	print()
 	print('This is free software; see the source for copying conditions.')
-	print
+	print()
 	print('Usage: ' + APP_NAME + ' [OPTIONS] [--] [EMERGE_OPTIONS]')
-	print
+	print()
 	print('Broken reverse dependency rebuilder, python implementation.')
-	print
+	print()
 	print('Available options:')
 	print('''
   -C, --nocolor         Turn off colored output

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index 96aa491..b95e8ff 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -1,5 +1,6 @@
 #!/usr/bin/python
 
+from __future__ import print_function
 import os
 import sys
 

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index 1ab21f2..66f5769 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -1,5 +1,6 @@
 #!/usr/bin/python
 
+from __future__ import print_function
 import subprocess
 
 import portage



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-13 15:35 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2011-07-13 15:35 UTC (permalink / raw
  To: gentoo-commits

commit:     2664f68f9553b94a9bb93dc0282de6ffbf8232f9
Author:     dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Wed Jul 13 15:35:44 2011 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Jul 13 15:35:44 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=2664f68f

fix the placement of the l.endswith('.a') in the if

---
 pym/gentoolkit/revdep_rebuild/collect.py |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index 8d80e21..e8075d8 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -140,7 +140,7 @@ def collect_libraries_from_dir(dirs, mask, logger):
 					else:
 						found_directories.append(l)
 				elif os.path.isfile(l):
-					if l.endswith('.so') or '.so.' or l.endswith('.a') in l:
+					if l.endswith('.so') or l.endswith('.a') or '.so.' in l:
 						if l in found_files or l in found_symlinks:
 							continue
 



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-13  5:53 Brian Dolbec
  0 siblings, 0 replies; 115+ messages in thread
From: Brian Dolbec @ 2011-07-13  5:53 UTC (permalink / raw
  To: gentoo-commits

commit:     4576c230e52a09fae3f45d872be158259297846a
Author:     dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Wed Jul 13 05:32:42 2011 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Jul 13 05:32:42 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=4576c230

fix the use of set updates and the with statement.

---
 pym/gentoolkit/revdep_rebuild/analyse.py |    4 ++--
 pym/gentoolkit/revdep_rebuild/assign.py  |    2 +-
 pym/gentoolkit/revdep_rebuild/cache.py   |    6 +++---
 pym/gentoolkit/revdep_rebuild/collect.py |   20 ++++++++++----------
 4 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 34ef55b..69651ca 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -146,8 +146,8 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 		bin_dirs, lib_dirs = prepare_search_dirs(logger, settings)
 
 		masked_dirs, masked_files, ld = parse_revdep_config(settings['REVDEP_CONFDIR'])
-		lib_dirs = lib_dirs.union(ld)
-		bin_dirs = bin_dirs.union(ld)
+		lib_dirs.update(ld)
+		bin_dirs.update(ld)
 		masked_dirs = masked_dirs.union(set(['/lib/modules', '/lib32/modules', '/lib64/modules',]))
 
 		logger.info(green(' * ') + bold('Collecting dynamic linking informations'))

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index f7f0304..5ed938e 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -19,7 +19,7 @@ def assign_packages(broken, logger, settings):
 			if os.path.exists(f):
 				try:
 					with open(f, 'r') as cnt:
-						for line in cnt.readlines():
+						for line in cnt:
 							m = re.match('^obj (/[^ ]+)', line)
 							if m is not None:
 								m = m.group(1)

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index 6d21016..ef46314 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -92,9 +92,9 @@ if __name__ == '__main__':
 	bin_dirs, lib_dirs = prepare_search_dirs()
 
 	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',]))
+	lib_dirs.update(ld)
+	bin_dirs.update(ld)
+	masked_dirs = masked_dirs.update(['/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)

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index e5df8e3..8d80e21 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -23,7 +23,7 @@ def parse_conf(conf_file, visited=None, logger=None):
 	for conf in conf_file:
 		try:
 			with open(conf) as f:
-				for line in f.readlines():
+				for line in f:
 					line = line.strip()
 					if line.startswith('#'):
 						continue
@@ -36,7 +36,7 @@ def parse_conf(conf_file, visited=None, logger=None):
 							else:
 								path = included
 
-							to_parse = to_parse.union(glob.glob(path))
+							to_parse.update(glob.glob(path))
 					else:
 						lib_dirs.add(line)
 		except EnvironmentError:
@@ -45,10 +45,10 @@ def parse_conf(conf_file, visited=None, logger=None):
 	if visited is None:
 		visited = set()
 
-	visited = visited.union(conf_file)
-	to_parse = to_parse.difference(visited)
+	visited.update(conf_file)
+	to_parse.difference_update(visited)
 	if to_parse:
-		lib_dirs = lib_dirs.union(parse_conf(to_parse, visited, logger=logger))
+		lib_dirs.update(parse_conf(to_parse, visited, logger=logger))
 
 	return lib_dirs
 
@@ -63,11 +63,11 @@ def prepare_search_dirs(logger, settings):
 
 	#try:
 	with open(os.path.join(portage.root, settings['DEFAULT_ENV_FILE']), 'r') as f:
-		for line in f.readlines():
+		for line in f:
 			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(':')))
+				bin_dirs.update(set(m.group(2).split(':')))
 	#except EnvironmentError:
 		#logger.debug(yellow('Could not open file %s' % f))
 
@@ -233,9 +233,9 @@ if __name__ == '__main__':
 	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',]))
+	lib_dirs.update(ld)
+	bin_dirs.update(ld)
+	masked_dirs.update(['/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)



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     1bc82cc11fde5b0db852c1bd3954cfb70db61d25
Author:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 12 20:31:33 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:01 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=1bc82cc1

Fix python 3 syntax errors with new revdep-rebuild. Change VERSION to
reference __version__.

---
 pym/gentoolkit/revdep_rebuild/analyse.py |    2 +-
 pym/gentoolkit/revdep_rebuild/assign.py  |    2 +-
 pym/gentoolkit/revdep_rebuild/cache.py   |    4 ++--
 pym/gentoolkit/revdep_rebuild/rebuild.py |   21 +++++++++++----------
 pym/gentoolkit/revdep_rebuild/stuff.py   |    2 +-
 5 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index d94365e..3061328 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -218,4 +218,4 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 
 
 if __name__ == '__main__':
-	print "This script shouldn't be called directly"
+	print("This script shouldn't be called directly")

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index bb9ec1f..f7f0304 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -89,4 +89,4 @@ def get_slotted_cps(cpvs, logger):
 
 
 if __name__ == '__main__':
-	print 'Nothing to call here'
+	print('Nothing to call here')

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index 8b1a8ed..6d21016 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -84,7 +84,7 @@ def check_temp_files(temp_path=DEFAULTS['DEFAULT_TMP_DIR'], max_delay=3600):
 
 
 if __name__ == '__main__':
-	print 'Preparing cache ... '
+	print('Preparing cache ... ')
 
 	from collect import *
 	import logging
@@ -104,4 +104,4 @@ if __name__ == '__main__':
 			'libraries_links':libraries_links, 'binaries':binaries}
 		)
 
-	print 'Done.'
+	print('Done.')

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 834170e..778c528 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -29,10 +29,11 @@ from stuff import exithandler, get_masking_status
 from cache import check_temp_files, read_cache
 from assign import get_slotted_cps
 from settings import DEFAULTS
+from gentoolkit.revdep_rebuild import __version__
 
 
 APP_NAME = sys.argv[0]
-VERSION = '0.1-r7'
+VERSION = __version__
 
 __productname__ = "revdep-ng"
 
@@ -40,16 +41,16 @@ __productname__ = "revdep-ng"
 # functions
 
 def print_usage():
-	print APP_NAME + ': (' + VERSION +')'
+	print( APP_NAME + ': (' + VERSION +')')
 	print
-	print 'This is free software; see the source for copying conditions.'
+	print('This is free software; see the source for copying conditions.')
 	print
-	print 'Usage: ' + APP_NAME + ' [OPTIONS] [--] [EMERGE_OPTIONS]'
+	print('Usage: ' + APP_NAME + ' [OPTIONS] [--] [EMERGE_OPTIONS]')
 	print
-	print 'Broken reverse dependency rebuilder, python implementation.'
+	print('Broken reverse dependency rebuilder, python implementation.')
 	print
-	print 'Available options:'
-	print '''
+	print('Available options:')
+	print('''
   -C, --nocolor         Turn off colored output
   -d, --debug           Print debug informations
   -e, --exact           Emerge based on exact package version
@@ -66,9 +67,9 @@ def print_usage():
                         (also passed to emerge command)
   -q, --quiet           Be less verbose (also passed to emerge command)
   -v, --verbose         Be more verbose (also passed to emerge command)
-'''
-	print 'Calls emerge, options after -- are ignored by ' + APP_NAME
-	print 'and passed directly to emerge.'
+''')
+	print( 'Calls emerge, options after -- are ignored by ' + APP_NAME)
+	print('and passed directly to emerge.')
 
 
 def init_logger(settings):

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index 7b287b1..1ab21f2 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -52,4 +52,4 @@ def _match_str_in_list(lst, stri):
 
 
 if __name__ == '__main__':
-	print "There is nothing to run here."
+	print("There is nothing to run here.")



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     e7ed5b3dfb74f524d298aedf7a4207d50dbee689
Author:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 12 21:26:14 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:01 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=e7ed5b3d

Remove automatic adding of pretend to revdep-rebuild options.
Fix la file checker to find .a libraries referenced.
Add --complete-graph=y to emerge command.

---
 pym/gentoolkit/revdep_rebuild/analyse.py |    2 +-
 pym/gentoolkit/revdep_rebuild/collect.py |    2 +-
 pym/gentoolkit/revdep_rebuild/rebuild.py |    9 +++------
 3 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 3061328..34ef55b 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -61,7 +61,7 @@ def extract_dependencies_from_la(la, libraries, to_check, logger):
 				if m is not None:
 					for el in m.group(1).split(' '):
 						el = el.strip()
-						if len(el) < 1 or el.startswith('-L'):
+						if len(el) < 1 or el.startswith('-L') or el.startswith('-R'):
 							continue
 
 						if el.startswith('-l') and 'lib'+el[2:] in libnames:

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index b7ed469..e5df8e3 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -140,7 +140,7 @@ def collect_libraries_from_dir(dirs, mask, logger):
 					else:
 						found_directories.append(l)
 				elif os.path.isfile(l):
-					if l.endswith('.so') or '.so.' in l:
+					if l.endswith('.so') or '.so.' or l.endswith('.a') in l:
 						if l in found_files or l in found_symlinks:
 							continue
 

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 778c528..9ac4811 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -161,9 +161,9 @@ def rebuild(logger, assigned, settings):
 
 	emerge_command = emerge_command
 
-	logger.warn(yellow('\nemerge') + args + ' --oneshot ' + bold(emerge_command))
+	logger.warn(yellow('\nemerge') + args + ' --oneshot --complete-graph=y ' + bold(emerge_command))
 	
-	success = os.system('emerge ' + args + ' --oneshot ' + emerge_command)
+	success = os.system('emerge ' + args + ' --oneshot --complete-graph=y ' + emerge_command)
 	return success
 
 
@@ -193,10 +193,7 @@ def main(settings=None, logger=None):
 			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
+			yellow('The original revdep-rebuild script is installed as revdep-rebuild.sh'))
 
 	analyze_cache = {}
 	if settings['USE_TMP_FILES'] \



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     32a725f9f33c6bd3036f13cac5363717157ac494
Author:     Slawek <lis.slawek <AT> gmail <DOT> com>
AuthorDate: Thu Apr 28 09:41:35 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:01 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=32a725f9

Fixed --library checking when not using cache

---
 pym/gentoolkit/revdep_rebuild/rebuild.py |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 5385b0e..834170e 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -211,7 +211,7 @@ def main(settings=None, logger=None):
 			binaries=binaries,
 			_libs_to_check=_libs_to_check)
 	else:
-		assigned = analyse(settings, logger)
+		assigned = analyse(settings, logger, _libs_to_check=_libs_to_check)
 
 	if not assigned:
 		logger.warn('\n' + bold('Your system is consistent'))



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     c7d95a92e5ec1b12f15536866bb05a77eae7e466
Author:     Slawek <lis.slawek <AT> gmail <DOT> com>
AuthorDate: Wed Apr 27 04:21:03 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:01 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=c7d95a92

Added support for file path in -L option

---
 pym/gentoolkit/revdep_rebuild/analyse.py |   16 +++++++++++++---
 pym/gentoolkit/revdep_rebuild/rebuild.py |    9 ++++++---
 2 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index be696d1..d94365e 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -35,6 +35,7 @@ def prepare_checks(files_to_check, libraries, bits, cmd_max_args):
 			else:
 				libs.append(d)
 				dependencies.append([r[0],])
+	
 	return (libs, dependencies)
 
 
@@ -176,6 +177,13 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 	found_libs = []
 	dependencies = []
 
+	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
 
 	_bits, linkg = platform.architecture()
 	if _bits.startswith('32'):
@@ -183,13 +191,15 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 	elif _bits.startswith('64'):
 		bits = 64
 
+	import time
+	broken = []
 	for av_bits in glob.glob('/lib[0-9]*') or ('/lib32',):
 		bits = int(av_bits[4:])
-		_libraries = scan(['-M', str(bits), '-BF', '%F'], libraries+libraries_links, settings['CMD_MAX_ARGS'])
-		#call_program(['scanelf', '-M', str(bits), '-BF', '%F',] + libraries+libraries_links).strip().split('\n')
+
+		#_libraries = scan(['-M', str(bits), '-BF', '%F'], libraries+libraries_links, settings['CMD_MAX_ARGS'])
+		_libraries = libraries+libraries_links
 
 		found_libs, dependencies = prepare_checks(libs_and_bins, _libraries, bits, settings['CMD_MAX_ARGS'])
-		#print dependencies
 		broken = find_broken(found_libs, _libraries, _libs_to_check)
 
 		bits /= 2

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index f77d98c..5385b0e 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -92,6 +92,9 @@ def init_logger(settings):
 def parse_options():
 	"""Parses the command line options an sets settings accordingly"""
 
+	# @TODO: Verify: options: no-ld-path, no-order, no-progress are not appliable 
+	# for revdep-ng
+
 	settings = DEFAULTS.copy()
 	try:
 		opts, args = getopt.getopt(sys.argv[1:], 
@@ -155,11 +158,11 @@ def rebuild(logger, assigned, settings):
 		logger.warn(bold('\nThere is nothing to emerge. Exiting.'))
 		return 0
 
-	emerge_command = args + ' --oneshot ' + emerge_command
+	emerge_command = emerge_command
 
-	logger.warn(yellow('\nemerge') + bold(emerge_command))
+	logger.warn(yellow('\nemerge') + args + ' --oneshot ' + bold(emerge_command))
 	
-	success = os.system('emerge ' + emerge_command)
+	success = os.system('emerge ' + args + ' --oneshot ' + emerge_command)
 	return success
 
 



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     2f8da3a3f36faf57ba5d117fe725cbbfbff7ae7f
Author:     dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Mon Apr 25 07:23:55 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:01 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=2f8da3a3

pass the nocolor setting on to emerge.

---
 pym/gentoolkit/revdep_rebuild/rebuild.py |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index e0ab7d1..ef3a476 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -148,6 +148,8 @@ def rebuild(logger, assigned, settings):
 		args += ' --verbose'
 	elif settings['VERBOSITY'] < 1:
 		args += ' --quiet'
+	if settings['nocolor']:
+		args += ' --color n'
 
 	if len(emerge_command) == 0:
 		logger.warn(bold('\nThere is nothing to emerge. Exiting.'))



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     8d6b825b2d8e5eb69568619223721ae5c7e0aa07
Author:     Slawek <lis.slawek <AT> gmail <DOT> com>
AuthorDate: Tue Apr 26 07:08:24 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:01 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=8d6b825b

Fixed .la files parser. Some minor logging fixes.

---
 pym/gentoolkit/revdep_rebuild/analyse.py |   23 ++++++++++++++++++-----
 pym/gentoolkit/revdep_rebuild/collect.py |    6 +++---
 pym/gentoolkit/revdep_rebuild/rebuild.py |    4 ++--
 3 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 521d8b9..be696d1 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -40,6 +40,15 @@ def prepare_checks(files_to_check, libraries, bits, cmd_max_args):
 
 def extract_dependencies_from_la(la, libraries, to_check, logger):
 	broken = []
+
+	libnames = []
+	for l in libraries:
+		m = re.match('.+\/(.+)\.(so|la|a)(\..+)?', l)
+		if m is not None:
+			ln = m.group(1)
+			if ln not in libnames:
+				libnames += [ln, ]
+
 	for f in la:
 		if not os.path.exists(f):
 			continue
@@ -51,10 +60,12 @@ def extract_dependencies_from_la(la, libraries, to_check, logger):
 				if m is not None:
 					for el in m.group(1).split(' '):
 						el = el.strip()
-						if len(el) < 1 or el.startswith('-'):
+						if len(el) < 1 or el.startswith('-L'):
 							continue
 
-						if el in la or el in libraries:
+						if el.startswith('-l') and 'lib'+el[2:] in libnames:
+							pass
+						elif el in la or el in libraries:
 							pass
 						else:
 							if to_check:
@@ -66,7 +77,7 @@ def extract_dependencies_from_la(la, libraries, to_check, logger):
 								if not _break:
 									continue
 
-							logger.info(yellow(' * ') + f + ' is broken (requires: ' + bold(el))
+							logger.info(yellow(' * ') + f + ' is broken (requires: ' + bold(el)+')')
 							broken.append(f)
 	return broken
 
@@ -178,13 +189,15 @@ def analyse(settings, logger, libraries=None, la_libraries=None,
 		#call_program(['scanelf', '-M', str(bits), '-BF', '%F',] + libraries+libraries_links).strip().split('\n')
 
 		found_libs, dependencies = prepare_checks(libs_and_bins, _libraries, bits, settings['CMD_MAX_ARGS'])
-
+		#print dependencies
 		broken = find_broken(found_libs, _libraries, _libs_to_check)
-		broken_la = extract_dependencies_from_la(la_libraries, _libraries, _libs_to_check, logger)
 
 		bits /= 2
 		bits = int(bits)
 
+	broken_la = extract_dependencies_from_la(la_libraries, libraries+libraries_links, _libs_to_check, logger)
+
+
 	broken_pathes = main_checks(found_libs, broken, dependencies, logger)
 	broken_pathes += broken_la
 

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index b408edc..b7ed469 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -172,7 +172,7 @@ def collect_libraries_from_dir(dirs, mask, logger):
 									prv & stat.S_IXOTH == stat.S_IXOTH:
 								found_files.append(l)
 		except Exception as ex:
-			logger.debug(yellow('Exception during collecting libraries: %s' %str(ex)))
+			logger.debug(yellow('Exception during collecting libraries: ' + blue('%s')  %str(ex)))
 
 
 	if found_directories:
@@ -219,7 +219,7 @@ def collect_binaries_from_dir(dirs, mask, logger):
 								prv & stat.S_IXOTH == stat.S_IXOTH:
 							found_files.append(l)
 		except Exception as e:
-			logger.debug(yellow('Exception during binaries collecting: %s' %str(e)))
+			logger.debug(yellow('Exception during binaries collecting: '+blue('%s') %str(e)))
 
 	if found_directories:
 		found_files += collect_binaries_from_dir(found_directories, mask, logger)
@@ -240,7 +240,7 @@ if __name__ == '__main__':
 	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)
 
-	print 'Found: %i binaries and %i libraries.' %(len(binaries), len(libraries))
+	logging.debug('Found: %i binaries and %i libraries.' %(len(binaries), len(libraries)))
 
 
 

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index ef3a476..f77d98c 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -32,7 +32,7 @@ from settings import DEFAULTS
 
 
 APP_NAME = sys.argv[0]
-VERSION = '0.1-r6'
+VERSION = '0.1-r7'
 
 __productname__ = "revdep-ng"
 
@@ -232,5 +232,5 @@ def main(settings=None, logger=None):
 			'again or manually emerge given packages.')
 
 	success = rebuild(logger, assigned, settings)
-	logger.debug("rebuild return code =", success)
+	logger.debug("rebuild return code = %i" %success)
 	return success



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     aa3bfe1ebf070858e3f0dbea5727b1ef1f9616bd
Author:     dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Mon Apr 25 07:22:11 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:01 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=aa3bfe1e

move unused function to stuff.py

---
 pym/gentoolkit/revdep_rebuild/rebuild.py |    7 -------
 pym/gentoolkit/revdep_rebuild/stuff.py   |   10 +++++++++-
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 6c08f5b..e0ab7d1 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -71,13 +71,6 @@ def print_usage():
 	print 'and passed directly to emerge.'
 
 
-def _match_str_in_list(lst, stri):
-	for l in lst:
-		if stri.endswith(l):
-			return l
-	return False
-
-
 def init_logger(settings):
 	"""Creates and iitializes our logger according to the settings"""
 	logger = logging.getLogger()

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index 459301f..7b287b1 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -31,7 +31,6 @@ def scan(params, files, max_args):
 	return out
 
 
-
 def exithandler(signum, frame):
 	sys.exit(1)
 
@@ -43,5 +42,14 @@ def get_masking_status(ebuild):
 		status = ['unavailable']
 	return status
 
+
+def _match_str_in_list(lst, stri):
+	for l in lst:
+		if stri.endswith(l):
+			return l
+	return False
+
+
+
 if __name__ == '__main__':
 	print "There is nothing to run here."



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     145d392512611f94168419b2fa7aa6a0cf8dd7a1
Author:     dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Mon Apr 25 06:18:44 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:01 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=145d3925

migrate away from a global SETTINGS usage.
Better for tests and api usability.

---
 pym/gentoolkit/revdep_rebuild/analyse.py  |   21 ++++++++++-----------
 pym/gentoolkit/revdep_rebuild/assign.py   |   10 ++++------
 pym/gentoolkit/revdep_rebuild/cache.py    |    8 ++++----
 pym/gentoolkit/revdep_rebuild/collect.py  |   15 +++++++--------
 pym/gentoolkit/revdep_rebuild/settings.py |   17 +++++++++++++++--
 5 files changed, 40 insertions(+), 31 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index a9ac753..5ee0c7b 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -11,11 +11,9 @@ from stuff import scan
 from collect import prepare_search_dirs, parse_revdep_config, collect_libraries_from_dir, collect_binaries_from_dir
 from assign import assign_packages
 from cache import save_cache
-from settings import SETTINGS
 
 
-
-def prepare_checks(files_to_check, libraries, bits):
+def prepare_checks(files_to_check, libraries, bits, cmd_max_args):
 	''' Calls scanelf for all files_to_check, then returns found libraries and dependencies
 	'''
 
@@ -23,7 +21,7 @@ def prepare_checks(files_to_check, libraries, bits):
 	dependencies = [] # list of lists of files (from file_to_check) that uses
 					  # library (for dependencies[id] and libs[id] => id==id)
 
-	for line in scan(['-M', str(bits), '-nBF', '%F %n'], files_to_check, SETTINGS['CMD_MAX_ARGS']):
+	for line in scan(['-M', str(bits), '-nBF', '%F %n'], 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?
@@ -116,7 +114,8 @@ def main_checks(found_libs, broken, dependencies, logger):
 	return broken_pathes
 
 
-def analyse(logger=logging, libraries=None, la_libraries=None, libraries_links=None, binaries=None, _libs_to_check=set()):
+def analyse(settings=None, logger=None, libraries=None, la_libraries=None,
+		libraries_links=None, binaries=None, _libs_to_check=set()):
 	"""Main program body.  It will collect all info and determine the
 	pkgs needing rebuilding.
 
@@ -132,9 +131,9 @@ def analyse(logger=logging, libraries=None, la_libraries=None, libraries_links=N
 		#TODO: add partial cache (for ex. only libraries) when found for some reason
 
 		logger.warn(green(' * ') + bold('Collecting system binaries and libraries'))
-		bin_dirs, lib_dirs = prepare_search_dirs(logger)
+		bin_dirs, lib_dirs = prepare_search_dirs(logger, settings)
 
-		masked_dirs, masked_files, ld = parse_revdep_config()
+		masked_dirs, masked_files, ld = parse_revdep_config(settings['REVDEP_CONFDIR'])
 		lib_dirs = lib_dirs.union(ld)
 		bin_dirs = bin_dirs.union(ld)
 		masked_dirs = masked_dirs.union(set(['/lib/modules', '/lib32/modules', '/lib64/modules',]))
@@ -143,7 +142,7 @@ def analyse(logger=logging, libraries=None, la_libraries=None, libraries_links=N
 		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']:
+		if settings['USE_TMP_FILES']:
 			save_cache(to_save={'libraries':libraries, 'la_libraries':la_libraries, 'libraries_links':libraries_links, 'binaries':binaries})
 
 
@@ -170,10 +169,10 @@ def analyse(logger=logging, libraries=None, la_libraries=None, libraries_links=N
 
 	for av_bits in glob.glob('/lib[0-9]*') or ('/lib32',):
 		bits = int(av_bits[4:])
-		_libraries = scan(['-M', str(bits), '-BF', '%F'], libraries+libraries_links, SETTINGS['CMD_MAX_ARGS'])
+		_libraries = scan(['-M', str(bits), '-BF', '%F'], libraries+libraries_links, settings['CMD_MAX_ARGS'])
 		#call_program(['scanelf', '-M', str(bits), '-BF', '%F',] + libraries+libraries_links).strip().split('\n')
 
-		found_libs, dependencies = prepare_checks(libs_and_bins, _libraries, bits)
+		found_libs, dependencies = prepare_checks(libs_and_bins, _libraries, bits, settings['CMD_MAX_ARGS'])
 
 		broken = find_broken(found_libs, _libraries, _libs_to_check)
 		broken_la = extract_dependencies_from_la(la_libraries, _libraries, _libs_to_check, logger)
@@ -186,7 +185,7 @@ def analyse(logger=logging, libraries=None, la_libraries=None, libraries_links=N
 
 	logger.warn(green(' * ') + bold('Assign files to packages'))
 
-	return assign_packages(broken_pathes, logger)
+	return assign_packages(broken_pathes, logger, settings)
 
 
 

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index c4ae750..9eb177d 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -2,21 +2,19 @@
 
 import os
 import re
-import logging
 import portage
 from portage import portdb
 from portage.output import bold, red, blue, yellow, green, nocolor
-from settings import SETTINGS
 
 
-def assign_packages(broken, logger=logging):
+def assign_packages(broken, logger, settings):
 	''' Finds and returns packages that owns files placed in broken.
 		Broken is list of files
 	'''
 	assigned = set()
-	for group in os.listdir(SETTINGS['PKG_DIR']):
-		for pkg in os.listdir(SETTINGS['PKG_DIR'] + group):
-			f = SETTINGS['PKG_DIR'] + group + '/' + pkg + '/CONTENTS'
+	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:

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index 616ef79..e1a8e11 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -4,10 +4,10 @@ import os
 import time
 import logging
 from portage.output import red
-from settings import SETTINGS
+from settings import DEFAULTS
 
 
-def read_cache(temp_path=SETTINGS['DEFAULT_TMP_DIR']):
+def read_cache(temp_path=DEFAULTS['DEFAULT_TMP_DIR']):
 	''' Reads cache information needed by analyse function.
 		This function does not checks if files exists nor timestamps,
 		check_temp_files should be called first
@@ -29,7 +29,7 @@ def read_cache(temp_path=SETTINGS['DEFAULT_TMP_DIR']):
 	return (ret['libraries'], ret['la_libraries'], ret['libraries_links'], ret['binaries'])
 
 
-def save_cache(logger=logging, to_save={}, temp_path=SETTINGS['DEFAULT_TMP_DIR']):
+def save_cache(logger=logging, 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
@@ -53,7 +53,7 @@ def save_cache(logger=logging, to_save={}, temp_path=SETTINGS['DEFAULT_TMP_DIR']
 
 
 
-def check_temp_files(temp_path=SETTINGS['DEFAULT_TMP_DIR'], max_delay=3600):
+def check_temp_files(temp_path=DEFAULTS['DEFAULT_TMP_DIR'], max_delay=3600):
 	''' Checks if temporary files from previous run are still available
 		and if they aren't too old
 		@param temp_path is directory, where temporary files should be found

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index 613749a..735857b 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -7,10 +7,9 @@ import stat
 import logging
 import portage
 from portage.output import bold, red, blue, yellow, green, nocolor
-from settings import SETTINGS
 
 
-def parse_conf(conf_file=SETTINGS['DEFAULT_LD_FILE'], visited=None, logger=logging):
+def parse_conf(conf_file, visited=None, logger=None):
 	''' Parses supplied conf_file for libraries pathes.
 		conf_file is file or files to parse
 		visited is set of files already parsed
@@ -54,7 +53,7 @@ def parse_conf(conf_file=SETTINGS['DEFAULT_LD_FILE'], visited=None, logger=loggi
 	return lib_dirs
 
 
-def prepare_search_dirs(logger=logging):
+def prepare_search_dirs(logger, settings):
 	''' Lookup for search dirs. Returns tuple with two lists,
 		(list_of_bin_dirs, list_of_lib_dirs)
 	'''
@@ -63,7 +62,7 @@ def prepare_search_dirs(logger=logging):
 	lib_dirs = set(['/lib', '/usr/lib', ])
 
 	#try:
-	with open(os.path.join(portage.root, SETTINGS['DEFAULT_ENV_FILE']), 'r') as f:
+	with open(os.path.join(portage.root, settings['DEFAULT_ENV_FILE']), 'r') as f:
 		for line in f.readlines():
 			line = line.strip()
 			m = re.match("^export (ROOT)?PATH='([^']+)'", line)
@@ -72,11 +71,11 @@ def prepare_search_dirs(logger=logging):
 	#except EnvironmentError:
 		#logger.debug(yellow('Could not open file %s' % f))
 
-	lib_dirs = parse_conf(logger=logger)
+	lib_dirs = parse_conf(settings['DEFAULT_LD_FILE'], logger=logger)
 	return (bin_dirs, lib_dirs)
 
 
-def parse_revdep_config():
+def parse_revdep_config(revdep_confdir):
 	''' Parses all files under /etc/revdep-rebuild/ and returns
 		tuple of: (masked_dirs, masked_files, search_dirs)'''
 
@@ -85,7 +84,7 @@ def parse_revdep_config():
 	masked_files = set()
 
 	#TODO: remove hard-coded path
-	for f in os.listdir(SETTINGS['REVDEP_CONFDIR']):
+	for f in os.listdir(revdep_confdir):
 		for line in open(os.path.join('/etc/revdep-rebuild', f)):
 			line = line.strip()
 			if not line.startswith('#'): #first check for comment, we do not want to regex all lines
@@ -110,7 +109,7 @@ def parse_revdep_config():
 	return (masked_dirs, masked_files, search_dirs)
 
 
-def collect_libraries_from_dir(dirs, mask, logger=logging):
+def collect_libraries_from_dir(dirs, mask, logger):
 	''' Collects all libraries from specified list of directories.
 		mask is list of pathes, that are ommited in scanning, can be eighter single file or entire directory
 		Returns tuple composed of: list of libraries, list of symlinks, and toupe with pair

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index b47cb3e..7747ac2 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -1,9 +1,10 @@
 #!/usr/bin/python
 
 import os
+import sys
 import portage
 
-SETTINGS = {
+DEFAULTS = {
 		'DEFAULT_LD_FILE': os.path.join(portage.root, 'etc/ld.so.conf'),
 		'DEFAULT_ENV_FILE': os.path.join(portage.root, 'etc/profile.env'),
 		'REVDEP_CONFDIR': os.path.join(portage.root, 'etc/revdep-rebuild/'),
@@ -23,4 +24,16 @@ SETTINGS = {
 				# can be set True from the cli with the --no-pretend option
 		'NO_PRETEND': False,
 		'VERBOSITY': 1,
-	}
+		
+		'quiet': False,
+		'nocolor': False,
+		'library': set(),
+		'no-progress': False,
+		'debug': False,
+		'no-ld-path': False,
+		'no-order': False,
+		'pass_through_options': '',
+		'stdout': sys.stdout,
+		'stdin': sys.stdin,
+		'stderr': sys.stderr
+		}



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     f5f252ee461ee514bd13a4025ca47b268212ddb6
Author:     dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Sun Apr 24 22:24:01 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:01 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=f5f252ee

convert to gentoolkit's standard tab indent.

---
 pym/gentoolkit/revdep_rebuild/analyse.py  |  268 +++++++++---------
 pym/gentoolkit/revdep_rebuild/assign.py   |  136 +++++-----
 pym/gentoolkit/revdep_rebuild/cache.py    |  138 +++++-----
 pym/gentoolkit/revdep_rebuild/collect.py  |  416 ++++++++++++++--------------
 pym/gentoolkit/revdep_rebuild/settings.py |   32 ++--
 pym/gentoolkit/revdep_rebuild/stuff.py    |   48 ++--
 6 files changed, 519 insertions(+), 519 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index c1c755b..a9ac753 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -16,179 +16,179 @@ from settings import SETTINGS
 
 
 def prepare_checks(files_to_check, libraries, bits):
-    ''' 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)
-
-    for line in scan(['-M', str(bits), '-nBF', '%F %n'], files_to_check, SETTINGS['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 = r[1].split(',')
-        for d in deps:
-            if d in libs:
-                i = libs.index(d)
-                dependencies[i].append(r[0])
-            else:
-                libs.append(d)
-                dependencies.append([r[0],])
-    return (libs, 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)
+
+	for line in scan(['-M', str(bits), '-nBF', '%F %n'], files_to_check, SETTINGS['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 = r[1].split(',')
+		for d in deps:
+			if d in libs:
+				i = libs.index(d)
+				dependencies[i].append(r[0])
+			else:
+				libs.append(d)
+				dependencies.append([r[0],])
+	return (libs, dependencies)
 
 
 def extract_dependencies_from_la(la, libraries, to_check, logger):
-    broken = []
-    for f in la:
-        if not os.path.exists(f):
-            continue
-
-        for line in open(f, 'r').readlines():
-            line = line.strip()
-            if line.startswith('dependency_libs='):
-                m = re.match("dependency_libs='([^']+)'", line)
-                if m is not None:
-                    for el in m.group(1).split(' '):
-                        el = el.strip()
-                        if len(el) < 1 or el.startswith('-'):
-                            continue
-
-                        if el in la or el in libraries:
-                            pass
-                        else:
-                            if to_check:
-                                _break = False
-                                for tc in to_check:
-                                    if tc in el:
-                                        _break = True
-                                        break
-                                if not _break:
-                                    continue
-
-                            logger.info(yellow(' * ') + f + ' is broken (requires: ' + bold(el))
-                            broken.append(f)
-    return broken
+	broken = []
+	for f in la:
+		if not os.path.exists(f):
+			continue
+
+		for line in open(f, 'r').readlines():
+			line = line.strip()
+			if line.startswith('dependency_libs='):
+				m = re.match("dependency_libs='([^']+)'", line)
+				if m is not None:
+					for el in m.group(1).split(' '):
+						el = el.strip()
+						if len(el) < 1 or el.startswith('-'):
+							continue
+
+						if el in la or el in libraries:
+							pass
+						else:
+							if to_check:
+								_break = False
+								for tc in to_check:
+									if tc in el:
+										_break = True
+										break
+								if not _break:
+									continue
+
+							logger.info(yellow(' * ') + f + ' is broken (requires: ' + bold(el))
+							broken.append(f)
+	return broken
 
 
 def find_broken(found_libs, system_libraries, to_check):
-    ''' Search for broken libraries.
-        Check if system_libraries contains found_libs, where
-        system_libraries is list of obsolute pathes and found_libs
-        is list of library names.
-    '''
+	''' Search for broken libraries.
+		Check if system_libraries contains found_libs, where
+		system_libraries is list of obsolute pathes and found_libs
+		is list of library names.
+	'''
 
-    # join libraries and looking at it as string is way too faster than for-jumping
+	# join libraries and looking at it as string is way too faster than for-jumping
 
-    broken = []
-    sl = '|'.join(system_libraries)
+	broken = []
+	sl = '|'.join(system_libraries)
 
-    if not to_check:
-        for f in found_libs:
-            if f+'|' not in sl:
-                broken.append(found_libs.index(f))
-    else:
-        for tc in to_check:
-            for f in found_libs:
-                if tc in f:# and f+'|' not in sl:
-                    broken.append(found_libs.index(f))
+	if not to_check:
+		for f in found_libs:
+			if f+'|' not in sl:
+				broken.append(found_libs.index(f))
+	else:
+		for tc in to_check:
+			for f in found_libs:
+				if tc in f:# and f+'|' not in sl:
+					broken.append(found_libs.index(f))
 
-    return broken
+	return broken
 
 
 def main_checks(found_libs, broken, 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
-        dependencies is the value returned by prepare_checks
-    '''
+	''' Checks for broken dependencies.
+		found_libs have to be the same as returned by prepare_checks
+		broken is list of libraries found by scanelf
+		dependencies is the value returned by prepare_checks
+	'''
 
-    broken_pathes = []
+	broken_pathes = []
 
-    for b in broken:
-        f = found_libs[b]
-        logger.info('Broken files that requires: ' + bold(f))
-        for d in dependencies[b]:
-            logger.info(yellow(' * ') + d)
-            broken_pathes.append(d)
-    return broken_pathes
+	for b in broken:
+		f = found_libs[b]
+		logger.info('Broken files that requires: ' + bold(f))
+		for d in dependencies[b]:
+			logger.info(yellow(' * ') + d)
+			broken_pathes.append(d)
+	return broken_pathes
 
 
 def analyse(logger=logging, libraries=None, la_libraries=None, libraries_links=None, binaries=None, _libs_to_check=set()):
-    """Main program body.  It will collect all info and determine the
-    pkgs needing rebuilding.
+	"""Main program body.  It will collect all info and determine the
+	pkgs needing rebuilding.
 
-    @param logger: logger used for logging messages, instance of logging.Logger
-                   class. Can be logging (RootLogger).
-    @param _libs_to_check Libraries that need to be checked only
-    @rtype list: list of pkgs that need rebuilding
-    """
+	@param logger: logger used for logging messages, instance of logging.Logger
+				   class. Can be logging (RootLogger).
+	@param _libs_to_check Libraries that need to be checked only
+	@rtype list: list of pkgs that need rebuilding
+	"""
 
-    if libraries and la_libraries and libraries_links and binaries:
-        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
+	if libraries and la_libraries and libraries_links and binaries:
+		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
 
-        logger.warn(green(' * ') + bold('Collecting system binaries and libraries'))
-        bin_dirs, lib_dirs = prepare_search_dirs(logger)
+		logger.warn(green(' * ') + bold('Collecting system binaries and libraries'))
+		bin_dirs, lib_dirs = prepare_search_dirs(logger)
 
-        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_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',]))
 
-        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)
+		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']:
-            save_cache(to_save={'libraries':libraries, 'la_libraries':la_libraries, 'libraries_links':libraries_links, 'binaries':binaries})
+		if SETTINGS['USE_TMP_FILES']:
+			save_cache(to_save={'libraries':libraries, 'la_libraries':la_libraries, 'libraries_links':libraries_links, 'binaries':binaries})
 
 
-    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.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.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
 
-    #l = []
-    #for line in call_program(['scanelf', '-M', '64', '-BF', '%F',] + libraries).strip().split('\n'):
-        #l.append(line)
-    #libraries = l
+	#l = []
+	#for line in call_program(['scanelf', '-M', '64', '-BF', '%F',] + libraries).strip().split('\n'):
+		#l.append(line)
+	#libraries = l
 
-    found_libs = []
-    dependencies = []
+	found_libs = []
+	dependencies = []
 
 
-    _bits, linkg = platform.architecture()
-    if _bits.startswith('32'):
-        bits = 32
-    elif _bits.startswith('64'):
-        bits = 64
+	_bits, linkg = platform.architecture()
+	if _bits.startswith('32'):
+		bits = 32
+	elif _bits.startswith('64'):
+		bits = 64
 
-    for av_bits in glob.glob('/lib[0-9]*') or ('/lib32',):
-        bits = int(av_bits[4:])
-        _libraries = scan(['-M', str(bits), '-BF', '%F'], libraries+libraries_links, SETTINGS['CMD_MAX_ARGS'])
-        #call_program(['scanelf', '-M', str(bits), '-BF', '%F',] + libraries+libraries_links).strip().split('\n')
+	for av_bits in glob.glob('/lib[0-9]*') or ('/lib32',):
+		bits = int(av_bits[4:])
+		_libraries = scan(['-M', str(bits), '-BF', '%F'], libraries+libraries_links, SETTINGS['CMD_MAX_ARGS'])
+		#call_program(['scanelf', '-M', str(bits), '-BF', '%F',] + libraries+libraries_links).strip().split('\n')
 
-        found_libs, dependencies = prepare_checks(libs_and_bins, _libraries, bits)
+		found_libs, dependencies = prepare_checks(libs_and_bins, _libraries, bits)
 
-        broken = find_broken(found_libs, _libraries, _libs_to_check)
-        broken_la = extract_dependencies_from_la(la_libraries, _libraries, _libs_to_check, logger)
+		broken = find_broken(found_libs, _libraries, _libs_to_check)
+		broken_la = extract_dependencies_from_la(la_libraries, _libraries, _libs_to_check, logger)
 
-        bits /= 2
-        bits = int(bits)
+		bits /= 2
+		bits = int(bits)
 
-    broken_pathes = main_checks(found_libs, broken, dependencies, logger)
-    broken_pathes += broken_la
+	broken_pathes = main_checks(found_libs, broken, dependencies, logger)
+	broken_pathes += broken_la
 
-    logger.warn(green(' * ') + bold('Assign files to packages'))
+	logger.warn(green(' * ') + bold('Assign files to packages'))
 
-    return assign_packages(broken_pathes, logger)
+	return assign_packages(broken_pathes, logger)
 
 
 
 if __name__ == '__main__':
-    print "This script shouldn't be called directly"
+	print "This script shouldn't be called directly"

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index 6dcf6e3..c4ae750 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -10,84 +10,84 @@ from settings import SETTINGS
 
 
 def assign_packages(broken, logger=logging):
-    ''' Finds and returns packages that owns files placed in broken.
-        Broken is list of files
-    '''
-    assigned = set()
-    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))
-
-    return assigned
+	''' Finds and returns packages that owns files placed in broken.
+		Broken is list of files
+	'''
+	assigned = set()
+	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))
+
+	return assigned
 
 
 def get_best_match(cpv, cp, logger):
-    """Tries to find another version of the pkg with the same slot
-    as the deprecated installed version.  Failing that attempt to get any version
-    of the same app
-
-    @param cpv: string
-    @param cp: string
-    @rtype tuple: ([cpv,...], SLOT)
-    """
-
-    slot = portage.db[portage.root]["vartree"].dbapi.aux_get(cpv, ["SLOT"])
-    logger.warn(yellow('Warning: ebuild "' + cpv + '" not found.'))
-    logger.info('Looking for %s:%s' %(cp, slot))
-    try:
-        m = portdb.match('%s:%s' %(cp, slot))
-    except portage.exception.InvalidAtom:
-        m = None
-
-    if not m:
-        logger.warn(red('!!') + ' ' + yellow('Could not find ebuild for %s:%s' %(cp, slot)))
-        slot = ['']
-        m = portdb.match(cp)
-        if not m:
-            logger.warn(red('!!') + ' ' + yellow('Could not find ebuild for ' + cp))
-    return m, slot
+	"""Tries to find another version of the pkg with the same slot
+	as the deprecated installed version.  Failing that attempt to get any version
+	of the same app
+
+	@param cpv: string
+	@param cp: string
+	@rtype tuple: ([cpv,...], SLOT)
+	"""
+
+	slot = portage.db[portage.root]["vartree"].dbapi.aux_get(cpv, ["SLOT"])
+	logger.warn(yellow('Warning: ebuild "' + cpv + '" not found.'))
+	logger.info('Looking for %s:%s' %(cp, slot))
+	try:
+		m = portdb.match('%s:%s' %(cp, slot))
+	except portage.exception.InvalidAtom:
+		m = None
+
+	if not m:
+		logger.warn(red('!!') + ' ' + yellow('Could not find ebuild for %s:%s' %(cp, slot)))
+		slot = ['']
+		m = portdb.match(cp)
+		if not m:
+			logger.warn(red('!!') + ' ' + yellow('Could not find ebuild for ' + cp))
+	return m, slot
 
 
 def get_slotted_cps(cpvs, logger):
-    """Uses portage to reduce the cpv list into a cp:slot list and returns it
-    """
-    from portage.versions import catpkgsplit
-    from portage import portdb
+	"""Uses portage to reduce the cpv list into a cp:slot list and returns it
+	"""
+	from portage.versions import catpkgsplit
+	from portage import portdb
 
-    cps = []
-    for cpv in cpvs:
-        parts = catpkgsplit(cpv)
-        cp = parts[0] + '/' + parts[1]
-        try:
-            slot = portdb.aux_get(cpv, ["SLOT"])
-        except KeyError:
-            m, slot = get_best_match(cpv, cp, logger)
-            if not m:
-                logger.warn(red("Installed package: %s is no longer available" %cp))
-                continue
+	cps = []
+	for cpv in cpvs:
+		parts = catpkgsplit(cpv)
+		cp = parts[0] + '/' + parts[1]
+		try:
+			slot = portdb.aux_get(cpv, ["SLOT"])
+		except KeyError:
+			m, slot = get_best_match(cpv, cp, logger)
+			if not m:
+				logger.warn(red("Installed package: %s is no longer available" %cp))
+				continue
 
-        if slot[0]:
-            cps.append(cp + ":" + slot[0])
-        else:
-            cps.append(cp)
+		if slot[0]:
+			cps.append(cp + ":" + slot[0])
+		else:
+			cps.append(cp)
 
-    return cps
+	return cps
 
 
 
 if __name__ == '__main__':
-    print 'Nothing to call here'
+	print 'Nothing to call here'

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index 421e22d..616ef79 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -8,96 +8,96 @@ from settings import SETTINGS
 
 
 def read_cache(temp_path=SETTINGS['DEFAULT_TMP_DIR']):
-    ''' Reads cache information needed by analyse function.
-        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
-    '''
-
-    ret = {'libraries':[], 'la_libraries':[], 'libraries_links':[], 'binaries':[]}
-    try:
-        for key,val in ret.iteritems():
-            f = open(os.path.join(temp_path, key))
-            for line in f.readlines():
-                val.append(line.strip())
-            #libraries.remove('\n')
-            f.close()
-    except EnvironmentError:
-        pass
-
-    return (ret['libraries'], ret['la_libraries'], ret['libraries_links'], ret['binaries'])
+	''' Reads cache information needed by analyse function.
+		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
+	'''
+
+	ret = {'libraries':[], 'la_libraries':[], 'libraries_links':[], 'binaries':[]}
+	try:
+		for key,val in ret.iteritems():
+			f = open(os.path.join(temp_path, key))
+			for line in f.readlines():
+				val.append(line.strip())
+			#libraries.remove('\n')
+			f.close()
+	except EnvironmentError:
+		pass
+
+	return (ret['libraries'], ret['la_libraries'], ret['libraries_links'], ret['binaries'])
 
 
 def save_cache(logger=logging, to_save={}, temp_path=SETTINGS['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
-    '''
+	''' Tries to store caching information.
+		@param logger
+		@param to_save have to be dict with keys: libraries, la_libraries, libraries_links and binaries
+	'''
 
-    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()
+	try:
+		f = open(os.path.join(temp_path, 'timestamp'), 'w')
+		f.write(str(int(time.time())))
+		f.close()
 
-        for key,val in to_save.iteritems():
-            f = open(os.path.join(temp_path, key), 'w')
-            for line in val:
-                f.write(line + '\n')
-            f.close()
-    except Exception as ex:
-        logger.warn(red('Could not save cache: %s' %str(ex)))
+		for key,val in to_save.iteritems():
+			f = open(os.path.join(temp_path, key), 'w')
+			for line in val:
+				f.write(line + '\n')
+			f.close()
+	except Exception as ex:
+		logger.warn(red('Could not save cache: %s' %str(ex)))
 
 
 
 def check_temp_files(temp_path=SETTINGS['DEFAULT_TMP_DIR'], max_delay=3600):
-    ''' Checks if temporary files from previous run are still available
-        and if they aren't too old
-        @param temp_path is directory, where temporary files should be found
-        @param max_delay is maximum time difference (in seconds) when those files
-                are still considered fresh and useful
-        returns True, when files can be used, or False, when they don't
-        exists or they are too old
-    '''
+	''' Checks if temporary files from previous run are still available
+		and if they aren't too old
+		@param temp_path is directory, where temporary files should be found
+		@param max_delay is maximum time difference (in seconds) when those files
+				are still considered fresh and useful
+		returns True, when files can be used, or False, when they don't
+		exists or they are too old
+	'''
 
-    if not os.path.exists(temp_path) or not os.path.isdir(temp_path):
-        return False
+	if not os.path.exists(temp_path) or not os.path.isdir(temp_path):
+		return False
 
-    timestamp_path = os.path.join(temp_path, 'timestamp')
-    if not os.path.exists(timestamp_path) or not os.path.isfile(timestamp_path):
-        return False
+	timestamp_path = os.path.join(temp_path, 'timestamp')
+	if not os.path.exists(timestamp_path) or not os.path.isfile(timestamp_path):
+		return False
 
-    try:
-        f = open(timestamp_path)
-        timestamp = int(f.readline())
-        f.close()
-    except:
-        timestamp = 0
-        return False
+	try:
+		f = open(timestamp_path)
+		timestamp = int(f.readline())
+		f.close()
+	except:
+		timestamp = 0
+		return False
 
-    diff = int(time.time()) - timestamp
-    return max_delay > diff
+	diff = int(time.time()) - timestamp
+	return max_delay > diff
 
 
 
 if __name__ == '__main__':
-    print 'Preparing cache ... '
+	print 'Preparing cache ... '
 
-    from collect import *
+	from collect import *
 
-    bin_dirs, lib_dirs = prepare_search_dirs()
+	bin_dirs, lib_dirs = prepare_search_dirs()
 
-    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_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)
-    binaries = collect_binaries_from_dir(bin_dirs, masked_dirs)
+	libraries, la_libraries, libraries_links, symlink_pairs = collect_libraries_from_dir(lib_dirs, masked_dirs)
+	binaries = collect_binaries_from_dir(bin_dirs, masked_dirs)
 
-    save_cache(to_save={'libraries':libraries, 'la_libraries':la_libraries, 'libraries_links':libraries_links, 'binaries':binaries})
+	save_cache(to_save={'libraries':libraries, 'la_libraries':la_libraries, 'libraries_links':libraries_links, 'binaries':binaries})
 
-    print 'Done.'
+	print 'Done.'

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index 4a0714b..613749a 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -11,236 +11,236 @@ from settings import SETTINGS
 
 
 def parse_conf(conf_file=SETTINGS['DEFAULT_LD_FILE'], visited=None, logger=logging):
-    ''' Parses supplied conf_file for libraries pathes.
-        conf_file is file or files to parse
-        visited is set of files already parsed
-    '''
-    lib_dirs = set()
-    to_parse = set()
-
-    if isinstance(conf_file, basestring):
-        conf_file = [conf_file]
-
-    for conf in conf_file:
-        try:
-            with open(conf) as f:
-                for line in f.readlines():
-                    line = line.strip()
-                    if line.startswith('#'):
-                        continue
-                    elif line.startswith('include'):
-                        include_line = line.split()[1:]
-                        for included in include_line:
-                            if not included.startswith('/'):
-                                path = os.path.join(os.path.dirname(conf), \
-                                                    included)
-                            else:
-                                path = included
-
-                            to_parse = to_parse.union(glob.glob(path))
-                    else:
-                        lib_dirs.add(line)
-        except EnvironmentError:
-            logger.warn(yellow('Error when parsing file %s' %conf))
-
-    if visited is None:
-        visited = set()
-
-    visited = visited.union(conf_file)
-    to_parse = to_parse.difference(visited)
-    if to_parse:
-        lib_dirs = lib_dirs.union(parse_conf(to_parse, visited, logger=logger))
-
-    return lib_dirs
+	''' Parses supplied conf_file for libraries pathes.
+		conf_file is file or files to parse
+		visited is set of files already parsed
+	'''
+	lib_dirs = set()
+	to_parse = set()
+
+	if isinstance(conf_file, basestring):
+		conf_file = [conf_file]
+
+	for conf in conf_file:
+		try:
+			with open(conf) as f:
+				for line in f.readlines():
+					line = line.strip()
+					if line.startswith('#'):
+						continue
+					elif line.startswith('include'):
+						include_line = line.split()[1:]
+						for included in include_line:
+							if not included.startswith('/'):
+								path = os.path.join(os.path.dirname(conf), \
+													included)
+							else:
+								path = included
+
+							to_parse = to_parse.union(glob.glob(path))
+					else:
+						lib_dirs.add(line)
+		except EnvironmentError:
+			logger.warn(yellow('Error when parsing file %s' %conf))
+
+	if visited is None:
+		visited = set()
+
+	visited = visited.union(conf_file)
+	to_parse = to_parse.difference(visited)
+	if to_parse:
+		lib_dirs = lib_dirs.union(parse_conf(to_parse, visited, logger=logger))
+
+	return lib_dirs
 
 
 def prepare_search_dirs(logger=logging):
-    ''' Lookup for search dirs. Returns tuple with two lists,
-        (list_of_bin_dirs, list_of_lib_dirs)
-    '''
+	''' Lookup for search dirs. Returns tuple with two lists,
+		(list_of_bin_dirs, list_of_lib_dirs)
+	'''
 
-    bin_dirs = set(['/bin', '/usr/bin', ])
-    lib_dirs = set(['/lib', '/usr/lib', ])
+	bin_dirs = set(['/bin', '/usr/bin', ])
+	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():
-            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(':')))
-    #except EnvironmentError:
-        #logger.debug(yellow('Could not open file %s' % f))
+	#try:
+	with open(os.path.join(portage.root, SETTINGS['DEFAULT_ENV_FILE']), 'r') as f:
+		for line in f.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(':')))
+	#except EnvironmentError:
+		#logger.debug(yellow('Could not open file %s' % f))
 
-    lib_dirs = parse_conf(logger=logger)
-    return (bin_dirs, lib_dirs)
+	lib_dirs = parse_conf(logger=logger)
+	return (bin_dirs, lib_dirs)
 
 
 def parse_revdep_config():
-    ''' Parses all files under /etc/revdep-rebuild/ and returns
-        tuple of: (masked_dirs, masked_files, search_dirs)'''
-
-    search_dirs = set()
-    masked_dirs = set()
-    masked_files = set()
-
-    #TODO: remove hard-coded path
-    for f in os.listdir(SETTINGS['REVDEP_CONFDIR']):
-        for line in open(os.path.join('/etc/revdep-rebuild', f)):
-            line = line.strip()
-            if not line.startswith('#'): #first check for comment, we do not want to regex all lines
-                m = re.match('LD_LIBRARY_MASK=\\"([^"]+)\\"', line)
-                if m is not None:
-                    s = m.group(1).split(' ')
-                    masked_files = masked_files.union(s)
-                    continue
-                m = re.match('SEARCH_DIRS_MASK=\\"([^"]+)\\"', line)
-                if m is not None:
-                    s = m.group(1).split(' ')
-                    for ss in s:
-                        masked_dirs = masked_dirs.union(glob.glob(ss))
-                    continue
-                m = re.match('SEARCH_DIRS=\\"([^"]+)\\"', line)
-                if m is not None:
-                    s = m.group(1).split()
-                    for ss in s:
-                        search_dirs = search_dirs.union(glob.glob(ss))
-                    continue
-
-    return (masked_dirs, masked_files, search_dirs)
+	''' Parses all files under /etc/revdep-rebuild/ and returns
+		tuple of: (masked_dirs, masked_files, search_dirs)'''
+
+	search_dirs = set()
+	masked_dirs = set()
+	masked_files = set()
+
+	#TODO: remove hard-coded path
+	for f in os.listdir(SETTINGS['REVDEP_CONFDIR']):
+		for line in open(os.path.join('/etc/revdep-rebuild', f)):
+			line = line.strip()
+			if not line.startswith('#'): #first check for comment, we do not want to regex all lines
+				m = re.match('LD_LIBRARY_MASK=\\"([^"]+)\\"', line)
+				if m is not None:
+					s = m.group(1).split(' ')
+					masked_files = masked_files.union(s)
+					continue
+				m = re.match('SEARCH_DIRS_MASK=\\"([^"]+)\\"', line)
+				if m is not None:
+					s = m.group(1).split(' ')
+					for ss in s:
+						masked_dirs = masked_dirs.union(glob.glob(ss))
+					continue
+				m = re.match('SEARCH_DIRS=\\"([^"]+)\\"', line)
+				if m is not None:
+					s = m.group(1).split()
+					for ss in s:
+						search_dirs = search_dirs.union(glob.glob(ss))
+					continue
+
+	return (masked_dirs, masked_files, search_dirs)
 
 
 def collect_libraries_from_dir(dirs, mask, logger=logging):
-    ''' Collects all libraries from specified list of directories.
-        mask is list of pathes, that are ommited in scanning, can be eighter single file or entire directory
-        Returns tuple composed of: list of libraries, list of symlinks, and toupe with pair
-        (symlink_id, library_id) for resolving dependencies
-    '''
-
-
-    found_directories = []  # contains list of directories found; allow us to reduce number of fnc calls
-    found_files = []
-    found_symlinks = []
-    found_la_files = [] # la libraries
-    symlink_pairs = []  # list of pairs symlink_id->library_id
-
-    for d in dirs:
-        if d in mask:
-            continue
-
-        try:
-            for l in os.listdir(d):
-                l = os.path.join(d, l)
-                if l in mask:
-                    continue
-
-                if os.path.isdir(l):
-                    if os.path.islink(l):
-                        #we do not want scan symlink-directories
-                        pass
-                    else:
-                        found_directories.append(l)
-                elif os.path.isfile(l):
-                    if l.endswith('.so') or '.so.' in l:
-                        if l in found_files or l in found_symlinks:
-                            continue
-
-                        if os.path.islink(l):
-                            found_symlinks.append(l)
-                            abs_path = os.path.realpath(l)
-                            if abs_path in found_files:
-                                i = found_files.index(abs_path)
-                            else:
-                                found_files.append(abs_path)
-                                i = len(found_files)-1
-                            symlink_pairs.append((len(found_symlinks)-1, i,))
-                        else:
-                            found_files.append(l)
-                        continue
-                    elif l.endswith('.la'):
-                        if l in found_la_files:
-                            continue
-
-                        found_la_files.append(l)
-                    else:
-                        # sometimes there are binaries in libs' subdir, for example in nagios
-                        if not os.path.islink(l):
-                            if l in found_files or l in found_symlinks:
-                                continue
-                            prv = os.stat(l)[stat.ST_MODE]
-                            if prv & stat.S_IXUSR == stat.S_IXUSR or \
-                                    prv & stat.S_IXGRP == stat.S_IXGRP or \
-                                    prv & stat.S_IXOTH == stat.S_IXOTH:
-                                found_files.append(l)
-        except Exception as ex:
-            logger.debug(yellow('Exception during collecting libraries: %s' %str(ex)))
-
-
-    if found_directories:
-        f,a,l,p = collect_libraries_from_dir(found_directories, mask, logger)
-        found_files+=f
-        found_la_files+=a
-        found_symlinks+=l
-        symlink_pairs+=p
-
-    return (found_files, found_la_files, found_symlinks, symlink_pairs)
+	''' Collects all libraries from specified list of directories.
+		mask is list of pathes, that are ommited in scanning, can be eighter single file or entire directory
+		Returns tuple composed of: list of libraries, list of symlinks, and toupe with pair
+		(symlink_id, library_id) for resolving dependencies
+	'''
+
+
+	found_directories = []  # contains list of directories found; allow us to reduce number of fnc calls
+	found_files = []
+	found_symlinks = []
+	found_la_files = [] # la libraries
+	symlink_pairs = []  # list of pairs symlink_id->library_id
+
+	for d in dirs:
+		if d in mask:
+			continue
+
+		try:
+			for l in os.listdir(d):
+				l = os.path.join(d, l)
+				if l in mask:
+					continue
+
+				if os.path.isdir(l):
+					if os.path.islink(l):
+						#we do not want scan symlink-directories
+						pass
+					else:
+						found_directories.append(l)
+				elif os.path.isfile(l):
+					if l.endswith('.so') or '.so.' in l:
+						if l in found_files or l in found_symlinks:
+							continue
+
+						if os.path.islink(l):
+							found_symlinks.append(l)
+							abs_path = os.path.realpath(l)
+							if abs_path in found_files:
+								i = found_files.index(abs_path)
+							else:
+								found_files.append(abs_path)
+								i = len(found_files)-1
+							symlink_pairs.append((len(found_symlinks)-1, i,))
+						else:
+							found_files.append(l)
+						continue
+					elif l.endswith('.la'):
+						if l in found_la_files:
+							continue
+
+						found_la_files.append(l)
+					else:
+						# sometimes there are binaries in libs' subdir, for example in nagios
+						if not os.path.islink(l):
+							if l in found_files or l in found_symlinks:
+								continue
+							prv = os.stat(l)[stat.ST_MODE]
+							if prv & stat.S_IXUSR == stat.S_IXUSR or \
+									prv & stat.S_IXGRP == stat.S_IXGRP or \
+									prv & stat.S_IXOTH == stat.S_IXOTH:
+								found_files.append(l)
+		except Exception as ex:
+			logger.debug(yellow('Exception during collecting libraries: %s' %str(ex)))
+
+
+	if found_directories:
+		f,a,l,p = collect_libraries_from_dir(found_directories, mask, logger)
+		found_files+=f
+		found_la_files+=a
+		found_symlinks+=l
+		symlink_pairs+=p
+
+	return (found_files, found_la_files, found_symlinks, symlink_pairs)
 
 
 def collect_binaries_from_dir(dirs, mask, logger=logging):
-    ''' Collects all binaries from specified list of directories.
-        mask is list of pathes, that are ommited in scanning, can be eighter single file or entire directory
-        Returns list of binaries
-    '''
-
-    found_directories = []  # contains list of directories found; allow us to reduce number of fnc calls
-    found_files = []
-
-    for d in dirs:
-        if d in mask:
-            continue
-
-        try:
-            for l in os.listdir(d):
-                l = os.path.join(d, l)
-                if d in mask:
-                    continue
-
-                if os.path.isdir(l):
-                    if os.path.islink(l):
-                        #we do not want scan symlink-directories
-                        pass
-                    else:
-                        found_directories.append(l)
-                elif os.path.isfile(l):
-                    #we're looking for binaries, and with binaries we do not need links, thus we can optimize a bit
-                    if not os.path.islink(l):
-                        prv = os.stat(l)[stat.ST_MODE]
-                        if prv & stat.S_IXUSR == stat.S_IXUSR or \
-                                prv & stat.S_IXGRP == stat.S_IXGRP or \
-                                prv & stat.S_IXOTH == stat.S_IXOTH:
-                            found_files.append(l)
-        except Exception as e:
-            logger.debug(yellow('Exception during binaries collecting: %s' %str(e)))
-
-    if found_directories:
-        found_files += collect_binaries_from_dir(found_directories, mask, logger)
-
-    return found_files
+	''' Collects all binaries from specified list of directories.
+		mask is list of pathes, that are ommited in scanning, can be eighter single file or entire directory
+		Returns list of binaries
+	'''
+
+	found_directories = []  # contains list of directories found; allow us to reduce number of fnc calls
+	found_files = []
+
+	for d in dirs:
+		if d in mask:
+			continue
+
+		try:
+			for l in os.listdir(d):
+				l = os.path.join(d, l)
+				if d in mask:
+					continue
+
+				if os.path.isdir(l):
+					if os.path.islink(l):
+						#we do not want scan symlink-directories
+						pass
+					else:
+						found_directories.append(l)
+				elif os.path.isfile(l):
+					#we're looking for binaries, and with binaries we do not need links, thus we can optimize a bit
+					if not os.path.islink(l):
+						prv = os.stat(l)[stat.ST_MODE]
+						if prv & stat.S_IXUSR == stat.S_IXUSR or \
+								prv & stat.S_IXGRP == stat.S_IXGRP or \
+								prv & stat.S_IXOTH == stat.S_IXOTH:
+							found_files.append(l)
+		except Exception as e:
+			logger.debug(yellow('Exception during binaries collecting: %s' %str(e)))
+
+	if found_directories:
+		found_files += collect_binaries_from_dir(found_directories, mask, logger)
+
+	return found_files
 
 
 
 if __name__ == '__main__':
-    bin_dirs, lib_dirs = prepare_search_dirs(logging)
+	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',]))
+	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)
+	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)
 
-    print 'Found: %i binaries and %i libraries.' %(len(binaries), len(libraries))
+	print 'Found: %i binaries and %i libraries.' %(len(binaries), len(libraries))
 
 
 

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index ea6b1ec..b47cb3e 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -4,23 +4,23 @@ import os
 import portage
 
 SETTINGS = {
-        'DEFAULT_LD_FILE': os.path.join(portage.root, 'etc/ld.so.conf'),
-        'DEFAULT_ENV_FILE': os.path.join(portage.root, 'etc/profile.env'),
-        'REVDEP_CONFDIR': os.path.join(portage.root, 'etc/revdep-rebuild/'),
-        'PKG_DIR': os.path.join(portage.root, 'var/db/pkg/'),
-        'DEFAULT_TMP_DIR': '/tmp/revdep-rebuild', #cache default location
+		'DEFAULT_LD_FILE': os.path.join(portage.root, 'etc/ld.so.conf'),
+		'DEFAULT_ENV_FILE': os.path.join(portage.root, 'etc/profile.env'),
+		'REVDEP_CONFDIR': os.path.join(portage.root, 'etc/revdep-rebuild/'),
+		'PKG_DIR': os.path.join(portage.root, 'var/db/pkg/'),
+		'DEFAULT_TMP_DIR': '/tmp/revdep-rebuild', #cache default location
 
 
-        'USE_TMP_FILES': True, #if program should use temporary files from previous run
-        'CMD_MAX_ARGS': 1000, # number of maximum allowed files to be parsed at once
+		'USE_TMP_FILES': True, #if program should use temporary files from previous run
+		'CMD_MAX_ARGS': 1000, # number of maximum allowed files to be parsed at once
 
-        'PRETEND': False,     #pretend only
-        'EXACT': False,      #exact package version
-        'USE_TMP_FILES': True, #if program should use temporary files from previous run
+		'PRETEND': False,     #pretend only
+		'EXACT': False,      #exact package version
+		'USE_TMP_FILES': True, #if program should use temporary files from previous run
 
-        'IS_DEV': True,       #True for dev. version, False for stable
-                #used when IS_DEV is True, False forces to call emerge with --pretend
-                # can be set True from the cli with the --no-pretend option
-        'NO_PRETEND': False,
-        'VERBOSITY': 1,
-    }
+		'IS_DEV': True,       #True for dev. version, False for stable
+				#used when IS_DEV is True, False forces to call emerge with --pretend
+				# can be set True from the cli with the --no-pretend option
+		'NO_PRETEND': False,
+		'VERBOSITY': 1,
+	}

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index d153908..b1b6709 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -6,41 +6,41 @@ import portage
 
 # util. functions
 def call_program(args):
-    ''' Calls program with specified parameters and returns stdout '''
-    subp = subprocess.Popen(args, stdout=subprocess.PIPE, \
-                                stderr=subprocess.PIPE)
-    stdout, stderr = subp.communicate()
-    return stdout
+	''' Calls program with specified parameters and returns stdout '''
+	subp = subprocess.Popen(args, stdout=subprocess.PIPE, \
+								stderr=subprocess.PIPE)
+	stdout, stderr = subp.communicate()
+	return stdout
 
 
 def scan(params, files, max_args):
-    ''' Calls scanelf with given params and files to scan.
-        @param params is list of parameters that should be passed into scanelf app.
-        @param files list of files to scan.
-        @param max_args number of files to process at once
+	''' Calls scanelf with given params and files to scan.
+		@param params is list of parameters that should be passed into scanelf app.
+		@param files list of files to scan.
+		@param max_args number of files to process at once
 
-        When files count is greater CMD_MAX_ARGS, it'll be divided
-        into several parts
+		When files count is greater CMD_MAX_ARGS, it'll be divided
+		into several parts
 
-        @return scanelf output (joined if was called several times)
-    '''
-    out = []
-    for i in range(0, len(files), max_args):
-        out += call_program(['scanelf'] + params + files[i:i+max_args]).strip().split('\n')
-    return out
+		@return scanelf output (joined if was called several times)
+	'''
+	out = []
+	for i in range(0, len(files), max_args):
+		out += call_program(['scanelf'] + params + files[i:i+max_args]).strip().split('\n')
+	return out
 
 
 
 def exithandler(signum, frame):
-    sys.exit(1)
+	sys.exit(1)
 
 
 def get_masking_status(ebuild):
-    try:
-        status = portage.getmaskingstatus(ebuild)
-    except KeyError:
-        status = ['deprecated']
-    return status
+	try:
+		status = portage.getmaskingstatus(ebuild)
+	except KeyError:
+		status = ['deprecated']
+	return status
 
 if __name__ == '__main__':
-    print "There is nothing to run here."
+	print "There is nothing to run here."



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     b882067397b613421b07a068749afee55bfff9a1
Author:     dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Mon Apr 25 07:04:33 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:01 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=b8820673

whitespace separation from system imports

---
 pym/gentoolkit/revdep_rebuild/assign.py   |    1 +
 pym/gentoolkit/revdep_rebuild/settings.py |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index 9eb177d..bb9ec1f 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -2,6 +2,7 @@
 
 import os
 import re
+
 import portage
 from portage import portdb
 from portage.output import bold, red, blue, yellow, green, nocolor

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
index 7747ac2..96aa491 100644
--- a/pym/gentoolkit/revdep_rebuild/settings.py
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -2,6 +2,7 @@
 
 import os
 import sys
+
 import portage
 
 DEFAULTS = {



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     4a02c44bbe7457249caeb07464e240b6bc035cc0
Author:     dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Mon Apr 25 07:03:20 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:01 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=4a02c44b

more cleanup of importing logging.  Use the one defined or passed in to in main(). 

---
 pym/gentoolkit/revdep_rebuild/analyse.py |   11 ++++++++---
 pym/gentoolkit/revdep_rebuild/cache.py   |   14 +++++++++-----
 pym/gentoolkit/revdep_rebuild/collect.py |    5 +++--
 pym/gentoolkit/revdep_rebuild/rebuild.py |   17 ++++++++++++-----
 4 files changed, 32 insertions(+), 15 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 5ee0c7b..521d8b9 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -3,8 +3,8 @@
 import os
 import re
 import platform
-import logging
 import glob
+
 from portage.output import bold, red, blue, yellow, green, nocolor
 
 from stuff import scan
@@ -114,7 +114,7 @@ def main_checks(found_libs, broken, dependencies, logger):
 	return broken_pathes
 
 
-def analyse(settings=None, logger=None, libraries=None, la_libraries=None,
+def analyse(settings, logger, libraries=None, la_libraries=None,
 		libraries_links=None, binaries=None, _libs_to_check=set()):
 	"""Main program body.  It will collect all info and determine the
 	pkgs needing rebuilding.
@@ -143,7 +143,12 @@ def analyse(settings=None, logger=None, libraries=None, la_libraries=None,
 		binaries = collect_binaries_from_dir(bin_dirs, masked_dirs, logger)
 
 		if settings['USE_TMP_FILES']:
-			save_cache(to_save={'libraries':libraries, 'la_libraries':la_libraries, 'libraries_links':libraries_links, 'binaries':binaries})
+			save_cache(logger=logger, 
+				to_save={'libraries':libraries, 'la_libraries':la_libraries,
+					'libraries_links':libraries_links, 'binaries':binaries
+				},
+			temp_path=settings['DEFAULT_TMP_DIR']
+			)
 
 
 	logger.debug('Found '+ str(len(libraries)) + ' libraries (+' + str(len(libraries_links)) + ' symlinks) and ' + str(len(binaries)) + ' binaries')

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index e1a8e11..8b1a8ed 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -2,7 +2,7 @@
 
 import os
 import time
-import logging
+
 from portage.output import red
 from settings import DEFAULTS
 
@@ -29,7 +29,7 @@ def read_cache(temp_path=DEFAULTS['DEFAULT_TMP_DIR']):
 	return (ret['libraries'], ret['la_libraries'], ret['libraries_links'], ret['binaries'])
 
 
-def save_cache(logger=logging, to_save={}, 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
@@ -87,6 +87,7 @@ if __name__ == '__main__':
 	print 'Preparing cache ... '
 
 	from collect import *
+	import logging
 
 	bin_dirs, lib_dirs = prepare_search_dirs()
 
@@ -95,9 +96,12 @@ if __name__ == '__main__':
 	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)
-	binaries = collect_binaries_from_dir(bin_dirs, masked_dirs)
+	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(to_save={'libraries':libraries, 'la_libraries':la_libraries, 'libraries_links':libraries_links, 'binaries':binaries})
+	save_cache(logger=logging, 
+		to_save={'libraries':libraries, 'la_libraries':la_libraries, 
+			'libraries_links':libraries_links, 'binaries':binaries}
+		)
 
 	print 'Done.'

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index 735857b..b408edc 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -4,7 +4,7 @@ import re
 import os
 import glob
 import stat
-import logging
+
 import portage
 from portage.output import bold, red, blue, yellow, green, nocolor
 
@@ -185,7 +185,7 @@ def collect_libraries_from_dir(dirs, mask, logger):
 	return (found_files, found_la_files, found_symlinks, symlink_pairs)
 
 
-def collect_binaries_from_dir(dirs, mask, logger=logging):
+def collect_binaries_from_dir(dirs, mask, logger):
 	''' Collects all binaries from specified list of directories.
 		mask is list of pathes, that are ommited in scanning, can be eighter single file or entire directory
 		Returns list of binaries
@@ -229,6 +229,7 @@ def collect_binaries_from_dir(dirs, mask, logger=logging):
 
 
 if __name__ == '__main__':
+	import logging
 	bin_dirs, lib_dirs = prepare_search_dirs(logging)
 
 	masked_dirs, masked_files, ld = parse_revdep_config()

diff --git a/pym/gentoolkit/revdep_rebuild/rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
index 6185e0c..6c08f5b 100644
--- a/pym/gentoolkit/revdep_rebuild/rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/rebuild.py
@@ -169,13 +169,14 @@ def rebuild(logger, assigned, settings):
 
 
 # Runs from here
-def main(settings=None):
+def main(settings=None, logger=None):
 
 	if settings is None:
 		print("NO Input settings, using defaults...")
 		settings = DEFAULTS.copy()
 
-	logger = init_logger(settings)
+	if logger is None:
+		logger = init_logger(settings)
 
 	_libs_to_check = settings['library']
 
@@ -199,9 +200,15 @@ def main(settings=None):
 		settings['PRETEND'] = True
 
 	analyze_cache = {}
-	if settings['USE_TMP_FILES'] and check_temp_files():
-		libraries, la_libraries, libraries_links, binaries = read_cache()
-		assigned = analyse(libraries=libraries, la_libraries=la_libraries, 
+	if settings['USE_TMP_FILES'] \
+			and check_temp_files(settings['DEFAULT_TMP_DIR']):
+		libraries, la_libraries, libraries_links, binaries = read_cache(
+			settings['DEFAULT_TMP_DIR'])
+		assigned = analyse(
+			settings=settings,
+			logger=logger,
+			libraries=libraries,
+			la_libraries=la_libraries, 
 			libraries_links=libraries_links,
 			binaries=binaries,
 			_libs_to_check=_libs_to_check)



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     4174b0474707148651c66a9c9d0cb0372e699130
Author:     dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Mon Apr 25 07:05:43 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:01 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=4174b047

change the masking status message.

---
 pym/gentoolkit/revdep_rebuild/stuff.py |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index b1b6709..459301f 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -1,6 +1,7 @@
 #!/usr/bin/python
 
 import subprocess
+
 import portage
 
 
@@ -39,7 +40,7 @@ def get_masking_status(ebuild):
 	try:
 		status = portage.getmaskingstatus(ebuild)
 	except KeyError:
-		status = ['deprecated']
+		status = ['unavailable']
 	return status
 
 if __name__ == '__main__':



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     834fee88fe2cec331fed356015e7327b0f7ce271
Author:     Slawek <lis.slawek <AT> gmail <DOT> com>
AuthorDate: Tue Jan 18 06:18:42 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:00 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=834fee88

Some fixes after file split. Removed unwanted files. Moved settings into module

---
 pym/gentoolkit/revdep_rebuild/analyse.py           |   18 +++---
 pym/gentoolkit/revdep_rebuild/assign.py            |    9 +--
 pym/gentoolkit/revdep_rebuild/cache.py             |   10 ++--
 pym/gentoolkit/revdep_rebuild/collect.py           |   26 ++++----
 pym/gentoolkit/revdep_rebuild/revdep-rebuild.py    |   63 ++++++-------------
 pym/gentoolkit/revdep_rebuild/revdep_rebuild.kdev4 |    3 -
 pym/gentoolkit/revdep_rebuild/settings.py          |   26 ++++++++
 pym/gentoolkit/revdep_rebuild/test.py              |    7 --
 8 files changed, 76 insertions(+), 86 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 5141f6f..004163e 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -1,17 +1,17 @@
 #!/usr/bin/python
 
+import os
+import re
 import platform
 import logging
 import glob
 from portage.output import bold, red, blue, yellow, green, nocolor
 
-from stuff import *
-from collect import *
+from stuff import scan
+from collect import prepare_search_dirs, parse_revdep_config, collect_libraries_from_dir, collect_binaries_from_dir
 from assign import assign_packages
-
-
-USE_TMP_FILES = True #if program should use temporary files from previous run
-CMD_MAX_ARGS = 1000 # number of maximum allowed files to be parsed at once
+from cache import save_cache
+from settings import SETTINGS
 
 
 
@@ -23,7 +23,7 @@ def prepare_checks(files_to_check, libraries, bits):
     dependencies = [] # list of lists of files (from file_to_check) that uses
                       # library (for dependencies[id] and libs[id] => id==id)
 
-    for line in scan(['-M', str(bits), '-nBF', '%F %n'], files_to_check, CMD_MAX_ARGS):
+    for line in scan(['-M', str(bits), '-nBF', '%F %n'], files_to_check, SETTINGS['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?
@@ -143,7 +143,7 @@ def analyse(logger=logging, libraries=None, la_libraries=None, libraries_links=N
         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 USE_TMP_FILES:
+        if SETTINGS['USE_TMP_FILES']:
             save_cache(to_save={'libraries':libraries, 'la_libraries':la_libraries, 'libraries_links':libraries_links, 'binaries':binaries})
 
 
@@ -170,7 +170,7 @@ def analyse(logger=logging, libraries=None, la_libraries=None, libraries_links=N
 
     for av_bits in glob.glob('/lib[0-9]*') or ('/lib32',):
         bits = int(av_bits[4:])
-        _libraries = scan(['-M', str(bits), '-BF', '%F'], libraries+libraries_links, CMD_MAX_ARGS)
+        _libraries = scan(['-M', str(bits), '-BF', '%F'], libraries+libraries_links, SETTINGS['CMD_MAX_ARGS'])
         #call_program(['scanelf', '-M', str(bits), '-BF', '%F',] + libraries+libraries_links).strip().split('\n')
 
         found_libs, dependencies = prepare_checks(libs_and_bins, _libraries, bits)

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
index 836e792..6dcf6e3 100644
--- a/pym/gentoolkit/revdep_rebuild/assign.py
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -6,7 +6,7 @@ import logging
 import portage
 from portage import portdb
 from portage.output import bold, red, blue, yellow, green, nocolor
-
+from settings import SETTINGS
 
 
 def assign_packages(broken, logger=logging):
@@ -14,9 +14,9 @@ def assign_packages(broken, logger=logging):
         Broken is list of files
     '''
     assigned = set()
-    for group in os.listdir('/var/db/pkg'):
-        for pkg in os.listdir('/var/db/pkg/' + group):
-            f = '/var/db/pkg/' + group + '/' + pkg + '/CONTENTS'
+    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:
@@ -71,7 +71,6 @@ def get_slotted_cps(cpvs, logger):
     cps = []
     for cpv in cpvs:
         parts = catpkgsplit(cpv)
-        print cpv
         cp = parts[0] + '/' + parts[1]
         try:
             slot = portdb.aux_get(cpv, ["SLOT"])

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
index 5f7b932..421e22d 100644
--- a/pym/gentoolkit/revdep_rebuild/cache.py
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -3,11 +3,11 @@
 import os
 import time
 import logging
+from portage.output import red
+from settings import SETTINGS
 
 
-DEFAULT_TMP_DIR = '/tmp/revdep-rebuild' #cache default location
-
-def read_cache(temp_path=DEFAULT_TMP_DIR):
+def read_cache(temp_path=SETTINGS['DEFAULT_TMP_DIR']):
     ''' Reads cache information needed by analyse function.
         This function does not checks if files exists nor timestamps,
         check_temp_files should be called first
@@ -29,7 +29,7 @@ def read_cache(temp_path=DEFAULT_TMP_DIR):
     return (ret['libraries'], ret['la_libraries'], ret['libraries_links'], ret['binaries'])
 
 
-def save_cache(logger=logging, to_save={}, temp_path=DEFAULT_TMP_DIR):
+def save_cache(logger=logging, to_save={}, temp_path=SETTINGS['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
@@ -53,7 +53,7 @@ def save_cache(logger=logging, to_save={}, temp_path=DEFAULT_TMP_DIR):
 
 
 
-def check_temp_files(temp_path=DEFAULT_TMP_DIR, max_delay=3600):
+def check_temp_files(temp_path=SETTINGS['DEFAULT_TMP_DIR'], max_delay=3600):
     ''' Checks if temporary files from previous run are still available
         and if they aren't too old
         @param temp_path is directory, where temporary files should be found

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
index ca71d3d..4a0714b 100644
--- a/pym/gentoolkit/revdep_rebuild/collect.py
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -7,12 +7,10 @@ import stat
 import logging
 import portage
 from portage.output import bold, red, blue, yellow, green, nocolor
+from settings import SETTINGS
 
-DEFAULT_LD_FILE = 'etc/ld.so.conf'
-DEFAULT_ENV_FILE = 'etc/profile.env'
 
-
-def parse_conf(conf_file=os.path.join(portage.root, DEFAULT_LD_FILE), visited=None, logger=logging):
+def parse_conf(conf_file=SETTINGS['DEFAULT_LD_FILE'], visited=None, logger=logging):
     ''' Parses supplied conf_file for libraries pathes.
         conf_file is file or files to parse
         visited is set of files already parsed
@@ -64,15 +62,15 @@ def prepare_search_dirs(logger=logging):
     bin_dirs = set(['/bin', '/usr/bin', ])
     lib_dirs = set(['/lib', '/usr/lib', ])
 
-    try:
-        with open(os.path.join(portage.root, DEFAULT_ENV_FILE), 'r') as f:
-            for line in f.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(':')))
-    except EnvironmentError:
-        logger.debug(yellow('Could not open file %s' % f))
+    #try:
+    with open(os.path.join(portage.root, SETTINGS['DEFAULT_ENV_FILE']), 'r') as f:
+        for line in f.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(':')))
+    #except EnvironmentError:
+        #logger.debug(yellow('Could not open file %s' % f))
 
     lib_dirs = parse_conf(logger=logger)
     return (bin_dirs, lib_dirs)
@@ -87,7 +85,7 @@ def parse_revdep_config():
     masked_files = set()
 
     #TODO: remove hard-coded path
-    for f in os.listdir('/etc/revdep-rebuild/'):
+    for f in os.listdir(SETTINGS['REVDEP_CONFDIR']):
         for line in open(os.path.join('/etc/revdep-rebuild', f)):
             line = line.strip()
             if not line.startswith('#'): #first check for comment, we do not want to regex all lines

diff --git a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
old mode 100755
new mode 100644
index c28b1b0..f2fda2e
--- a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
@@ -25,42 +25,19 @@ from portage import portdb
 from portage.output import bold, red, blue, yellow, green, nocolor
 
 from analyse import analyse
-from stuff import *
-from cache import *
+from stuff import exithandler
+from cache import check_temp_files, read_cache
 from assign import get_slotted_cps
+from settings import SETTINGS
 
 
 APP_NAME = sys.argv[0]
-VERSION = '0.1-r5'
-
+VERSION = '0.1-r6'
 
 __productname__ = "revdep-ng"
 
 
 
-# configuration variables
-DEFAULT_LD_FILE = 'etc/ld.so.conf'
-DEFAULT_ENV_FILE = 'etc/profile.env'
-
-
-# global variables
-PRINT_DEBUG = False      #program in debug mode
-
-PRETEND = False     #pretend only
-EXACT = False      #exact package version
-USE_TMP_FILES = True #if program should use temporary files from previous run
-DEFAULT_TMP_DIR = '/tmp/revdep-rebuild' #cache default location
-VERBOSITY = 1      #verbosity level; 0-quiet, 1-norm., 2-verbose
-
-IS_DEV = True       #True for dev. version, False for stable
-#used when IS_DEV is True, False forces to call emerge with --pretend
-# can be set True from the cli with the --no-pretend option
-NO_PRETEND = False
-
-CMD_MAX_ARGS = 1000 # number of maximum allowed files to be parsed at once
-
-
-
 def print_usage():
     print APP_NAME + ': (' + VERSION +')'
     print
@@ -122,26 +99,26 @@ if __name__ == "__main__":
                 print_usage()
                 sys.exit(0)
             elif key in ('-q', '--quiet'):
-                VERBOSITY = 0
                 logger.setLevel(logging.ERROR)
+                SETTINGS['VERBOSITY'] = 0
             elif key in ('-v', '--verbose'):
-                VERBOSITY = 2
                 logger.setLevel(logging.INFO)
+                SETTINGS['VERBOSITY'] = 2
             elif key in ('-d', '--debug'):
-                PRINT_DEBUG = True
                 logger.setLevel(logging.DEBUG)
+                SETTINGS['VERBOSITY'] = 3
             elif key in ('-p', '--pretend'):
-                PRETEND = True
+                SETTINGS['PRETEND'] = True
             elif key == '--no-pretend':
-                NO_PRETEND = True
+                SETTINGS['NO_PRETEND'] = True
             elif key in ('-e', '--exact'):
-                EXACT = True
+                SETTINGS['EXACT'] = True
             elif key in ('-C', '--nocolor', '--no-color'):
                 nocolor()
             elif key in ('-L', '--library', '--library='):
                 _libs_to_check = _libs_to_check.union(val.split(','))
             elif key in ('-i', '--ignore'):
-                USE_TMP_FILES = False
+                SETTINGS['USE_TMP_FILES'] = False
 
         args = " " + " ".join(args)
     except getopt.GetoptError:
@@ -152,14 +129,14 @@ if __name__ == "__main__":
     if not sys.stdout.isatty():
         nocolor()
 
-    if os.getuid() != 0 and not PRETEND:
+    if os.getuid() != 0 and not SETTINGS['PRETEND']:
         logger.warn(blue(' * ') + yellow('You are not root, adding --pretend to portage options'))
-        PRETEND = True
-    elif not PRETEND and IS_DEV and not NO_PRETEND:
+        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')
-        PRETEND = True
+        SETTINGS['PRETEND'] = True
 
 
     signal.signal(signal.SIGINT, exithandler)
@@ -167,7 +144,7 @@ if __name__ == "__main__":
     signal.signal(signal.SIGPIPE, signal.SIG_DFL)
 
     analyze_cache = {}
-    if USE_TMP_FILES and check_temp_files():
+    if SETTINGS['USE_TMP_FILES'] and check_temp_files():
         libraries, la_libraries, libraries_links, binaries = read_cache()
         assigned = analyse(libraries=libraries, la_libraries=la_libraries, \
                        libraries_links=libraries_links, binaries=binaries, _libs_to_check=_libs_to_check)
@@ -178,15 +155,15 @@ if __name__ == "__main__":
         logger.warn('\n' + bold('Your system is consistent'))
         sys.exit(0)
 
-    if EXACT:
+    if SETTINGS['EXACT']:
         emerge_command = '=' + ' ='.join(assigned)
     else:
         emerge_command = ' '.join(get_slotted_cps(assigned, logger))
-    if PRETEND:
+    if SETTINGS['PRETEND']:
         args += ' --pretend'
-    if VERBOSITY >= 2:
+    if SETTINGS['VERBOSITY'] >= 2:
         args += ' --verbose'
-    elif VERBOSITY < 1:
+    elif SETTINGS['VERBOSITY'] < 1:
         args += ' --quiet'
 
     if len(emerge_command) == 0:

diff --git a/pym/gentoolkit/revdep_rebuild/revdep_rebuild.kdev4 b/pym/gentoolkit/revdep_rebuild/revdep_rebuild.kdev4
deleted file mode 100644
index 7c395ce..0000000
--- a/pym/gentoolkit/revdep_rebuild/revdep_rebuild.kdev4
+++ /dev/null
@@ -1,3 +0,0 @@
-[Project]
-Manager=KDevGenericManager
-Name=revdep_rebuild

diff --git a/pym/gentoolkit/revdep_rebuild/settings.py b/pym/gentoolkit/revdep_rebuild/settings.py
new file mode 100644
index 0000000..ea6b1ec
--- /dev/null
+++ b/pym/gentoolkit/revdep_rebuild/settings.py
@@ -0,0 +1,26 @@
+#!/usr/bin/python
+
+import os
+import portage
+
+SETTINGS = {
+        'DEFAULT_LD_FILE': os.path.join(portage.root, 'etc/ld.so.conf'),
+        'DEFAULT_ENV_FILE': os.path.join(portage.root, 'etc/profile.env'),
+        'REVDEP_CONFDIR': os.path.join(portage.root, 'etc/revdep-rebuild/'),
+        'PKG_DIR': os.path.join(portage.root, 'var/db/pkg/'),
+        'DEFAULT_TMP_DIR': '/tmp/revdep-rebuild', #cache default location
+
+
+        'USE_TMP_FILES': True, #if program should use temporary files from previous run
+        'CMD_MAX_ARGS': 1000, # number of maximum allowed files to be parsed at once
+
+        'PRETEND': False,     #pretend only
+        'EXACT': False,      #exact package version
+        'USE_TMP_FILES': True, #if program should use temporary files from previous run
+
+        'IS_DEV': True,       #True for dev. version, False for stable
+                #used when IS_DEV is True, False forces to call emerge with --pretend
+                # can be set True from the cli with the --no-pretend option
+        'NO_PRETEND': False,
+        'VERBOSITY': 1,
+    }

diff --git a/pym/gentoolkit/revdep_rebuild/test.py b/pym/gentoolkit/revdep_rebuild/test.py
deleted file mode 100644
index 9f87f32..0000000
--- a/pym/gentoolkit/revdep_rebuild/test.py
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/python
-
-import logging
-
-logging.basicConfig(format='%(msg)s', level=logging.DEBUG)
-#logging.basicConfig()
-logging.info('test')
\ No newline at end of file



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     a6964c2141e4cc95760a29b4a471a31d25dacb53
Author:     Slawek <lis.slawek <AT> gmail <DOT> com>
AuthorDate: Fri Jan  7 05:46:19 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:00 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=a6964c21

Fixed error in reading cache. Fixed problem with too many files to check.

---
 pym/gentoolkit/revdep_rebuild/revdep-rebuild.py |   51 +++++++++++++++--------
 1 files changed, 34 insertions(+), 17 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
index ebc0c3b..ac2a6c8 100755
--- a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
@@ -25,7 +25,7 @@ from portage import portdb
 from portage.output import bold, red, blue, yellow, green, nocolor
 
 APP_NAME = sys.argv[0]
-VERSION = '0.1-r3'
+VERSION = '0.1-r4'
 
 
 __productname__ = "revdep-ng"
@@ -51,6 +51,7 @@ IS_DEV = True       #True for dev. version, False for stable
 # can be set True from the cli with the --no-pretend option
 NO_PRETEND = False 
 
+CMD_MAX_ARGS = 1000 # number of maximum allowed files to be parsed at once
 
 
 # util. functions
@@ -62,6 +63,22 @@ def call_program(args):
     return stdout
 
 
+def scan(params, files):
+    ''' Calls scanelf with given params and files to scan.
+        @param params is list of parameters that should be passed into scanelf app.
+        @param files list of files to scan.
+
+        When files count is greater CMD_MAX_ARGS, it'll be divided
+        into several parts
+
+        @return scanelf output (joined if was called several times)
+    '''
+    out = []
+    for i in range(0, len(files), CMD_MAX_ARGS):
+        out += call_program(['scanelf'] + params + files[i:i+CMD_MAX_ARGS]).strip().split('\n')
+    return out
+
+
 def print_v(verbosity, args):
     """Prints to stdout according to the verbosity level 
     and the global VERBOSITY level
@@ -75,10 +92,6 @@ def print_v(verbosity, args):
 
 
 def exithandler(signum, frame):
-    print 'Signal caught!'
-    print 'Bye!'
-    signal.signal(signal.SIGINT, signal.SIG_IGN)
-    signal.signal(signal.SIGTERM, signal.SIG_IGN)
     sys.exit(1)
 
 
@@ -350,7 +363,8 @@ def prepare_checks(files_to_check, libraries, bits):
     dependencies = [] # list of lists of files (from file_to_check) that uses
                       # library (for dependencies[id] and libs[id] => id==id)
 
-    for line in call_program(['scanelf', '-M', str(bits), '-nBF', '%F %n',]+files_to_check).strip().split('\n'):
+    for line in scan(['-M', str(bits), '-nBF', '%F %n'], files_to_check):
+    #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
@@ -463,7 +477,7 @@ def assign_packages(broken, output):
                                     if found not in assigned:
                                         assigned.add(found)
                                     print_v(1, '\t' + m + ' -> ' + bold(found))
-                except:
+                except Exception as e:
                     output(1, red(' !! Failed to read ' + f))
 
     return assigned
@@ -544,7 +558,7 @@ def read_cache(temp_path=DEFAULT_TMP_DIR):
     return (ret['libraries'], ret['la_libraries'], ret['libraries_links'], ret['binaries'])
 
 
-def save_cache(to_save, temp_path=DEFAULT_TMP_DIR):
+def save_cache(output=print_v, to_save={}, temp_path=DEFAULT_TMP_DIR):
     ''' Tries to store caching information.
         @param to_save have to be dict with keys: libraries, la_libraries, libraries_links and binaries
     '''
@@ -552,16 +566,18 @@ def save_cache(to_save, temp_path=DEFAULT_TMP_DIR):
     if not os.path.exists(temp_path):
         os.makedirs(temp_path)
 
-    f = open(os.path.join(temp_path, 'timestamp'), 'w')
-    f.write(str(int(time.time())))
-    f.close()
-
-    for key,val in to_save.iteritems():
-        f = open(os.path.join(temp_path, key), 'w')
-        for line in val:
-            f.write(line + '\n')
+    try:
+        f = open(os.path.join(temp_path, 'timestamp'), 'w')
+        f.write(str(int(time.time())))
         f.close()
 
+        for key,val in to_save.iteritems():
+            f = open(os.path.join(temp_path, key), 'w')
+            for line in val:
+                f.write(line + '\n')
+            f.close()
+    except Exception as ex:
+        output(1, red('Could not save cache %s' %str(ex)))
 
 def analyse(output=print_v, libraries=None, la_libraries=None, libraries_links=None, binaries=None):
     """Main program body.  It will collect all info and determine the
@@ -616,7 +632,8 @@ def analyse(output=print_v, libraries=None, la_libraries=None, libraries_links=N
 
     for av_bits in glob.glob('/lib[0-9]*') or ('/lib32',):
         bits = int(av_bits[4:])
-        _libraries = call_program(['scanelf', '-M', str(bits), '-BF', '%F',] + libraries+libraries_links).strip().split('\n')
+        _libraries = scan(['-M', str(bits), '-BF', '%F'], libraries+libraries_links)
+        #call_program(['scanelf', '-M', str(bits), '-BF', '%F',] + libraries+libraries_links).strip().split('\n')
 
         found_libs, dependencies = prepare_checks(libs_and_bins, _libraries, bits)
 



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     1d7e4e88a4d4cd4220ef33160bc0b121caaf20dd
Author:     dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Sun Apr 24 22:18:27 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:01 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=1d7e4e88

rename revdep-rebuild.py due to a python error if a '-' is used in the name.

---
 .../{revdep-rebuild.py => rebuild.py}              |    0
 1 files changed, 0 insertions(+), 0 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py b/pym/gentoolkit/revdep_rebuild/rebuild.py
similarity index 100%
rename from pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
rename to pym/gentoolkit/revdep_rebuild/rebuild.py



^ permalink raw reply	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     0cf2ba868fbd6a1da4b6f5b3ae286845d538a066
Author:     Slawomir Lis <lis.slawek <AT> gmail <DOT> com>
AuthorDate: Mon Jan 17 12:31:33 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:00 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=0cf2ba86

Split to several files. Introduced logging (instead of print_v)

---
 pym/gentoolkit/revdep_rebuild/analyse.py           |  194 ++++++
 pym/gentoolkit/revdep_rebuild/assign.py            |   94 +++
 pym/gentoolkit/revdep_rebuild/cache.py             |  103 ++++
 pym/gentoolkit/revdep_rebuild/collect.py           |  248 ++++++++
 pym/gentoolkit/revdep_rebuild/revdep-rebuild.py    |  630 +-------------------
 pym/gentoolkit/revdep_rebuild/revdep_rebuild.kdev4 |    3 +
 pym/gentoolkit/revdep_rebuild/stuff.py             |   39 ++
 pym/gentoolkit/revdep_rebuild/test.py              |    7 +
 8 files changed, 717 insertions(+), 601 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
new file mode 100644
index 0000000..5141f6f
--- /dev/null
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -0,0 +1,194 @@
+#!/usr/bin/python
+
+import platform
+import logging
+import glob
+from portage.output import bold, red, blue, yellow, green, nocolor
+
+from stuff import *
+from collect import *
+from assign import assign_packages
+
+
+USE_TMP_FILES = True #if program should use temporary files from previous run
+CMD_MAX_ARGS = 1000 # number of maximum allowed files to be parsed at once
+
+
+
+def prepare_checks(files_to_check, libraries, bits):
+    ''' 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)
+
+    for line in scan(['-M', str(bits), '-nBF', '%F %n'], 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 = r[1].split(',')
+        for d in deps:
+            if d in libs:
+                i = libs.index(d)
+                dependencies[i].append(r[0])
+            else:
+                libs.append(d)
+                dependencies.append([r[0],])
+    return (libs, dependencies)
+
+
+def extract_dependencies_from_la(la, libraries, to_check, logger):
+    broken = []
+    for f in la:
+        if not os.path.exists(f):
+            continue
+
+        for line in open(f, 'r').readlines():
+            line = line.strip()
+            if line.startswith('dependency_libs='):
+                m = re.match("dependency_libs='([^']+)'", line)
+                if m is not None:
+                    for el in m.group(1).split(' '):
+                        el = el.strip()
+                        if len(el) < 1 or el.startswith('-'):
+                            continue
+
+                        if el in la or el in libraries:
+                            pass
+                        else:
+                            if to_check:
+                                _break = False
+                                for tc in to_check:
+                                    if tc in el:
+                                        _break = True
+                                        break
+                                if not _break:
+                                    continue
+
+                            logger.info(yellow(' * ') + f + ' is broken (requires: ' + bold(el))
+                            broken.append(f)
+    return broken
+
+
+def find_broken(found_libs, system_libraries, to_check):
+    ''' Search for broken libraries.
+        Check if system_libraries contains found_libs, where
+        system_libraries is list of obsolute pathes and found_libs
+        is list of library names.
+    '''
+
+    # join libraries and looking at it as string is way too faster than for-jumping
+
+    broken = []
+    sl = '|'.join(system_libraries)
+
+    if not to_check:
+        for f in found_libs:
+            if f+'|' not in sl:
+                broken.append(found_libs.index(f))
+    else:
+        for tc in to_check:
+            for f in found_libs:
+                if tc in f:# and f+'|' not in sl:
+                    broken.append(found_libs.index(f))
+
+    return broken
+
+
+def main_checks(found_libs, broken, 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
+        dependencies is the value returned by prepare_checks
+    '''
+
+    broken_pathes = []
+
+    for b in broken:
+        f = found_libs[b]
+        logger.info('Broken files that requires: ' + bold(f))
+        for d in dependencies[b]:
+            logger.info(yellow(' * ') + d)
+            broken_pathes.append(d)
+    return broken_pathes
+
+
+def analyse(logger=logging, libraries=None, la_libraries=None, libraries_links=None, binaries=None, _libs_to_check=set()):
+    """Main program body.  It will collect all info and determine the
+    pkgs needing rebuilding.
+
+    @param logger: logger used for logging messages, instance of logging.Logger
+                   class. Can be logging (RootLogger).
+    @param _libs_to_check Libraries that need to be checked only
+    @rtype list: list of pkgs that need rebuilding
+    """
+
+    if libraries and la_libraries and libraries_links and binaries:
+        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
+
+        logger.info(green(' * ') + bold('Collecting system binaries and libraries'))
+        bin_dirs, lib_dirs = prepare_search_dirs(logger)
+
+        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',]))
+
+        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 USE_TMP_FILES:
+            save_cache(to_save={'libraries':libraries, 'la_libraries':la_libraries, 'libraries_links':libraries_links, 'binaries':binaries})
+
+
+    logger.debug('Found '+ str(len(libraries)) + ' libraries (+' + str(len(libraries_links)) + ' symlinks) and ' + str(len(binaries)) + ' binaries')
+
+    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
+
+    #l = []
+    #for line in call_program(['scanelf', '-M', '64', '-BF', '%F',] + libraries).strip().split('\n'):
+        #l.append(line)
+    #libraries = l
+
+    found_libs = []
+    dependencies = []
+
+
+    _bits, linkg = platform.architecture()
+    if _bits.startswith('32'):
+        bits = 32
+    elif _bits.startswith('64'):
+        bits = 64
+
+    for av_bits in glob.glob('/lib[0-9]*') or ('/lib32',):
+        bits = int(av_bits[4:])
+        _libraries = scan(['-M', str(bits), '-BF', '%F'], libraries+libraries_links, CMD_MAX_ARGS)
+        #call_program(['scanelf', '-M', str(bits), '-BF', '%F',] + libraries+libraries_links).strip().split('\n')
+
+        found_libs, dependencies = prepare_checks(libs_and_bins, _libraries, bits)
+
+        broken = find_broken(found_libs, _libraries, _libs_to_check)
+        broken_la = extract_dependencies_from_la(la_libraries, _libraries, _libs_to_check, logger)
+
+        bits /= 2
+        bits = int(bits)
+
+    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)
+
+
+
+if __name__ == '__main__':
+    print "This script shouldn't be called directly"

diff --git a/pym/gentoolkit/revdep_rebuild/assign.py b/pym/gentoolkit/revdep_rebuild/assign.py
new file mode 100644
index 0000000..836e792
--- /dev/null
+++ b/pym/gentoolkit/revdep_rebuild/assign.py
@@ -0,0 +1,94 @@
+#!/usr/bin/python
+
+import os
+import re
+import logging
+import portage
+from portage import portdb
+from portage.output import bold, red, blue, yellow, green, nocolor
+
+
+
+def assign_packages(broken, logger=logging):
+    ''' Finds and returns packages that owns files placed in broken.
+        Broken is list of files
+    '''
+    assigned = set()
+    for group in os.listdir('/var/db/pkg'):
+        for pkg in os.listdir('/var/db/pkg/' + group):
+            f = '/var/db/pkg/' + 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))
+
+    return assigned
+
+
+def get_best_match(cpv, cp, logger):
+    """Tries to find another version of the pkg with the same slot
+    as the deprecated installed version.  Failing that attempt to get any version
+    of the same app
+
+    @param cpv: string
+    @param cp: string
+    @rtype tuple: ([cpv,...], SLOT)
+    """
+
+    slot = portage.db[portage.root]["vartree"].dbapi.aux_get(cpv, ["SLOT"])
+    logger.warn(yellow('Warning: ebuild "' + cpv + '" not found.'))
+    logger.info('Looking for %s:%s' %(cp, slot))
+    try:
+        m = portdb.match('%s:%s' %(cp, slot))
+    except portage.exception.InvalidAtom:
+        m = None
+
+    if not m:
+        logger.warn(red('!!') + ' ' + yellow('Could not find ebuild for %s:%s' %(cp, slot)))
+        slot = ['']
+        m = portdb.match(cp)
+        if not m:
+            logger.warn(red('!!') + ' ' + yellow('Could not find ebuild for ' + cp))
+    return m, slot
+
+
+def get_slotted_cps(cpvs, logger):
+    """Uses portage to reduce the cpv list into a cp:slot list and returns it
+    """
+    from portage.versions import catpkgsplit
+    from portage import portdb
+
+    cps = []
+    for cpv in cpvs:
+        parts = catpkgsplit(cpv)
+        print cpv
+        cp = parts[0] + '/' + parts[1]
+        try:
+            slot = portdb.aux_get(cpv, ["SLOT"])
+        except KeyError:
+            m, slot = get_best_match(cpv, cp, logger)
+            if not m:
+                logger.warn(red("Installed package: %s is no longer available" %cp))
+                continue
+
+        if slot[0]:
+            cps.append(cp + ":" + slot[0])
+        else:
+            cps.append(cp)
+
+    return cps
+
+
+
+if __name__ == '__main__':
+    print 'Nothing to call here'

diff --git a/pym/gentoolkit/revdep_rebuild/cache.py b/pym/gentoolkit/revdep_rebuild/cache.py
new file mode 100644
index 0000000..5f7b932
--- /dev/null
+++ b/pym/gentoolkit/revdep_rebuild/cache.py
@@ -0,0 +1,103 @@
+#!/bin/bash
+
+import os
+import time
+import logging
+
+
+DEFAULT_TMP_DIR = '/tmp/revdep-rebuild' #cache default location
+
+def read_cache(temp_path=DEFAULT_TMP_DIR):
+    ''' Reads cache information needed by analyse function.
+        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
+    '''
+
+    ret = {'libraries':[], 'la_libraries':[], 'libraries_links':[], 'binaries':[]}
+    try:
+        for key,val in ret.iteritems():
+            f = open(os.path.join(temp_path, key))
+            for line in f.readlines():
+                val.append(line.strip())
+            #libraries.remove('\n')
+            f.close()
+    except EnvironmentError:
+        pass
+
+    return (ret['libraries'], ret['la_libraries'], ret['libraries_links'], ret['binaries'])
+
+
+def save_cache(logger=logging, to_save={}, temp_path=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
+    '''
+
+    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()
+
+        for key,val in to_save.iteritems():
+            f = open(os.path.join(temp_path, key), 'w')
+            for line in val:
+                f.write(line + '\n')
+            f.close()
+    except Exception as ex:
+        logger.warn(red('Could not save cache: %s' %str(ex)))
+
+
+
+def check_temp_files(temp_path=DEFAULT_TMP_DIR, max_delay=3600):
+    ''' Checks if temporary files from previous run are still available
+        and if they aren't too old
+        @param temp_path is directory, where temporary files should be found
+        @param max_delay is maximum time difference (in seconds) when those files
+                are still considered fresh and useful
+        returns True, when files can be used, or False, when they don't
+        exists or they are too old
+    '''
+
+    if not os.path.exists(temp_path) or not os.path.isdir(temp_path):
+        return False
+
+    timestamp_path = os.path.join(temp_path, 'timestamp')
+    if not os.path.exists(timestamp_path) or not os.path.isfile(timestamp_path):
+        return False
+
+    try:
+        f = open(timestamp_path)
+        timestamp = int(f.readline())
+        f.close()
+    except:
+        timestamp = 0
+        return False
+
+    diff = int(time.time()) - timestamp
+    return max_delay > diff
+
+
+
+if __name__ == '__main__':
+    print 'Preparing cache ... '
+
+    from collect import *
+
+    bin_dirs, lib_dirs = prepare_search_dirs()
+
+    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)
+    binaries = collect_binaries_from_dir(bin_dirs, masked_dirs)
+
+    save_cache(to_save={'libraries':libraries, 'la_libraries':la_libraries, 'libraries_links':libraries_links, 'binaries':binaries})
+
+    print 'Done.'

diff --git a/pym/gentoolkit/revdep_rebuild/collect.py b/pym/gentoolkit/revdep_rebuild/collect.py
new file mode 100644
index 0000000..ca71d3d
--- /dev/null
+++ b/pym/gentoolkit/revdep_rebuild/collect.py
@@ -0,0 +1,248 @@
+#!/usr/bin/python
+
+import re
+import os
+import glob
+import stat
+import logging
+import portage
+from portage.output import bold, red, blue, yellow, green, nocolor
+
+DEFAULT_LD_FILE = 'etc/ld.so.conf'
+DEFAULT_ENV_FILE = 'etc/profile.env'
+
+
+def parse_conf(conf_file=os.path.join(portage.root, DEFAULT_LD_FILE), visited=None, logger=logging):
+    ''' Parses supplied conf_file for libraries pathes.
+        conf_file is file or files to parse
+        visited is set of files already parsed
+    '''
+    lib_dirs = set()
+    to_parse = set()
+
+    if isinstance(conf_file, basestring):
+        conf_file = [conf_file]
+
+    for conf in conf_file:
+        try:
+            with open(conf) as f:
+                for line in f.readlines():
+                    line = line.strip()
+                    if line.startswith('#'):
+                        continue
+                    elif line.startswith('include'):
+                        include_line = line.split()[1:]
+                        for included in include_line:
+                            if not included.startswith('/'):
+                                path = os.path.join(os.path.dirname(conf), \
+                                                    included)
+                            else:
+                                path = included
+
+                            to_parse = to_parse.union(glob.glob(path))
+                    else:
+                        lib_dirs.add(line)
+        except EnvironmentError:
+            logger.warn(yellow('Error when parsing file %s' %conf))
+
+    if visited is None:
+        visited = set()
+
+    visited = visited.union(conf_file)
+    to_parse = to_parse.difference(visited)
+    if to_parse:
+        lib_dirs = lib_dirs.union(parse_conf(to_parse, visited, logger=logger))
+
+    return lib_dirs
+
+
+def prepare_search_dirs(logger=logging):
+    ''' Lookup for search dirs. Returns tuple with two lists,
+        (list_of_bin_dirs, list_of_lib_dirs)
+    '''
+
+    bin_dirs = set(['/bin', '/usr/bin', ])
+    lib_dirs = set(['/lib', '/usr/lib', ])
+
+    try:
+        with open(os.path.join(portage.root, DEFAULT_ENV_FILE), 'r') as f:
+            for line in f.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(':')))
+    except EnvironmentError:
+        logger.debug(yellow('Could not open file %s' % f))
+
+    lib_dirs = parse_conf(logger=logger)
+    return (bin_dirs, lib_dirs)
+
+
+def parse_revdep_config():
+    ''' Parses all files under /etc/revdep-rebuild/ and returns
+        tuple of: (masked_dirs, masked_files, search_dirs)'''
+
+    search_dirs = set()
+    masked_dirs = set()
+    masked_files = set()
+
+    #TODO: remove hard-coded path
+    for f in os.listdir('/etc/revdep-rebuild/'):
+        for line in open(os.path.join('/etc/revdep-rebuild', f)):
+            line = line.strip()
+            if not line.startswith('#'): #first check for comment, we do not want to regex all lines
+                m = re.match('LD_LIBRARY_MASK=\\"([^"]+)\\"', line)
+                if m is not None:
+                    s = m.group(1).split(' ')
+                    masked_files = masked_files.union(s)
+                    continue
+                m = re.match('SEARCH_DIRS_MASK=\\"([^"]+)\\"', line)
+                if m is not None:
+                    s = m.group(1).split(' ')
+                    for ss in s:
+                        masked_dirs = masked_dirs.union(glob.glob(ss))
+                    continue
+                m = re.match('SEARCH_DIRS=\\"([^"]+)\\"', line)
+                if m is not None:
+                    s = m.group(1).split()
+                    for ss in s:
+                        search_dirs = search_dirs.union(glob.glob(ss))
+                    continue
+
+    return (masked_dirs, masked_files, search_dirs)
+
+
+def collect_libraries_from_dir(dirs, mask, logger=logging):
+    ''' Collects all libraries from specified list of directories.
+        mask is list of pathes, that are ommited in scanning, can be eighter single file or entire directory
+        Returns tuple composed of: list of libraries, list of symlinks, and toupe with pair
+        (symlink_id, library_id) for resolving dependencies
+    '''
+
+
+    found_directories = []  # contains list of directories found; allow us to reduce number of fnc calls
+    found_files = []
+    found_symlinks = []
+    found_la_files = [] # la libraries
+    symlink_pairs = []  # list of pairs symlink_id->library_id
+
+    for d in dirs:
+        if d in mask:
+            continue
+
+        try:
+            for l in os.listdir(d):
+                l = os.path.join(d, l)
+                if l in mask:
+                    continue
+
+                if os.path.isdir(l):
+                    if os.path.islink(l):
+                        #we do not want scan symlink-directories
+                        pass
+                    else:
+                        found_directories.append(l)
+                elif os.path.isfile(l):
+                    if l.endswith('.so') or '.so.' in l:
+                        if l in found_files or l in found_symlinks:
+                            continue
+
+                        if os.path.islink(l):
+                            found_symlinks.append(l)
+                            abs_path = os.path.realpath(l)
+                            if abs_path in found_files:
+                                i = found_files.index(abs_path)
+                            else:
+                                found_files.append(abs_path)
+                                i = len(found_files)-1
+                            symlink_pairs.append((len(found_symlinks)-1, i,))
+                        else:
+                            found_files.append(l)
+                        continue
+                    elif l.endswith('.la'):
+                        if l in found_la_files:
+                            continue
+
+                        found_la_files.append(l)
+                    else:
+                        # sometimes there are binaries in libs' subdir, for example in nagios
+                        if not os.path.islink(l):
+                            if l in found_files or l in found_symlinks:
+                                continue
+                            prv = os.stat(l)[stat.ST_MODE]
+                            if prv & stat.S_IXUSR == stat.S_IXUSR or \
+                                    prv & stat.S_IXGRP == stat.S_IXGRP or \
+                                    prv & stat.S_IXOTH == stat.S_IXOTH:
+                                found_files.append(l)
+        except Exception as ex:
+            logger.debug(yellow('Exception during collecting libraries: %s' %str(ex)))
+
+
+    if found_directories:
+        f,a,l,p = collect_libraries_from_dir(found_directories, mask, logger)
+        found_files+=f
+        found_la_files+=a
+        found_symlinks+=l
+        symlink_pairs+=p
+
+    return (found_files, found_la_files, found_symlinks, symlink_pairs)
+
+
+def collect_binaries_from_dir(dirs, mask, logger=logging):
+    ''' Collects all binaries from specified list of directories.
+        mask is list of pathes, that are ommited in scanning, can be eighter single file or entire directory
+        Returns list of binaries
+    '''
+
+    found_directories = []  # contains list of directories found; allow us to reduce number of fnc calls
+    found_files = []
+
+    for d in dirs:
+        if d in mask:
+            continue
+
+        try:
+            for l in os.listdir(d):
+                l = os.path.join(d, l)
+                if d in mask:
+                    continue
+
+                if os.path.isdir(l):
+                    if os.path.islink(l):
+                        #we do not want scan symlink-directories
+                        pass
+                    else:
+                        found_directories.append(l)
+                elif os.path.isfile(l):
+                    #we're looking for binaries, and with binaries we do not need links, thus we can optimize a bit
+                    if not os.path.islink(l):
+                        prv = os.stat(l)[stat.ST_MODE]
+                        if prv & stat.S_IXUSR == stat.S_IXUSR or \
+                                prv & stat.S_IXGRP == stat.S_IXGRP or \
+                                prv & stat.S_IXOTH == stat.S_IXOTH:
+                            found_files.append(l)
+        except Exception as e:
+            logger.debug(yellow('Exception during binaries collecting: %s' %str(e)))
+
+    if found_directories:
+        found_files += collect_binaries_from_dir(found_directories, mask, logger)
+
+    return found_files
+
+
+
+if __name__ == '__main__':
+    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)
+
+    print 'Found: %i binaries and %i libraries.' %(len(binaries), len(libraries))
+
+
+

diff --git a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
index ac2a6c8..c28b1b0 100755
--- a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
@@ -20,12 +20,18 @@ import stat
 import time
 import glob
 import portage
-import platform
+import logging
 from portage import portdb
 from portage.output import bold, red, blue, yellow, green, nocolor
 
+from analyse import analyse
+from stuff import *
+from cache import *
+from assign import get_slotted_cps
+
+
 APP_NAME = sys.argv[0]
-VERSION = '0.1-r4'
+VERSION = '0.1-r5'
 
 
 __productname__ = "revdep-ng"
@@ -49,51 +55,11 @@ VERBOSITY = 1      #verbosity level; 0-quiet, 1-norm., 2-verbose
 IS_DEV = True       #True for dev. version, False for stable
 #used when IS_DEV is True, False forces to call emerge with --pretend
 # can be set True from the cli with the --no-pretend option
-NO_PRETEND = False 
+NO_PRETEND = False
 
 CMD_MAX_ARGS = 1000 # number of maximum allowed files to be parsed at once
 
 
-# util. functions
-def call_program(args):
-    ''' Calls program with specified parameters and returns stdout '''
-    subp = subprocess.Popen(args, stdout=subprocess.PIPE, \
-                                stderr=subprocess.PIPE)
-    stdout, stderr = subp.communicate()
-    return stdout
-
-
-def scan(params, files):
-    ''' Calls scanelf with given params and files to scan.
-        @param params is list of parameters that should be passed into scanelf app.
-        @param files list of files to scan.
-
-        When files count is greater CMD_MAX_ARGS, it'll be divided
-        into several parts
-
-        @return scanelf output (joined if was called several times)
-    '''
-    out = []
-    for i in range(0, len(files), CMD_MAX_ARGS):
-        out += call_program(['scanelf'] + params + files[i:i+CMD_MAX_ARGS]).strip().split('\n')
-    return out
-
-
-def print_v(verbosity, args):
-    """Prints to stdout according to the verbosity level 
-    and the global VERBOSITY level
-    
-    @param verbosity: integer
-    @param args: string to print
-    """
-    if verbosity > VERBOSITY:
-        return
-    print args
-
-
-def exithandler(signum, frame):
-    sys.exit(1)
-
 
 def print_usage():
     print APP_NAME + ': (' + VERSION +')'
@@ -127,225 +93,6 @@ def print_usage():
 
 
 # functions
-def parse_conf(conf_file=None, visited=None):
-    ''' Parses supplied conf_file for libraries pathes.
-        conf_file is file or files to parse
-        visited is set of files already parsed
-    '''
-
-    if conf_file is None:
-        conf_file = os.path.join(portage.root, DEFAULT_LD_FILE)
-
-    lib_dirs = set()
-    to_parse = set()
-
-    if isinstance(conf_file, basestring):
-        conf_file = [conf_file]
-
-    for conf in conf_file:
-        try:
-            with open(conf) as f:
-                for line in f.readlines():
-                    line = line.strip()
-                    if line.startswith('#'):
-                        continue
-                    elif line.startswith('include'):
-                        include_line = line.split()[1:]
-                        for included in include_line:
-                            if not included.startswith('/'):
-                                path = os.path.join(os.path.dirname(conf), \
-                                                    included)
-                            else:
-                                path = included
-
-                            to_parse = to_parse.union(glob.glob(path))
-                    else:
-                        lib_dirs.add(line)
-        except EnvironmentError:
-            print_v(2, 'Error when parsing file %s' %conf)
-
-    if visited is None:
-        visited = set()
-
-    visited = visited.union(conf_file)
-    to_parse = to_parse.difference(visited)
-    if to_parse:
-        lib_dirs = lib_dirs.union(parse_conf(to_parse, visited))
-
-    return lib_dirs
-
-
-def prepare_search_dirs():
-    ''' Lookup for search dirs. Returns tuple with two lists,
-        (list_of_bin_dirs, list_of_lib_dirs)
-    '''
-
-    bin_dirs = set(['/bin', '/usr/bin', ])
-    lib_dirs = set(['/lib', '/usr/lib', ])
-
-    try:
-        with open(os.path.join(portage.root, DEFAULT_ENV_FILE), 'r') as f:
-            for line in f.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(':')))
-    except EnvironmentError:
-        print_v(2, 'Could not open file %s' % f)
-
-    lib_dirs = parse_conf()
-    return (bin_dirs, lib_dirs)
-
-
-def parse_revdep_config():
-    ''' Parses all files under /etc/revdep-rebuild/ and returns
-        tuple of: (masked_dirs, masked_files, search_dirs)'''
-
-    search_dirs = set()
-    masked_dirs = set()
-    masked_files = set()
-
-    for f in os.listdir('/etc/revdep-rebuild/'):
-        for line in open(os.path.join('/etc/revdep-rebuild', f)):
-            line = line.strip()
-            if not line.startswith('#'): #first check for comment, we do not want to regex all lines
-                m = re.match('LD_LIBRARY_MASK=\\"([^"]+)\\"', line)
-                if m is not None:
-                    s = m.group(1).split(' ')
-                    masked_files = masked_files.union(s)
-                    continue
-                m = re.match('SEARCH_DIRS_MASK=\\"([^"]+)\\"', line)
-                if m is not None:
-                    s = m.group(1).split(' ')
-                    for ss in s:
-                        masked_dirs = masked_dirs.union(glob.glob(ss))
-                    continue
-                m = re.match('SEARCH_DIRS=\\"([^"]+)\\"', line)
-                if m is not None:
-                    s = m.group(1).split()
-                    for ss in s:
-                        search_dirs = search_dirs.union(glob.glob(ss))
-                    continue
-
-    return (masked_dirs, masked_files, search_dirs)
-
-
-def collect_libraries_from_dir(dirs, mask):
-    ''' Collects all libraries from specified list of directories.
-        mask is list of pathes, that are ommited in scanning, can be eighter single file or entire directory
-        Returns tuple composed of: list of libraries, list of symlinks, and toupe with pair
-        (symlink_id, library_id) for resolving dependencies
-    '''
-
-
-    found_directories = []  # contains list of directories found; allow us to reduce number of fnc calls
-    found_files = []
-    found_symlinks = []
-    found_la_files = [] # la libraries
-    symlink_pairs = []  # list of pairs symlink_id->library_id
-
-    for d in dirs:
-        if d in mask:
-            continue
-
-        try:
-            for l in os.listdir(d):
-                l = os.path.join(d, l)
-                if l in mask:
-                    continue
-
-                if os.path.isdir(l):
-                    if os.path.islink(l):
-                        #we do not want scan symlink-directories
-                        pass
-                    else:
-                        found_directories.append(l)
-                elif os.path.isfile(l):
-                    if l.endswith('.so') or '.so.' in l:
-                        if l in found_files or l in found_symlinks:
-                            continue
-
-                        if os.path.islink(l):
-                            found_symlinks.append(l)
-                            abs_path = os.path.realpath(l)
-                            if abs_path in found_files:
-                                i = found_files.index(abs_path)
-                            else:
-                                found_files.append(abs_path)
-                                i = len(found_files)-1
-                            symlink_pairs.append((len(found_symlinks)-1, i,))
-                        else:
-                            found_files.append(l)
-                        continue
-                    elif l.endswith('.la'):
-                        if l in found_la_files:
-                            continue
-
-                        found_la_files.append(l)
-                    else:
-                        # sometimes there are binaries in libs' subdir, for example in nagios
-                        if not os.path.islink(l):
-                            if l in found_files or l in found_symlinks:
-                                continue
-                            prv = os.stat(l)[stat.ST_MODE]
-                            if prv & stat.S_IXUSR == stat.S_IXUSR or \
-                                    prv & stat.S_IXGRP == stat.S_IXGRP or \
-                                    prv & stat.S_IXOTH == stat.S_IXOTH:
-                                found_files.append(l)
-        except:
-            pass
-
-
-    if found_directories:
-        f,a,l,p = collect_libraries_from_dir(found_directories, mask)
-        found_files+=f
-        found_la_files+=a
-        found_symlinks+=l
-        symlink_pairs+=p
-
-    return (found_files, found_la_files, found_symlinks, symlink_pairs)
-
-
-def collect_binaries_from_dir(dirs, mask):
-    ''' Collects all binaries from specified list of directories.
-        mask is list of pathes, that are ommited in scanning, can be eighter single file or entire directory
-        Returns list of binaries
-    '''
-
-    found_directories = []  # contains list of directories found; allow us to reduce number of fnc calls
-    found_files = []
-
-    for d in dirs:
-        if d in mask:
-            continue
-
-        try:
-            for l in os.listdir(d):
-                l = os.path.join(d, l)
-                if d in mask:
-                    continue
-
-                if os.path.isdir(l):
-                    if os.path.islink(l):
-                        #we do not want scan symlink-directories
-                        pass
-                    else:
-                        found_directories.append(l)
-                elif os.path.isfile(l):
-                    #we're looking for binaries, and with binaries we do not need links, thus we can optimize a bit
-                    if not os.path.islink(l):
-                        prv = os.stat(l)[stat.ST_MODE]
-                        if prv & stat.S_IXUSR == stat.S_IXUSR or \
-                                prv & stat.S_IXGRP == stat.S_IXGRP or \
-                                prv & stat.S_IXOTH == stat.S_IXOTH:
-                            found_files.append(l)
-        except:
-            pass
-
-    if found_directories:
-        found_files += collect_binaries_from_dir(found_directories, mask)
-
-    return found_files
 
 
 def _match_str_in_list(lst, stri):
@@ -355,333 +102,15 @@ def _match_str_in_list(lst, stri):
     return False
 
 
-def prepare_checks(files_to_check, libraries, bits):
-    ''' 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)
-
-    for line in scan(['-M', str(bits), '-nBF', '%F %n'], files_to_check):
-    #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 = r[1].split(',')
-        for d in deps:
-            if d in libs:
-                i = libs.index(d)
-                dependencies[i].append(r[0])
-            else:
-                libs.append(d)
-                dependencies.append([r[0],])
-    return (libs, dependencies)
-
-
-def extract_dependencies_from_la(la, libraries, to_check):
-    broken = []
-    for f in la:
-        if not os.path.exists(f):
-            continue
-
-        for line in open(f, 'r').readlines():
-            line = line.strip()
-            if line.startswith('dependency_libs='):
-                m = re.match("dependency_libs='([^']+)'", line)
-                if m is not None:
-                    for el in m.group(1).split(' '):
-                        el = el.strip()
-                        if len(el) < 1 or el.startswith('-'):
-                            continue
-
-                        if el in la or el in libraries:
-                            pass
-                        else:
-                            if to_check:
-                                _break = False
-                                for tc in to_check:
-                                    if tc in el:
-                                        _break = True
-                                        break
-                                if not _break:
-                                    continue
-
-                            print_v(1, yellow(' * ') + f + ' is broken (requires: ' + bold(el))
-                            broken.append(f)
-    return broken
-
-
-
-def find_broken(found_libs, system_libraries, to_check):
-    ''' Search for broken libraries.
-        Check if system_libraries contains found_libs, where
-        system_libraries is list of obsolute pathes and found_libs
-        is list of library names.
-    '''
-
-    # join libraries and looking at it as string is way too faster than for-jumping
-
-    broken = []
-    sl = '|'.join(system_libraries)
-
-    if not to_check:
-        for f in found_libs:
-            if f+'|' not in sl:
-                broken.append(found_libs.index(f))
-    else:
-        for tc in to_check:
-            for f in found_libs:
-                if tc in f:# and f+'|' not in sl:
-                    broken.append(found_libs.index(f))
-
-    return broken
-
-
-def main_checks(found_libs, broken, dependencies):
-    ''' Checks for broken dependencies.
-        found_libs have to be the same as returned by prepare_checks
-        broken 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]
-        print_v(1, 'Broken files that requires: ' + bold(f))
-        for d in dependencies[b]:
-            print_v(1, yellow(' * ') + d)
-            broken_pathes.append(d)
-    return broken_pathes
-
-
-def assign_packages(broken, output):
-    ''' Finds and returns packages that owns files placed in broken.
-        Broken is list of files
-    '''
-    assigned = set()
-    for group in os.listdir('/var/db/pkg'):
-        for pkg in os.listdir('/var/db/pkg/' + group):
-            f = '/var/db/pkg/' + 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)
-                                    print_v(1, '\t' + m + ' -> ' + bold(found))
-                except Exception as e:
-                    output(1, red(' !! Failed to read ' + f))
-
-    return assigned
-
-
-def get_best_match(cpv, cp):
-    """Tries to find another version of the pkg with the same slot
-    as the deprecated installed version.  Failing that attempt to get any version
-    of the same app
-    
-    @param cpv: string
-    @param cp: string
-    @rtype tuple: ([cpv,...], SLOT)
-    """
-
-    slot = portage.db[portage.root]["vartree"].dbapi.aux_get(cpv, ["SLOT"])
-    print_v(1, yellow('Warning: ebuild "' + cpv + '" not found.'))
-    print_v(1, 'Looking for %s:%s' %(cp, slot))
-    try:
-        m = portdb.match('%s:%s' %(cp, slot))
-    except portage.exception.InvalidAtom:
-        m = None
-
-    if not m:
-        print_v(1, red('Could not find ebuild for %s:%s' %(cp, slot)))
-        slot = ['']
-        m = portdb.match(cp)
-        if not m:
-            print_v(1, red('Could not find ebuild for ' + cp))
-    return m, slot
-
-
-def get_slotted_cps(cpvs):
-    """Uses portage to reduce the cpv list into a cp:slot list and returns it
-    """
-    from portage.versions import catpkgsplit
-    from portage import portdb
-
-    cps = []
-    for cpv in cpvs:
-        parts = catpkgsplit(cpv)
-        cp = parts[0] + '/' + parts[1]
-        try:
-            slot = portdb.aux_get(cpv, ["SLOT"])
-        except KeyError:
-            m, slot = get_best_match(cpv, cp)
-            if not m:
-                print_v(1, red("Installed package: %s is no longer available" %cp))
-                continue
-
-        if slot[0]:
-            cps.append(cp + ":" + slot[0])
-        else:
-            cps.append(cp)
-
-    return cps
-
-
-def read_cache(temp_path=DEFAULT_TMP_DIR):
-    ''' Reads cache information needed by analyse function.
-        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
-    '''
-
-    ret = {'libraries':[], 'la_libraries':[], 'libraries_links':[], 'binaries':[]}
-    try:
-        for key,val in ret.iteritems():
-            f = open(os.path.join(temp_path, key))
-            for line in f.readlines():
-                val.append(line.strip())
-            #libraries.remove('\n')
-            f.close()
-    except EnvironmentError:
-        pass
-
-    return (ret['libraries'], ret['la_libraries'], ret['libraries_links'], ret['binaries'])
-
-
-def save_cache(output=print_v, to_save={}, temp_path=DEFAULT_TMP_DIR):
-    ''' Tries to store caching information.
-        @param to_save have to be dict with keys: libraries, la_libraries, libraries_links and binaries
-    '''
-
-    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()
-
-        for key,val in to_save.iteritems():
-            f = open(os.path.join(temp_path, key), 'w')
-            for line in val:
-                f.write(line + '\n')
-            f.close()
-    except Exception as ex:
-        output(1, red('Could not save cache %s' %str(ex)))
-
-def analyse(output=print_v, libraries=None, la_libraries=None, libraries_links=None, binaries=None):
-    """Main program body.  It will collect all info and determine the
-    pkgs needing rebuilding.
-
-    @param output: optional print/data gathering routine. Defaults to print_v
-            which prints to sys.stdout. Refer to print_v parameters for more detail.
-    @rtype list: list of pkgs that need rebuilding
-    """
-
-    if libraries and la_libraries and libraries_links and binaries:
-        output(1, blue(' * ') + bold('Found a valid cache, skipping collecting phase'))
-    else:
-        #TODO: add partial cache (for ex. only libraries) when found for some reason
-
-        output(1, green(' * ') + bold('Collecting system binaries and libraries'))
-        bin_dirs, lib_dirs = prepare_search_dirs()
-
-        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',]))
-
-        output(1, green(' * ') + bold('Collecting dynamic linking informations'))
-        libraries, la_libraries, libraries_links, symlink_pairs = collect_libraries_from_dir(lib_dirs, masked_dirs)
-        binaries = collect_binaries_from_dir(bin_dirs, masked_dirs)
-
-        if USE_TMP_FILES:
-            save_cache(to_save={'libraries':libraries, 'la_libraries':la_libraries, 'libraries_links':libraries_links, 'binaries':binaries})
-
-
-    output(2, 'Found '+ str(len(libraries)) + ' libraries (+' + str(len(libraries_links)) + ' symlinks) and ' + str(len(binaries)) + ' binaries')
-
-    output(1, green(' * ') + bold('Checking dynamic linking consistency'))
-    output(2,'Search for ' + str(len(binaries)+len(libraries)) + ' within ' + str(len(libraries)+len(libraries_links)))
-    libs_and_bins = libraries+binaries
-
-    #l = []
-    #for line in call_program(['scanelf', '-M', '64', '-BF', '%F',] + libraries).strip().split('\n'):
-        #l.append(line)
-    #libraries = l
-
-    found_libs = []
-    dependencies = []
-
-
-    _bits, linkg = platform.architecture()
-    if _bits.startswith('32'):
-        bits = 32
-    elif _bits.startswith('64'):
-        bits = 64
-
-    for av_bits in glob.glob('/lib[0-9]*') or ('/lib32',):
-        bits = int(av_bits[4:])
-        _libraries = scan(['-M', str(bits), '-BF', '%F'], libraries+libraries_links)
-        #call_program(['scanelf', '-M', str(bits), '-BF', '%F',] + libraries+libraries_links).strip().split('\n')
-
-        found_libs, dependencies = prepare_checks(libs_and_bins, _libraries, bits)
-
-        broken = find_broken(found_libs, _libraries, _libs_to_check)
-        broken_la = extract_dependencies_from_la(la_libraries, _libraries, _libs_to_check)
-
-        bits /= 2
-        bits = int(bits)
-
-    broken_pathes = main_checks(found_libs, broken, dependencies)
-    broken_pathes += broken_la
-
-    output(1, green(' * ') + bold('Assign files to packages'))
-
-    return assign_packages(broken_pathes, output)
-
-
-def check_temp_files(temp_path=DEFAULT_TMP_DIR, max_delay=3600):
-    ''' Checks if temporary files from previous run are still available
-        and if they aren't too old
-        @param temp_path is directory, where temporary files should be found
-        @param max_delay is maximum time difference (in seconds) when those files
-                are still considered fresh and useful
-        returns True, when files can be used, or False, when they don't
-        exists or they are too old
-    '''
-
-    if not os.path.exists(temp_path) or not os.path.isdir(temp_path):
-        return False
-
-    timestamp_path = os.path.join(temp_path, 'timestamp')
-    if not os.path.exists(timestamp_path) or not os.path.isfile(timestamp_path):
-        return False
-
-    try:
-        f = open(timestamp_path)
-        timestamp = int(f.readline())
-        f.close()
-    except:
-        timestamp = 0
-        return False
-
-    diff = int(time.time()) - timestamp
-    return max_delay > diff
-
-
 # Runs from here
 if __name__ == "__main__":
+    logger = logging.getLogger()
+    log_handler = logging.StreamHandler()
+    log_fmt = logging.Formatter('%(msg)s')
+    log_handler.setFormatter(log_fmt)
+    logger.addHandler(log_handler)
+    logger.setLevel(logging.WARNING)
+
     _libs_to_check = set()
 
     try:
@@ -694,10 +123,13 @@ if __name__ == "__main__":
                 sys.exit(0)
             elif key in ('-q', '--quiet'):
                 VERBOSITY = 0
+                logger.setLevel(logging.ERROR)
             elif key in ('-v', '--verbose'):
                 VERBOSITY = 2
+                logger.setLevel(logging.INFO)
             elif key in ('-d', '--debug'):
                 PRINT_DEBUG = True
+                logger.setLevel(logging.DEBUG)
             elif key in ('-p', '--pretend'):
                 PRETEND = True
             elif key == '--no-pretend':
@@ -713,7 +145,7 @@ if __name__ == "__main__":
 
         args = " " + " ".join(args)
     except getopt.GetoptError:
-        print_v(1, red('Unrecognized option\n'))
+        logging.info(red('Unrecognized option\n'))
         print_usage()
         sys.exit(2)
 
@@ -721,12 +153,12 @@ if __name__ == "__main__":
         nocolor()
 
     if os.getuid() != 0 and not PRETEND:
-        print_v(1, blue(' * ') + yellow('You are not root, adding --pretend to portage options'))
+        logger.warn(blue(' * ') + yellow('You are not root, adding --pretend to portage options'))
         PRETEND = True
     elif not PRETEND and IS_DEV and not NO_PRETEND:
-        print_v(1, blue(' * ') + yellow('This is a development version, so it may not work correctly'))
-        print_v(1, blue(' * ') + yellow('Adding --pretend to portage options anyway'))
-        print_v(1, blue(' * ') + 'If you\'re sure, you can add --no-pretend to revdep options')
+        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')
         PRETEND = True
 
 
@@ -738,18 +170,18 @@ if __name__ == "__main__":
     if USE_TMP_FILES and check_temp_files():
         libraries, la_libraries, libraries_links, binaries = read_cache()
         assigned = analyse(libraries=libraries, la_libraries=la_libraries, \
-                       libraries_links=libraries_links, binaries=binaries)
+                       libraries_links=libraries_links, binaries=binaries, _libs_to_check=_libs_to_check)
     else:
         assigned = analyse()
 
     if not assigned:
-        print_v(1, '\n' + bold('Your system is consistent'))
+        logger.warn('\n' + bold('Your system is consistent'))
         sys.exit(0)
 
     if EXACT:
         emerge_command = '=' + ' ='.join(assigned)
     else:
-        emerge_command = ' '.join(get_slotted_cps(assigned))
+        emerge_command = ' '.join(get_slotted_cps(assigned, logger))
     if PRETEND:
         args += ' --pretend'
     if VERBOSITY >= 2:
@@ -758,15 +190,11 @@ if __name__ == "__main__":
         args += ' --quiet'
 
     if len(emerge_command) == 0:
-        print_v(1, bold('\nThere is nothing to emerge. Exiting.'))
+        logger.warn(bold('\nThere is nothing to emerge. Exiting.'))
         sys.exit(0)
 
     emerge_command = args + ' --oneshot ' + emerge_command
 
-
-    #if PRETEND:
-    print_v(1, yellow('\nemerge') + bold(emerge_command))
-    #else:
-        #call_program(emerge_command.split())
+    logger.warn(yellow('\nemerge') + bold(emerge_command))
     os.system('emerge ' + emerge_command)
 

diff --git a/pym/gentoolkit/revdep_rebuild/revdep_rebuild.kdev4 b/pym/gentoolkit/revdep_rebuild/revdep_rebuild.kdev4
new file mode 100644
index 0000000..7c395ce
--- /dev/null
+++ b/pym/gentoolkit/revdep_rebuild/revdep_rebuild.kdev4
@@ -0,0 +1,3 @@
+[Project]
+Manager=KDevGenericManager
+Name=revdep_rebuild

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
new file mode 100644
index 0000000..dd8e572
--- /dev/null
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -0,0 +1,39 @@
+#!/usr/bin/python
+
+import subprocess
+
+
+# util. functions
+def call_program(args):
+    ''' Calls program with specified parameters and returns stdout '''
+    subp = subprocess.Popen(args, stdout=subprocess.PIPE, \
+                                stderr=subprocess.PIPE)
+    stdout, stderr = subp.communicate()
+    return stdout
+
+
+def scan(params, files, max_args):
+    ''' Calls scanelf with given params and files to scan.
+        @param params is list of parameters that should be passed into scanelf app.
+        @param files list of files to scan.
+        @param max_args number of files to process at once
+
+        When files count is greater CMD_MAX_ARGS, it'll be divided
+        into several parts
+
+        @return scanelf output (joined if was called several times)
+    '''
+    out = []
+    for i in range(0, len(files), max_args):
+        out += call_program(['scanelf'] + params + files[i:i+max_args]).strip().split('\n')
+    return out
+
+
+
+def exithandler(signum, frame):
+    sys.exit(1)
+
+
+
+if __name__ == '__main__':
+    print "There is nothing to run here."

diff --git a/pym/gentoolkit/revdep_rebuild/test.py b/pym/gentoolkit/revdep_rebuild/test.py
new file mode 100644
index 0000000..9f87f32
--- /dev/null
+++ b/pym/gentoolkit/revdep_rebuild/test.py
@@ -0,0 +1,7 @@
+#!/usr/bin/python
+
+import logging
+
+logging.basicConfig(format='%(msg)s', level=logging.DEBUG)
+#logging.basicConfig()
+logging.info('test')
\ No newline at end of file



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     ba2773480f8737e92dbbdc8c6f3e1a671200a35c
Author:     Slawek <lis.slawek <AT> gmail <DOT> com>
AuthorDate: Tue Feb 15 05:24:25 2011 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:01 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=ba277348

Fixed bug from: http://bugs.gentoo.org/show_bug.cgi?id=353518

---
 pym/gentoolkit/revdep_rebuild/analyse.py        |    2 +-
 pym/gentoolkit/revdep_rebuild/revdep-rebuild.py |   17 ++++++++++++++++-
 pym/gentoolkit/revdep_rebuild/stuff.py          |    7 +++++++
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/analyse.py b/pym/gentoolkit/revdep_rebuild/analyse.py
index 004163e..c1c755b 100644
--- a/pym/gentoolkit/revdep_rebuild/analyse.py
+++ b/pym/gentoolkit/revdep_rebuild/analyse.py
@@ -131,7 +131,7 @@ def analyse(logger=logging, libraries=None, la_libraries=None, libraries_links=N
     else:
         #TODO: add partial cache (for ex. only libraries) when found for some reason
 
-        logger.info(green(' * ') + bold('Collecting system binaries and libraries'))
+        logger.warn(green(' * ') + bold('Collecting system binaries and libraries'))
         bin_dirs, lib_dirs = prepare_search_dirs(logger)
 
         masked_dirs, masked_files, ld = parse_revdep_config()

diff --git a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
index f2fda2e..4ad5e58 100644
--- a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
@@ -25,7 +25,7 @@ from portage import portdb
 from portage.output import bold, red, blue, yellow, green, nocolor
 
 from analyse import analyse
-from stuff import exithandler
+from stuff import exithandler, get_masking_status
 from cache import check_temp_files, read_cache
 from assign import get_slotted_cps
 from settings import SETTINGS
@@ -155,6 +155,21 @@ if __name__ == "__main__":
         logger.warn('\n' + bold('Your system is consistent'))
         sys.exit(0)
 
+
+    has_masked = False
+    tmp = []
+    for a in assigned:
+        if get_masking_status(a):
+            has_masked = True
+            logger.warn('!!! ' + red('All ebuilds that could satisfy: ') + green(a) + red(' have been masked'))
+        else:
+            tmp.append(a)
+    assigned = tmp
+
+    if has_masked:
+        logger.info(red(' * ') + 'Unmask all ebuild listed above and call revdep-rebuild again or manually emerge given packages.')
+
+
     if SETTINGS['EXACT']:
         emerge_command = '=' + ' ='.join(assigned)
     else:

diff --git a/pym/gentoolkit/revdep_rebuild/stuff.py b/pym/gentoolkit/revdep_rebuild/stuff.py
index dd8e572..d153908 100644
--- a/pym/gentoolkit/revdep_rebuild/stuff.py
+++ b/pym/gentoolkit/revdep_rebuild/stuff.py
@@ -1,6 +1,7 @@
 #!/usr/bin/python
 
 import subprocess
+import portage
 
 
 # util. functions
@@ -34,6 +35,12 @@ def exithandler(signum, frame):
     sys.exit(1)
 
 
+def get_masking_status(ebuild):
+    try:
+        status = portage.getmaskingstatus(ebuild)
+    except KeyError:
+        status = ['deprecated']
+    return status
 
 if __name__ == '__main__':
     print "There is nothing to run here."



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     71136316e79b7037da468d581374c3d013b6fa98
Author:     brian.dolbec <brian.dolbec <AT> 5234894e-44cd-11de-9a4c-a76526a193c6>
AuthorDate: Fri Nov  5 15:19:06 2010 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:00 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=71136316

Comment the NO_PRETEND variable better.
Fix a few minor grammar errors.

git-svn-id: http://genscripts.googlecode.com/svn/trunk/gentoolkit@478 5234894e-44cd-11de-9a4c-a76526a193c6

---
 pym/gentoolkit/revdep_rebuild/revdep-rebuild.py |   12 +++++++-----
 1 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
index 544a86c..fb864da 100755
--- a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
@@ -46,7 +46,9 @@ DEFAULT_TMP_DIR = '/tmp/revdep-rebuild' #cache default location
 VERBOSITY = 1      #verbosity level; 0-quiet, 1-norm., 2-verbose
 
 IS_DEV = True       #True for dev. version, False for stable
-NO_PRETEND = False  #used when IS_DEV is True, forces to call emerge from script
+#used when IS_DEV is True, False forces to call emerge with --pretend
+# can be set True from the cli with the --no-pretend option
+NO_PRETEND = False 
 
 
 
@@ -72,7 +74,7 @@ def print_v(verbosity, args):
 
 
 def exithandler(signum, frame):
-    print 'Signal catched!'
+    print 'Signal caught!'
     print 'Bye!'
     signal.signal(signal.SIGINT, signal.SIG_IGN)
     signal.signal(signal.SIGTERM, signal.SIG_IGN)
@@ -475,7 +477,7 @@ def get_best_match(cpv, cp):
     """
 
     slot = portage.db[portage.root]["vartree"].dbapi.aux_get(cpv, ["SLOT"])
-    print_v(1, yellow('Warn: ebuild ' + cpv + ' not found.'))
+    print_v(1, yellow('Warning: ebuild "' + cpv + '" not found.'))
     print_v(1, 'Looking for %s:%s' %(cp, slot))
     try:
         m = portdb.match('%s:%s' %(cp, slot))
@@ -568,7 +570,7 @@ def analyse(output=print_v, libraries=None, la_libraries=None, libraries_links=N
     """
 
     if libraries and la_libraries and libraries_links and binaries:
-        output(1, blue(' * ') + bold('Found cache, skipping collecting phase'))
+        output(1, blue(' * ') + bold('Found a valid cache, skipping collecting phase'))
     else:
         #TODO: add partial cache (for ex. only libraries) when found for some reason
 
@@ -680,7 +682,7 @@ if __name__ == "__main__":
         print_v(1, blue(' * ') + yellow('You are not root, adding --pretend to portage options'))
         PRETEND = True
     elif not PRETEND and IS_DEV and not NO_PRETEND:
-        print_v(1, blue(' * ') + yellow('This is dev. version, so it could not work correctly'))
+        print_v(1, blue(' * ') + yellow('This is a development version, so it may not work correctly'))
         print_v(1, blue(' * ') + yellow('Adding --pretend to portage options anyway'))
         print_v(1, blue(' * ') + 'If you\'re sure, you can add --no-pretend to revdep options')
         PRETEND = True



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     bd038cff741ea9180de3eca2762da872ba1c1345
Author:     lis.slawek <lis.slawek <AT> 5234894e-44cd-11de-9a4c-a76526a193c6>
AuthorDate: Tue Nov 23 09:13:43 2010 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:00 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=bd038cff

Fixed checks for --library option

git-svn-id: http://genscripts.googlecode.com/svn/trunk/gentoolkit@489 5234894e-44cd-11de-9a4c-a76526a193c6

---
 pym/gentoolkit/revdep_rebuild/revdep-rebuild.py |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
index f8f67d6..ebc0c3b 100755
--- a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
@@ -99,8 +99,7 @@ def print_usage():
   -h, --help           Print this usage
   -i, --ignore         Ignore temporary files from previous runs (also won't create any)
   -L, --library NAME   Emerge existing packages that use the library with NAME
-      --library=NAME   NAME can be a full path to the library or a basic
-                       regular expression (man grep)
+      --library=NAME   NAME can be a full or partial library name
   -l, --no-ld-path     Do not set LD_LIBRARY_PATH
   -o, --no-order       Do not check the build order
                        (Saves time, but may cause breakage.)
@@ -420,7 +419,7 @@ def find_broken(found_libs, system_libraries, to_check):
     else:
         for tc in to_check:
             for f in found_libs:
-                if tc in f and f+'|' not in sl:
+                if tc in f:# and f+'|' not in sl:
                     broken.append(found_libs.index(f))
 
     return broken



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     cac7bd60abddb8420eeeeb5563490f9b8ee9b188
Author:     brian.dolbec <brian.dolbec <AT> 5234894e-44cd-11de-9a4c-a76526a193c6>
AuthorDate: Fri Nov  5 05:26:11 2010 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:00 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=cac7bd60

fix a missing leading space so that any args are not attached to the emerge command itself.

git-svn-id: http://genscripts.googlecode.com/svn/trunk/gentoolkit@477 5234894e-44cd-11de-9a4c-a76526a193c6

---
 pym/gentoolkit/revdep_rebuild/revdep-rebuild.py |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
index 23298f9..544a86c 100755
--- a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
@@ -667,7 +667,7 @@ if __name__ == "__main__":
             elif key in ('-i', '--ignore'):
                 USE_TMP_FILES = False
 
-        args = " ".join(args)
+        args = " " + " ".join(args)
     except getopt.GetoptError:
         print_v(1, red('Unrecognized option\n'))
         print_usage()



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     016a60ce9a134f1dba61bcbae6e0b5a286cf6c90
Author:     lis.slawek <lis.slawek <AT> 5234894e-44cd-11de-9a4c-a76526a193c6>
AuthorDate: Thu Nov 18 07:26:14 2010 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:00 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=016a60ce

Fixed problem with 32/64 bit libraries and binaries

git-svn-id: http://genscripts.googlecode.com/svn/trunk/gentoolkit@484 5234894e-44cd-11de-9a4c-a76526a193c6

---
 pym/gentoolkit/revdep_rebuild/revdep-rebuild.py |   44 ++++++++++++++++++-----
 1 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
index fb864da..0bc006e 100755
--- a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
@@ -20,11 +20,12 @@ import stat
 import time
 import glob
 import portage
+import platform
 from portage import portdb
 from portage.output import bold, red, blue, yellow, green, nocolor
 
 APP_NAME = sys.argv[0]
-VERSION = '0.1-r2'
+VERSION = '0.1-r3'
 
 
 __productname__ = "revdep-ng"
@@ -342,14 +343,15 @@ def _match_str_in_list(lst, stri):
     return False
 
 
-def prepare_checks(files_to_check, libraries):
-    ''' Calls scanelf for all files_to_check, then returns found libraries and dependencies '''
+def prepare_checks(files_to_check, libraries, bits):
+    ''' 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)
 
-    for line in call_program(['scanelf', '-nBF', '%F %n',]+files_to_check).strip().split('\n'):
+    for line in 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
@@ -368,6 +370,9 @@ def prepare_checks(files_to_check, libraries):
 def extract_dependencies_from_la(la, libraries, to_check):
     broken = []
     for f in la:
+        if not os.path.exists(f):
+            continue
+
         for line in open(f, 'r').readlines():
             line = line.strip()
             if line.startswith('dependency_libs='):
@@ -417,7 +422,6 @@ def find_broken(found_libs, system_libraries, to_check):
             for f in found_libs:
                 if tc in f and f+'|' not in sl:
                     broken.append(found_libs.index(f))
-        #print broken
 
     return broken
 
@@ -596,10 +600,32 @@ def analyse(output=print_v, libraries=None, la_libraries=None, libraries_links=N
     output(2,'Search for ' + str(len(binaries)+len(libraries)) + ' within ' + str(len(libraries)+len(libraries_links)))
     libs_and_bins = libraries+binaries
 
-    found_libs, dependencies = prepare_checks(libs_and_bins, libraries+libraries_links)
+    #l = []
+    #for line in call_program(['scanelf', '-M', '64', '-BF', '%F',] + libraries).strip().split('\n'):
+        #l.append(line)
+    #libraries = l
+
+    found_libs = []
+    dependencies = []
+
+
+    _bits, linkg = platform.architecture()
+    if _bits.startswith('32'):
+        bits = 32
+    elif _bits.startswith('64'):
+        bits = 64
+
+    for av_bits in glob.glob('/lib[0-9]*'):
+        bits = int(av_bits[4:])
+        _libraries = call_program(['scanelf', '-M', str(bits), '-BF', '%F',] + libraries+libraries_links).strip().split('\n')
+
+        found_libs, dependencies = prepare_checks(libs_and_bins, _libraries, bits)
+
+        broken = find_broken(found_libs, _libraries, _libs_to_check)
+        broken_la = extract_dependencies_from_la(la_libraries, _libraries, _libs_to_check)
 
-    broken = find_broken(found_libs, libraries+libraries_links, _libs_to_check)
-    broken_la = extract_dependencies_from_la(la_libraries, libraries+libraries_links, _libs_to_check)
+        bits /= 2
+        bits = int(bits)
 
     broken_pathes = main_checks(found_libs, broken, dependencies)
     broken_pathes += broken_la
@@ -646,7 +672,7 @@ if __name__ == "__main__":
         opts, args = getopt.getopt(sys.argv[1:], 'dehiklopqvCL:P', ['nocolor', 'debug', 'exact', 'help', 'ignore',\
             'keep-temp', 'library=', 'no-ld-path', 'no-order', 'pretend', 'no-pretend', 'no-progress', 'quiet', 'verbose'])
 
-        for key,val in opts:
+        for key, val in opts:
             if key in ('-h', '--help'):
                 print_usage()
                 sys.exit(0)



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     a928c7509defc63c913ab61ef138cc59d44c38b6
Author:     lis.slawek <lis.slawek <AT> 5234894e-44cd-11de-9a4c-a76526a193c6>
AuthorDate: Thu Nov 18 11:16:57 2010 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:00 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=a928c750

Fixed scanning revdep config; minor fix in analyse function

git-svn-id: http://genscripts.googlecode.com/svn/trunk/gentoolkit@485 5234894e-44cd-11de-9a4c-a76526a193c6

---
 pym/gentoolkit/revdep_rebuild/revdep-rebuild.py |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
index 0bc006e..f8f67d6 100755
--- a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
+++ b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
@@ -210,9 +210,9 @@ def parse_revdep_config():
                     continue
                 m = re.match('SEARCH_DIRS=\\"([^"]+)\\"', line)
                 if m is not None:
-                    s = m.group(1).split(' ')
+                    s = m.group(1).split()
                     for ss in s:
-                        search_dirs = masked_dirs.union(glob.glob(ss))
+                        search_dirs = search_dirs.union(glob.glob(ss))
                     continue
 
     return (masked_dirs, masked_files, search_dirs)
@@ -615,7 +615,7 @@ def analyse(output=print_v, libraries=None, la_libraries=None, libraries_links=N
     elif _bits.startswith('64'):
         bits = 64
 
-    for av_bits in glob.glob('/lib[0-9]*'):
+    for av_bits in glob.glob('/lib[0-9]*') or ('/lib32',):
         bits = int(av_bits[4:])
         _libraries = call_program(['scanelf', '-M', str(bits), '-BF', '%F',] + libraries+libraries_links).strip().split('\n')
 
@@ -740,6 +740,11 @@ if __name__ == "__main__":
         args += ' --verbose'
     elif VERBOSITY < 1:
         args += ' --quiet'
+
+    if len(emerge_command) == 0:
+        print_v(1, bold('\nThere is nothing to emerge. Exiting.'))
+        sys.exit(0)
+
     emerge_command = args + ' --oneshot ' + emerge_command
 
 



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     58860e21121ada2ec4538790b1e55f2719c910bc
Author:     brian.dolbec <brian.dolbec <AT> 5234894e-44cd-11de-9a4c-a76526a193c6>
AuthorDate: Sun Oct 24 19:44:19 2010 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:00 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=58860e21

create a pkg for the new python revdep-rebuild.

git-svn-id: http://genscripts.googlecode.com/svn/trunk/gentoolkit@470 5234894e-44cd-11de-9a4c-a76526a193c6

---
 pym/gentoolkit/revdep_rebuild/__init__.py |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/__init__.py b/pym/gentoolkit/revdep_rebuild/__init__.py
new file mode 100644
index 0000000..edf9385
--- /dev/null
+++ b/pym/gentoolkit/revdep_rebuild/__init__.py
@@ -0,0 +1,4 @@
+#!/usr/bin/python
+#
+# Copyright 2003-2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2



^ permalink raw reply related	[flat|nested] 115+ messages in thread
* [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/
@ 2011-07-12 21:45 Paul Varner
  0 siblings, 0 replies; 115+ messages in thread
From: Paul Varner @ 2011-07-12 21:45 UTC (permalink / raw
  To: gentoo-commits

commit:     9ccb3af94c0b2ffc12e8c9b149f9894af5fa81a4
Author:     lis.slawek <lis.slawek <AT> 5234894e-44cd-11de-9a4c-a76526a193c6>
AuthorDate: Mon Oct 25 09:24:47 2010 +0000
Commit:     Paul Varner <fuzzyray <AT> gentoo <DOT> org>
CommitDate: Tue Jul 12 21:29:00 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoolkit.git;a=commit;h=9ccb3af9

Initial revision of revdep-rebuild python version

git-svn-id: http://genscripts.googlecode.com/svn/trunk/gentoolkit@471 5234894e-44cd-11de-9a4c-a76526a193c6

---
 pym/gentoolkit/revdep_rebuild/revdep-rebuild.py |  723 +++++++++++++++++++++++
 1 files changed, 723 insertions(+), 0 deletions(-)

diff --git a/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
new file mode 100755
index 0000000..23298f9
--- /dev/null
+++ b/pym/gentoolkit/revdep_rebuild/revdep-rebuild.py
@@ -0,0 +1,723 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+
+# Author: Sławomir Lis <lis.slawek@gmail.com>
+# revdep-rebuild original author: Stanislav Brabec
+# revdep-rebuild original rewrite Author: Michael A. Smith
+# Current Maintainer: Paul Varner <fuzzyray@gentoo.org>
+
+# Creation date: 2010/10/17
+# License: BSD
+
+import subprocess
+import os
+import sys
+import re
+import getopt
+import signal
+import stat
+import time
+import glob
+import portage
+from portage import portdb
+from portage.output import bold, red, blue, yellow, green, nocolor
+
+APP_NAME = sys.argv[0]
+VERSION = '0.1-r2'
+
+
+__productname__ = "revdep-ng"
+
+
+
+# configuration variables
+DEFAULT_LD_FILE = 'etc/ld.so.conf'
+DEFAULT_ENV_FILE = 'etc/profile.env'
+
+
+# global variables
+PRINT_DEBUG = False      #program in debug mode
+
+PRETEND = False     #pretend only
+EXACT = False      #exact package version
+USE_TMP_FILES = True #if program should use temporary files from previous run
+DEFAULT_TMP_DIR = '/tmp/revdep-rebuild' #cache default location
+VERBOSITY = 1      #verbosity level; 0-quiet, 1-norm., 2-verbose
+
+IS_DEV = True       #True for dev. version, False for stable
+NO_PRETEND = False  #used when IS_DEV is True, forces to call emerge from script
+
+
+
+# util. functions
+def call_program(args):
+    ''' Calls program with specified parameters and returns stdout '''
+    subp = subprocess.Popen(args, stdout=subprocess.PIPE, \
+                                stderr=subprocess.PIPE)
+    stdout, stderr = subp.communicate()
+    return stdout
+
+
+def print_v(verbosity, args):
+    """Prints to stdout according to the verbosity level 
+    and the global VERBOSITY level
+    
+    @param verbosity: integer
+    @param args: string to print
+    """
+    if verbosity > VERBOSITY:
+        return
+    print args
+
+
+def exithandler(signum, frame):
+    print 'Signal catched!'
+    print 'Bye!'
+    signal.signal(signal.SIGINT, signal.SIG_IGN)
+    signal.signal(signal.SIGTERM, signal.SIG_IGN)
+    sys.exit(1)
+
+
+def print_usage():
+    print APP_NAME + ': (' + VERSION +')'
+    print
+    print 'This is free software; see the source for copying conditions.'
+    print
+    print 'Usage: ' + APP_NAME + ' [OPTIONS] [--] [EMERGE_OPTIONS]'
+    print
+    print 'Broken reverse dependency rebuilder, python implementation.'
+    print
+    print 'Available options:'
+    print '''
+  -C, --nocolor        Turn off colored output
+  -d, --debug          Print debug informations
+  -e, --exact          Emerge based on exact package version
+  -h, --help           Print this usage
+  -i, --ignore         Ignore temporary files from previous runs (also won't create any)
+  -L, --library NAME   Emerge existing packages that use the library with NAME
+      --library=NAME   NAME can be a full path to the library or a basic
+                       regular expression (man grep)
+  -l, --no-ld-path     Do not set LD_LIBRARY_PATH
+  -o, --no-order       Do not check the build order
+                       (Saves time, but may cause breakage.)
+  -p, --pretend        Do a trial run without actually emerging anything
+                       (also passed to emerge command)
+  -q, --quiet          Be less verbose (also passed to emerge command)
+  -v, --verbose        Be more verbose (also passed to emerge command)
+'''
+    print 'Calls emerge, options after -- are ignored by ' + APP_NAME
+    print 'and passed directly to emerge.'
+
+
+
+# functions
+def parse_conf(conf_file=None, visited=None):
+    ''' Parses supplied conf_file for libraries pathes.
+        conf_file is file or files to parse
+        visited is set of files already parsed
+    '''
+
+    if conf_file is None:
+        conf_file = os.path.join(portage.root, DEFAULT_LD_FILE)
+
+    lib_dirs = set()
+    to_parse = set()
+
+    if isinstance(conf_file, basestring):
+        conf_file = [conf_file]
+
+    for conf in conf_file:
+        try:
+            with open(conf) as f:
+                for line in f.readlines():
+                    line = line.strip()
+                    if line.startswith('#'):
+                        continue
+                    elif line.startswith('include'):
+                        include_line = line.split()[1:]
+                        for included in include_line:
+                            if not included.startswith('/'):
+                                path = os.path.join(os.path.dirname(conf), \
+                                                    included)
+                            else:
+                                path = included
+
+                            to_parse = to_parse.union(glob.glob(path))
+                    else:
+                        lib_dirs.add(line)
+        except EnvironmentError:
+            print_v(2, 'Error when parsing file %s' %conf)
+
+    if visited is None:
+        visited = set()
+
+    visited = visited.union(conf_file)
+    to_parse = to_parse.difference(visited)
+    if to_parse:
+        lib_dirs = lib_dirs.union(parse_conf(to_parse, visited))
+
+    return lib_dirs
+
+
+def prepare_search_dirs():
+    ''' Lookup for search dirs. Returns tuple with two lists,
+        (list_of_bin_dirs, list_of_lib_dirs)
+    '''
+
+    bin_dirs = set(['/bin', '/usr/bin', ])
+    lib_dirs = set(['/lib', '/usr/lib', ])
+
+    try:
+        with open(os.path.join(portage.root, DEFAULT_ENV_FILE), 'r') as f:
+            for line in f.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(':')))
+    except EnvironmentError:
+        print_v(2, 'Could not open file %s' % f)
+
+    lib_dirs = parse_conf()
+    return (bin_dirs, lib_dirs)
+
+
+def parse_revdep_config():
+    ''' Parses all files under /etc/revdep-rebuild/ and returns
+        tuple of: (masked_dirs, masked_files, search_dirs)'''
+
+    search_dirs = set()
+    masked_dirs = set()
+    masked_files = set()
+
+    for f in os.listdir('/etc/revdep-rebuild/'):
+        for line in open(os.path.join('/etc/revdep-rebuild', f)):
+            line = line.strip()
+            if not line.startswith('#'): #first check for comment, we do not want to regex all lines
+                m = re.match('LD_LIBRARY_MASK=\\"([^"]+)\\"', line)
+                if m is not None:
+                    s = m.group(1).split(' ')
+                    masked_files = masked_files.union(s)
+                    continue
+                m = re.match('SEARCH_DIRS_MASK=\\"([^"]+)\\"', line)
+                if m is not None:
+                    s = m.group(1).split(' ')
+                    for ss in s:
+                        masked_dirs = masked_dirs.union(glob.glob(ss))
+                    continue
+                m = re.match('SEARCH_DIRS=\\"([^"]+)\\"', line)
+                if m is not None:
+                    s = m.group(1).split(' ')
+                    for ss in s:
+                        search_dirs = masked_dirs.union(glob.glob(ss))
+                    continue
+
+    return (masked_dirs, masked_files, search_dirs)
+
+
+def collect_libraries_from_dir(dirs, mask):
+    ''' Collects all libraries from specified list of directories.
+        mask is list of pathes, that are ommited in scanning, can be eighter single file or entire directory
+        Returns tuple composed of: list of libraries, list of symlinks, and toupe with pair
+        (symlink_id, library_id) for resolving dependencies
+    '''
+
+
+    found_directories = []  # contains list of directories found; allow us to reduce number of fnc calls
+    found_files = []
+    found_symlinks = []
+    found_la_files = [] # la libraries
+    symlink_pairs = []  # list of pairs symlink_id->library_id
+
+    for d in dirs:
+        if d in mask:
+            continue
+
+        try:
+            for l in os.listdir(d):
+                l = os.path.join(d, l)
+                if l in mask:
+                    continue
+
+                if os.path.isdir(l):
+                    if os.path.islink(l):
+                        #we do not want scan symlink-directories
+                        pass
+                    else:
+                        found_directories.append(l)
+                elif os.path.isfile(l):
+                    if l.endswith('.so') or '.so.' in l:
+                        if l in found_files or l in found_symlinks:
+                            continue
+
+                        if os.path.islink(l):
+                            found_symlinks.append(l)
+                            abs_path = os.path.realpath(l)
+                            if abs_path in found_files:
+                                i = found_files.index(abs_path)
+                            else:
+                                found_files.append(abs_path)
+                                i = len(found_files)-1
+                            symlink_pairs.append((len(found_symlinks)-1, i,))
+                        else:
+                            found_files.append(l)
+                        continue
+                    elif l.endswith('.la'):
+                        if l in found_la_files:
+                            continue
+
+                        found_la_files.append(l)
+                    else:
+                        # sometimes there are binaries in libs' subdir, for example in nagios
+                        if not os.path.islink(l):
+                            if l in found_files or l in found_symlinks:
+                                continue
+                            prv = os.stat(l)[stat.ST_MODE]
+                            if prv & stat.S_IXUSR == stat.S_IXUSR or \
+                                    prv & stat.S_IXGRP == stat.S_IXGRP or \
+                                    prv & stat.S_IXOTH == stat.S_IXOTH:
+                                found_files.append(l)
+        except:
+            pass
+
+
+    if found_directories:
+        f,a,l,p = collect_libraries_from_dir(found_directories, mask)
+        found_files+=f
+        found_la_files+=a
+        found_symlinks+=l
+        symlink_pairs+=p
+
+    return (found_files, found_la_files, found_symlinks, symlink_pairs)
+
+
+def collect_binaries_from_dir(dirs, mask):
+    ''' Collects all binaries from specified list of directories.
+        mask is list of pathes, that are ommited in scanning, can be eighter single file or entire directory
+        Returns list of binaries
+    '''
+
+    found_directories = []  # contains list of directories found; allow us to reduce number of fnc calls
+    found_files = []
+
+    for d in dirs:
+        if d in mask:
+            continue
+
+        try:
+            for l in os.listdir(d):
+                l = os.path.join(d, l)
+                if d in mask:
+                    continue
+
+                if os.path.isdir(l):
+                    if os.path.islink(l):
+                        #we do not want scan symlink-directories
+                        pass
+                    else:
+                        found_directories.append(l)
+                elif os.path.isfile(l):
+                    #we're looking for binaries, and with binaries we do not need links, thus we can optimize a bit
+                    if not os.path.islink(l):
+                        prv = os.stat(l)[stat.ST_MODE]
+                        if prv & stat.S_IXUSR == stat.S_IXUSR or \
+                                prv & stat.S_IXGRP == stat.S_IXGRP or \
+                                prv & stat.S_IXOTH == stat.S_IXOTH:
+                            found_files.append(l)
+        except:
+            pass
+
+    if found_directories:
+        found_files += collect_binaries_from_dir(found_directories, mask)
+
+    return found_files
+
+
+def _match_str_in_list(lst, stri):
+    for l in lst:
+        if stri.endswith(l):
+            return l
+    return False
+
+
+def prepare_checks(files_to_check, libraries):
+    ''' 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)
+
+    for line in call_program(['scanelf', '-nBF', '%F %n',]+files_to_check).strip().split('\n'):
+        r = line.strip().split(' ')
+        if len(r) < 2: # no dependencies?
+            continue
+
+        deps = r[1].split(',')
+        for d in deps:
+            if d in libs:
+                i = libs.index(d)
+                dependencies[i].append(r[0])
+            else:
+                libs.append(d)
+                dependencies.append([r[0],])
+    return (libs, dependencies)
+
+
+def extract_dependencies_from_la(la, libraries, to_check):
+    broken = []
+    for f in la:
+        for line in open(f, 'r').readlines():
+            line = line.strip()
+            if line.startswith('dependency_libs='):
+                m = re.match("dependency_libs='([^']+)'", line)
+                if m is not None:
+                    for el in m.group(1).split(' '):
+                        el = el.strip()
+                        if len(el) < 1 or el.startswith('-'):
+                            continue
+
+                        if el in la or el in libraries:
+                            pass
+                        else:
+                            if to_check:
+                                _break = False
+                                for tc in to_check:
+                                    if tc in el:
+                                        _break = True
+                                        break
+                                if not _break:
+                                    continue
+
+                            print_v(1, yellow(' * ') + f + ' is broken (requires: ' + bold(el))
+                            broken.append(f)
+    return broken
+
+
+
+def find_broken(found_libs, system_libraries, to_check):
+    ''' Search for broken libraries.
+        Check if system_libraries contains found_libs, where
+        system_libraries is list of obsolute pathes and found_libs
+        is list of library names.
+    '''
+
+    # join libraries and looking at it as string is way too faster than for-jumping
+
+    broken = []
+    sl = '|'.join(system_libraries)
+
+    if not to_check:
+        for f in found_libs:
+            if f+'|' not in sl:
+                broken.append(found_libs.index(f))
+    else:
+        for tc in to_check:
+            for f in found_libs:
+                if tc in f and f+'|' not in sl:
+                    broken.append(found_libs.index(f))
+        #print broken
+
+    return broken
+
+
+def main_checks(found_libs, broken, dependencies):
+    ''' Checks for broken dependencies.
+        found_libs have to be the same as returned by prepare_checks
+        broken 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]
+        print_v(1, 'Broken files that requires: ' + bold(f))
+        for d in dependencies[b]:
+            print_v(1, yellow(' * ') + d)
+            broken_pathes.append(d)
+    return broken_pathes
+
+
+def assign_packages(broken, output):
+    ''' Finds and returns packages that owns files placed in broken.
+        Broken is list of files
+    '''
+    assigned = set()
+    for group in os.listdir('/var/db/pkg'):
+        for pkg in os.listdir('/var/db/pkg/' + group):
+            f = '/var/db/pkg/' + 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)
+                                    print_v(1, '\t' + m + ' -> ' + bold(found))
+                except:
+                    output(1, red(' !! Failed to read ' + f))
+
+    return assigned
+
+
+def get_best_match(cpv, cp):
+    """Tries to find another version of the pkg with the same slot
+    as the deprecated installed version.  Failing that attempt to get any version
+    of the same app
+    
+    @param cpv: string
+    @param cp: string
+    @rtype tuple: ([cpv,...], SLOT)
+    """
+
+    slot = portage.db[portage.root]["vartree"].dbapi.aux_get(cpv, ["SLOT"])
+    print_v(1, yellow('Warn: ebuild ' + cpv + ' not found.'))
+    print_v(1, 'Looking for %s:%s' %(cp, slot))
+    try:
+        m = portdb.match('%s:%s' %(cp, slot))
+    except portage.exception.InvalidAtom:
+        m = None
+
+    if not m:
+        print_v(1, red('Could not find ebuild for %s:%s' %(cp, slot)))
+        slot = ['']
+        m = portdb.match(cp)
+        if not m:
+            print_v(1, red('Could not find ebuild for ' + cp))
+    return m, slot
+
+
+def get_slotted_cps(cpvs):
+    """Uses portage to reduce the cpv list into a cp:slot list and returns it
+    """
+    from portage.versions import catpkgsplit
+    from portage import portdb
+
+    cps = []
+    for cpv in cpvs:
+        parts = catpkgsplit(cpv)
+        cp = parts[0] + '/' + parts[1]
+        try:
+            slot = portdb.aux_get(cpv, ["SLOT"])
+        except KeyError:
+            m, slot = get_best_match(cpv, cp)
+            if not m:
+                print_v(1, red("Installed package: %s is no longer available" %cp))
+                continue
+
+        if slot[0]:
+            cps.append(cp + ":" + slot[0])
+        else:
+            cps.append(cp)
+
+    return cps
+
+
+def read_cache(temp_path=DEFAULT_TMP_DIR):
+    ''' Reads cache information needed by analyse function.
+        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
+    '''
+
+    ret = {'libraries':[], 'la_libraries':[], 'libraries_links':[], 'binaries':[]}
+    try:
+        for key,val in ret.iteritems():
+            f = open(os.path.join(temp_path, key))
+            for line in f.readlines():
+                val.append(line.strip())
+            #libraries.remove('\n')
+            f.close()
+    except EnvironmentError:
+        pass
+
+    return (ret['libraries'], ret['la_libraries'], ret['libraries_links'], ret['binaries'])
+
+
+def save_cache(to_save, temp_path=DEFAULT_TMP_DIR):
+    ''' Tries to store caching information.
+        @param to_save have to be dict with keys: libraries, la_libraries, libraries_links and binaries
+    '''
+
+    if not os.path.exists(temp_path):
+        os.makedirs(temp_path)
+
+    f = open(os.path.join(temp_path, 'timestamp'), 'w')
+    f.write(str(int(time.time())))
+    f.close()
+
+    for key,val in to_save.iteritems():
+        f = open(os.path.join(temp_path, key), 'w')
+        for line in val:
+            f.write(line + '\n')
+        f.close()
+
+
+def analyse(output=print_v, libraries=None, la_libraries=None, libraries_links=None, binaries=None):
+    """Main program body.  It will collect all info and determine the
+    pkgs needing rebuilding.
+
+    @param output: optional print/data gathering routine. Defaults to print_v
+            which prints to sys.stdout. Refer to print_v parameters for more detail.
+    @rtype list: list of pkgs that need rebuilding
+    """
+
+    if libraries and la_libraries and libraries_links and binaries:
+        output(1, blue(' * ') + bold('Found cache, skipping collecting phase'))
+    else:
+        #TODO: add partial cache (for ex. only libraries) when found for some reason
+
+        output(1, green(' * ') + bold('Collecting system binaries and libraries'))
+        bin_dirs, lib_dirs = prepare_search_dirs()
+
+        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',]))
+
+        output(1, green(' * ') + bold('Collecting dynamic linking informations'))
+        libraries, la_libraries, libraries_links, symlink_pairs = collect_libraries_from_dir(lib_dirs, masked_dirs)
+        binaries = collect_binaries_from_dir(bin_dirs, masked_dirs)
+
+        if USE_TMP_FILES:
+            save_cache(to_save={'libraries':libraries, 'la_libraries':la_libraries, 'libraries_links':libraries_links, 'binaries':binaries})
+
+
+    output(2, 'Found '+ str(len(libraries)) + ' libraries (+' + str(len(libraries_links)) + ' symlinks) and ' + str(len(binaries)) + ' binaries')
+
+    output(1, green(' * ') + bold('Checking dynamic linking consistency'))
+    output(2,'Search for ' + str(len(binaries)+len(libraries)) + ' within ' + str(len(libraries)+len(libraries_links)))
+    libs_and_bins = libraries+binaries
+
+    found_libs, dependencies = prepare_checks(libs_and_bins, libraries+libraries_links)
+
+    broken = find_broken(found_libs, libraries+libraries_links, _libs_to_check)
+    broken_la = extract_dependencies_from_la(la_libraries, libraries+libraries_links, _libs_to_check)
+
+    broken_pathes = main_checks(found_libs, broken, dependencies)
+    broken_pathes += broken_la
+
+    output(1, green(' * ') + bold('Assign files to packages'))
+
+    return assign_packages(broken_pathes, output)
+
+
+def check_temp_files(temp_path=DEFAULT_TMP_DIR, max_delay=3600):
+    ''' Checks if temporary files from previous run are still available
+        and if they aren't too old
+        @param temp_path is directory, where temporary files should be found
+        @param max_delay is maximum time difference (in seconds) when those files
+                are still considered fresh and useful
+        returns True, when files can be used, or False, when they don't
+        exists or they are too old
+    '''
+
+    if not os.path.exists(temp_path) or not os.path.isdir(temp_path):
+        return False
+
+    timestamp_path = os.path.join(temp_path, 'timestamp')
+    if not os.path.exists(timestamp_path) or not os.path.isfile(timestamp_path):
+        return False
+
+    try:
+        f = open(timestamp_path)
+        timestamp = int(f.readline())
+        f.close()
+    except:
+        timestamp = 0
+        return False
+
+    diff = int(time.time()) - timestamp
+    return max_delay > diff
+
+
+# Runs from here
+if __name__ == "__main__":
+    _libs_to_check = set()
+
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], 'dehiklopqvCL:P', ['nocolor', 'debug', 'exact', 'help', 'ignore',\
+            'keep-temp', 'library=', 'no-ld-path', 'no-order', 'pretend', 'no-pretend', 'no-progress', 'quiet', 'verbose'])
+
+        for key,val in opts:
+            if key in ('-h', '--help'):
+                print_usage()
+                sys.exit(0)
+            elif key in ('-q', '--quiet'):
+                VERBOSITY = 0
+            elif key in ('-v', '--verbose'):
+                VERBOSITY = 2
+            elif key in ('-d', '--debug'):
+                PRINT_DEBUG = True
+            elif key in ('-p', '--pretend'):
+                PRETEND = True
+            elif key == '--no-pretend':
+                NO_PRETEND = True
+            elif key in ('-e', '--exact'):
+                EXACT = True
+            elif key in ('-C', '--nocolor', '--no-color'):
+                nocolor()
+            elif key in ('-L', '--library', '--library='):
+                _libs_to_check = _libs_to_check.union(val.split(','))
+            elif key in ('-i', '--ignore'):
+                USE_TMP_FILES = False
+
+        args = " ".join(args)
+    except getopt.GetoptError:
+        print_v(1, red('Unrecognized option\n'))
+        print_usage()
+        sys.exit(2)
+
+    if not sys.stdout.isatty():
+        nocolor()
+
+    if os.getuid() != 0 and not PRETEND:
+        print_v(1, blue(' * ') + yellow('You are not root, adding --pretend to portage options'))
+        PRETEND = True
+    elif not PRETEND and IS_DEV and not NO_PRETEND:
+        print_v(1, blue(' * ') + yellow('This is dev. version, so it could not work correctly'))
+        print_v(1, blue(' * ') + yellow('Adding --pretend to portage options anyway'))
+        print_v(1, blue(' * ') + 'If you\'re sure, you can add --no-pretend to revdep options')
+        PRETEND = True
+
+
+    signal.signal(signal.SIGINT, exithandler)
+    signal.signal(signal.SIGTERM, exithandler)
+    signal.signal(signal.SIGPIPE, signal.SIG_DFL)
+
+    analyze_cache = {}
+    if USE_TMP_FILES and check_temp_files():
+        libraries, la_libraries, libraries_links, binaries = read_cache()
+        assigned = analyse(libraries=libraries, la_libraries=la_libraries, \
+                       libraries_links=libraries_links, binaries=binaries)
+    else:
+        assigned = analyse()
+
+    if not assigned:
+        print_v(1, '\n' + bold('Your system is consistent'))
+        sys.exit(0)
+
+    if EXACT:
+        emerge_command = '=' + ' ='.join(assigned)
+    else:
+        emerge_command = ' '.join(get_slotted_cps(assigned))
+    if PRETEND:
+        args += ' --pretend'
+    if VERBOSITY >= 2:
+        args += ' --verbose'
+    elif VERBOSITY < 1:
+        args += ' --quiet'
+    emerge_command = args + ' --oneshot ' + emerge_command
+
+
+    #if PRETEND:
+    print_v(1, yellow('\nemerge') + bold(emerge_command))
+    #else:
+        #call_program(emerge_command.split())
+    os.system('emerge ' + emerge_command)
+



^ permalink raw reply related	[flat|nested] 115+ messages in thread

end of thread, other threads:[~2015-05-27 17:27 UTC | newest]

Thread overview: 115+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-11  8:40 [gentoo-commits] proj/gentoolkit:gentoolkit commit in: pym/gentoolkit/revdep_rebuild/ Brian Dolbec
  -- strict thread matches above, loose matches on Subject: below --
2015-05-27 17:27 Mike Gilbert
2014-11-12 21:29 Paul Varner
2014-11-12  7:16 Slawek Lis
2014-11-07 20:41 Slawek Lis
2014-11-07 20:41 Slawek Lis
2014-11-07 20:41 Slawek Lis
2014-11-07 20:41 Slawek Lis
2014-11-07 20:41 Slawek Lis
2014-11-07 20:41 Slawek Lis
2014-10-30 18:56 Paul Varner
2014-08-28  7:37 Slawek Lis
2014-03-27  6:59 Slawek Lis
2014-03-26  8:21 Slawek Lis
2014-03-24  7:17 Slawek Lis
2014-03-24  7:17 Slawek Lis
2014-03-17  6:50 Slawek Lis
2014-03-17  6:50 Slawek Lis
2014-03-11 21:43 Paul Varner
2014-03-11 21:22 Paul Varner
2014-02-19  5:01 Brian Dolbec
2014-02-19  4:33 Brian Dolbec
2014-02-19  4:33 Brian Dolbec
2014-02-19  3:14 Brian Dolbec
2014-02-19  3:14 Brian Dolbec
2014-02-19  3:14 Brian Dolbec
2014-02-19  3:14 Brian Dolbec
2014-02-19  3:14 Brian Dolbec
2014-02-19  3:14 Brian Dolbec
2014-02-19  3:14 Brian Dolbec
2014-02-19  3:14 Brian Dolbec
2014-02-18 18:51 Brian Dolbec
2014-02-18 18:51 Brian Dolbec
2014-02-18 17:59 Brian Dolbec
2014-02-18 17:23 Brian Dolbec
2014-02-18  7:30 Brian Dolbec
2014-02-18  6:15 Brian Dolbec
2014-02-17 10:31 Slawek Lis
2014-02-17  8:50 Slawek Lis
2014-02-16 20:55 Brian Dolbec
2014-02-13 22:08 Paul Varner
2014-02-12 21:12 Paul Varner
2014-02-12 16:20 Brian Dolbec
2014-02-12 16:20 Brian Dolbec
2014-02-12 10:42 Brian Dolbec
2014-02-12 10:22 Brian Dolbec
2014-02-12 10:22 Brian Dolbec
2014-02-12 10:22 Brian Dolbec
2014-02-12 10:22 Brian Dolbec
2014-02-11 19:39 Brian Dolbec
2014-02-11 18:49 Brian Dolbec
2014-02-11 18:49 Brian Dolbec
2014-02-11 18:49 Brian Dolbec
2014-02-11 18:49 Brian Dolbec
2014-02-11 18:49 Brian Dolbec
2014-02-11 18:49 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2014-02-11  8:40 Brian Dolbec
2012-11-09 14:16 Paul Varner
2012-03-19  6:50 Brian Dolbec
2012-03-04  7:41 Brian Dolbec
2012-03-02 17:47 Brian Dolbec
2011-10-10 17:36 Brian Dolbec
2011-10-10 16:09 Brian Dolbec
2011-07-14 18:29 Paul Varner
2011-07-14 18:29 Paul Varner
2011-07-14  2:32 Paul Varner
2011-07-14  1:44 Brian Dolbec
2011-07-14  1:44 Brian Dolbec
2011-07-13 20:06 Paul Varner
2011-07-13 16:01 Paul Varner
2011-07-13 15:35 Brian Dolbec
2011-07-13  5:53 Brian Dolbec
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner
2011-07-12 21:45 Paul Varner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox