commit:     7b48d08d50a9da5514190abc3c70a30372bd7c5d
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Mon Jun  2 01:00:05 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Mon Jun  2 01:00:05 2014 +0000
URL:        
http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=7b48d08d

repoman/main.py: Create IsEbuild class and check

Split the code from main.py into checks/ebuilds/isebuild.py.

---
 pym/repoman/checks/ebuilds/isebuild.py | 70 ++++++++++++++++++++++++++++++++++
 pym/repoman/main.py                    | 50 +++++-------------------
 2 files changed, 79 insertions(+), 41 deletions(-)

diff --git a/pym/repoman/checks/ebuilds/isebuild.py 
b/pym/repoman/checks/ebuilds/isebuild.py
new file mode 100644
index 0000000..2369ea6
--- /dev/null
+++ b/pym/repoman/checks/ebuilds/isebuild.py
@@ -0,0 +1,70 @@
+
+import stat
+
+from _emerge.Package import Package
+from _emerge.RootConfig import RootConfig
+
+import portage
+from portage import os
+
+from repoman.qa_data import no_exec, allvars
+
+
+class IsEbuild(object):
+
+
+       def __init__(self, repoman_settings, repo_settings, portdb, qatracker):
+               ''''''
+               self.portdb = portdb
+               self.qatracker = qatracker
+               self.root_config = RootConfig(repoman_settings,
+                       repo_settings.trees[repo_settings.root], None)
+
+
+       def check(self, checkdirlist, checkdir, xpkg):
+               self.continue_ = False
+               ebuildlist = []
+               pkgs = {}
+               allvalid = True
+               for y in checkdirlist:
+                       file_is_ebuild = y.endswith(".ebuild")
+                       file_should_be_non_executable = y in no_exec or 
file_is_ebuild
+
+                       if file_should_be_non_executable:
+                               file_is_executable = stat.S_IMODE(
+                                       os.stat(os.path.join(checkdir, 
y)).st_mode) & 0o111
+
+                               if file_is_executable:
+                                       
self.qatracker.add_error("file.executable", os.path.join(checkdir, y))
+                       if file_is_ebuild:
+                               pf = y[:-7]
+                               ebuildlist.append(pf)
+                               catdir = xpkg.split("/")[0]
+                               cpv = "%s/%s" % (catdir, pf)
+                               try:
+                                       myaux = dict(zip(allvars, 
self.portdb.aux_get(cpv, allvars)))
+                               except KeyError:
+                                       allvalid = False
+                                       
self.qatracker.add_error("ebuild.syntax", os.path.join(xpkg, y))
+                                       continue
+                               except IOError:
+                                       allvalid = False
+                                       
self.qatracker.add_error("ebuild.output", os.path.join(xpkg, y))
+                                       continue
+                               if not portage.eapi_is_supported(myaux["EAPI"]):
+                                       allvalid = False
+                                       
self.qatracker.add_error("EAPI.unsupported", os.path.join(xpkg, y))
+                                       continue
+                               pkgs[pf] = Package(
+                                       cpv=cpv, metadata=myaux, 
root_config=self.root_config,
+                                       type_name="ebuild")
+
+               if len(pkgs) != len(ebuildlist):
+                       # If we can't access all the metadata then it's totally 
unsafe to
+                       # commit since there's no way to generate a correct 
Manifest.
+                       # Do not try to do any more QA checks on this package 
since missing
+                       # metadata leads to false positives for several checks, 
and false
+                       # positives confuse users.
+                       self.continue_ = True
+
+               return pkgs, allvalid

diff --git a/pym/repoman/main.py b/pym/repoman/main.py
index 3a1ff7a..6a7ada7 100755
--- a/pym/repoman/main.py
+++ b/pym/repoman/main.py
@@ -11,7 +11,6 @@ import io
 import logging
 import re
 import signal
-import stat
 import subprocess
 import sys
 import tempfile
@@ -45,7 +44,6 @@ from portage import os
 from portage import _encodings
 from portage import _unicode_encode
 from _emerge.Package import Package
-from _emerge.RootConfig import RootConfig
 from _emerge.userquery import userquery
 import portage.checksum
 import portage.const
@@ -65,6 +63,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.isebuild import IsEbuild
 from repoman.checks.ebuilds.thirdpartymirrors import ThirdPartyMirrors
 from repoman.checks.ebuilds.manifests import Manifests
 from repoman.checks.herds.herdbase import make_herd_base
@@ -75,7 +74,7 @@ from repoman.metadata import (metadata_xml_encoding, 
metadata_doctype_name,
 from repoman.modules import commit
 from repoman.profile import check_profiles, dev_keywords, setup_profile
 from repoman.qa_data import (format_qa_output, format_qa_output_column, qahelp,
-       qawarnings, qacats, no_exec, allvars, max_desc_len, missingvars,
+       qawarnings, qacats, max_desc_len, missingvars,
        ruby_deprecated, suspect_virtual, suspect_rdepend, valid_restrict)
 from qa_tracker import QATracker
 from repoman.repos import has_global_mask, RepoSettings, repo_metadata
@@ -206,7 +205,6 @@ repoman_settings.categories = frozenset(
 categories = repoman_settings.categories
 
 portdb.settings = repoman_settings
-root_config = RootConfig(repoman_settings, 
repo_settings.trees[repo_settings.root], None)
 # We really only need to cache the metadata that's necessary for visibility
 # filtering. Anything else can be discarded to reduce memory consumption.
 portdb._aux_cache_keys.clear()
@@ -351,44 +349,11 @@ for xpkg in effective_scanlist:
                continue
 
        checkdirlist = os.listdir(checkdir)
-       ebuildlist = []
-       pkgs = {}
-       allvalid = True
-       for y in checkdirlist:
-               file_is_ebuild = y.endswith(".ebuild")
-               file_should_be_non_executable = y in no_exec or file_is_ebuild
-
-               if file_should_be_non_executable:
-                       file_is_executable = stat.S_IMODE(
-                               os.stat(os.path.join(checkdir, y)).st_mode) & 
0o111
-
-                       if file_is_executable:
-                               qatracker.add_error("file.executable", 
os.path.join(checkdir, y))
-               if file_is_ebuild:
-                       pf = y[:-7]
-                       ebuildlist.append(pf)
-                       cpv = "%s/%s" % (catdir, pf)
-                       try:
-                               myaux = dict(zip(allvars, portdb.aux_get(cpv, 
allvars)))
-                       except KeyError:
-                               allvalid = False
-                               qatracker.add_error("ebuild.syntax", 
os.path.join(xpkg, y))
-                               continue
-                       except IOError:
-                               allvalid = False
-                               qatracker.add_error("ebuild.output", 
os.path.join(xpkg, y))
-                               continue
-                       if not portage.eapi_is_supported(myaux["EAPI"]):
-                               allvalid = False
-                               qatracker.add_error("EAPI.unsupported", 
os.path.join(xpkg, y))
-                               continue
-                       pkgs[pf] = Package(
-                               cpv=cpv, metadata=myaux, 
root_config=root_config,
-                               type_name="ebuild")
 
-       slot_keywords = {}
-
-       if len(pkgs) != len(ebuildlist):
+######################
+       is_ebuild = IsEbuild(repoman_settings, repo_settings, portdb, qatracker)
+       pkgs, allvalid = is_ebuild.check(checkdirlist, checkdir, xpkg)
+       if is_ebuild.continue_:
                # If we can't access all the metadata then it's totally unsafe 
to
                # commit since there's no way to generate a correct Manifest.
                # Do not try to do any more QA checks on this package since 
missing
@@ -396,6 +361,9 @@ for xpkg in effective_scanlist:
                # positives confuse users.
                can_force = False
                continue
+######################
+
+       slot_keywords = {}
 
        # Sort ebuilds in ascending order for the KEYWORDS.dropped check.
        ebuildlist = sorted(pkgs.values())

Reply via email to