Gentoo Archives: gentoo-commits

From: Brian Dolbec <dolsen@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: pym/repoman/checks/ebuilds/, pym/repoman/
Date: Mon, 21 Sep 2015 23:51:26
Message-Id: 1442878964.1850a6ebe46abcee14fbf6d28901b186150c2a18.dolsen@gentoo
1 commit: 1850a6ebe46abcee14fbf6d28901b186150c2a18
2 Author: Tom Wijsman <tomwij <AT> gentoo <DOT> org>
3 AuthorDate: Wed Jun 4 14:17:49 2014 +0000
4 Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
5 CommitDate: Mon Sep 21 23:42:44 2015 +0000
6 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=1850a6eb
7
8 repoman/main.py: More KEYWORDS checks to checks/ebuilds/keywords.py
9
10 pym/repoman/checks/ebuilds/keywords.py | 64 ++++++++++++++++++++++++++++++----
11 pym/repoman/main.py | 32 +----------------
12 2 files changed, 59 insertions(+), 37 deletions(-)
13
14 diff --git a/pym/repoman/checks/ebuilds/keywords.py b/pym/repoman/checks/ebuilds/keywords.py
15 index b724269..235c751 100644
16 --- a/pym/repoman/checks/ebuilds/keywords.py
17 +++ b/pym/repoman/checks/ebuilds/keywords.py
18 @@ -21,7 +21,7 @@ class KeywordChecks(object):
19
20 def check(
21 self, pkg, package, ebuild, y_ebuild, keywords, ebuild_archs, changed,
22 - live_ebuild):
23 + live_ebuild, kwlist, profiles):
24 '''Perform the check.
25
26 @param pkg: Package in which we check (object).
27 @@ -33,21 +33,32 @@ class KeywordChecks(object):
28 @param changed: Changes instance
29 @param slot_keywords: A dictionary of keywords per slot.
30 @param live_ebuild: A boolean that determines if this is a live ebuild.
31 + @param kwlist: A list of all global keywords.
32 + @param profiles: A list of all profiles.
33 '''
34 if not self.options.straight_to_stable:
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 @@ -64,6 +75,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 + self.qatracker.add_error(
70 + "KEYWORDS.dropped", "%s: %s" % (
71 + ebuild.relative_path,
72 + " ".join(sorted(dropped_keywords))))
73 +
74 + def _checkForInvalidKeywords(
75 + self, pkg, package, y_ebuild, kwlist, profiles):
76 + myuse = pkg._metadata["KEYWORDS"].split()
77 +
78 + for mykey in myuse:
79 + if mykey not in ("-*", "*", "~*"):
80 + myskey = mykey
81 +
82 + if not self._isKeywordStable(myskey[:1]):
83 + myskey = myskey[1:]
84 +
85 + if myskey not in kwlist:
86 + self.qatracker.add_error(
87 + "KEYWORDS.invalid",
88 + "%s/%s.ebuild: %s" % (
89 + package, y_ebuild, mykey))
90 + elif myskey not in profiles:
91 + self.qatracker.add_error(
92 + "KEYWORDS.invalid",
93 + "%s/%s.ebuild: %s (profile invalid)" % (
94 + package, y_ebuild, mykey))
95 +
96 + def _checkForMaskLikeKeywords(
97 + self, package, y_ebuild, keywords, kwlist):
98 +
99 + # KEYWORDS="-*" is a stupid replacement for package.mask
100 + # and screws general KEYWORDS semantics
101 + if "-*" in keywords:
102 + haskeyword = False
103 +
104 + for kw in keywords:
105 + if kw[0] == "~":
106 + kw = kw[1:]
107 + if kw in kwlist:
108 + haskeyword = True
109 +
110 + if not haskeyword:
111 + self.qatracker.add_error(
112 + "KEYWORDS.stupid", package + "/" + y_ebuild + ".ebuild")
113
114 diff --git a/pym/repoman/main.py b/pym/repoman/main.py
115 index 4ded687..ea54ec4 100755
116 --- a/pym/repoman/main.py
117 +++ b/pym/repoman/main.py
118 @@ -445,22 +445,9 @@ for xpkg in effective_scanlist:
119 #######################
120 keywordcheck.check(
121 pkg, xpkg, ebuild, y_ebuild, keywords, ebuild_archs, changed,
122 - live_ebuild)
123 + live_ebuild, kwlist, profiles)
124 #######################
125
126 - # KEYWORDS="-*" is a stupid replacement for package.mask
127 - # and screws general KEYWORDS semantics
128 - if "-*" in keywords:
129 - haskeyword = False
130 - for kw in keywords:
131 - if kw[0] == "~":
132 - kw = kw[1:]
133 - if kw in kwlist:
134 - haskeyword = True
135 - if not haskeyword:
136 - qatracker.add_error("KEYWORDS.stupid",
137 - xpkg + "/" + y_ebuild + ".ebuild")
138 -
139 if live_ebuild and repo_settings.repo_config.name == "gentoo":
140 #######################
141 liveeclasscheck.check(
142 @@ -637,23 +624,6 @@ for xpkg in effective_scanlist:
143 qatracker.add_error("LICENSE.deprecated",
144 "%s: %s" % (ebuild.relative_path, lic))
145
146 - # keyword checks
147 - myuse = myaux["KEYWORDS"].split()
148 - for mykey in myuse:
149 - if mykey not in ("-*", "*", "~*"):
150 - myskey = mykey
151 - if myskey[:1] == "-":
152 - myskey = myskey[1:]
153 - if myskey[:1] == "~":
154 - myskey = myskey[1:]
155 - if myskey not in kwlist:
156 - qatracker.add_error("KEYWORDS.invalid",
157 - "%s/%s.ebuild: %s" % (xpkg, y_ebuild, mykey))
158 - elif myskey not in profiles:
159 - qatracker.add_error("KEYWORDS.invalid",
160 - "%s/%s.ebuild: %s (profile invalid)"
161 - % (xpkg, y_ebuild, mykey))
162 -
163 # restrict checks
164 myrestrict = None
165 try: