commit: 4062c69dc27a816b377b3eb91dcb1c93b6f2cab0
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sun Jun 5 22:07:59 2016 +0000
Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Sun Jun 19 22:14:27 2016 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=4062c69d
repoman: Move manifest generation to modules/commit/manifest.py
.../manifest/manifests.py => commit/manifest.py} | 40 ++--------
.../pym/repoman/modules/scan/manifest/manifests.py | 87 +---------------------
repoman/pym/repoman/scanner.py | 6 +-
3 files changed, 13 insertions(+), 120 deletions(-)
diff --git a/repoman/pym/repoman/modules/scan/manifest/manifests.py
b/repoman/pym/repoman/modules/commit/manifest.py
similarity index 72%
copy from repoman/pym/repoman/modules/scan/manifest/manifests.py
copy to repoman/pym/repoman/modules/commit/manifest.py
index 2b8d7af..ce4c024 100644
--- a/repoman/pym/repoman/modules/scan/manifest/manifests.py
+++ b/repoman/pym/repoman/modules/commit/manifest.py
@@ -5,14 +5,13 @@ import sys
# import our initialized portage instance
from repoman._portage import portage
-from repoman.modules.scan.scanbase import ScanBase
from portage import os
from portage.package.ebuild.digestgen import digestgen
from portage.util import writemsg_level
-class Manifests(ScanBase):
+class Manifest(object):
'''Creates as well as checks pkg Manifest entries/files'''
def __init__(self, **kwargs):
@@ -20,29 +19,22 @@ class Manifests(ScanBase):
@param options: the run time cli options
@param portdb: portdb instance
- @param qatracker: QATracker instance
@param repo_settings: repository settings instance
'''
self.options = kwargs.get('options')
self.portdb = kwargs.get('portdb')
- self.qatracker = kwargs.get('qatracker')
self.repoman_settings =
kwargs.get('repo_settings').repoman_settings
self.generated_manifest = False
- def check(self, **kwargs):
- '''Perform a changelog and untracked checks on the ebuild
+ def update_manifest(self, checkdir):
+ '''Perform a manifest generation for the pkg
- @param xpkg: Package in which we check (object).
- @param checkdirlist: list of files in the current package
directory
+ @param checkdir: the current package directory
@returns: dictionary
'''
- checkdir = kwargs.get('checkdir')
- xpkg = kwargs.get('xpkg')
self.generated_manifest = False
self.digest_only = self.options.mode != 'manifest-check' \
and self.options.digest == 'y'
- if self.options.pretend:
- return False
if self.options.mode in ("manifest", 'commit', 'fix') or
self.digest_only:
failed = False
self.auto_assumed = set()
@@ -50,7 +42,7 @@ class Manifests(ScanBase):
checkdir, self.repoman_settings, self.portdb)
if self.options.mode == 'manifest' and
self.options.force:
portage._doebuild_manifest_exempt_depend += 1
- self.create_manifest(checkdir, fetchlist_dict)
+ self._create_manifest(checkdir, fetchlist_dict)
self.repoman_settings["O"] = checkdir
try:
self.generated_manifest = digestgen(
@@ -91,13 +83,9 @@ class Manifests(ScanBase):
return True
elif failed:
sys.exit(1)
- if not self.generated_manifest:
- self.digest_check(xpkg, checkdir)
- if self.options.mode == 'manifest-check':
- return True
return False
- def create_manifest(self, checkdir, fetchlist_dict):
+ def _create_manifest(self, checkdir, fetchlist_dict):
'''Creates a Manifest file
@param checkdir: the directory to generate the Manifest in
@@ -121,19 +109,3 @@ class Manifests(ScanBase):
mf.write()
finally:
portage._doebuild_manifest_exempt_depend -= 1
-
- def digest_check(self, xpkg, checkdir):
- '''Check the manifest entries, report any Q/A errors
-
- @param xpkg: the cat/pkg name to check
- @param checkdir: the directory path to check'''
- self.repoman_settings['O'] = checkdir
- self.repoman_settings['PORTAGE_QUIET'] = '1'
- if not portage.digestcheck([], self.repoman_settings, strict=1):
- self.qatracker.add_error("manifest.bad",
os.path.join(xpkg, 'Manifest'))
- self.repoman_settings.pop('PORTAGE_QUIET', None)
-
- @property
- def runInPkgs(self):
- '''Package level scans'''
- return (True, [self.check])
diff --git a/repoman/pym/repoman/modules/scan/manifest/manifests.py
b/repoman/pym/repoman/modules/scan/manifest/manifests.py
index 2b8d7af..dc2b338 100644
--- a/repoman/pym/repoman/modules/scan/manifest/manifests.py
+++ b/repoman/pym/repoman/modules/scan/manifest/manifests.py
@@ -1,15 +1,10 @@
# -*- coding:utf-8 -*-
-import logging
-import sys
-
# import our initialized portage instance
from repoman._portage import portage
from repoman.modules.scan.scanbase import ScanBase
from portage import os
-from portage.package.ebuild.digestgen import digestgen
-from portage.util import writemsg_level
class Manifests(ScanBase):
@@ -27,101 +22,23 @@ class Manifests(ScanBase):
self.portdb = kwargs.get('portdb')
self.qatracker = kwargs.get('qatracker')
self.repoman_settings =
kwargs.get('repo_settings').repoman_settings
- self.generated_manifest = False
def check(self, **kwargs):
'''Perform a changelog and untracked checks on the ebuild
@param xpkg: Package in which we check (object).
- @param checkdirlist: list of files in the current package
directory
+ @param checkdir: the current package directory
@returns: dictionary
'''
checkdir = kwargs.get('checkdir')
xpkg = kwargs.get('xpkg')
- self.generated_manifest = False
- self.digest_only = self.options.mode != 'manifest-check' \
- and self.options.digest == 'y'
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, self.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=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 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 not self.generated_manifest:
- self.digest_check(xpkg, checkdir)
+ self.digest_check(xpkg, checkdir)
if self.options.mode == 'manifest-check':
return True
return False
- def create_manifest(self, checkdir, fetchlist_dict):
- '''Creates a Manifest file
-
- @param checkdir: the directory to generate the Manifest in
- @param fetchlist_dict: dictionary of files to fetch and/or
include
- in the manifest
- '''
- 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
-
def digest_check(self, xpkg, checkdir):
'''Check the manifest entries, report any Q/A errors
diff --git a/repoman/pym/repoman/scanner.py b/repoman/pym/repoman/scanner.py
index 48d9001..f72af9c 100644
--- a/repoman/pym/repoman/scanner.py
+++ b/repoman/pym/repoman/scanner.py
@@ -12,6 +12,7 @@ from portage.output import green
from portage.util.futures.extendedfutures import ExtendedFuture
from repoman.metadata import get_metadata_xsd
from repoman.modules.commit import repochecks
+from repoman.modules.commit import manifest
from repoman.profile import check_profiles, dev_profile_keywords, setup_profile
from repoman.repos import repo_metadata
from repoman.modules.scan.scan import scan
@@ -280,12 +281,15 @@ class Scanner(object):
if self.repolevel < 2:
checkdir_relative = os.path.join(catdir,
checkdir_relative)
checkdir_relative = os.path.join(".", checkdir_relative)
- checkdirlist = os.listdir(checkdir)
# Run the status check
if self.kwargs['checks']['ebuild_notadded']:
self.vcs_settings.status.check(checkdir,
checkdir_relative, xpkg)
+ manifester = manifest.Manifest(**self.kwargs)
+ manifester.update_manifest(checkdir)
+ checkdirlist = os.listdir(checkdir)
+
dynamic_data = {
'changelog_modified': False,
'checkdirlist': ExtendedFuture(checkdirlist),