Gentoo Archives: gentoo-commits

From: Brian Dolbec <brian.dolbec@×××××.com>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:repoman commit in: pym/repoman/, pym/repoman/checks/ebuilds/
Date: Wed, 01 Oct 2014 23:02:39
Message-Id: 1412204293.c925718100adf9048b36e99d0a5816fcb87012c6.dol-sen@gentoo
1 commit: c925718100adf9048b36e99d0a5816fcb87012c6
2 Author: Tom Wijsman <tomwij <AT> gentoo <DOT> org>
3 AuthorDate: Tue Jun 3 11:15:10 2014 +0000
4 Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
5 CommitDate: Wed Oct 1 22:58:13 2014 +0000
6 URL: http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=c9257181
7
8 repoman/main.py: Split USE flag checks to checks/ebuilds/use_flags.py
9
10 ---
11 pym/repoman/checks/ebuilds/misc.py | 2 +-
12 pym/repoman/checks/ebuilds/use_flags.py | 85 +++++++++++++++++++++++++++++++++
13 pym/repoman/main.py | 52 ++++----------------
14 3 files changed, 95 insertions(+), 44 deletions(-)
15
16 diff --git a/pym/repoman/checks/ebuilds/misc.py b/pym/repoman/checks/ebuilds/misc.py
17 index 3bf61f0..744784a 100644
18 --- a/pym/repoman/checks/ebuilds/misc.py
19 +++ b/pym/repoman/checks/ebuilds/misc.py
20 @@ -39,7 +39,7 @@ def bad_split_check(xpkg, y_ebuild, pkgdir, qatracker):
21 return False
22
23
24 -def pkg_invalid(pkg, qatracker):
25 +def pkg_invalid(pkg, qatracker, ebuild):
26 '''Checks for invalid packages
27
28 @param pkg: _emerge.Package instance
29
30 diff --git a/pym/repoman/checks/ebuilds/use_flags.py b/pym/repoman/checks/ebuilds/use_flags.py
31 new file mode 100644
32 index 0000000..bc09ed7
33 --- /dev/null
34 +++ b/pym/repoman/checks/ebuilds/use_flags.py
35 @@ -0,0 +1,85 @@
36 +
37 +'''use_flags.py
38 +Performs USE flag related checks
39 +'''
40 +
41 +# import our centrally initialized portage instance
42 +from repoman._portage import portage
43 +
44 +from portage import eapi
45 +from portage.eapi import eapi_has_iuse_defaults, eapi_has_required_use
46 +
47 +
48 +class USEFlagChecks(object):
49 + '''Performs checks on USE flags listed in the ebuilds and metadata.xml'''
50 +
51 + def __init__(self, qatracker, globalUseFlags):
52 + '''
53 + @param qatracker: QATracker instance
54 + @param globalUseFlags: Global USE flags
55 + '''
56 + self.qatracker = qatracker
57 + self.useFlags = []
58 + self.defaultUseFlags = []
59 + self.usedUseFlags = set()
60 + self.globalUseFlags = globalUseFlags
61 +
62 + def check(self, pkg, package, ebuild, y_ebuild, localUseFlags):
63 + '''Perform the check.
64 +
65 + @param pkg: Package in which we check (object).
66 + @param package: Package in which we check (string).
67 + @param ebuild: Ebuild which we check (object).
68 + @param y_ebuild: Ebuild which we check (string).
69 + @param localUseFlags: Local USE flags of the package
70 + '''
71 + self._checkGlobal(pkg)
72 + self._checkMetadata(package, ebuild, y_ebuild, localUseFlags)
73 + self._checkRequiredUSE(pkg, ebuild)
74 +
75 + def getUsedUseFlags(self):
76 + '''Get the USE flags that this check has seen'''
77 + return self.usedUseFlags
78 +
79 + def _checkGlobal(self, pkg):
80 + for myflag in pkg._metadata["IUSE"].split():
81 + flag_name = myflag.lstrip("+-")
82 + self.usedUseFlags.add(flag_name)
83 + if myflag != flag_name:
84 + self.defaultUseFlags.append(myflag)
85 + if flag_name not in self.globalUseFlags:
86 + self.useFlags.append(flag_name)
87 +
88 + def _checkMetadata(self, package, ebuild, y_ebuild, localUseFlags):
89 + for mypos in range(len(self.useFlags) - 1, -1, -1):
90 + if self.useFlags[mypos] and (self.useFlags[mypos] in localUseFlags):
91 + del self.useFlags[mypos]
92 +
93 + if self.defaultUseFlags and not eapi_has_iuse_defaults(eapi):
94 + for myflag in self.defaultUseFlags:
95 + self.qatracker.add_error(
96 + 'EAPI.incompatible', "%s: IUSE defaults"
97 + " not supported with EAPI='%s': '%s'" % (
98 + ebuild.relative_path, eapi, myflag))
99 +
100 + for mypos in range(len(self.useFlags)):
101 + self.qatracker.add_error(
102 + "IUSE.invalid",
103 + "%s/%s.ebuild: %s" % (package, y_ebuild, self.useFlags[mypos]))
104 +
105 + def _checkRequiredUSE(self, pkg, ebuild):
106 + required_use = pkg._metadata["REQUIRED_USE"]
107 + if required_use:
108 + if not eapi_has_required_use(eapi):
109 + self.qatracker.add_error(
110 + 'EAPI.incompatible', "%s: REQUIRED_USE"
111 + " not supported with EAPI='%s'"
112 + % (ebuild.relative_path, eapi,))
113 + try:
114 + portage.dep.check_required_use(
115 + required_use, (), pkg.iuse.is_valid_flag, eapi=eapi)
116 + except portage.exception.InvalidDependString as e:
117 + self.qatracker.add_error(
118 + "REQUIRED_USE.syntax",
119 + "%s: REQUIRED_USE: %s" % (ebuild.relative_path, e))
120 + del e
121
122 diff --git a/pym/repoman/main.py b/pym/repoman/main.py
123 index fcd4c19..5f21e7a 100755
124 --- a/pym/repoman/main.py
125 +++ b/pym/repoman/main.py
126 @@ -44,7 +44,6 @@ from portage.output import (
127 from portage.output import ConsoleStyleFile, StyleWriter
128 from portage.util import writemsg_level
129 from portage.package.ebuild.digestgen import digestgen
130 -from portage.eapi import eapi_has_iuse_defaults, eapi_has_required_use
131
132 from repoman.argparser import parse_args
133 from repoman.checks.directories.files import FileChecks
134 @@ -55,6 +54,7 @@ from repoman.checks.ebuilds.thirdpartymirrors import ThirdPartyMirrors
135 from repoman.checks.ebuilds.manifests import Manifests
136 from repoman.checks.ebuilds.misc import bad_split_check, pkg_invalid
137 from repoman.checks.ebuilds.pkgmetadata import PkgMetadata
138 +from repoman.checks.ebuilds.use_flags import USEFlagChecks
139 from repoman.ebuild import Ebuild
140 from repoman.errors import err
141 from repoman.modules.commit import repochecks
142 @@ -367,7 +367,7 @@ for xpkg in effective_scanlist:
143 continue
144 ###################
145 pkg = pkgs[y_ebuild]
146 - if pkg_invalid(pkg, qatracker):
147 + if pkg_invalid(pkg, qatracker, ebuild):
148 allvalid = False
149 continue
150
151 @@ -626,32 +626,13 @@ for xpkg in effective_scanlist:
152 badlicsyntax = badlicsyntax > 0
153 badprovsyntax = badprovsyntax > 0
154
155 - # uselist checks - global
156 - myuse = []
157 - default_use = []
158 - for myflag in myaux["IUSE"].split():
159 - flag_name = myflag.lstrip("+-")
160 - used_useflags.add(flag_name)
161 - if myflag != flag_name:
162 - default_use.append(myflag)
163 - if flag_name not in uselist:
164 - myuse.append(flag_name)
165 -
166 - # uselist checks - metadata
167 - for mypos in range(len(myuse) - 1, -1, -1):
168 - if myuse[mypos] and (myuse[mypos] in muselist):
169 - del myuse[mypos]
170 -
171 - if default_use and not eapi_has_iuse_defaults(eapi):
172 - for myflag in default_use:
173 - qatracker.add_error('EAPI.incompatible',
174 - "%s: IUSE defaults"
175 - " not supported with EAPI='%s': '%s'" %
176 - (ebuild.relative_path, eapi, myflag))
177 -
178 - for mypos in range(len(myuse)):
179 - qatracker.add_error("IUSE.invalid",
180 - xpkg + "/" + y_ebuild + ".ebuild: %s" % myuse[mypos])
181 + #################
182 + use_flag_checks = USEFlagChecks(qatracker, uselist)
183 + use_flag_checks.check(pkg, xpkg, ebuild, y_ebuild, muselist)
184 +
185 + ebuild_used_useflags = use_flag_checks.getUsedUseFlags()
186 + used_useflags = used_useflags.union(ebuild_used_useflags)
187 + #################
188
189 # Check for outdated RUBY targets
190 old_ruby_eclasses = ["ruby-ng", "ruby-fakegem", "ruby"]
191 @@ -715,21 +696,6 @@ for xpkg in effective_scanlist:
192 for mybad in mybadrestrict:
193 qatracker.add_error("RESTRICT.invalid",
194 xpkg + "/" + y_ebuild + ".ebuild: %s" % mybad)
195 - # REQUIRED_USE check
196 - required_use = myaux["REQUIRED_USE"]
197 - if required_use:
198 - if not eapi_has_required_use(eapi):
199 - qatracker.add_error('EAPI.incompatible',
200 - "%s: REQUIRED_USE"
201 - " not supported with EAPI='%s'"
202 - % (ebuild.relative_path, eapi,))
203 - try:
204 - portage.dep.check_required_use(
205 - required_use, (), pkg.iuse.is_valid_flag, eapi=eapi)
206 - except portage.exception.InvalidDependString as e:
207 - qatracker.add_error("REQUIRED_USE.syntax",
208 - "%s: REQUIRED_USE: %s" % (ebuild.relative_path, e))
209 - del e
210
211 # Syntax Checks