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/checks/ebuilds/, pym/repoman/
Date: Wed, 01 Oct 2014 23:46:50
Message-Id: 1412207134.c1446992fe4f537c0310a994e5d47dd7a80b2075.dol-sen@gentoo
1 commit: c1446992fe4f537c0310a994e5d47dd7a80b2075
2 Author: Tom Wijsman <tomwij <AT> gentoo <DOT> org>
3 AuthorDate: Wed Jun 4 14:17:49 2014 +0000
4 Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
5 CommitDate: Wed Oct 1 23:45:34 2014 +0000
6 URL: http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=c1446992
7
8 repoman/main.py: More KEYWORDS checks to checks/ebuilds/keywords.py
9
10 ---
11 pym/repoman/checks/ebuilds/keywords.py | 64 ++++++++++++++++++++++++++++++----
12 pym/repoman/main.py | 32 +----------------
13 2 files changed, 59 insertions(+), 37 deletions(-)
14
15 diff --git a/pym/repoman/checks/ebuilds/keywords.py b/pym/repoman/checks/ebuilds/keywords.py
16 index 29de0db..bec7a1d 100644
17 --- a/pym/repoman/checks/ebuilds/keywords.py
18 +++ b/pym/repoman/checks/ebuilds/keywords.py
19 @@ -20,7 +20,7 @@ class KeywordChecks(object):
20
21 def check(
22 self, pkg, package, ebuild, y_ebuild, keywords, ebuild_archs, changed,
23 - live_ebuild):
24 + live_ebuild, kwlist, profiles):
25 '''Perform the check.
26
27 @param pkg: Package in which we check (object).
28 @@ -32,20 +32,31 @@ class KeywordChecks(object):
29 @param changed: Changes instance
30 @param slot_keywords: A dictionary of keywords per slot.
31 @param live_ebuild: A boolean that determines if this is a live ebuild.
32 + @param kwlist: A list of all global keywords.
33 + @param profiles: A list of all profiles.
34 '''
35 self._checkAddedWithStableKeywords(
36 package, ebuild, y_ebuild, keywords, changed)
37 +
38 self._checkForDroppedKeywords(
39 pkg, ebuild, ebuild_archs, live_ebuild)
40
41 + self._checkForInvalidKeywords(
42 + pkg, package, y_ebuild, kwlist, profiles)
43 +
44 + self._checkForMaskLikeKeywords(
45 + package, y_ebuild, keywords, kwlist)
46 +
47 self.slot_keywords[pkg.slot].update(ebuild_archs)
48
49 + def _isKeywordStable(self, keyword):
50 + return not keyword.startswith("~") and not keyword.startswith("-")
51 +
52 def _checkAddedWithStableKeywords(
53 self, package, ebuild, y_ebuild, keywords, changed):
54 catdir, pkgdir = package.split("/")
55
56 - is_stable = lambda kw: not kw.startswith("~") and not kw.startswith("-")
57 - stable_keywords = list(filter(is_stable, keywords))
58 + stable_keywords = list(filter(self._isKeywordStable, keywords))
59 if stable_keywords:
60 if ebuild.ebuild_path in changed.new_ebuilds and catdir != "virtual":
61 stable_keywords.sort()
62 @@ -62,6 +73,47 @@ class KeywordChecks(object):
63 elif ebuild_archs and "*" not in ebuild_archs and not live_ebuild:
64 dropped_keywords = previous_keywords.difference(ebuild_archs)
65 if dropped_keywords:
66 - self.qatracker.add_error("KEYWORDS.dropped",
67 - "%s: %s" %
68 - (ebuild.relative_path, " ".join(sorted(dropped_keywords))))
69 \ No newline at end of file
70 + self.qatracker.add_error(
71 + "KEYWORDS.dropped", "%s: %s" % (
72 + ebuild.relative_path,
73 + " ".join(sorted(dropped_keywords))))
74 +
75 + def _checkForInvalidKeywords(
76 + self, pkg, package, y_ebuild, kwlist, profiles):
77 + myuse = pkg._metadata["KEYWORDS"].split()
78 +
79 + for mykey in myuse:
80 + if mykey not in ("-*", "*", "~*"):
81 + myskey = mykey
82 +
83 + if not self._isKeywordStable(myskey[:1]):
84 + myskey = myskey[1:]
85 +
86 + if myskey not in kwlist:
87 + self.qatracker.add_error(
88 + "KEYWORDS.invalid",
89 + "%s/%s.ebuild: %s" % (
90 + package, y_ebuild, mykey))
91 + elif myskey not in profiles:
92 + self.qatracker.add_error(
93 + "KEYWORDS.invalid",
94 + "%s/%s.ebuild: %s (profile invalid)" % (
95 + package, y_ebuild, mykey))
96 +
97 + def _checkForMaskLikeKeywords(
98 + self, package, y_ebuild, keywords, kwlist):
99 +
100 + # KEYWORDS="-*" is a stupid replacement for package.mask
101 + # and screws general KEYWORDS semantics
102 + if "-*" in keywords:
103 + haskeyword = False
104 +
105 + for kw in keywords:
106 + if kw[0] == "~":
107 + kw = kw[1:]
108 + if kw in kwlist:
109 + haskeyword = True
110 +
111 + if not haskeyword:
112 + self.qatracker.add_error(
113 + "KEYWORDS.stupid", package + "/" + y_ebuild + ".ebuild")
114
115 diff --git a/pym/repoman/main.py b/pym/repoman/main.py
116 index 1107c63..e338d82 100755
117 --- a/pym/repoman/main.py
118 +++ b/pym/repoman/main.py
119 @@ -442,22 +442,9 @@ for xpkg in effective_scanlist:
120 #######################
121 keywordcheck.check(
122 pkg, xpkg, ebuild, y_ebuild, keywords, ebuild_archs, changed,
123 - live_ebuild)
124 + live_ebuild, kwlist, profiles)
125 #######################
126
127 - # KEYWORDS="-*" is a stupid replacement for package.mask
128 - # and screws general KEYWORDS semantics
129 - if "-*" in keywords:
130 - haskeyword = False
131 - for kw in keywords:
132 - if kw[0] == "~":
133 - kw = kw[1:]
134 - if kw in kwlist:
135 - haskeyword = True
136 - if not haskeyword:
137 - qatracker.add_error("KEYWORDS.stupid",
138 - xpkg + "/" + y_ebuild + ".ebuild")
139 -
140 if live_ebuild and repo_settings.repo_config.name == "gentoo":
141 #######################
142 liveeclasscheck.check(
143 @@ -631,23 +618,6 @@ for xpkg in effective_scanlist:
144 qatracker.add_error("LICENSE.deprecated",
145 "%s: %s" % (ebuild.relative_path, lic))
146
147 - # keyword checks
148 - myuse = myaux["KEYWORDS"].split()
149 - for mykey in myuse:
150 - if mykey not in ("-*", "*", "~*"):
151 - myskey = mykey
152 - if myskey[:1] == "-":
153 - myskey = myskey[1:]
154 - if myskey[:1] == "~":
155 - myskey = myskey[1:]
156 - if myskey not in kwlist:
157 - qatracker.add_error("KEYWORDS.invalid",
158 - "%s/%s.ebuild: %s" % (xpkg, y_ebuild, mykey))
159 - elif myskey not in profiles:
160 - qatracker.add_error("KEYWORDS.invalid",
161 - "%s/%s.ebuild: %s (profile invalid)"
162 - % (xpkg, y_ebuild, mykey))
163 -
164 # restrict checks
165 myrestrict = None
166 try: