commit:     71f8e844940eba8ba73d833e9e786a7ea65f2bfd
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue May 27 17:31:19 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Tue May 27 17:31:19 2014 +0000
URL:        
http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=71f8e844

repoman/main.py: Create ebuild.py and Ebuild class

This moves all relavent data to a class for a common access point.
It also adds an untracked function.

---
 pym/repoman/ebuild.py | 30 ++++++++++++++++++
 pym/repoman/main.py   | 88 ++++++++++++++++++++++++---------------------------
 2 files changed, 71 insertions(+), 47 deletions(-)

diff --git a/pym/repoman/ebuild.py b/pym/repoman/ebuild.py
new file mode 100644
index 0000000..fbe25a9
--- /dev/null
+++ b/pym/repoman/ebuild.py
@@ -0,0 +1,30 @@
+
+
+from portage import os
+
+
+class Ebuild(object):
+       '''Class to run primary checks on ebuilds'''
+
+       def __init__(self, repo_settings, repolevel, pkgdir, catdir, 
vcs_settings, x, y):
+               self.vcs_settings = vcs_settings
+               self.relative_path = os.path.join(x, y + ".ebuild")
+               self.full_path = os.path.join(repo_settings.repodir, 
self.relative_path)
+               self.ebuild_path = y + ".ebuild"
+               if repolevel < 3:
+                       self.ebuild_path = os.path.join(pkgdir, 
self.ebuild_path)
+               if repolevel < 2:
+                       self.ebuild_path = os.path.join(catdir, 
self.ebuild_path)
+               self.ebuild_path = os.path.join(".", self.ebuild_path)
+
+
+       def untracked(self, check_ebuild_notadded, y, eadded):
+               do_check = self.vcs_settings.vcs in ("cvs", "svn", "bzr")
+               really_notadded = check_ebuild_notadded and y not in eadded
+
+               if do_check and really_notadded:
+                       # ebuild not added to vcs
+                       return True
+               return False
+
+

diff --git a/pym/repoman/main.py b/pym/repoman/main.py
index 158323e..9e2ba76 100755
--- a/pym/repoman/main.py
+++ b/pym/repoman/main.py
@@ -67,6 +67,7 @@ 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.herds.herdbase import make_herd_base
+from repoman.ebuild import Ebuild
 from repoman.errors import err
 from repoman.metadata import (metadata_xml_encoding, metadata_doctype_name,
        metadata_dtd_uri, metadata_xml_declaration)
@@ -806,22 +807,16 @@ for x in effective_scanlist:
        used_useflags = set()
 
        for y in ebuildlist:
-               relative_path = os.path.join(x, y + ".ebuild")
-               full_path = os.path.join(repo_settings.repodir, relative_path)
-               ebuild_path = y + ".ebuild"
-               if repolevel < 3:
-                       ebuild_path = os.path.join(pkgdir, ebuild_path)
-               if repolevel < 2:
-                       ebuild_path = os.path.join(catdir, ebuild_path)
-               ebuild_path = os.path.join(".", ebuild_path)
+##################
+               ebuild = Ebuild(repo_settings, repolevel, pkgdir, catdir, 
vcs_settings, x, y)
+##################
+
                if check_changelog and not changelog_modified \
-                       and ebuild_path in changed.new_ebuilds:
+                       and ebuild.ebuild_path in changed.new_ebuilds:
                        stats['changelog.ebuildadded'] += 1
-                       fails['changelog.ebuildadded'].append(relative_path)
+                       
fails['changelog.ebuildadded'].append(ebuild.relative_path)
 
-               vcs_settings.vcs_is_cvs_or_svn_or_bzr = vcs_settings.vcs in 
("cvs", "svn", "bzr")
-               check_ebuild_really_notadded = check_ebuild_notadded and y not 
in eadded
-               if vcs_settings.vcs_is_cvs_or_svn_or_bzr and 
check_ebuild_really_notadded:
+               if ebuild.untracked(check_ebuild_notadded, y, eadded):
                        # ebuild not added to vcs
                        stats["ebuild.notadded"] += 1
                        fails["ebuild.notadded"].append(x + "/" + y + ".ebuild")
@@ -850,7 +845,7 @@ for x in effective_scanlist:
                        for k, msgs in pkg.invalid.items():
                                for msg in msgs:
                                        stats[k] += 1
-                                       fails[k].append("%s: %s" % 
(relative_path, msg))
+                                       fails[k].append("%s: %s" % 
(ebuild.relative_path, msg))
                        continue
 
                myaux = pkg._metadata
@@ -861,12 +856,12 @@ for x in effective_scanlist:
                if repo_settings.repo_config.eapi_is_banned(eapi):
                        stats["repo.eapi.banned"] += 1
                        fails["repo.eapi.banned"].append(
-                               "%s: %s" % (relative_path, eapi))
+                               "%s: %s" % (ebuild.relative_path, eapi))
 
                elif repo_settings.repo_config.eapi_is_deprecated(eapi):
                        stats["repo.eapi.deprecated"] += 1
                        fails["repo.eapi.deprecated"].append(
-                               "%s: %s" % (relative_path, eapi))
+                               "%s: %s" % (ebuild.relative_path, eapi))
 
                for k, v in myaux.items():
                        if not isinstance(v, basestring):
@@ -877,18 +872,18 @@ for x in effective_scanlist:
                                fails["variable.invalidchar"].append(
                                        "%s: %s variable contains non-ASCII "
                                        "character at position %s" %
-                                       (relative_path, k, m.start() + 1))
+                                       (ebuild.relative_path, k, m.start() + 
1))
 
                if not src_uri_error:
                        #######################
                        thirdparty = ThirdPartyMirrors(repoman_settings)
-                       thirdparty.check(myaux, relative_path)
+                       thirdparty.check(myaux, ebuild.relative_path)
                        stats["SRC_URI.mirror"] = thirdparty.stats
                        fails["SRC_URI.mirror"] = thirdparty.fails
                        #######################
                if myaux.get("PROVIDE"):
                        stats["virtual.oldstyle"] += 1
-                       fails["virtual.oldstyle"].append(relative_path)
+                       fails["virtual.oldstyle"].append(ebuild.relative_path)
 
                for pos, missing_var in enumerate(missingvars):
                        if not myaux.get(missing_var):
@@ -906,20 +901,20 @@ for x in effective_scanlist:
                                if myaux.get(var):
                                        myqakey = var + ".virtual"
                                        stats[myqakey] += 1
-                                       fails[myqakey].append(relative_path)
+                                       
fails[myqakey].append(ebuild.relative_path)
 
                if myaux['DESCRIPTION'][-1:] in ['.']:
                        stats['DESCRIPTION.punctuation'] += 1
                        fails['DESCRIPTION.punctuation'].append(
                                "%s: DESCRIPTION ends with a '%s' character"
-                               % (relative_path, myaux['DESCRIPTION'][-1:]))
+                               % (ebuild.relative_path, 
myaux['DESCRIPTION'][-1:]))
 
                # 14 is the length of DESCRIPTION=""
                if len(myaux['DESCRIPTION']) > max_desc_len:
                        stats['DESCRIPTION.toolong'] += 1
                        fails['DESCRIPTION.toolong'].append(
                                "%s: DESCRIPTION is %d characters (max %d)" %
-                               (relative_path, len(myaux['DESCRIPTION']), 
max_desc_len))
+                               (ebuild.relative_path, 
len(myaux['DESCRIPTION']), max_desc_len))
 
                keywords = myaux["KEYWORDS"].split()
                stable_keywords = []
@@ -928,7 +923,7 @@ for x in effective_scanlist:
                                not keyword.startswith("-"):
                                stable_keywords.append(keyword)
                if stable_keywords:
-                       if ebuild_path in changed.new_ebuilds and catdir != 
"virtual":
+                       if ebuild.ebuild_path in changed.new_ebuilds and catdir 
!= "virtual":
                                stable_keywords.sort()
                                stats["KEYWORDS.stable"] += 1
                                fails["KEYWORDS.stable"].append(
@@ -947,7 +942,7 @@ for x in effective_scanlist:
                                stats["KEYWORDS.dropped"] += 1
                                fails["KEYWORDS.dropped"].append(
                                        "%s: %s" %
-                                       (relative_path, " 
".join(sorted(dropped_keywords))))
+                                       (ebuild.relative_path, " 
".join(sorted(dropped_keywords))))
 
                slot_keywords[pkg.slot].update(ebuild_archs)
 
@@ -984,7 +979,7 @@ for x in effective_scanlist:
 
                        if keywords and not has_global_mask(pkg):
                                stats["LIVEVCS.unmasked"] += 1
-                               fails["LIVEVCS.unmasked"].append(relative_path)
+                               
fails["LIVEVCS.unmasked"].append(ebuild.relative_path)
 
                if options.ignore_arches:
                        arches = [[
@@ -1054,7 +1049,7 @@ for x in effective_scanlist:
                                        stats[mytype + '.suspect'] += 1
                                        fails[mytype + '.suspect'].append(
                                                "%s: 'test?' USE conditional in 
%s" %
-                                               (relative_path, mytype))
+                                               (ebuild.relative_path, mytype))
 
                                for atom in atoms:
                                        if atom == "||":
@@ -1075,7 +1070,7 @@ for x in effective_scanlist:
                                                        atom.cp in 
suspect_virtual:
                                                        
stats['virtual.suspect'] += 1
                                                        
fails['virtual.suspect'].append(
-                                                               relative_path +
+                                                               
ebuild.relative_path +
                                                                ": %s: consider 
using '%s' instead of '%s'" %
                                                                (mytype, 
suspect_virtual[atom.cp], atom))
 
@@ -1084,7 +1079,7 @@ for x in effective_scanlist:
                                                not inherited_java_eclass and \
                                                atom.cp == "virtual/jdk":
                                                stats['java.eclassesnotused'] 
+= 1
-                                               
fails['java.eclassesnotused'].append(relative_path)
+                                               
fails['java.eclassesnotused'].append(ebuild.relative_path)
                                        elif buildtime and \
                                                not is_blocker and \
                                                not inherited_wxwidgets_eclass 
and \
@@ -1092,13 +1087,13 @@ for x in effective_scanlist:
                                                
stats['wxwidgets.eclassnotused'] += 1
                                                
fails['wxwidgets.eclassnotused'].append(
                                                        "%s: %ss on 
x11-libs/wxGTK without inheriting"
-                                                       " wxwidgets.eclass" % 
(relative_path, mytype))
+                                                       " wxwidgets.eclass" % 
(ebuild.relative_path, mytype))
                                        elif runtime:
                                                if not is_blocker and \
                                                        atom.cp in 
suspect_rdepend:
                                                        stats[mytype + 
'.suspect'] += 1
                                                        fails[mytype + 
'.suspect'].append(
-                                                               relative_path + 
": '%s'" % atom)
+                                                               
ebuild.relative_path + ": '%s'" % atom)
 
                                        if atom.operator == "~" and \
                                                
portage.versions.catpkgsplit(atom.cpv)[3] != "r0":
@@ -1107,7 +1102,7 @@ for x in effective_scanlist:
                                                fails[qacat].append(
                                                        "%s: %s uses the ~ 
operator"
                                                        " with a non-zero 
revision: '%s'" %
-                                                       (relative_path, mytype, 
atom))
+                                                       (ebuild.relative_path, 
mytype, atom))
 
                        type_list.extend([mytype] * (len(badsyntax) - 
len(type_list)))
 
@@ -1117,7 +1112,7 @@ for x in effective_scanlist:
                        else:
                                qacat = m + ".syntax"
                        stats[qacat] += 1
-                       fails[qacat].append("%s: %s: %s" % (relative_path, m, 
b))
+                       fails[qacat].append("%s: %s: %s" % 
(ebuild.relative_path, m, b))
 
                badlicsyntax = len([z for z in type_list if z == "LICENSE"])
                badprovsyntax = len([z for z in type_list if z == "PROVIDE"])
@@ -1147,7 +1142,7 @@ for x in effective_scanlist:
                                fails['EAPI.incompatible'].append(
                                        "%s: IUSE defaults"
                                        " not supported with EAPI='%s': '%s'" %
-                                       (relative_path, eapi, myflag))
+                                       (ebuild.relative_path, eapi, myflag))
 
                for mypos in range(len(myuse)):
                        stats["IUSE.invalid"] += 1
@@ -1163,7 +1158,7 @@ for x in effective_scanlist:
                                for myruby in ruby_intersection:
                                        stats["IUSE.rubydeprecated"] += 1
                                        fails["IUSE.rubydeprecated"].append(
-                                               (relative_path + ": Deprecated 
ruby target: %s") % myruby)
+                                               (ebuild.relative_path + ": 
Deprecated ruby target: %s") % myruby)
 
                # license checks
                if not badlicsyntax:
@@ -1180,7 +1175,7 @@ for x in effective_scanlist:
                                        fails["LICENSE.invalid"].append(x + "/" 
+ y + ".ebuild: %s" % lic)
                                elif lic in liclist_deprecated:
                                        stats["LICENSE.deprecated"] += 1
-                                       fails["LICENSE.deprecated"].append("%s: 
%s" % (relative_path, lic))
+                                       fails["LICENSE.deprecated"].append("%s: 
%s" % (ebuild.relative_path, lic))
 
                # keyword checks
                myuse = myaux["KEYWORDS"].split()
@@ -1208,7 +1203,7 @@ for x in effective_scanlist:
                except portage.exception.InvalidDependString as e:
                        stats["RESTRICT.syntax"] += 1
                        fails["RESTRICT.syntax"].append(
-                               "%s: RESTRICT: %s" % (relative_path, e))
+                               "%s: RESTRICT: %s" % (ebuild.relative_path, e))
                        del e
                if myrestrict:
                        myrestrict = set(myrestrict)
@@ -1224,33 +1219,32 @@ for x in effective_scanlist:
                                stats['EAPI.incompatible'] += 1
                                fails['EAPI.incompatible'].append(
                                        "%s: REQUIRED_USE"
-                                       " not supported with EAPI='%s'" % 
(relative_path, eapi,))
+                                       " not supported with EAPI='%s'" % 
(ebuild.relative_path, eapi,))
                        try:
                                portage.dep.check_required_use(
                                        required_use, (), 
pkg.iuse.is_valid_flag, eapi=eapi)
                        except portage.exception.InvalidDependString as e:
                                stats["REQUIRED_USE.syntax"] += 1
                                fails["REQUIRED_USE.syntax"].append(
-                                       "%s: REQUIRED_USE: %s" % 
(relative_path, e))
+                                       "%s: REQUIRED_USE: %s" % 
(ebuild.relative_path, e))
                                del e
 
                # Syntax Checks
-               relative_path = os.path.join(x, y + ".ebuild")
-               full_path = os.path.join(repo_settings.repodir, relative_path)
+
                if not vcs_settings.vcs_preserves_mtime:
-                       if ebuild_path not in changed.new_ebuilds and \
-                               ebuild_path not in changed.ebuilds:
+                       if ebuild.ebuild_path not in changed.new_ebuilds and \
+                               ebuild.ebuild_path not in changed.ebuilds:
                                pkg.mtime = None
                try:
                        # All ebuilds should have utf_8 encoding.
                        f = io.open(
                                _unicode_encode(
-                                       full_path, encoding=_encodings['fs'], 
errors='strict'),
+                                       ebuild.full_path, 
encoding=_encodings['fs'], errors='strict'),
                                mode='r', encoding=_encodings['repo.content'])
                        try:
                                for check_name, e in run_checks(f, pkg):
                                        stats[check_name] += 1
-                                       fails[check_name].append(relative_path 
+ ': %s' % e)
+                                       
fails[check_name].append(ebuild.relative_path + ': %s' % e)
                        finally:
                                f.close()
                except UnicodeDecodeError:
@@ -1410,13 +1404,13 @@ for x in effective_scanlist:
                                                        stats[mykey] += 1
                                                        fails[mykey].append(
                                                                "%s: %s: %s(%s) 
%s" % (
-                                                                       
relative_path, mytype, keyword, prof,
+                                                                       
ebuild.relative_path, mytype, keyword, prof,
                                                                        
repr(atoms)))
                                        else:
                                                stats[mykey] += 1
                                                fails[mykey].append(
                                                        "%s: %s: %s(%s) %s" % (
-                                                               relative_path, 
mytype, keyword, prof,
+                                                               
ebuild.relative_path, mytype, keyword, prof,
                                                                repr(atoms)))
 
                if not baddepsyntax and unknown_pkgs:
@@ -1427,7 +1421,7 @@ for x in effective_scanlist:
                                stats["dependency.unknown"] += 1
                                fails["dependency.unknown"].append(
                                        "%s: %s: %s" % (
-                                               relative_path, mytype, ", 
".join(sorted(atoms))))
+                                               ebuild.relative_path, mytype, 
", ".join(sorted(atoms))))
 
        # check if there are unused local USE-descriptions in metadata.xml
        # (unless there are any invalids, to avoid noise)

Reply via email to