public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Brian Dolbec" <dolsen@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/, pym/repoman/, ...
Date: Mon, 25 Apr 2016 15:32:28 +0000 (UTC)	[thread overview]
Message-ID: <1461598133.3dc78ff91eccd81c972ceadf59d059aabe9ccdbc.dolsen@gentoo> (raw)

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',


             reply	other threads:[~2016-04-25 15:32 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-25 15:32 Brian Dolbec [this message]
  -- strict thread matches above, loose matches on Subject: below --
2016-04-25 16:59 [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/, pym/repoman/, Zac Medico
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-22 20:55 Brian Dolbec
2016-01-11  6:31 Brian Dolbec

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1461598133.3dc78ff91eccd81c972ceadf59d059aabe9ccdbc.dolsen@gentoo \
    --to=dolsen@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox