public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-portage-dev] [PATCH] repoman: fix KeyError during manifest generation (bug 585388)
@ 2016-06-20 10:28 Zac Medico
  2016-06-20 16:49 ` Brian Dolbec
  0 siblings, 1 reply; 2+ messages in thread
From: Zac Medico @ 2016-06-20 10:28 UTC (permalink / raw
  To: gentoo-portage-dev; +Cc: Zac Medico

Fix Scanner not to override portdbapi._aux_cache_keys when generating
manifests, since spawn_nofetch requires additional keys.

Fixes: 87e32d4863f3 ("repoman: fix KeyError...during manifest generation (bug 569942)")
X-Gentoo-Bug: 585388
X-Gentoo-Bug-url: https://bugs.gentoo.org/show_bug.cgi?id=585388
---
 repoman/pym/repoman/modules/commit/manifest.py | 91 +++++++++++++-------------
 repoman/pym/repoman/scanner.py                 | 12 +++-
 2 files changed, 53 insertions(+), 50 deletions(-)

diff --git a/repoman/pym/repoman/modules/commit/manifest.py b/repoman/pym/repoman/modules/commit/manifest.py
index 475dae4..b338a5b 100644
--- a/repoman/pym/repoman/modules/commit/manifest.py
+++ b/repoman/pym/repoman/modules/commit/manifest.py
@@ -33,55 +33,52 @@ class Manifest(object):
 		@returns: dictionary
 		'''
 		self.generated_manifest = False
-		self.digest_only = self.options.mode != 'manifest-check' \
-			and self.options.digest == 'y'
-		if self.options.mode in ("manifest", 'commit', 'fix') or self.digest_only:
-			failed = False
-			self.auto_assumed = set()
-			fetchlist_dict = portage.FetchlistDict(
-				checkdir, self.repoman_settings, self.portdb)
-			if self.options.mode == 'manifest' and self.options.force:
-				self._discard_dist_digests(checkdir, fetchlist_dict)
-			self.repoman_settings["O"] = checkdir
-			try:
-				self.generated_manifest = digestgen(
-					mysettings=self.repoman_settings, myportdb=self.portdb)
-			except portage.exception.PermissionDenied as e:
-				self.generated_manifest = False
-				writemsg_level(
-					"!!! Permission denied: '%s'\n" % (e,),
-					level=logging.ERROR, noiselevel=-1)
+		failed = False
+		self.auto_assumed = set()
+		fetchlist_dict = portage.FetchlistDict(
+			checkdir, self.repoman_settings, self.portdb)
+		if self.options.mode == 'manifest' and self.options.force:
+			self._discard_dist_digests(checkdir, fetchlist_dict)
+		self.repoman_settings["O"] = checkdir
+		try:
+			self.generated_manifest = digestgen(
+				mysettings=self.repoman_settings, myportdb=self.portdb)
+		except portage.exception.PermissionDenied as e:
+			self.generated_manifest = False
+			writemsg_level(
+				"!!! Permission denied: '%s'\n" % (e,),
+				level=logging.ERROR, noiselevel=-1)
 
-			if not self.generated_manifest:
-				writemsg_level(
-					"Unable to generate manifest.",
-					level=logging.ERROR, noiselevel=-1)
-				failed = True
+		if not self.generated_manifest:
+			writemsg_level(
+				"Unable to generate manifest.",
+				level=logging.ERROR, noiselevel=-1)
+			failed = True
 
-			if self.options.mode == "manifest":
-				if not failed and self.options.force and self.auto_assumed and \
-					'assume-digests' in self.repoman_settings.features:
-					# Show which digests were assumed despite the --force option
-					# being given. This output will already have been shown by
-					# digestgen() if assume-digests is not enabled, so only show
-					# it here if assume-digests is enabled.
-					pkgs = list(fetchlist_dict)
-					pkgs.sort()
-					portage.writemsg_stdout(
-						"  digest.assumed %s" %
-						portage.output.colorize(
-							"WARN", str(len(self.auto_assumed)).rjust(18)) + "\n")
-					for cpv in pkgs:
-						fetchmap = fetchlist_dict[cpv]
-						pf = portage.catsplit(cpv)[1]
-						for distfile in sorted(fetchmap):
-							if distfile in self.auto_assumed:
-								portage.writemsg_stdout(
-									"   %s::%s\n" % (pf, distfile))
-				# continue, skip remaining main loop code
-				return True
-			elif failed:
-				sys.exit(1)
+		if self.options.mode == "manifest":
+			if not failed and self.options.force and self.auto_assumed and \
+				'assume-digests' in self.repoman_settings.features:
+				# Show which digests were assumed despite the --force option
+				# being given. This output will already have been shown by
+				# digestgen() if assume-digests is not enabled, so only show
+				# it here if assume-digests is enabled.
+				pkgs = list(fetchlist_dict)
+				pkgs.sort()
+				portage.writemsg_stdout(
+					"  digest.assumed %s" %
+					portage.output.colorize(
+						"WARN", str(len(self.auto_assumed)).rjust(18)) + "\n")
+				for cpv in pkgs:
+					fetchmap = fetchlist_dict[cpv]
+					pf = portage.catsplit(cpv)[1]
+					for distfile in sorted(fetchmap):
+						if distfile in self.auto_assumed:
+							portage.writemsg_stdout(
+								"   %s::%s\n" % (pf, distfile))
+			# continue, skip remaining main loop code
+			return True
+		elif failed:
+			sys.exit(1)
 		return False
 
 	def _discard_dist_digests(self, checkdir, fetchlist_dict):
diff --git a/repoman/pym/repoman/scanner.py b/repoman/pym/repoman/scanner.py
index f72af9c..d7cd81f 100644
--- a/repoman/pym/repoman/scanner.py
+++ b/repoman/pym/repoman/scanner.py
@@ -60,9 +60,15 @@ class Scanner(object):
 
 		self.portdb = repo_settings.portdb
 		self.portdb.settings = self.repo_settings.repoman_settings
+
+		digest_only = self.options.mode != 'manifest-check' \
+			and self.options.digest == 'y'
+		self.generate_manifest = digest_only or self.options.mode in \
+			("manifest", 'commit', 'fix')
+
 		# We really only need to cache the metadata that's necessary for visibility
 		# filtering. Anything else can be discarded to reduce memory consumption.
-		if self.options.mode != "manifest" and self.options.digest != "y":
+		if not self.generate_manifest:
 			# Don't do this when generating manifests, since that uses
 			# additional keys if spawn_nofetch is called (RESTRICT and
 			# DEFINED_PHASES).
@@ -286,8 +292,8 @@ class Scanner(object):
 			if self.kwargs['checks']['ebuild_notadded']:
 				self.vcs_settings.status.check(checkdir, checkdir_relative, xpkg)
 
-			manifester = manifest.Manifest(**self.kwargs)
-			manifester.update_manifest(checkdir)
+			if self.generate_manifest:
+				manifest.Manifest(**self.kwargs).update_manifest(checkdir)
 			checkdirlist = os.listdir(checkdir)
 
 			dynamic_data = {
-- 
2.7.4



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

* Re: [gentoo-portage-dev] [PATCH] repoman: fix KeyError during manifest generation (bug 585388)
  2016-06-20 10:28 [gentoo-portage-dev] [PATCH] repoman: fix KeyError during manifest generation (bug 585388) Zac Medico
@ 2016-06-20 16:49 ` Brian Dolbec
  0 siblings, 0 replies; 2+ messages in thread
From: Brian Dolbec @ 2016-06-20 16:49 UTC (permalink / raw
  To: gentoo-portage-dev

On Mon, 20 Jun 2016 03:28:23 -0700
Zac Medico <zmedico@gentoo.org> wrote:

> Fix Scanner not to override portdbapi._aux_cache_keys when generating
> manifests, since spawn_nofetch requires additional keys.
> 
> Fixes: 87e32d4863f3 ("repoman: fix KeyError...during manifest
> generation (bug 569942)") X-Gentoo-Bug: 585388
> X-Gentoo-Bug-url: https://bugs.gentoo.org/show_bug.cgi?id=585388
> ---
>  repoman/pym/repoman/modules/commit/manifest.py | 91
> +++++++++++++-------------
> repoman/pym/repoman/scanner.py                 | 12 +++- 2 files
> changed, 53 insertions(+), 50 deletions(-)
> 
> diff --git a/repoman/pym/repoman/modules/commit/manifest.py
> b/repoman/pym/repoman/modules/commit/manifest.py index
> 475dae4..b338a5b 100644 ---
> a/repoman/pym/repoman/modules/commit/manifest.py +++
> b/repoman/pym/repoman/modules/commit/manifest.py @@ -33,55 +33,52 @@
> class Manifest(object): @returns: dictionary
>  		'''
>  		self.generated_manifest = False
> -		self.digest_only = self.options.mode !=
> 'manifest-check' \
> -			and self.options.digest == 'y'
> -		if self.options.mode in ("manifest", 'commit',
> 'fix') or self.digest_only:
> -			failed = False
> -			self.auto_assumed = set()
> -			fetchlist_dict = portage.FetchlistDict(
> -				checkdir, self.repoman_settings,
> self.portdb)
> -			if self.options.mode == 'manifest' and
> self.options.force:
> -				self._discard_dist_digests(checkdir,
> fetchlist_dict)
> -			self.repoman_settings["O"] = checkdir
> -			try:
> -				self.generated_manifest = digestgen(
> -
> mysettings=self.repoman_settings, myportdb=self.portdb)
> -			except portage.exception.PermissionDenied as
> e:
> -				self.generated_manifest = False
> -				writemsg_level(
> -					"!!! Permission denied:
> '%s'\n" % (e,),
> -					level=logging.ERROR,
> noiselevel=-1)
> +		failed = False
> +		self.auto_assumed = set()
> +		fetchlist_dict = portage.FetchlistDict(
> +			checkdir, self.repoman_settings, self.portdb)
> +		if self.options.mode == 'manifest' and
> self.options.force:
> +			self._discard_dist_digests(checkdir,
> fetchlist_dict)
> +		self.repoman_settings["O"] = checkdir
> +		try:
> +			self.generated_manifest = digestgen(
> +				mysettings=self.repoman_settings,
> myportdb=self.portdb)
> +		except portage.exception.PermissionDenied as e:
> +			self.generated_manifest = False
> +			writemsg_level(
> +				"!!! Permission denied: '%s'\n" %
> (e,),
> +				level=logging.ERROR, noiselevel=-1)
>  
> -			if not self.generated_manifest:
> -				writemsg_level(
> -					"Unable to generate
> manifest.",
> -					level=logging.ERROR,
> noiselevel=-1)
> -				failed = True
> +		if not self.generated_manifest:
> +			writemsg_level(
> +				"Unable to generate manifest.",
> +				level=logging.ERROR, noiselevel=-1)
> +			failed = True
>  
> -			if self.options.mode == "manifest":
> -				if not failed and self.options.force
> and self.auto_assumed and \
> -					'assume-digests' in
> self.repoman_settings.features:
> -					# Show which digests were
> assumed despite the --force option
> -					# being given. This output
> will already have been shown by
> -					# digestgen() if
> assume-digests is not enabled, so only show
> -					# it here if assume-digests
> is enabled.
> -					pkgs = list(fetchlist_dict)
> -					pkgs.sort()
> -					portage.writemsg_stdout(
> -						"  digest.assumed
> %s" %
> -
> portage.output.colorize(
> -							"WARN",
> str(len(self.auto_assumed)).rjust(18)) + "\n")
> -					for cpv in pkgs:
> -						fetchmap =
> fetchlist_dict[cpv]
> -						pf =
> portage.catsplit(cpv)[1]
> -						for distfile in
> sorted(fetchmap):
> -							if distfile
> in self.auto_assumed:
> -
> portage.writemsg_stdout(
> -									"
> %s::%s\n" % (pf, distfile))
> -				# continue, skip remaining main loop
> code
> -				return True
> -			elif failed:
> -				sys.exit(1)
> +		if self.options.mode == "manifest":
> +			if not failed and self.options.force and
> self.auto_assumed and \
> +				'assume-digests' in
> self.repoman_settings.features:
> +				# Show which digests were assumed
> despite the --force option
> +				# being given. This output will
> already have been shown by
> +				# digestgen() if assume-digests is
> not enabled, so only show
> +				# it here if assume-digests is
> enabled.
> +				pkgs = list(fetchlist_dict)
> +				pkgs.sort()
> +				portage.writemsg_stdout(
> +					"  digest.assumed %s" %
> +					portage.output.colorize(
> +						"WARN",
> str(len(self.auto_assumed)).rjust(18)) + "\n")
> +				for cpv in pkgs:
> +					fetchmap =
> fetchlist_dict[cpv]
> +					pf = portage.catsplit(cpv)[1]
> +					for distfile in
> sorted(fetchmap):
> +						if distfile in
> self.auto_assumed:
> +
> portage.writemsg_stdout(
> +								"
> %s::%s\n" % (pf, distfile))
> +			# continue, skip remaining main loop code
> +			return True
> +		elif failed:
> +			sys.exit(1)
>  		return False
>  
>  	def _discard_dist_digests(self, checkdir, fetchlist_dict):
> diff --git a/repoman/pym/repoman/scanner.py
> b/repoman/pym/repoman/scanner.py index f72af9c..d7cd81f 100644
> --- a/repoman/pym/repoman/scanner.py
> +++ b/repoman/pym/repoman/scanner.py
> @@ -60,9 +60,15 @@ class Scanner(object):
>  
>  		self.portdb = repo_settings.portdb
>  		self.portdb.settings =
> self.repo_settings.repoman_settings +
> +		digest_only = self.options.mode != 'manifest-check' \
> +			and self.options.digest == 'y'
> +		self.generate_manifest = digest_only or
> self.options.mode in \
> +			("manifest", 'commit', 'fix')
> +
>  		# We really only need to cache the metadata that's
> necessary for visibility # filtering. Anything else can be discarded
> to reduce memory consumption.
> -		if self.options.mode != "manifest" and
> self.options.digest != "y":
> +		if not self.generate_manifest:
>  			# Don't do this when generating manifests,
> since that uses # additional keys if spawn_nofetch is called
> (RESTRICT and # DEFINED_PHASES).
> @@ -286,8 +292,8 @@ class Scanner(object):
>  			if self.kwargs['checks']['ebuild_notadded']:
>  				self.vcs_settings.status.check(checkdir,
> checkdir_relative, xpkg) 
> -			manifester = manifest.Manifest(**self.kwargs)
> -			manifester.update_manifest(checkdir)
> +			if self.generate_manifest:
> +
> manifest.Manifest(**self.kwargs).update_manifest(checkdir)
> checkdirlist = os.listdir(checkdir) 
>  			dynamic_data = {


Works for me :)

-- 
Brian Dolbec <dolsen>



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

end of thread, other threads:[~2016-06-20 16:50 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-20 10:28 [gentoo-portage-dev] [PATCH] repoman: fix KeyError during manifest generation (bug 585388) Zac Medico
2016-06-20 16:49 ` Brian Dolbec

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