public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/, pym/repoman/, ...
@ 2016-01-11  6:31 Brian Dolbec
  0 siblings, 0 replies; 11+ messages in thread
From: Brian Dolbec @ 2016-01-11  6:31 UTC (permalink / raw
  To: gentoo-commits

commit:     7beb8bb246c845600003e4caaabee5eb9e53cdc6
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sun Jan  3 23:10:48 2016 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Sun Jan 10 22:59:36 2016 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=7beb8bb2

repoman: Migrate RestrictChecks to a plugin module

 pym/repoman/modules/scan/metadata/__init__.py      |  8 ++++++
 .../scan/metadata}/restrict.py                     | 29 +++++++++++++++-------
 pym/repoman/scanner.py                             |  7 +-----
 3 files changed, 29 insertions(+), 15 deletions(-)

diff --git a/pym/repoman/modules/scan/metadata/__init__.py b/pym/repoman/modules/scan/metadata/__init__.py
index ed0c59d..6ab44f6 100644
--- a/pym/repoman/modules/scan/metadata/__init__.py
+++ b/pym/repoman/modules/scan/metadata/__init__.py
@@ -42,6 +42,14 @@ module_spec = {
 			'func_desc': {
 			},
 		},
+		'restrict-metadata': {
+			'name': "restrict",
+			'class': "RestrictChecks",
+			'description': doc,
+			'functions': ['check'],
+			'func_desc': {
+			},
+		},
 	}
 }
 

diff --git a/pym/repoman/checks/ebuilds/variables/restrict.py b/pym/repoman/modules/scan/metadata/restrict.py
similarity index 54%
rename from pym/repoman/checks/ebuilds/variables/restrict.py
rename to pym/repoman/modules/scan/metadata/restrict.py
index 215b792..93ca298 100644
--- a/pym/repoman/checks/ebuilds/variables/restrict.py
+++ b/pym/repoman/modules/scan/metadata/restrict.py
@@ -12,21 +12,23 @@ from repoman.qa_data import valid_restrict
 class RestrictChecks(object):
 	'''Perform checks on the RESTRICT variable.'''
 
-	def __init__(self, qatracker):
+	def __init__(self, **kwargs):
 		'''
 		@param qatracker: QATracker instance
 		'''
-		self.qatracker = qatracker
+		self.qatracker = kwargs.get('qatracker')
 
-	def check(self, pkg, package, ebuild, y_ebuild):
+	def check(self, **kwargs):
+		xpkg = kwargs.get('xpkg')
+		ebuild = kwargs.get('ebuild')
+		y_ebuild = kwargs.get('y_ebuild')
 		myrestrict = None
 
 		try:
 			myrestrict = portage.dep.use_reduce(
-				pkg._metadata["RESTRICT"], matchall=1, flat=True)
+				ebuild.metadata["RESTRICT"], matchall=1, flat=True)
 		except portage.exception.InvalidDependString as e:
-			self. qatracker.add_error(
-				"RESTRICT.syntax",
+			self.qatracker.add_error("RESTRICT.syntax",
 				"%s: RESTRICT: %s" % (ebuild.relative_path, e))
 			del e
 
@@ -36,6 +38,15 @@ class RestrictChecks(object):
 
 			if mybadrestrict:
 				for mybad in mybadrestrict:
-					self.qatracker.add_error(
-						"RESTRICT.invalid",
-						package + "/" + y_ebuild + ".ebuild: %s" % mybad)
+					self.qatracker.add_error("RESTRICT.invalid",
+						"%s/%s.ebuild: %s" % (xpkg, y_ebuild, mybad))
+		return {'continue': False}
+
+	@property
+	def runInPkgs(self):
+		return (False, [])
+
+	@property
+	def runInEbuilds(self):
+		return (True, [self.check])
+

diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py
index 1f792bd..8657c73 100644
--- a/pym/repoman/scanner.py
+++ b/pym/repoman/scanner.py
@@ -18,7 +18,6 @@ from portage import _unicode_encode
 from portage.dep import Atom
 from portage.output import green
 from repoman.checks.ebuilds.checks import run_checks
-from repoman.checks.ebuilds.variables.restrict import RestrictChecks
 from repoman.modules.commit import repochecks
 from repoman.profile import check_profiles, dev_profile_keywords, setup_profile
 from repoman.repos import repo_metadata
@@ -209,8 +208,6 @@ class Scanner(object):
 			self.modules[mod_class.__name__] = mod_class(**self.kwargs)
 
 		# initialize our checks classes here before the big xpkg loop
-		self.restrictcheck = RestrictChecks(self.qatracker)
-
 
 	def scan_pkgs(self, can_force):
 		dynamic_data = {'can_force': can_force}
@@ -295,7 +292,7 @@ class Scanner(object):
 				('description', 'DescriptionChecks'), (None, 'KeywordChecks'),
 				('arches', 'ArchChecks'), ('depend', 'DependChecks'),
 				('use_flags', 'USEFlagChecks'), ('ruby', 'RubyEclassChecks'),
-				('license', 'LicenseChecks'),
+				('license', 'LicenseChecks'), ('restrict', 'RestrictChecks'),
 				]:
 				if mod[0]:
 					mod_class = MODULE_CONTROLLER.get_class(mod[0])
@@ -323,8 +320,6 @@ class Scanner(object):
 			if y_ebuild_continue:
 				continue
 
-			self.restrictcheck.check(dynamic_data['pkg'], xpkg, dynamic_data['ebuild'], y_ebuild)
-
 			# Syntax Checks
 			if not self.vcs_settings.vcs_preserves_mtime:
 				if dynamic_data['ebuild'].ebuild_path not in self.changed.new_ebuilds and \


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

* [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/, pym/repoman/, ...
@ 2016-01-22 20:55 Brian Dolbec
  0 siblings, 0 replies; 11+ messages in thread
From: Brian Dolbec @ 2016-01-22 20:55 UTC (permalink / raw
  To: gentoo-commits

commit:     a475cee940d23a530b533545505c07cf8500e03d
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sun Jan  3 23:10:48 2016 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Fri Jan 22 18:44:13 2016 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=a475cee9

repoman: Migrate RestrictChecks to a plugin module

 pym/repoman/modules/scan/metadata/__init__.py      |  8 ++++++
 .../scan/metadata}/restrict.py                     | 29 +++++++++++++++-------
 pym/repoman/scanner.py                             |  7 +-----
 3 files changed, 29 insertions(+), 15 deletions(-)

diff --git a/pym/repoman/modules/scan/metadata/__init__.py b/pym/repoman/modules/scan/metadata/__init__.py
index ed0c59d..6ab44f6 100644
--- a/pym/repoman/modules/scan/metadata/__init__.py
+++ b/pym/repoman/modules/scan/metadata/__init__.py
@@ -42,6 +42,14 @@ module_spec = {
 			'func_desc': {
 			},
 		},
+		'restrict-metadata': {
+			'name': "restrict",
+			'class': "RestrictChecks",
+			'description': doc,
+			'functions': ['check'],
+			'func_desc': {
+			},
+		},
 	}
 }
 

diff --git a/pym/repoman/checks/ebuilds/variables/restrict.py b/pym/repoman/modules/scan/metadata/restrict.py
similarity index 54%
rename from pym/repoman/checks/ebuilds/variables/restrict.py
rename to pym/repoman/modules/scan/metadata/restrict.py
index 215b792..93ca298 100644
--- a/pym/repoman/checks/ebuilds/variables/restrict.py
+++ b/pym/repoman/modules/scan/metadata/restrict.py
@@ -12,21 +12,23 @@ from repoman.qa_data import valid_restrict
 class RestrictChecks(object):
 	'''Perform checks on the RESTRICT variable.'''
 
-	def __init__(self, qatracker):
+	def __init__(self, **kwargs):
 		'''
 		@param qatracker: QATracker instance
 		'''
-		self.qatracker = qatracker
+		self.qatracker = kwargs.get('qatracker')
 
-	def check(self, pkg, package, ebuild, y_ebuild):
+	def check(self, **kwargs):
+		xpkg = kwargs.get('xpkg')
+		ebuild = kwargs.get('ebuild')
+		y_ebuild = kwargs.get('y_ebuild')
 		myrestrict = None
 
 		try:
 			myrestrict = portage.dep.use_reduce(
-				pkg._metadata["RESTRICT"], matchall=1, flat=True)
+				ebuild.metadata["RESTRICT"], matchall=1, flat=True)
 		except portage.exception.InvalidDependString as e:
-			self. qatracker.add_error(
-				"RESTRICT.syntax",
+			self.qatracker.add_error("RESTRICT.syntax",
 				"%s: RESTRICT: %s" % (ebuild.relative_path, e))
 			del e
 
@@ -36,6 +38,15 @@ class RestrictChecks(object):
 
 			if mybadrestrict:
 				for mybad in mybadrestrict:
-					self.qatracker.add_error(
-						"RESTRICT.invalid",
-						package + "/" + y_ebuild + ".ebuild: %s" % mybad)
+					self.qatracker.add_error("RESTRICT.invalid",
+						"%s/%s.ebuild: %s" % (xpkg, y_ebuild, mybad))
+		return {'continue': False}
+
+	@property
+	def runInPkgs(self):
+		return (False, [])
+
+	@property
+	def runInEbuilds(self):
+		return (True, [self.check])
+

diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py
index 1f792bd..8657c73 100644
--- a/pym/repoman/scanner.py
+++ b/pym/repoman/scanner.py
@@ -18,7 +18,6 @@ from portage import _unicode_encode
 from portage.dep import Atom
 from portage.output import green
 from repoman.checks.ebuilds.checks import run_checks
-from repoman.checks.ebuilds.variables.restrict import RestrictChecks
 from repoman.modules.commit import repochecks
 from repoman.profile import check_profiles, dev_profile_keywords, setup_profile
 from repoman.repos import repo_metadata
@@ -209,8 +208,6 @@ class Scanner(object):
 			self.modules[mod_class.__name__] = mod_class(**self.kwargs)
 
 		# initialize our checks classes here before the big xpkg loop
-		self.restrictcheck = RestrictChecks(self.qatracker)
-
 
 	def scan_pkgs(self, can_force):
 		dynamic_data = {'can_force': can_force}
@@ -295,7 +292,7 @@ class Scanner(object):
 				('description', 'DescriptionChecks'), (None, 'KeywordChecks'),
 				('arches', 'ArchChecks'), ('depend', 'DependChecks'),
 				('use_flags', 'USEFlagChecks'), ('ruby', 'RubyEclassChecks'),
-				('license', 'LicenseChecks'),
+				('license', 'LicenseChecks'), ('restrict', 'RestrictChecks'),
 				]:
 				if mod[0]:
 					mod_class = MODULE_CONTROLLER.get_class(mod[0])
@@ -323,8 +320,6 @@ class Scanner(object):
 			if y_ebuild_continue:
 				continue
 
-			self.restrictcheck.check(dynamic_data['pkg'], xpkg, dynamic_data['ebuild'], y_ebuild)
-
 			# Syntax Checks
 			if not self.vcs_settings.vcs_preserves_mtime:
 				if dynamic_data['ebuild'].ebuild_path not in self.changed.new_ebuilds and \


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

* [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/, pym/repoman/, ...
@ 2016-01-23  1:42 Brian Dolbec
  0 siblings, 0 replies; 11+ messages in thread
From: Brian Dolbec @ 2016-01-23  1:42 UTC (permalink / raw
  To: gentoo-commits

commit:     7dfb4ff8da3870591cd28bea9380f9dbb5bd0e9a
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sun Jan  3 23:10:48 2016 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Sat Jan 23 01:32:22 2016 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=7dfb4ff8

repoman: Migrate RestrictChecks to a plugin module

 pym/repoman/modules/scan/metadata/__init__.py      |  9 +++++++
 .../scan/metadata}/restrict.py                     | 29 +++++++++++++++-------
 pym/repoman/scanner.py                             |  7 +-----
 3 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/pym/repoman/modules/scan/metadata/__init__.py b/pym/repoman/modules/scan/metadata/__init__.py
index c8f3609..4f376e1 100644
--- a/pym/repoman/modules/scan/metadata/__init__.py
+++ b/pym/repoman/modules/scan/metadata/__init__.py
@@ -46,6 +46,15 @@ module_spec = {
 			'func_desc': {
 			},
 		},
+		'restrict-metadata': {
+			'name': "restrict",
+			'sourcefile': "restrict",
+			'class': "RestrictChecks",
+			'description': doc,
+			'functions': ['check'],
+			'func_desc': {
+			},
+		},
 	}
 }
 

diff --git a/pym/repoman/checks/ebuilds/variables/restrict.py b/pym/repoman/modules/scan/metadata/restrict.py
similarity index 54%
rename from pym/repoman/checks/ebuilds/variables/restrict.py
rename to pym/repoman/modules/scan/metadata/restrict.py
index 215b792..93ca298 100644
--- a/pym/repoman/checks/ebuilds/variables/restrict.py
+++ b/pym/repoman/modules/scan/metadata/restrict.py
@@ -12,21 +12,23 @@ from repoman.qa_data import valid_restrict
 class RestrictChecks(object):
 	'''Perform checks on the RESTRICT variable.'''
 
-	def __init__(self, qatracker):
+	def __init__(self, **kwargs):
 		'''
 		@param qatracker: QATracker instance
 		'''
-		self.qatracker = qatracker
+		self.qatracker = kwargs.get('qatracker')
 
-	def check(self, pkg, package, ebuild, y_ebuild):
+	def check(self, **kwargs):
+		xpkg = kwargs.get('xpkg')
+		ebuild = kwargs.get('ebuild')
+		y_ebuild = kwargs.get('y_ebuild')
 		myrestrict = None
 
 		try:
 			myrestrict = portage.dep.use_reduce(
-				pkg._metadata["RESTRICT"], matchall=1, flat=True)
+				ebuild.metadata["RESTRICT"], matchall=1, flat=True)
 		except portage.exception.InvalidDependString as e:
-			self. qatracker.add_error(
-				"RESTRICT.syntax",
+			self.qatracker.add_error("RESTRICT.syntax",
 				"%s: RESTRICT: %s" % (ebuild.relative_path, e))
 			del e
 
@@ -36,6 +38,15 @@ class RestrictChecks(object):
 
 			if mybadrestrict:
 				for mybad in mybadrestrict:
-					self.qatracker.add_error(
-						"RESTRICT.invalid",
-						package + "/" + y_ebuild + ".ebuild: %s" % mybad)
+					self.qatracker.add_error("RESTRICT.invalid",
+						"%s/%s.ebuild: %s" % (xpkg, y_ebuild, mybad))
+		return {'continue': False}
+
+	@property
+	def runInPkgs(self):
+		return (False, [])
+
+	@property
+	def runInEbuilds(self):
+		return (True, [self.check])
+

diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py
index 1f792bd..8657c73 100644
--- a/pym/repoman/scanner.py
+++ b/pym/repoman/scanner.py
@@ -18,7 +18,6 @@ from portage import _unicode_encode
 from portage.dep import Atom
 from portage.output import green
 from repoman.checks.ebuilds.checks import run_checks
-from repoman.checks.ebuilds.variables.restrict import RestrictChecks
 from repoman.modules.commit import repochecks
 from repoman.profile import check_profiles, dev_profile_keywords, setup_profile
 from repoman.repos import repo_metadata
@@ -209,8 +208,6 @@ class Scanner(object):
 			self.modules[mod_class.__name__] = mod_class(**self.kwargs)
 
 		# initialize our checks classes here before the big xpkg loop
-		self.restrictcheck = RestrictChecks(self.qatracker)
-
 
 	def scan_pkgs(self, can_force):
 		dynamic_data = {'can_force': can_force}
@@ -295,7 +292,7 @@ class Scanner(object):
 				('description', 'DescriptionChecks'), (None, 'KeywordChecks'),
 				('arches', 'ArchChecks'), ('depend', 'DependChecks'),
 				('use_flags', 'USEFlagChecks'), ('ruby', 'RubyEclassChecks'),
-				('license', 'LicenseChecks'),
+				('license', 'LicenseChecks'), ('restrict', 'RestrictChecks'),
 				]:
 				if mod[0]:
 					mod_class = MODULE_CONTROLLER.get_class(mod[0])
@@ -323,8 +320,6 @@ class Scanner(object):
 			if y_ebuild_continue:
 				continue
 
-			self.restrictcheck.check(dynamic_data['pkg'], xpkg, dynamic_data['ebuild'], y_ebuild)
-
 			# Syntax Checks
 			if not self.vcs_settings.vcs_preserves_mtime:
 				if dynamic_data['ebuild'].ebuild_path not in self.changed.new_ebuilds and \


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

* [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/, pym/repoman/, ...
@ 2016-01-27 23:15 Brian Dolbec
  0 siblings, 0 replies; 11+ messages in thread
From: Brian Dolbec @ 2016-01-27 23:15 UTC (permalink / raw
  To: gentoo-commits

commit:     7fd7f5ac90f7f6cea917f8c617c47866bf0efcee
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sun Jan  3 17:36:26 2016 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Wed Jan 27 22:44:21 2016 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=7fd7f5ac

repoman: Migrate DescriptionChecks to the plugin system

 pym/repoman/modules/scan/metadata/__init__.py        |  9 +++++++++
 .../scan/metadata}/description.py                    | 20 ++++++++++++++------
 pym/repoman/scanner.py                               |  5 +----
 3 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/pym/repoman/modules/scan/metadata/__init__.py b/pym/repoman/modules/scan/metadata/__init__.py
index bacedf5..83aac7f 100644
--- a/pym/repoman/modules/scan/metadata/__init__.py
+++ b/pym/repoman/modules/scan/metadata/__init__.py
@@ -28,6 +28,15 @@ module_spec = {
 			'func_desc': {
 			},
 		},
+		'description-metadata': {
+			'name': "description",
+			'sourcefile': "description",
+			'class': "DescriptionChecks",
+			'description': doc,
+			'functions': ['check'],
+			'func_desc': {
+			},
+		},
 	}
 }
 

diff --git a/pym/repoman/checks/ebuilds/variables/description.py b/pym/repoman/modules/scan/metadata/description.py
similarity index 66%
rename from pym/repoman/checks/ebuilds/variables/description.py
rename to pym/repoman/modules/scan/metadata/description.py
index a2b1057..3570607 100644
--- a/pym/repoman/checks/ebuilds/variables/description.py
+++ b/pym/repoman/modules/scan/metadata/description.py
@@ -9,20 +9,19 @@ from repoman.qa_data import max_desc_len
 class DescriptionChecks(object):
 	'''Perform checks on the DESCRIPTION variable.'''
 
-	def __init__(self, qatracker):
+	def __init__(self, **kwargs):
 		'''
 		@param qatracker: QATracker instance
 		'''
-		self.qatracker = qatracker
+		self.qatracker = kwargs.get('qatracker')
 
-	def check(self, pkg, ebuild):
+	def checkTooLong(self, **kwargs):
 		'''
 		@param pkg: Package in which we check (object).
 		@param ebuild: Ebuild which we check (object).
 		'''
-		self._checkTooLong(pkg, ebuild)
-
-	def _checkTooLong(self, pkg, ebuild):
+		ebuild = kwargs.get('ebuild')
+		pkg = kwargs.get('pkg')
 		# 14 is the length of DESCRIPTION=""
 		if len(pkg._metadata['DESCRIPTION']) > max_desc_len:
 			self.qatracker.add_error(
@@ -30,3 +29,12 @@ class DescriptionChecks(object):
 				"%s: DESCRIPTION is %d characters (max %d)" %
 				(ebuild.relative_path, len(
 					pkg._metadata['DESCRIPTION']), max_desc_len))
+		return {'continue': False}
+
+	@property
+	def runInPkgs(self):
+		return (False, [])
+
+	@property
+	def runInEbuilds(self):
+		return (True, [self.checkTooLong])

diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py
index 29edcd8..b9e80ff 100644
--- a/pym/repoman/scanner.py
+++ b/pym/repoman/scanner.py
@@ -21,7 +21,6 @@ from repoman.checks.ebuilds.checks import run_checks
 from repoman.checks.ebuilds.eclasses.ruby import RubyEclassChecks
 from repoman.check_missingslot import check_missingslot
 from repoman.checks.ebuilds.use_flags import USEFlagChecks
-from repoman.checks.ebuilds.variables.description import DescriptionChecks
 from repoman.checks.ebuilds.variables.license import LicenseChecks
 from repoman.checks.ebuilds.variables.restrict import RestrictChecks
 from repoman.modules.commit import repochecks
@@ -219,7 +218,6 @@ class Scanner(object):
 		# initialize our checks classes here before the big xpkg loop
 		self.use_flag_checks = USEFlagChecks(self.qatracker, uselist)
 		self.rubyeclasscheck = RubyEclassChecks(self.qatracker)
-		self.descriptioncheck = DescriptionChecks(self.qatracker)
 		self.licensecheck = LicenseChecks(self.qatracker, liclist, liclist_deprecated)
 		self.restrictcheck = RestrictChecks(self.qatracker)
 
@@ -304,6 +302,7 @@ class Scanner(object):
 			for mod in [('ebuild', 'Ebuild'), ('live', 'LiveEclassChecks'),
 				('eapi', 'EAPIChecks'), ('ebuild_metadata', 'EbuildMetadata'),
 				('thirdpartymirrors', 'ThirdPartyMirrors'),
+				('description', 'DescriptionChecks'),
 				]:
 				if mod[0]:
 					mod_class = MODULE_CONTROLLER.get_class(mod[0])
@@ -350,8 +349,6 @@ class Scanner(object):
 						myqakey = var + ".virtual"
 						self.qatracker.add_error(myqakey, dynamic_data['ebuild'].relative_path)
 
-			self.descriptioncheck.check(dynamic_data['pkg'], dynamic_data['ebuild'])
-
 			if dynamic_data['live_ebuild'] and self.repo_settings.repo_config.name == "gentoo":
 				self.liveeclasscheck.check(
 					dynamic_data['pkg'], xpkg, dynamic_data['ebuild'], y_ebuild, dynamic_data['ebuild'].keywords, self.repo_metadata['pmaskdict'])


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

* [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/, pym/repoman/, ...
@ 2016-01-27 23:15 Brian Dolbec
  0 siblings, 0 replies; 11+ messages in thread
From: Brian Dolbec @ 2016-01-27 23:15 UTC (permalink / raw
  To: gentoo-commits

commit:     12189a5924aefef99a9cf9684b6aed7c0720b38a
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sun Jan  3 23:10:48 2016 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Wed Jan 27 22:44:24 2016 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=12189a59

repoman: Migrate RestrictChecks to a plugin module

 pym/repoman/modules/scan/metadata/__init__.py      |  9 +++++++
 .../scan/metadata}/restrict.py                     | 29 +++++++++++++++-------
 pym/repoman/scanner.py                             |  7 +-----
 3 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/pym/repoman/modules/scan/metadata/__init__.py b/pym/repoman/modules/scan/metadata/__init__.py
index c8f3609..4f376e1 100644
--- a/pym/repoman/modules/scan/metadata/__init__.py
+++ b/pym/repoman/modules/scan/metadata/__init__.py
@@ -46,6 +46,15 @@ module_spec = {
 			'func_desc': {
 			},
 		},
+		'restrict-metadata': {
+			'name': "restrict",
+			'sourcefile': "restrict",
+			'class': "RestrictChecks",
+			'description': doc,
+			'functions': ['check'],
+			'func_desc': {
+			},
+		},
 	}
 }
 

diff --git a/pym/repoman/checks/ebuilds/variables/restrict.py b/pym/repoman/modules/scan/metadata/restrict.py
similarity index 54%
rename from pym/repoman/checks/ebuilds/variables/restrict.py
rename to pym/repoman/modules/scan/metadata/restrict.py
index 215b792..93ca298 100644
--- a/pym/repoman/checks/ebuilds/variables/restrict.py
+++ b/pym/repoman/modules/scan/metadata/restrict.py
@@ -12,21 +12,23 @@ from repoman.qa_data import valid_restrict
 class RestrictChecks(object):
 	'''Perform checks on the RESTRICT variable.'''
 
-	def __init__(self, qatracker):
+	def __init__(self, **kwargs):
 		'''
 		@param qatracker: QATracker instance
 		'''
-		self.qatracker = qatracker
+		self.qatracker = kwargs.get('qatracker')
 
-	def check(self, pkg, package, ebuild, y_ebuild):
+	def check(self, **kwargs):
+		xpkg = kwargs.get('xpkg')
+		ebuild = kwargs.get('ebuild')
+		y_ebuild = kwargs.get('y_ebuild')
 		myrestrict = None
 
 		try:
 			myrestrict = portage.dep.use_reduce(
-				pkg._metadata["RESTRICT"], matchall=1, flat=True)
+				ebuild.metadata["RESTRICT"], matchall=1, flat=True)
 		except portage.exception.InvalidDependString as e:
-			self. qatracker.add_error(
-				"RESTRICT.syntax",
+			self.qatracker.add_error("RESTRICT.syntax",
 				"%s: RESTRICT: %s" % (ebuild.relative_path, e))
 			del e
 
@@ -36,6 +38,15 @@ class RestrictChecks(object):
 
 			if mybadrestrict:
 				for mybad in mybadrestrict:
-					self.qatracker.add_error(
-						"RESTRICT.invalid",
-						package + "/" + y_ebuild + ".ebuild: %s" % mybad)
+					self.qatracker.add_error("RESTRICT.invalid",
+						"%s/%s.ebuild: %s" % (xpkg, y_ebuild, mybad))
+		return {'continue': False}
+
+	@property
+	def runInPkgs(self):
+		return (False, [])
+
+	@property
+	def runInEbuilds(self):
+		return (True, [self.check])
+

diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py
index 697724f..1b6bbb4 100644
--- a/pym/repoman/scanner.py
+++ b/pym/repoman/scanner.py
@@ -18,7 +18,6 @@ from portage import _unicode_encode
 from portage.dep import Atom
 from portage.output import green
 from repoman.checks.ebuilds.checks import run_checks
-from repoman.checks.ebuilds.variables.restrict import RestrictChecks
 from repoman.modules.commit import repochecks
 from repoman.profile import check_profiles, dev_profile_keywords, setup_profile
 from repoman.repos import repo_metadata
@@ -212,8 +211,6 @@ class Scanner(object):
 			self.modules[mod_class.__name__] = mod_class(**self.kwargs)
 
 		# initialize our checks classes here before the big xpkg loop
-		self.restrictcheck = RestrictChecks(self.qatracker)
-
 
 	def scan_pkgs(self, can_force):
 		dynamic_data = {'can_force': can_force}
@@ -298,7 +295,7 @@ class Scanner(object):
 				('description', 'DescriptionChecks'), (None, 'KeywordChecks'),
 				('arches', 'ArchChecks'), ('depend', 'DependChecks'),
 				('use_flags', 'USEFlagChecks'), ('ruby', 'RubyEclassChecks'),
-				('license', 'LicenseChecks'),
+				('license', 'LicenseChecks'), ('restrict', 'RestrictChecks'),
 				]:
 				if mod[0]:
 					mod_class = MODULE_CONTROLLER.get_class(mod[0])
@@ -326,8 +323,6 @@ class Scanner(object):
 			if y_ebuild_continue:
 				continue
 
-			self.restrictcheck.check(dynamic_data['pkg'], xpkg, dynamic_data['ebuild'], y_ebuild)
-
 			# Syntax Checks
 			if not self.vcs_settings.vcs_preserves_mtime:
 				if dynamic_data['ebuild'].ebuild_path not in self.changed.new_ebuilds and \


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

* [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/, pym/repoman/, ...
@ 2016-01-29  5:01 Brian Dolbec
  0 siblings, 0 replies; 11+ messages in thread
From: Brian Dolbec @ 2016-01-29  5:01 UTC (permalink / raw
  To: gentoo-commits

commit:     b94feb66d48bf58770c84ee70154faa21dbb5174
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sun Jan  3 23:10:48 2016 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Fri Jan 29 04:52:58 2016 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=b94feb66

repoman: Migrate RestrictChecks to a plugin module

 pym/repoman/modules/scan/metadata/__init__.py      |  9 +++++++
 .../scan/metadata}/restrict.py                     | 29 +++++++++++++++-------
 pym/repoman/scanner.py                             |  7 +-----
 3 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/pym/repoman/modules/scan/metadata/__init__.py b/pym/repoman/modules/scan/metadata/__init__.py
index c8f3609..4f376e1 100644
--- a/pym/repoman/modules/scan/metadata/__init__.py
+++ b/pym/repoman/modules/scan/metadata/__init__.py
@@ -46,6 +46,15 @@ module_spec = {
 			'func_desc': {
 			},
 		},
+		'restrict-metadata': {
+			'name': "restrict",
+			'sourcefile': "restrict",
+			'class': "RestrictChecks",
+			'description': doc,
+			'functions': ['check'],
+			'func_desc': {
+			},
+		},
 	}
 }
 

diff --git a/pym/repoman/checks/ebuilds/variables/restrict.py b/pym/repoman/modules/scan/metadata/restrict.py
similarity index 54%
rename from pym/repoman/checks/ebuilds/variables/restrict.py
rename to pym/repoman/modules/scan/metadata/restrict.py
index 215b792..93ca298 100644
--- a/pym/repoman/checks/ebuilds/variables/restrict.py
+++ b/pym/repoman/modules/scan/metadata/restrict.py
@@ -12,21 +12,23 @@ from repoman.qa_data import valid_restrict
 class RestrictChecks(object):
 	'''Perform checks on the RESTRICT variable.'''
 
-	def __init__(self, qatracker):
+	def __init__(self, **kwargs):
 		'''
 		@param qatracker: QATracker instance
 		'''
-		self.qatracker = qatracker
+		self.qatracker = kwargs.get('qatracker')
 
-	def check(self, pkg, package, ebuild, y_ebuild):
+	def check(self, **kwargs):
+		xpkg = kwargs.get('xpkg')
+		ebuild = kwargs.get('ebuild')
+		y_ebuild = kwargs.get('y_ebuild')
 		myrestrict = None
 
 		try:
 			myrestrict = portage.dep.use_reduce(
-				pkg._metadata["RESTRICT"], matchall=1, flat=True)
+				ebuild.metadata["RESTRICT"], matchall=1, flat=True)
 		except portage.exception.InvalidDependString as e:
-			self. qatracker.add_error(
-				"RESTRICT.syntax",
+			self.qatracker.add_error("RESTRICT.syntax",
 				"%s: RESTRICT: %s" % (ebuild.relative_path, e))
 			del e
 
@@ -36,6 +38,15 @@ class RestrictChecks(object):
 
 			if mybadrestrict:
 				for mybad in mybadrestrict:
-					self.qatracker.add_error(
-						"RESTRICT.invalid",
-						package + "/" + y_ebuild + ".ebuild: %s" % mybad)
+					self.qatracker.add_error("RESTRICT.invalid",
+						"%s/%s.ebuild: %s" % (xpkg, y_ebuild, mybad))
+		return {'continue': False}
+
+	@property
+	def runInPkgs(self):
+		return (False, [])
+
+	@property
+	def runInEbuilds(self):
+		return (True, [self.check])
+

diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py
index 697724f..1b6bbb4 100644
--- a/pym/repoman/scanner.py
+++ b/pym/repoman/scanner.py
@@ -18,7 +18,6 @@ from portage import _unicode_encode
 from portage.dep import Atom
 from portage.output import green
 from repoman.checks.ebuilds.checks import run_checks
-from repoman.checks.ebuilds.variables.restrict import RestrictChecks
 from repoman.modules.commit import repochecks
 from repoman.profile import check_profiles, dev_profile_keywords, setup_profile
 from repoman.repos import repo_metadata
@@ -212,8 +211,6 @@ class Scanner(object):
 			self.modules[mod_class.__name__] = mod_class(**self.kwargs)
 
 		# initialize our checks classes here before the big xpkg loop
-		self.restrictcheck = RestrictChecks(self.qatracker)
-
 
 	def scan_pkgs(self, can_force):
 		dynamic_data = {'can_force': can_force}
@@ -298,7 +295,7 @@ class Scanner(object):
 				('description', 'DescriptionChecks'), (None, 'KeywordChecks'),
 				('arches', 'ArchChecks'), ('depend', 'DependChecks'),
 				('use_flags', 'USEFlagChecks'), ('ruby', 'RubyEclassChecks'),
-				('license', 'LicenseChecks'),
+				('license', 'LicenseChecks'), ('restrict', 'RestrictChecks'),
 				]:
 				if mod[0]:
 					mod_class = MODULE_CONTROLLER.get_class(mod[0])
@@ -326,8 +323,6 @@ class Scanner(object):
 			if y_ebuild_continue:
 				continue
 
-			self.restrictcheck.check(dynamic_data['pkg'], xpkg, dynamic_data['ebuild'], y_ebuild)
-
 			# Syntax Checks
 			if not self.vcs_settings.vcs_preserves_mtime:
 				if dynamic_data['ebuild'].ebuild_path not in self.changed.new_ebuilds and \


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

* [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/, pym/repoman/, ...
@ 2016-01-30  6:58 Brian Dolbec
  0 siblings, 0 replies; 11+ messages in thread
From: Brian Dolbec @ 2016-01-30  6:58 UTC (permalink / raw
  To: gentoo-commits

commit:     47f880cf6ffa44309dd85e4e54ee5b0cf3043498
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sun Jan  3 23:09:27 2016 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Sat Jan 30 06:33:57 2016 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=47f880cf

repoman: Migrate license checks to a plugin module

 pym/repoman/checks/ebuilds/variables/license.py | 47 ----------------------
 pym/repoman/modules/scan/metadata/__init__.py   |  9 +++++
 pym/repoman/modules/scan/metadata/license.py    | 53 +++++++++++++++++++++++++
 pym/repoman/scanner.py                          |  7 +---
 4 files changed, 63 insertions(+), 53 deletions(-)

diff --git a/pym/repoman/checks/ebuilds/variables/license.py b/pym/repoman/checks/ebuilds/variables/license.py
deleted file mode 100644
index bdc859c..0000000
--- a/pym/repoman/checks/ebuilds/variables/license.py
+++ /dev/null
@@ -1,47 +0,0 @@
-
-'''description.py
-Perform checks on the LICENSE variable.
-'''
-
-# import our initialized portage instance
-from repoman._portage import portage
-
-
-class LicenseChecks(object):
-	'''Perform checks on the LICENSE variable.'''
-
-	def __init__(self, qatracker, liclist, liclist_deprecated):
-		'''
-		@param qatracker: QATracker instance
-		@param liclist: List of licenses.
-		@param liclist: List of deprecated licenses.
-		'''
-		self.qatracker = qatracker
-		self.liclist = liclist
-		self.liclist_deprecated = liclist_deprecated
-
-	def check(
-		self, pkg, package, ebuild, y_ebuild):
-		'''
-		@param pkg: Package in which we check (object).
-		@param package: Package in which we check (string).
-		@param ebuild: Ebuild which we check (object).
-		@param y_ebuild: Ebuild which we check (string).
-		'''
-
-		# Parse the LICENSE variable, remove USE conditions and flatten it.
-		licenses = portage.dep.use_reduce(
-			pkg._metadata["LICENSE"], matchall=1, flat=True)
-
-		# Check each entry to ensure that it exists in ${PORTDIR}/licenses/.
-		for lic in licenses:
-			# Need to check for "||" manually as no portage
-			# function will remove it without removing values.
-			if lic not in self.liclist and lic != "||":
-				self.qatracker.add_error(
-					"LICENSE.invalid",
-					package + "/" + y_ebuild + ".ebuild: %s" % lic)
-			elif lic in self.liclist_deprecated:
-				self.qatracker.add_error(
-					"LICENSE.deprecated",
-					"%s: %s" % (ebuild.relative_path, lic))

diff --git a/pym/repoman/modules/scan/metadata/__init__.py b/pym/repoman/modules/scan/metadata/__init__.py
index 83aac7f..c8f3609 100644
--- a/pym/repoman/modules/scan/metadata/__init__.py
+++ b/pym/repoman/modules/scan/metadata/__init__.py
@@ -37,6 +37,15 @@ module_spec = {
 			'func_desc': {
 			},
 		},
+		'license-metadata': {
+			'name': "license",
+			'sourcefile': "license",
+			'class': "LicenseChecks",
+			'description': doc,
+			'functions': ['check'],
+			'func_desc': {
+			},
+		},
 	}
 }
 

diff --git a/pym/repoman/modules/scan/metadata/license.py b/pym/repoman/modules/scan/metadata/license.py
new file mode 100644
index 0000000..b022b20
--- /dev/null
+++ b/pym/repoman/modules/scan/metadata/license.py
@@ -0,0 +1,53 @@
+
+'''license.py
+Perform checks on the LICENSE variable.
+'''
+
+# import our initialized portage instance
+from repoman._portage import portage
+
+
+class LicenseChecks(object):
+	'''Perform checks on the LICENSE variable.'''
+
+	def __init__(self, **kwargs):
+		'''
+		@param qatracker: QATracker instance
+		@param repo_metadata: dictionary of various repository items.
+		'''
+		self.qatracker = kwargs.get('qatracker')
+		self.repo_metadata = kwargs.get('repo_metadata')
+
+	def check(self, **kwargs):
+		'''
+		@param xpkg: Package in which we check (string).
+		@param ebuild: Ebuild which we check (object).
+		@param y_ebuild: Ebuild which we check (string).
+		'''
+		xpkg = kwargs.get('xpkg')
+		ebuild = kwargs.get('ebuild')
+		y_ebuild = kwargs.get('y_ebuild')
+		if not kwargs.get('badlicsyntax'):
+			# Parse the LICENSE variable, remove USE conditions and flatten it.
+			licenses = portage.dep.use_reduce(
+				ebuild.metadata["LICENSE"], matchall=1, flat=True)
+
+			# Check each entry to ensure that it exists in ${PORTDIR}/licenses/.
+			for lic in licenses:
+				# Need to check for "||" manually as no portage
+				# function will remove it without removing values.
+				if lic not in self.repo_metadata['liclist'] and lic != "||":
+					self.qatracker.add_error("LICENSE.invalid",
+						"%s/%s.ebuild: %s" % (xpkg, y_ebuild, lic))
+				elif lic in self.repo_metadata['lic_deprecated']:
+					self.qatracker.add_error("LICENSE.deprecated",
+						"%s: %s" % (ebuild.relative_path, lic))
+		return {'continue': False}
+
+	@property
+	def runInPkgs(self):
+		return (False, [])
+
+	@property
+	def runInEbuilds(self):
+		return (True, [self.check])

diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py
index c8539cb..55f3d56 100644
--- a/pym/repoman/scanner.py
+++ b/pym/repoman/scanner.py
@@ -18,7 +18,6 @@ from portage import _unicode_encode
 from portage.dep import Atom
 from portage.output import green
 from repoman.checks.ebuilds.checks import run_checks
-from repoman.checks.ebuilds.variables.license import LicenseChecks
 from repoman.checks.ebuilds.variables.restrict import RestrictChecks
 from repoman.modules.commit import repochecks
 from repoman.profile import check_profiles, dev_profile_keywords, setup_profile
@@ -213,7 +212,6 @@ class Scanner(object):
 			self.modules[mod_class.__name__] = mod_class(**self.kwargs)
 
 		# initialize our checks classes here before the big xpkg loop
-		self.licensecheck = LicenseChecks(self.qatracker, liclist, liclist_deprecated)
 		self.restrictcheck = RestrictChecks(self.qatracker)
 
 
@@ -300,6 +298,7 @@ class Scanner(object):
 				('description', 'DescriptionChecks'), (None, 'KeywordChecks'),
 				('arches', 'ArchChecks'), ('depend', 'DependChecks'),
 				('use_flags', 'USEFlagChecks'), ('ruby', 'RubyEclassChecks'),
+				('license', 'LicenseChecks'),
 				]:
 				if mod[0]:
 					mod_class = MODULE_CONTROLLER.get_class(mod[0])
@@ -327,10 +326,6 @@ class Scanner(object):
 			if y_ebuild_continue:
 				continue
 
-			# license checks
-			if not dynamic_data['badlicsyntax']:
-				self.licensecheck.check(dynamic_data['pkg'], xpkg, dynamic_data['ebuild'], y_ebuild)
-
 			self.restrictcheck.check(dynamic_data['pkg'], xpkg, dynamic_data['ebuild'], y_ebuild)
 
 			# Syntax Checks


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

* [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/, pym/repoman/, ...
@ 2016-03-15 19:00 Brian Dolbec
  0 siblings, 0 replies; 11+ messages in thread
From: Brian Dolbec @ 2016-03-15 19:00 UTC (permalink / raw
  To: gentoo-commits

commit:     4ee48de5477bbbe299cdb43f8779a9c9a0388eac
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Mar 15 18:40:06 2016 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Tue Mar 15 18:40:06 2016 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=4ee48de5

repoman: Create a new boolean Fuse type

Create a Fuse type which implememts a boolean as a one time fuse.
The Fuse is initialized True, then is pop()'d to become False.
Once the Fuse is blown, it can not be reset to True.
Convert the use of the dynamic_data variable 'allvalid' to a Fuse instance.

 pym/repoman/fuse.py                         | 68 +++++++++++++++++++++++++++++
 pym/repoman/modules/scan/ebuild/ebuild.py   |  7 ++-
 pym/repoman/modules/scan/ebuild/isebuild.py | 13 +++---
 pym/repoman/modules/scan/metadata/unused.py |  2 +-
 pym/repoman/scanner.py                      |  2 +
 5 files changed, 83 insertions(+), 9 deletions(-)

diff --git a/pym/repoman/fuse.py b/pym/repoman/fuse.py
new file mode 100644
index 0000000..ac864fd
--- /dev/null
+++ b/pym/repoman/fuse.py
@@ -0,0 +1,68 @@
+
+'''
+fuse.py
+
+A tiny one-time-fuse class that uses a boolean to mimic the property of
+an electrical fuse.  IT's good (True) until it is popped (bad, False).
+It is not resetable.
+'''
+
+
+class Fuse(object):
+	'''A One time fuse style boolean instance'''
+
+	__slots__ = ('_state')
+
+	def __init__(self):
+		self._state = True
+
+	def pop(self):
+		'''Blow's the fuse state (makes it False)'''
+		self._state = False
+
+	def __repr__(self):
+		'''x.__repr__() <==> repr(x)'''
+		return repr(self._state>0)
+
+	def __str__(self):
+		'''x.__str__() <==> str(x)'''
+		return ['False', 'True'][self._state]
+
+	def __bool__(self):
+		'''self != 0'''
+		return self._state != 0
+
+	def __nonzero__(self):
+		'''self != 0'''
+		return self._state != 0
+
+	def __abs__(self):
+		'''x.__abs__() <==> abs(x)'''
+		return [0, 1] [self._state]
+
+	def __int__(self):
+		'''int(self)'''
+		return [0, 1][self._state]
+
+	def __eq__(self, value):
+		'''Return self==value.'''
+		return self._state == value
+
+	def __ne__(self, value):
+		'''Return self!=value.'''
+		return self._state != value
+
+	def __ge__(self, value):
+		'''Return self>=value.'''
+		return self._state >= value
+
+	def __gt__(self, value):
+		return self._state > value
+
+	def __le__(self, value):
+		'''Return self<=value.'''
+		return self._state <= value
+
+	def __lt__(self, value):
+		'''Return self<value.'''
+		return self._state < value

diff --git a/pym/repoman/modules/scan/ebuild/ebuild.py b/pym/repoman/modules/scan/ebuild/ebuild.py
index e9a2cdd..540411f 100644
--- a/pym/repoman/modules/scan/ebuild/ebuild.py
+++ b/pym/repoman/modules/scan/ebuild/ebuild.py
@@ -127,13 +127,16 @@ class Ebuild(ScanBase):
 	def pkg_invalid(self, **kwargs):
 		'''Sets some pkg info and checks for invalid packages
 
-		@returns: dictionary, including {pkg object, allvalid}
+		@param validity_fuse: Fuse instance
+		@returns: dictionary, including {pkg object}
 		'''
+		fuse = kwargs.get('validity_fuse')
 		if self.pkg.invalid:
 			for k, msgs in self.pkg.invalid.items():
 				for msg in msgs:
 					self.qatracker.add_error(k, "%s: %s" % (self.relative_path, msg))
-			return {'continue': True, 'allvalid': False, 'pkg': self.pkg}
+			fuse.pop()
+			return {'continue': True, 'pkg': self.pkg}
 		return {'continue': False, 'pkg': self.pkg}
 
 	@property

diff --git a/pym/repoman/modules/scan/ebuild/isebuild.py b/pym/repoman/modules/scan/ebuild/isebuild.py
index 1dffc6a..474a874 100644
--- a/pym/repoman/modules/scan/ebuild/isebuild.py
+++ b/pym/repoman/modules/scan/ebuild/isebuild.py
@@ -35,15 +35,16 @@ class IsEbuild(ScanBase):
 		@param checkdirlist: list of files in the current package directory
 		@param checkdir: current package directory path
 		@param xpkg: current package directory being checked
-		@returns: dictionary, including {pkgs, allvalid, can_force}
+		@param validity_fuse: Fuse instance
+		@returns: dictionary, including {pkgs, can_force}
 		'''
 		checkdirlist = kwargs.get('checkdirlist')
 		checkdir = kwargs.get('checkdir')
 		xpkg = kwargs.get('xpkg')
+		fuse = kwargs.get('validity_fuse')
 		self.continue_ = False
 		ebuildlist = []
 		pkgs = {}
-		allvalid = True
 		for y in checkdirlist:
 			file_is_ebuild = y.endswith(".ebuild")
 			file_should_be_non_executable = y in no_exec or file_is_ebuild
@@ -62,15 +63,15 @@ class IsEbuild(ScanBase):
 				try:
 					myaux = dict(zip(allvars, self.portdb.aux_get(cpv, allvars)))
 				except KeyError:
-					allvalid = False
+					fuse.pop()
 					self.qatracker.add_error("ebuild.syntax", os.path.join(xpkg, y))
 					continue
 				except IOError:
-					allvalid = False
+					fuse.pop()
 					self.qatracker.add_error("ebuild.output", os.path.join(xpkg, y))
 					continue
 				if not portage.eapi_is_supported(myaux["EAPI"]):
-					allvalid = False
+					fuse.pop()
 					self.qatracker.add_error("EAPI.unsupported", os.path.join(xpkg, y))
 					continue
 				pkgs[pf] = Package(
@@ -85,7 +86,7 @@ class IsEbuild(ScanBase):
 			# positives confuse users.
 			self.continue_ = True
 
-		return {'continue': self.continue_, 'pkgs': pkgs, 'allvalid': allvalid,
+		return {'continue': self.continue_, 'pkgs': pkgs,
 			'can_force': not self.continue_}
 
 	@property

diff --git a/pym/repoman/modules/scan/metadata/unused.py b/pym/repoman/modules/scan/metadata/unused.py
index 5eb6716..b3dc863 100644
--- a/pym/repoman/modules/scan/metadata/unused.py
+++ b/pym/repoman/modules/scan/metadata/unused.py
@@ -11,7 +11,7 @@ class UnusedCheck(object):
 		used_useflags = kwargs.get('used_useflags')
 		# check if there are unused local USE-descriptions in metadata.xml
 		# (unless there are any invalids, to avoid noise)
-		if kwargs.get('allvalid'):
+		if kwargs.get('validity_fuse'):
 			for myflag in muselist.difference(used_useflags):
 				self.qatracker.add_error(
 					"metadata.warning",

diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py
index 86e389a..9c6f5ac 100644
--- a/pym/repoman/scanner.py
+++ b/pym/repoman/scanner.py
@@ -9,6 +9,7 @@ import portage
 from portage import normalize_path
 from portage import os
 from portage.output import green
+from repoman.fuse import Fuse
 from repoman.modules.commit import repochecks
 from repoman.profile import check_profiles, dev_profile_keywords, setup_profile
 from repoman.repos import repo_metadata
@@ -232,6 +233,7 @@ class Scanner(object):
 				'repolevel': self.repolevel,
 				'catdir': catdir,
 				'pkgdir': pkgdir,
+				'validity_fuse': Fuse()
 				}
 			# need to set it up for ==> self.modules or some other ordered list
 			for mod in ['Manifests', 'IsEbuild', 'KeywordChecks', 'FileChecks',


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

* [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/, pym/repoman/, ...
@ 2016-04-21 16:54 Brian Dolbec
  0 siblings, 0 replies; 11+ messages in thread
From: Brian Dolbec @ 2016-04-21 16:54 UTC (permalink / raw
  To: gentoo-commits

commit:     d7bacba37b93eaf77a0669cda344a41c99a64658
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Apr 16 20:24:06 2016 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Thu Apr 21 16:51:34 2016 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=d7bacba3

repoman: replace Fuse with Future

Replace Fuse with Future, which is similar more generic. The
code ends up being slightly more verbose, but more flexible.
The Future class will be useful elsewhere, including the
EventLoop class.

 pym/portage/util/futures.py                 | 118 ++++++++++++++++++++++++++++
 pym/repoman/fuse.py                         |  68 ----------------
 pym/repoman/main.py                         |  12 ++-
 pym/repoman/modules/scan/ebuild/ebuild.py   |  10 ++-
 pym/repoman/modules/scan/ebuild/isebuild.py |  25 ++++--
 pym/repoman/modules/scan/metadata/unused.py |  10 ++-
 pym/repoman/scanner.py                      |   4 +-
 7 files changed, 164 insertions(+), 83 deletions(-)

diff --git a/pym/portage/util/futures.py b/pym/portage/util/futures.py
new file mode 100644
index 0000000..c648f10
--- /dev/null
+++ b/pym/portage/util/futures.py
@@ -0,0 +1,118 @@
+# Copyright 2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+#
+# For compatibility with python versions which do not have the
+# asyncio module (Python 3.3 and earlier), this module provides a
+# subset of the asyncio.futures.Futures interface.
+
+from __future__ import unicode_literals
+
+__all__ = (
+	'CancelledError',
+	'Future',
+	'InvalidStateError',
+)
+
+try:
+	from asyncio import (
+		CancelledError,
+		Future,
+		InvalidStateError,
+	)
+except ImportError:
+
+	from portage.exception import PortageException
+
+	_PENDING = 'PENDING'
+	_CANCELLED = 'CANCELLED'
+	_FINISHED = 'FINISHED'
+
+	class Error(PortageException):
+		pass
+
+	class CancelledError(Error):
+		def __init__(self):
+			Error.__init__(self, "cancelled")
+
+	class InvalidStateError(Error):
+		pass
+
+	class Future(object):
+
+		# Class variables serving as defaults for instance variables.
+		_state = _PENDING
+		_result = None
+		_exception = None
+
+		def cancel(self):
+			"""Cancel the future and schedule callbacks.
+
+			If the future is already done or cancelled, return False.  Otherwise,
+			change the future's state to cancelled, schedule the callbacks and
+			return True.
+			"""
+			if self._state != _PENDING:
+				return False
+			self._state = _CANCELLED
+			return True
+
+		def done(self):
+			"""Return True if the future is done.
+
+			Done means either that a result / exception are available, or that the
+			future was cancelled.
+			"""
+			return self._state != _PENDING
+
+		def result(self):
+			"""Return the result this future represents.
+
+			If the future has been cancelled, raises CancelledError.  If the
+			future's result isn't yet available, raises InvalidStateError.  If
+			the future is done and has an exception set, this exception is raised.
+			"""
+			if self._state == _CANCELLED:
+				raise CancelledError()
+			if self._state != _FINISHED:
+				raise InvalidStateError('Result is not ready.')
+			if self._exception is not None:
+				raise self._exception
+			return self._result
+
+		def exception(self):
+			"""Return the exception that was set on this future.
+
+			The exception (or None if no exception was set) is returned only if
+			the future is done.  If the future has been cancelled, raises
+			CancelledError.  If the future isn't done yet, raises
+			InvalidStateError.
+			"""
+			if self._state == _CANCELLED:
+				raise CancelledError
+			if self._state != _FINISHED:
+				raise InvalidStateError('Exception is not set.')
+			return self._exception
+
+		def set_result(self, result):
+			"""Mark the future done and set its result.
+
+			If the future is already done when this method is called, raises
+			InvalidStateError.
+			"""
+			if self._state != _PENDING:
+				raise InvalidStateError('{}: {!r}'.format(self._state, self))
+			self._result = result
+			self._state = _FINISHED
+
+		def set_exception(self, exception):
+			"""Mark the future done and set an exception.
+
+			If the future is already done when this method is called, raises
+			InvalidStateError.
+			"""
+			if self._state != _PENDING:
+				raise InvalidStateError('{}: {!r}'.format(self._state, self))
+			if isinstance(exception, type):
+				exception = exception()
+			self._exception = exception
+			self._state = _FINISHED

diff --git a/pym/repoman/fuse.py b/pym/repoman/fuse.py
deleted file mode 100644
index ac864fd..0000000
--- a/pym/repoman/fuse.py
+++ /dev/null
@@ -1,68 +0,0 @@
-
-'''
-fuse.py
-
-A tiny one-time-fuse class that uses a boolean to mimic the property of
-an electrical fuse.  IT's good (True) until it is popped (bad, False).
-It is not resetable.
-'''
-
-
-class Fuse(object):
-	'''A One time fuse style boolean instance'''
-
-	__slots__ = ('_state')
-
-	def __init__(self):
-		self._state = True
-
-	def pop(self):
-		'''Blow's the fuse state (makes it False)'''
-		self._state = False
-
-	def __repr__(self):
-		'''x.__repr__() <==> repr(x)'''
-		return repr(self._state>0)
-
-	def __str__(self):
-		'''x.__str__() <==> str(x)'''
-		return ['False', 'True'][self._state]
-
-	def __bool__(self):
-		'''self != 0'''
-		return self._state != 0
-
-	def __nonzero__(self):
-		'''self != 0'''
-		return self._state != 0
-
-	def __abs__(self):
-		'''x.__abs__() <==> abs(x)'''
-		return [0, 1] [self._state]
-
-	def __int__(self):
-		'''int(self)'''
-		return [0, 1][self._state]
-
-	def __eq__(self, value):
-		'''Return self==value.'''
-		return self._state == value
-
-	def __ne__(self, value):
-		'''Return self!=value.'''
-		return self._state != value
-
-	def __ge__(self, value):
-		'''Return self>=value.'''
-		return self._state >= value
-
-	def __gt__(self, value):
-		return self._state > value
-
-	def __le__(self, value):
-		'''Return self<=value.'''
-		return self._state <= value
-
-	def __lt__(self, value):
-		'''Return self<value.'''
-		return self._state < value

diff --git a/pym/repoman/main.py b/pym/repoman/main.py
index 2ccda99..62c3c2c 100755
--- a/pym/repoman/main.py
+++ b/pym/repoman/main.py
@@ -22,10 +22,13 @@ import portage.repository.config
 from portage.output import create_color_func, nocolor
 from portage.output import ConsoleStyleFile, StyleWriter
 from portage.util import formatter
+from portage.util.futures import (
+	Future,
+	InvalidStateError,
+)
 
 from repoman.actions import Actions
 from repoman.argparser import parse_args
-from repoman.fuse import Fuse
 from repoman.qa_data import (
 	format_qa_output, format_qa_output_column, qahelp,
 	qawarnings, qacats)
@@ -76,7 +79,7 @@ def repoman_main(argv):
 	# Set this to False when an extraordinary issue (generally
 	# something other than a QA issue) makes it impossible to
 	# commit (like if Manifest generation fails).
-	can_force = Fuse()
+	can_force = Future()
 
 	portdir, portdir_overlay, mydir = utilities.FindPortdir(repoman_settings)
 	if portdir is None:
@@ -171,6 +174,11 @@ def repoman_main(argv):
 	qa_output = qa_output.getvalue()
 	qa_output = qa_output.splitlines(True)
 
+	try:
+		can_force = can_force.result()
+	except InvalidStateError:
+		can_force = True
+
 	# output the results
 	actions = Actions(repo_settings, options, scanner, vcs_settings)
 	if actions.inform(can_force, result):

diff --git a/pym/repoman/modules/scan/ebuild/ebuild.py b/pym/repoman/modules/scan/ebuild/ebuild.py
index 540411f..67eee3f 100644
--- a/pym/repoman/modules/scan/ebuild/ebuild.py
+++ b/pym/repoman/modules/scan/ebuild/ebuild.py
@@ -8,6 +8,7 @@ from repoman.modules.scan.scanbase import ScanBase
 # import our initialized portage instance
 from repoman._portage import portage
 from portage import os
+from portage.util.futures import InvalidStateError
 
 pv_toolong_re = re.compile(r'[0-9]{19,}')
 
@@ -127,15 +128,18 @@ class Ebuild(ScanBase):
 	def pkg_invalid(self, **kwargs):
 		'''Sets some pkg info and checks for invalid packages
 
-		@param validity_fuse: Fuse instance
+		@param validity_future: Future instance
 		@returns: dictionary, including {pkg object}
 		'''
-		fuse = kwargs.get('validity_fuse')
+		fuse = kwargs.get('validity_future')
 		if self.pkg.invalid:
 			for k, msgs in self.pkg.invalid.items():
 				for msg in msgs:
 					self.qatracker.add_error(k, "%s: %s" % (self.relative_path, msg))
-			fuse.pop()
+			try:
+				fuse.set_result(False)
+			except InvalidStateError:
+				pass
 			return {'continue': True, 'pkg': self.pkg}
 		return {'continue': False, 'pkg': self.pkg}
 

diff --git a/pym/repoman/modules/scan/ebuild/isebuild.py b/pym/repoman/modules/scan/ebuild/isebuild.py
index 514d23e..a8870c7 100644
--- a/pym/repoman/modules/scan/ebuild/isebuild.py
+++ b/pym/repoman/modules/scan/ebuild/isebuild.py
@@ -9,6 +9,7 @@ from _emerge.RootConfig import RootConfig
 from repoman._portage import portage
 
 from portage import os
+from portage.util.futures import InvalidStateError
 
 from repoman.qa_data import no_exec, allvars
 from repoman.modules.scan.scanbase import ScanBase
@@ -35,13 +36,13 @@ class IsEbuild(ScanBase):
 		@param checkdirlist: list of files in the current package directory
 		@param checkdir: current package directory path
 		@param xpkg: current package directory being checked
-		@param validity_fuse: Fuse instance
+		@param validity_future: Future instance
 		@returns: dictionary, including {pkgs, can_force}
 		'''
 		checkdirlist = kwargs.get('checkdirlist')
 		checkdir = kwargs.get('checkdir')
 		xpkg = kwargs.get('xpkg')
-		fuse = kwargs.get('validity_fuse')
+		fuse = kwargs.get('validity_future')
 		can_force = kwargs.get('can_force')
 		self.continue_ = False
 		ebuildlist = []
@@ -64,15 +65,24 @@ class IsEbuild(ScanBase):
 				try:
 					myaux = dict(zip(allvars, self.portdb.aux_get(cpv, allvars)))
 				except KeyError:
-					fuse.pop()
+					try:
+						fuse.set_result(False)
+					except InvalidStateError:
+						pass
 					self.qatracker.add_error("ebuild.syntax", os.path.join(xpkg, y))
 					continue
 				except IOError:
-					fuse.pop()
+					try:
+						fuse.set_result(False)
+					except InvalidStateError:
+						pass
 					self.qatracker.add_error("ebuild.output", os.path.join(xpkg, y))
 					continue
 				if not portage.eapi_is_supported(myaux["EAPI"]):
-					fuse.pop()
+					try:
+						fuse.set_result(False)
+					except InvalidStateError:
+						pass
 					self.qatracker.add_error("EAPI.unsupported", os.path.join(xpkg, y))
 					continue
 				pkgs[pf] = Package(
@@ -86,7 +96,10 @@ class IsEbuild(ScanBase):
 			# metadata leads to false positives for several checks, and false
 			# positives confuse users.
 			self.continue_ = True
-			can_force.pop()
+			try:
+				fuse.set_result(False)
+			except InvalidStateError:
+				pass
 
 		return {'continue': self.continue_, 'pkgs': pkgs}
 

diff --git a/pym/repoman/modules/scan/metadata/unused.py b/pym/repoman/modules/scan/metadata/unused.py
index a58a614..a6ff589 100644
--- a/pym/repoman/modules/scan/metadata/unused.py
+++ b/pym/repoman/modules/scan/metadata/unused.py
@@ -1,6 +1,8 @@
 
 from repoman.modules.scan.scanbase import ScanBase
 
+from portage.util.futures import InvalidStateError
+
 
 class UnusedCheck(ScanBase):
 	'''Checks and reports any un-used metadata.xml use flag descriptions'''
@@ -18,14 +20,18 @@ class UnusedCheck(ScanBase):
 		@param xpkg: the pacakge being checked
 		@param muselist: use flag list
 		@param used_useflags: use flag list
-		@param validity_fuse: Fuse instance
+		@param validity_future: Future instance
 		'''
 		xpkg = kwargs.get('xpkg')
 		muselist = kwargs.get('muselist')
 		used_useflags = kwargs.get('used_useflags')
+		try:
+			valid_state = kwargs['validity_future'].result()
+		except InvalidStateError:
+			valid_state = True
 		# check if there are unused local USE-descriptions in metadata.xml
 		# (unless there are any invalids, to avoid noise)
-		if kwargs.get('validity_fuse'):
+		if valid_state:
 			for myflag in muselist.difference(used_useflags):
 				self.qatracker.add_error(
 					"metadata.warning",

diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py
index a9f56e9..e9a8e20 100644
--- a/pym/repoman/scanner.py
+++ b/pym/repoman/scanner.py
@@ -9,7 +9,7 @@ import portage
 from portage import normalize_path
 from portage import os
 from portage.output import green
-from repoman.fuse import Fuse
+from portage.util.futures import Future
 from repoman.modules.commit import repochecks
 from repoman.profile import check_profiles, dev_profile_keywords, setup_profile
 from repoman.repos import repo_metadata
@@ -232,7 +232,7 @@ class Scanner(object):
 				'repolevel': self.repolevel,
 				'catdir': catdir,
 				'pkgdir': pkgdir,
-				'validity_fuse': Fuse()
+				'validity_future': Future()
 				}
 			# need to set it up for ==> self.modules or some other ordered list
 			for mod in ['Manifests', 'IsEbuild', 'KeywordChecks', 'FileChecks',


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

* [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/, pym/repoman/, ...
@ 2016-04-25 15:32 Brian Dolbec
  0 siblings, 0 replies; 11+ messages in thread
From: Brian Dolbec @ 2016-04-25 15:32 UTC (permalink / raw
  To: gentoo-commits

commit:     3dc78ff91eccd81c972ceadf59d059aabe9ccdbc
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Mar 15 18:40:06 2016 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Mon Apr 25 15:28:53 2016 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=3dc78ff9

repoman: Create a new boolean Fuse type

Create a Fuse type which implememts a boolean as a one time fuse.
The Fuse is initialized True, then is pop()'d to become False.
Once the Fuse is blown, it can not be reset to True.
Convert the use of the dynamic_data variable 'allvalid' to a Fuse instance.

 pym/repoman/fuse.py                         | 68 +++++++++++++++++++++++++++++
 pym/repoman/modules/scan/ebuild/ebuild.py   |  7 ++-
 pym/repoman/modules/scan/ebuild/isebuild.py | 13 +++---
 pym/repoman/modules/scan/metadata/unused.py |  2 +-
 pym/repoman/scanner.py                      |  2 +
 5 files changed, 83 insertions(+), 9 deletions(-)

diff --git a/pym/repoman/fuse.py b/pym/repoman/fuse.py
new file mode 100644
index 0000000..ac864fd
--- /dev/null
+++ b/pym/repoman/fuse.py
@@ -0,0 +1,68 @@
+
+'''
+fuse.py
+
+A tiny one-time-fuse class that uses a boolean to mimic the property of
+an electrical fuse.  IT's good (True) until it is popped (bad, False).
+It is not resetable.
+'''
+
+
+class Fuse(object):
+	'''A One time fuse style boolean instance'''
+
+	__slots__ = ('_state')
+
+	def __init__(self):
+		self._state = True
+
+	def pop(self):
+		'''Blow's the fuse state (makes it False)'''
+		self._state = False
+
+	def __repr__(self):
+		'''x.__repr__() <==> repr(x)'''
+		return repr(self._state>0)
+
+	def __str__(self):
+		'''x.__str__() <==> str(x)'''
+		return ['False', 'True'][self._state]
+
+	def __bool__(self):
+		'''self != 0'''
+		return self._state != 0
+
+	def __nonzero__(self):
+		'''self != 0'''
+		return self._state != 0
+
+	def __abs__(self):
+		'''x.__abs__() <==> abs(x)'''
+		return [0, 1] [self._state]
+
+	def __int__(self):
+		'''int(self)'''
+		return [0, 1][self._state]
+
+	def __eq__(self, value):
+		'''Return self==value.'''
+		return self._state == value
+
+	def __ne__(self, value):
+		'''Return self!=value.'''
+		return self._state != value
+
+	def __ge__(self, value):
+		'''Return self>=value.'''
+		return self._state >= value
+
+	def __gt__(self, value):
+		return self._state > value
+
+	def __le__(self, value):
+		'''Return self<=value.'''
+		return self._state <= value
+
+	def __lt__(self, value):
+		'''Return self<value.'''
+		return self._state < value

diff --git a/pym/repoman/modules/scan/ebuild/ebuild.py b/pym/repoman/modules/scan/ebuild/ebuild.py
index e9a2cdd..540411f 100644
--- a/pym/repoman/modules/scan/ebuild/ebuild.py
+++ b/pym/repoman/modules/scan/ebuild/ebuild.py
@@ -127,13 +127,16 @@ class Ebuild(ScanBase):
 	def pkg_invalid(self, **kwargs):
 		'''Sets some pkg info and checks for invalid packages
 
-		@returns: dictionary, including {pkg object, allvalid}
+		@param validity_fuse: Fuse instance
+		@returns: dictionary, including {pkg object}
 		'''
+		fuse = kwargs.get('validity_fuse')
 		if self.pkg.invalid:
 			for k, msgs in self.pkg.invalid.items():
 				for msg in msgs:
 					self.qatracker.add_error(k, "%s: %s" % (self.relative_path, msg))
-			return {'continue': True, 'allvalid': False, 'pkg': self.pkg}
+			fuse.pop()
+			return {'continue': True, 'pkg': self.pkg}
 		return {'continue': False, 'pkg': self.pkg}
 
 	@property

diff --git a/pym/repoman/modules/scan/ebuild/isebuild.py b/pym/repoman/modules/scan/ebuild/isebuild.py
index 1dffc6a..474a874 100644
--- a/pym/repoman/modules/scan/ebuild/isebuild.py
+++ b/pym/repoman/modules/scan/ebuild/isebuild.py
@@ -35,15 +35,16 @@ class IsEbuild(ScanBase):
 		@param checkdirlist: list of files in the current package directory
 		@param checkdir: current package directory path
 		@param xpkg: current package directory being checked
-		@returns: dictionary, including {pkgs, allvalid, can_force}
+		@param validity_fuse: Fuse instance
+		@returns: dictionary, including {pkgs, can_force}
 		'''
 		checkdirlist = kwargs.get('checkdirlist')
 		checkdir = kwargs.get('checkdir')
 		xpkg = kwargs.get('xpkg')
+		fuse = kwargs.get('validity_fuse')
 		self.continue_ = False
 		ebuildlist = []
 		pkgs = {}
-		allvalid = True
 		for y in checkdirlist:
 			file_is_ebuild = y.endswith(".ebuild")
 			file_should_be_non_executable = y in no_exec or file_is_ebuild
@@ -62,15 +63,15 @@ class IsEbuild(ScanBase):
 				try:
 					myaux = dict(zip(allvars, self.portdb.aux_get(cpv, allvars)))
 				except KeyError:
-					allvalid = False
+					fuse.pop()
 					self.qatracker.add_error("ebuild.syntax", os.path.join(xpkg, y))
 					continue
 				except IOError:
-					allvalid = False
+					fuse.pop()
 					self.qatracker.add_error("ebuild.output", os.path.join(xpkg, y))
 					continue
 				if not portage.eapi_is_supported(myaux["EAPI"]):
-					allvalid = False
+					fuse.pop()
 					self.qatracker.add_error("EAPI.unsupported", os.path.join(xpkg, y))
 					continue
 				pkgs[pf] = Package(
@@ -85,7 +86,7 @@ class IsEbuild(ScanBase):
 			# positives confuse users.
 			self.continue_ = True
 
-		return {'continue': self.continue_, 'pkgs': pkgs, 'allvalid': allvalid,
+		return {'continue': self.continue_, 'pkgs': pkgs,
 			'can_force': not self.continue_}
 
 	@property

diff --git a/pym/repoman/modules/scan/metadata/unused.py b/pym/repoman/modules/scan/metadata/unused.py
index 2ca7466..9ff7e56 100644
--- a/pym/repoman/modules/scan/metadata/unused.py
+++ b/pym/repoman/modules/scan/metadata/unused.py
@@ -13,7 +13,7 @@ class UnusedCheck(ScanBase):
 		used_useflags = kwargs.get('used_useflags')
 		# check if there are unused local USE-descriptions in metadata.xml
 		# (unless there are any invalids, to avoid noise)
-		if kwargs.get('allvalid'):
+		if kwargs.get('validity_fuse'):
 			for myflag in muselist.difference(used_useflags):
 				self.qatracker.add_error(
 					"metadata.warning",

diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py
index 86e389a..9c6f5ac 100644
--- a/pym/repoman/scanner.py
+++ b/pym/repoman/scanner.py
@@ -9,6 +9,7 @@ import portage
 from portage import normalize_path
 from portage import os
 from portage.output import green
+from repoman.fuse import Fuse
 from repoman.modules.commit import repochecks
 from repoman.profile import check_profiles, dev_profile_keywords, setup_profile
 from repoman.repos import repo_metadata
@@ -232,6 +233,7 @@ class Scanner(object):
 				'repolevel': self.repolevel,
 				'catdir': catdir,
 				'pkgdir': pkgdir,
+				'validity_fuse': Fuse()
 				}
 			# need to set it up for ==> self.modules or some other ordered list
 			for mod in ['Manifests', 'IsEbuild', 'KeywordChecks', 'FileChecks',


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

* [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/, pym/repoman/, ...
@ 2016-04-25 16:59 Zac Medico
  0 siblings, 0 replies; 11+ messages in thread
From: Zac Medico @ 2016-04-25 16:59 UTC (permalink / raw
  To: gentoo-commits

commit:     836cc3ffc55376348315577958e7212fefa38a2a
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Apr 25 16:50:59 2016 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Apr 25 16:58:53 2016 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=836cc3ff

ProfileDependsChecks: encapsulate DependChecks and LicenseChecks

 pym/repoman/modules/scan/depend/__init__.py       |  38 +-----
 pym/repoman/modules/scan/depend/_depend_checks.py | 150 ++++++++++++++++++++
 pym/repoman/modules/scan/depend/depend.py         | 158 ----------------------
 pym/repoman/modules/scan/depend/profile.py        |  17 ++-
 pym/repoman/modules/scan/metadata/__init__.py     |  17 ---
 pym/repoman/modules/scan/metadata/license.py      |  54 --------
 pym/repoman/scanner.py                            |   4 +-
 7 files changed, 167 insertions(+), 271 deletions(-)

diff --git a/pym/repoman/modules/scan/depend/__init__.py b/pym/repoman/modules/scan/depend/__init__.py
index 01bd116..6d12286 100644
--- a/pym/repoman/modules/scan/depend/__init__.py
+++ b/pym/repoman/modules/scan/depend/__init__.py
@@ -10,24 +10,6 @@ module_spec = {
 	'name': 'depend',
 	'description': doc,
 	'provides':{
-		'depend-module': {
-			'name': "depend",
-			'sourcefile': "depend",
-			'class': "DependChecks",
-			'description': doc,
-			'functions': ['check'],
-			'func_desc': {
-			},
-			'mod_kwargs': ['qatracker', 'portdb'
-			],
-			'func_kwargs': {
-				'baddepsyntax': ('Future', False),
-				'badlicsyntax': ('Future', False),
-				'ebuild': (None, None),
-				'pkg': (None, None),
-				'unknown_pkgs': ('Future', 'UNSET'),
-			},
-		},
 		'profile-module': {
 			'name': "profile",
 			'sourcefile': "profile",
@@ -37,30 +19,12 @@ module_spec = {
 			'func_desc': {
 			},
 			'mod_kwargs': ['qatracker', 'portdb', 'profiles', 'options',
-				'repo_settings', 'include_arches', 'caches',
+				'repo_metadata', 'repo_settings', 'include_arches', 'caches',
 				'repoman_incrementals', 'env', 'have', 'dev_keywords'
 			],
 			'func_kwargs': {
-				'baddepsyntax': (None, None),
 				'ebuild': (None, None),
 				'pkg': (None, None),
-				'unknown_pkgs': (None, None),
-			},
-		},
-		'unknown-module': {
-			'name': "unknown",
-			'sourcefile': "unknown",
-			'class': "DependUnknown",
-			'description': doc,
-			'functions': ['check'],
-			'func_desc': {
-			},
-			'mod_kwargs': ['qatracker',
-			],
-			'func_kwargs': {
-				'baddepsyntax': (None, None),
-				'ebuild': (None, None),
-				'unknown_pkgs': ('Future', 'UNSET'),
 			},
 		},
 	}

diff --git a/pym/repoman/modules/scan/depend/_depend_checks.py b/pym/repoman/modules/scan/depend/_depend_checks.py
new file mode 100644
index 0000000..4e1d216
--- /dev/null
+++ b/pym/repoman/modules/scan/depend/_depend_checks.py
@@ -0,0 +1,150 @@
+# -*- coding:utf-8 -*-
+
+
+from _emerge.Package import Package
+
+from repoman.check_missingslot import check_missingslot
+# import our initialized portage instance
+from repoman._portage import portage
+from repoman.qa_data import suspect_virtual, suspect_rdepend
+
+
+def _depend_checks(ebuild, pkg, portdb, qatracker, repo_metadata):
+	'''Checks the ebuild dependencies for errors
+
+	@param pkg: Package in which we check (object).
+	@param ebuild: Ebuild which we check (object).
+	@param portdb: portdb instance
+	@param qatracker: QATracker instance
+	@param repo_metadata: dictionary of various repository items.
+	@returns: (unknown_pkgs, badlicsyntax)
+	'''
+
+	unknown_pkgs = set()
+
+	inherited_java_eclass = "java-pkg-2" in ebuild.inherited or \
+		"java-pkg-opt-2" in ebuild.inherited,
+	inherited_wxwidgets_eclass = "wxwidgets" in ebuild.inherited
+	# operator_tokens = set(["||", "(", ")"])
+	type_list, badsyntax = [], []
+	for mytype in Package._dep_keys + ("LICENSE", "PROPERTIES", "PROVIDE"):
+		mydepstr = ebuild.metadata[mytype]
+
+		buildtime = mytype in Package._buildtime_keys
+		runtime = mytype in Package._runtime_keys
+		token_class = None
+		if mytype.endswith("DEPEND"):
+			token_class = portage.dep.Atom
+
+		try:
+			atoms = portage.dep.use_reduce(
+				mydepstr, matchall=1, flat=True,
+				is_valid_flag=pkg.iuse.is_valid_flag, token_class=token_class)
+		except portage.exception.InvalidDependString as e:
+			atoms = None
+			badsyntax.append(str(e))
+
+		if atoms and mytype.endswith("DEPEND"):
+			if runtime and \
+				"test?" in mydepstr.split():
+				qatracker.add_error(
+					mytype + '.suspect',
+					"%s: 'test?' USE conditional in %s" %
+					(ebuild.relative_path, mytype))
+
+			for atom in atoms:
+				if atom == "||":
+					continue
+
+				is_blocker = atom.blocker
+
+				# Skip dependency.unknown for blockers, so that we
+				# don't encourage people to remove necessary blockers,
+				# as discussed in bug 382407. We use atom.without_use
+				# due to bug 525376.
+				if not is_blocker and \
+					not portdb.xmatch("match-all", atom.without_use) and \
+					not atom.cp.startswith("virtual/"):
+					unknown_pkgs.add((mytype, atom.unevaluated_atom))
+
+				if pkg.category != "virtual":
+					if not is_blocker and \
+						atom.cp in suspect_virtual:
+						qatracker.add_error(
+							'virtual.suspect', ebuild.relative_path +
+							": %s: consider using '%s' instead of '%s'" %
+							(mytype, suspect_virtual[atom.cp], atom))
+					if not is_blocker and \
+						atom.cp.startswith("perl-core/"):
+						qatracker.add_error('dependency.perlcore',
+							ebuild.relative_path +
+							": %s: please use '%s' instead of '%s'" %
+							(mytype,
+							atom.replace("perl-core/","virtual/perl-"),
+							atom))
+
+				if buildtime and \
+					not is_blocker and \
+					not inherited_java_eclass and \
+					atom.cp == "virtual/jdk":
+					qatracker.add_error(
+						'java.eclassesnotused', ebuild.relative_path)
+				elif buildtime and \
+					not is_blocker and \
+					not inherited_wxwidgets_eclass and \
+					atom.cp == "x11-libs/wxGTK":
+					qatracker.add_error(
+						'wxwidgets.eclassnotused',
+						"%s: %ss on x11-libs/wxGTK without inheriting"
+						" wxwidgets.eclass" % (ebuild.relative_path, mytype))
+				elif runtime:
+					if not is_blocker and \
+						atom.cp in suspect_rdepend:
+						qatracker.add_error(
+							mytype + '.suspect',
+							ebuild.relative_path + ": '%s'" % atom)
+
+				if atom.operator == "~" and \
+					portage.versions.catpkgsplit(atom.cpv)[3] != "r0":
+					qacat = 'dependency.badtilde'
+					qatracker.add_error(
+						qacat, "%s: %s uses the ~ operator"
+						" with a non-zero revision: '%s'" %
+						(ebuild.relative_path, mytype, atom))
+
+				check_missingslot(atom, mytype, ebuild.eapi, portdb, qatracker,
+					ebuild.relative_path, ebuild.metadata)
+
+		type_list.extend([mytype] * (len(badsyntax) - len(type_list)))
+
+	for m, b in zip(type_list, badsyntax):
+		if m.endswith("DEPEND"):
+			qacat = "dependency.syntax"
+		else:
+			qacat = m + ".syntax"
+		qatracker.add_error(
+			qacat, "%s: %s: %s" % (ebuild.relative_path, m, b))
+
+	# data required for some other tests
+	badlicsyntax = len([z for z in type_list if z == "LICENSE"])
+	badprovsyntax = len([z for z in type_list if z == "PROVIDE"])
+	baddepsyntax = len(type_list) != badlicsyntax + badprovsyntax
+	badlicsyntax = badlicsyntax > 0
+	#badprovsyntax = badprovsyntax > 0
+
+	# Parse the LICENSE variable, remove USE conditions and flatten it.
+	licenses = portage.dep.use_reduce(
+		ebuild.metadata["LICENSE"], matchall=1, flat=True)
+
+	# Check each entry to ensure that it exists in ${PORTDIR}/licenses/.
+	for lic in licenses:
+		# Need to check for "||" manually as no portage
+		# function will remove it without removing values.
+		if lic not in repo_metadata['liclist'] and lic != "||":
+			qatracker.add_error("LICENSE.invalid",
+				"%s: %s" % (ebuild.relative_path, lic))
+		elif lic in repo_metadata['lic_deprecated']:
+			qatracker.add_error("LICENSE.deprecated",
+				"%s: %s" % (ebuild.relative_path, lic))
+
+	return unknown_pkgs, baddepsyntax

diff --git a/pym/repoman/modules/scan/depend/depend.py b/pym/repoman/modules/scan/depend/depend.py
deleted file mode 100644
index 44a21e9..0000000
--- a/pym/repoman/modules/scan/depend/depend.py
+++ /dev/null
@@ -1,158 +0,0 @@
-# -*- coding:utf-8 -*-
-
-
-from _emerge.Package import Package
-
-from repoman.check_missingslot import check_missingslot
-# import our initialized portage instance
-from repoman._portage import portage
-from repoman.modules.scan.scanbase import ScanBase
-from repoman.qa_data import suspect_virtual, suspect_rdepend
-
-
-class DependChecks(ScanBase):
-	'''Perform dependency checks'''
-
-	def __init__(self, **kwargs):
-		'''
-		@param portdb: portdb instance
-		@param qatracker: QATracker instance
-		'''
-		self.qatracker = kwargs.get('qatracker')
-		self.portdb = kwargs.get('portdb')
-
-	def check(self, **kwargs):
-		'''Checks the ebuild dependencies for errors
-
-		@param pkg: Package in which we check (object).
-		@param ebuild: Ebuild which we check (object).
-		@returns: boolean
-		'''
-		ebuild = kwargs.get('ebuild').get()
-		pkg = kwargs.get('pkg').get()
-
-		unknown_pkgs = set()
-
-		inherited_java_eclass = "java-pkg-2" in ebuild.inherited or \
-			"java-pkg-opt-2" in ebuild.inherited,
-		inherited_wxwidgets_eclass = "wxwidgets" in ebuild.inherited
-		# operator_tokens = set(["||", "(", ")"])
-		type_list, badsyntax = [], []
-		for mytype in Package._dep_keys + ("LICENSE", "PROPERTIES", "PROVIDE"):
-			mydepstr = ebuild.metadata[mytype]
-
-			buildtime = mytype in Package._buildtime_keys
-			runtime = mytype in Package._runtime_keys
-			token_class = None
-			if mytype.endswith("DEPEND"):
-				token_class = portage.dep.Atom
-
-			try:
-				atoms = portage.dep.use_reduce(
-					mydepstr, matchall=1, flat=True,
-					is_valid_flag=pkg.iuse.is_valid_flag, token_class=token_class)
-			except portage.exception.InvalidDependString as e:
-				atoms = None
-				badsyntax.append(str(e))
-
-			if atoms and mytype.endswith("DEPEND"):
-				if runtime and \
-					"test?" in mydepstr.split():
-					self.qatracker.add_error(
-						mytype + '.suspect',
-						"%s: 'test?' USE conditional in %s" %
-						(ebuild.relative_path, mytype))
-
-				for atom in atoms:
-					if atom == "||":
-						continue
-
-					is_blocker = atom.blocker
-
-					# Skip dependency.unknown for blockers, so that we
-					# don't encourage people to remove necessary blockers,
-					# as discussed in bug 382407. We use atom.without_use
-					# due to bug 525376.
-					if not is_blocker and \
-						not self.portdb.xmatch("match-all", atom.without_use) and \
-						not atom.cp.startswith("virtual/"):
-						unknown_pkgs.add((mytype, atom.unevaluated_atom))
-
-					if kwargs.get('catdir') != "virtual":
-						if not is_blocker and \
-							atom.cp in suspect_virtual:
-							self.qatracker.add_error(
-								'virtual.suspect', ebuild.relative_path +
-								": %s: consider using '%s' instead of '%s'" %
-								(mytype, suspect_virtual[atom.cp], atom))
-						if not is_blocker and \
-							atom.cp.startswith("perl-core/"):
-							self.qatracker.add_error('dependency.perlcore',
-								ebuild.relative_path +
-								": %s: please use '%s' instead of '%s'" %
-								(mytype,
-								atom.replace("perl-core/","virtual/perl-"),
-								atom))
-
-					if buildtime and \
-						not is_blocker and \
-						not inherited_java_eclass and \
-						atom.cp == "virtual/jdk":
-						self.qatracker.add_error(
-							'java.eclassesnotused', ebuild.relative_path)
-					elif buildtime and \
-						not is_blocker and \
-						not inherited_wxwidgets_eclass and \
-						atom.cp == "x11-libs/wxGTK":
-						self.qatracker.add_error(
-							'wxwidgets.eclassnotused',
-							"%s: %ss on x11-libs/wxGTK without inheriting"
-							" wxwidgets.eclass" % (ebuild.relative_path, mytype))
-					elif runtime:
-						if not is_blocker and \
-							atom.cp in suspect_rdepend:
-							self.qatracker.add_error(
-								mytype + '.suspect',
-								ebuild.relative_path + ": '%s'" % atom)
-
-					if atom.operator == "~" and \
-						portage.versions.catpkgsplit(atom.cpv)[3] != "r0":
-						qacat = 'dependency.badtilde'
-						self.qatracker.add_error(
-							qacat, "%s: %s uses the ~ operator"
-							" with a non-zero revision: '%s'" %
-							(ebuild.relative_path, mytype, atom))
-
-					check_missingslot(atom, mytype, ebuild.eapi, self.portdb, self.qatracker,
-						ebuild.relative_path, ebuild.metadata)
-
-			type_list.extend([mytype] * (len(badsyntax) - len(type_list)))
-
-		for m, b in zip(type_list, badsyntax):
-			if m.endswith("DEPEND"):
-				qacat = "dependency.syntax"
-			else:
-				qacat = m + ".syntax"
-			self.qatracker.add_error(
-				qacat, "%s: %s: %s" % (ebuild.relative_path, m, b))
-
-		# data required for some other tests
-		badlicsyntax = len([z for z in type_list if z == "LICENSE"])
-		badprovsyntax = len([z for z in type_list if z == "PROVIDE"])
-		baddepsyntax = len(type_list) != badlicsyntax + badprovsyntax
-		badlicsyntax = badlicsyntax > 0
-		#badprovsyntax = badprovsyntax > 0
-
-		# update the dynamic data
-		dyn_unknown = kwargs.get('unknown_pkgs')
-		dyn_unknown.set(unknown_pkgs)
-		dyn_badlicsyntax = kwargs.get('badlicsyntax')
-		dyn_badlicsyntax.set(badlicsyntax, ignore_InvalidState=True)
-		dyn_baddepsyntax = kwargs.get('baddepsyntax')
-		dyn_baddepsyntax.set(baddepsyntax, ignore_InvalidState=True)
-		return False
-
-	@property
-	def runInEbuilds(self):
-		'''Ebuild level scans'''
-		return (True, [self.check])

diff --git a/pym/repoman/modules/scan/depend/profile.py b/pym/repoman/modules/scan/depend/profile.py
index 0388374..5b32f66 100644
--- a/pym/repoman/modules/scan/depend/profile.py
+++ b/pym/repoman/modules/scan/depend/profile.py
@@ -9,6 +9,7 @@ from _emerge.Package import Package
 # import our initialized portage instance
 from repoman._portage import portage
 from repoman.modules.scan.scanbase import ScanBase
+from repoman.modules.scan.depend._depend_checks import _depend_checks
 from repoman.modules.scan.depend._gen_arches import _gen_arches
 from portage.dep import Atom
 
@@ -34,6 +35,7 @@ class ProfileDependsChecks(ScanBase):
 		@param env: the environment
 		@param have: dictionary instance
 		@param dev_keywords: developer profile keywords
+		@param repo_metadata: dictionary of various repository items.
 		'''
 		self.qatracker = kwargs.get('qatracker')
 		self.portdb = kwargs.get('portdb')
@@ -46,6 +48,7 @@ class ProfileDependsChecks(ScanBase):
 		self.env = kwargs.get('env')
 		self.have = kwargs.get('have')
 		self.dev_keywords = kwargs.get('dev_keywords')
+		self.repo_metadata = kwargs.get('repo_metadata')
 
 	def check(self, **kwargs):
 		'''Perform profile dependant dependancy checks
@@ -59,8 +62,8 @@ class ProfileDependsChecks(ScanBase):
 		'''
 		ebuild = kwargs.get('ebuild').get()
 		pkg = kwargs.get('pkg').get()
-		baddepsyntax = kwargs.get('baddepsyntax').get()
-		unknown_pkgs = kwargs.get('unknown_pkgs').get()
+		unknown_pkgs, baddepsyntax = _depend_checks(
+			ebuild, pkg, self.portdb, self.qatracker, self.repo_metadata)
 
 		relevant_profiles = []
 		for keyword, arch, groups in _gen_arches(ebuild, self.options,
@@ -226,6 +229,16 @@ class ProfileDependsChecks(ScanBase):
 								"%s: %s: %s(%s)\n%s"
 								% (ebuild.relative_path, mytype, keyword,
 									prof, pformat(atoms, indent=6)))
+
+		if not baddepsyntax and unknown_pkgs:
+			type_map = {}
+			for mytype, atom in unknown_pkgs:
+				type_map.setdefault(mytype, set()).add(atom)
+			for mytype, atoms in type_map.items():
+				self.qatracker.add_error(
+					"dependency.unknown", "%s: %s: %s"
+					% (ebuild.relative_path, mytype, ", ".join(sorted(atoms))))
+
 		return False
 
 	@property

diff --git a/pym/repoman/modules/scan/metadata/__init__.py b/pym/repoman/modules/scan/metadata/__init__.py
index 1a6c0ed..c297676 100644
--- a/pym/repoman/modules/scan/metadata/__init__.py
+++ b/pym/repoman/modules/scan/metadata/__init__.py
@@ -61,23 +61,6 @@ module_spec = {
 				'pkg': ('Future', 'UNSET'),
 			},
 		},
-		'license-metadata': {
-			'name': "license",
-			'sourcefile': "license",
-			'class': "LicenseChecks",
-			'description': doc,
-			'functions': ['check'],
-			'func_desc': {
-			},
-			'mod_kwargs': ['qatracker', 'repo_metadata',
-			],
-			'func_kwargs': {
-				'badlicsyntax': (None, None),
-				'ebuild': (None, None),
-				'xpkg': (None, None),
-				'y_ebuild': (None, None),
-			},
-		},
 		'restrict-metadata': {
 			'name': "restrict",
 			'sourcefile': "restrict",

diff --git a/pym/repoman/modules/scan/metadata/license.py b/pym/repoman/modules/scan/metadata/license.py
deleted file mode 100644
index 4a67c70..0000000
--- a/pym/repoman/modules/scan/metadata/license.py
+++ /dev/null
@@ -1,54 +0,0 @@
-
-'''license.py
-Perform checks on the LICENSE variable.
-'''
-
-# import our initialized portage instance
-from repoman._portage import portage
-from repoman.modules.scan.scanbase import ScanBase
-
-
-class LicenseChecks(ScanBase):
-	'''Perform checks on the LICENSE variable.'''
-
-	def __init__(self, **kwargs):
-		'''
-		@param qatracker: QATracker instance
-		@param repo_metadata: dictionary of various repository items.
-		'''
-		self.qatracker = kwargs.get('qatracker')
-		self.repo_metadata = kwargs.get('repo_metadata')
-
-	def check(self, **kwargs):
-		'''
-		@param xpkg: Package in which we check (string).
-		@param ebuild: Ebuild which we check (object).
-		@param y_ebuild: Ebuild which we check (string).
-		'''
-		xpkg = kwargs.get('xpkg')
-		ebuild = kwargs.get('ebuild').get()
-		y_ebuild = kwargs.get('y_ebuild')
-		if not kwargs.get('badlicsyntax').get():
-			# Parse the LICENSE variable, remove USE conditions and flatten it.
-			licenses = portage.dep.use_reduce(
-				ebuild.metadata["LICENSE"], matchall=1, flat=True)
-
-			# Check each entry to ensure that it exists in ${PORTDIR}/licenses/.
-			for lic in licenses:
-				# Need to check for "||" manually as no portage
-				# function will remove it without removing values.
-				if lic not in self.repo_metadata['liclist'] and lic != "||":
-					self.qatracker.add_error("LICENSE.invalid",
-						"%s/%s.ebuild: %s" % (xpkg, y_ebuild, lic))
-				elif lic in self.repo_metadata['lic_deprecated']:
-					self.qatracker.add_error("LICENSE.deprecated",
-						"%s: %s" % (ebuild.relative_path, lic))
-		return False
-
-	@property
-	def runInPkgs(self):
-		return (False, [])
-
-	@property
-	def runInEbuilds(self):
-		return (True, [self.check])

diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py
index 2224fa3..f6dcc1b 100644
--- a/pym/repoman/scanner.py
+++ b/pym/repoman/scanner.py
@@ -380,13 +380,11 @@ class Scanner(object):
 				('thirdpartymirrors', 'ThirdPartyMirrors'),
 				('description', 'DescriptionChecks'),
 				('keywords', 'KeywordChecks'),
-				('depend', 'DependChecks'),
 				('use_flags', 'USEFlagChecks'), ('ruby', 'RubyEclassChecks'),
-				('license', 'LicenseChecks'), ('restrict', 'RestrictChecks'),
+				('restrict', 'RestrictChecks'),
 				('mtime', 'MtimeChecks'), ('multicheck', 'MultiCheck'),
 				# Options.is_forced() is used to bypass further checks
 				('options', 'Options'), ('profile', 'ProfileDependsChecks'),
-				('unknown', 'DependUnknown'),
 				]:
 				if mod[0] and mod[1] not in self.modules:
 					mod_class = MODULE_CONTROLLER.get_class(mod[0])


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

end of thread, other threads:[~2016-04-25 16:59 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-01-22 20:55 [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/, pym/repoman/, Brian Dolbec
  -- strict thread matches above, loose matches on Subject: below --
2016-04-25 16:59 Zac Medico
2016-04-25 15:32 Brian Dolbec
2016-04-21 16:54 Brian Dolbec
2016-03-15 19:00 Brian Dolbec
2016-01-30  6:58 Brian Dolbec
2016-01-29  5:01 Brian Dolbec
2016-01-27 23:15 Brian Dolbec
2016-01-27 23:15 Brian Dolbec
2016-01-23  1:42 Brian Dolbec
2016-01-11  6:31 Brian Dolbec

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