* [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