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: |