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

Reply via email to