commit: c74159c33da8945c45b98974274d3db17b882b44
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue May 27 17:33:12 2014 +0000
Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue May 27 17:47:48 2014 +0000
URL:
http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=c74159c3
repoman/main.py: Create checks/ebuilds/manifests.py and Manifests class
This moves manifest checks and creation to it's own class
---
pym/repoman/checks/ebuilds/manifests.py | 91 +++++++++++++++++++++++++++++++++
pym/repoman/main.py | 76 +++------------------------
2 files changed, 99 insertions(+), 68 deletions(-)
diff --git a/pym/repoman/checks/ebuilds/manifests.py
b/pym/repoman/checks/ebuilds/manifests.py
new file mode 100644
index 0000000..53c3136
--- /dev/null
+++ b/pym/repoman/checks/ebuilds/manifests.py
@@ -0,0 +1,91 @@
+
+import logging
+import sys
+
+import portage
+from portage import os
+from portage.package.ebuild.digestgen import digestgen
+from portage.util import writemsg_level
+
+
+class Manifests(object):
+
+
+ def __init__(self, options, repoman_settings):
+ self.options = options
+ self.repoman_settings = repoman_settings
+
+ self.digest_only = options.mode != 'manifest-check' and
options.digest == 'y'
+ self.generated_manifest = False
+
+
+ def run(self, checkdir, portdb):
+ if self.options.pretend:
+ return False
+ 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, portdb)
+ if self.options.mode == 'manifest' and
self.options.force:
+ portage._doebuild_manifest_exempt_depend += 1
+ self.create_manifest(checkdir, fetchlist_dict)
+ self.repoman_settings["O"] = checkdir
+ try:
+ self.generated_manifest = digestgen(
+ mysettings=self.repoman_settings,
myportdb=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:
+ print("Unable to generate manifest.")
+ 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))
+
+ return True # continue, skip remaining loop
code
+ elif failed:
+ sys.exit(1)
+ return False # stay in the loop
+
+
+ def create_manifest(self, checkdir, fetchlist_dict):
+ try:
+ distdir = self.repoman_settings['DISTDIR']
+ mf =
self.repoman_settings.repositories.get_repo_for_location(
+ os.path.dirname(os.path.dirname(checkdir)))
+ mf = mf.load_manifest(
+ checkdir, distdir,
fetchlist_dict=fetchlist_dict)
+ mf.create(
+ requiredDistfiles=None,
assumeDistHashesAlways=True)
+ for distfiles in fetchlist_dict.values():
+ for distfile in distfiles:
+ if os.path.isfile(os.path.join(distdir,
distfile)):
+
mf.fhashdict['DIST'].pop(distfile, None)
+ else:
+ self.auto_assumed.add(distfile)
+ mf.write()
+ finally:
+ portage._doebuild_manifest_exempt_depend -= 1
diff --git a/pym/repoman/main.py b/pym/repoman/main.py
index 9e2ba76..46cdefd 100755
--- a/pym/repoman/main.py
+++ b/pym/repoman/main.py
@@ -66,6 +66,7 @@ from portage.eapi import eapi_has_iuse_defaults,
eapi_has_required_use
from repoman.argparser import parse_args
from repoman.checks.ebuilds.checks import run_checks, checks_init
from repoman.checks.ebuilds.thirdpartymirrors import ThirdPartyMirrors
+from repoman.checks.ebuilds.manifests import Manifests
from repoman.checks.herds.herdbase import make_herd_base
from repoman.ebuild import Ebuild
from repoman.errors import err
@@ -334,76 +335,15 @@ for x in effective_scanlist:
if repolevel < 2:
checkdir_relative = os.path.join(catdir, checkdir_relative)
checkdir_relative = os.path.join(".", checkdir_relative)
- generated_manifest = False
-
- do_manifest = options.mode == "manifest"
- do_digest_only = options.mode != 'manifest-check' and options.digest ==
'y'
- do_commit_or_fix = options.mode in ('commit', 'fix')
- do_something = not options.pretend
-
- if do_manifest or do_digest_only or do_commit_or_fix and do_something:
- auto_assumed = set()
- fetchlist_dict = portage.FetchlistDict(
- checkdir, repoman_settings, portdb)
- if options.mode == 'manifest' and options.force:
- portage._doebuild_manifest_exempt_depend += 1
- try:
- distdir = repoman_settings['DISTDIR']
- mf =
repoman_settings.repositories.get_repo_for_location(
-
os.path.dirname(os.path.dirname(checkdir)))
- mf = mf.load_manifest(
- checkdir, distdir,
fetchlist_dict=fetchlist_dict)
- mf.create(
- requiredDistfiles=None,
assumeDistHashesAlways=True)
- for distfiles in fetchlist_dict.values():
- for distfile in distfiles:
- if
os.path.isfile(os.path.join(distdir, distfile)):
-
mf.fhashdict['DIST'].pop(distfile, None)
- else:
-
auto_assumed.add(distfile)
- mf.write()
- finally:
- portage._doebuild_manifest_exempt_depend -= 1
- repoman_settings["O"] = checkdir
- try:
- generated_manifest = digestgen(
- mysettings=repoman_settings, myportdb=portdb)
- except portage.exception.PermissionDenied as e:
- generated_manifest = False
- writemsg_level(
- "!!! Permission denied: '%s'\n" % (e,),
- level=logging.ERROR, noiselevel=-1)
-
- if not generated_manifest:
- print("Unable to generate manifest.")
- dofail = 1
-
- if options.mode == "manifest":
- if not dofail and options.force and auto_assumed and \
- 'assume-digests' in 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(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 auto_assumed:
- portage.writemsg_stdout(
- " %s::%s\n" %
(pf, distfile))
- continue
- elif dofail:
- sys.exit(1)
+#####################
+ manifester = Manifests(options, repoman_settings)
+ skip = manifester.run(checkdir, portdb)
+ if skip:
+ continue
+######################
- if not generated_manifest:
+ if not manifester.generated_manifest:
repoman_settings['O'] = checkdir
repoman_settings['PORTAGE_QUIET'] = '1'
if not portage.digestcheck([], repoman_settings, strict=1):