Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r12410 - in main/trunk: man pym/portage
Date: Sat, 10 Jan 2009 08:40:38
Message-Id: E1LLZOW-0004aF-IV@stork.gentoo.org
1 Author: zmedico
2 Date: 2009-01-10 08:40:35 +0000 (Sat, 10 Jan 2009)
3 New Revision: 12410
4
5 Modified:
6 main/trunk/man/portage.5
7 main/trunk/pym/portage/__init__.py
8 Log:
9 Bug #55321 - Add support for package.keywords in profiles. In profiles,
10 package.keywords modifies effective KEYWORDS values for a given ebuild. This
11 behavior is notably different from /etc/portage/package.keywords, which
12 instead modifies effective ACCEPT_KEYWORDS.
13
14
15 Modified: main/trunk/man/portage.5
16 ===================================================================
17 --- main/trunk/man/portage.5 2009-01-10 07:24:46 UTC (rev 12409)
18 +++ main/trunk/man/portage.5 2009-01-10 08:40:35 UTC (rev 12410)
19 @@ -29,6 +29,7 @@
20 make.defaults
21 packages
22 packages.build
23 +package.keywords
24 package.mask
25 package.provided
26 package.unmask
27 @@ -585,6 +586,26 @@
28 .BR info_vars
29 A list of all the variables which will be displayed when you run `emerge info`.
30 .TP
31 +.BR package.keywords
32 +Per\-profile KEYWORDS. Useful for cases in which the effective KEYWORDS of a
33 +given package should vary depending on which profile the user has selected.
34 +
35 +.I Format:
36 +.nf
37 +\- comment lines begin with # (no inline comments)
38 +\- one DEPEND atom per line followed by additional KEYWORDS
39 +.fi
40 +
41 +.I Example:
42 +.nf
43 +# add stable keyword to libgd
44 +media\-libs/libgd x86
45 +# remove stable keyword from mplayer and add unstable keyword
46 +media\-video/mplayer \-x86 ~x86
47 +# remove all keywords from netcat
48 +net-analyzer/netcat -*
49 +.fi
50 +.TP
51 .BR package.mask
52 This contains a list of DEPEND atoms for packages that should not be installed
53 in any profile. Useful for adding the latest KDE betas and making sure no
54
55 Modified: main/trunk/pym/portage/__init__.py
56 ===================================================================
57 --- main/trunk/pym/portage/__init__.py 2009-01-10 07:24:46 UTC (rev 12409)
58 +++ main/trunk/pym/portage/__init__.py 2009-01-10 08:40:35 UTC (rev 12410)
59 @@ -1132,6 +1132,7 @@
60 self.pusedict = copy.deepcopy(clone.pusedict)
61 self.categories = copy.deepcopy(clone.categories)
62 self.pkeywordsdict = copy.deepcopy(clone.pkeywordsdict)
63 + self._pkeywords_list = copy.deepcopy(clone._pkeywords_list)
64 self.pmaskdict = copy.deepcopy(clone.pmaskdict)
65 self.punmaskdict = copy.deepcopy(clone.punmaskdict)
66 self.prevmaskdict = copy.deepcopy(clone.prevmaskdict)
67 @@ -1261,6 +1262,16 @@
68 else:
69 self.prevmaskdict[mycatpkg].append(x)
70
71 + self._pkeywords_list = []
72 + rawpkeywords = [grabdict_package(
73 + os.path.join(x, "package.keywords")) \
74 + for x in self.profiles]
75 + for i in xrange(len(self.profiles)):
76 + cpdict = {}
77 + for k, v in rawpkeywords[i].iteritems():
78 + cpdict.setdefault(dep_getkey(k), {})[k] = v
79 + self._pkeywords_list.append(cpdict)
80 +
81 # get profile-masked use flags -- INCREMENTAL Child over parent
82 self.usemask_list = [grabfile(os.path.join(x, "use.mask")) \
83 for x in self.profiles]
84 @@ -2240,6 +2251,25 @@
85 return x
86 return None
87
88 + def _getKeywords(self, cpv, metadata):
89 + cp = dep_getkey(cpv)
90 + pkg = "%s:%s" % (cpv, metadata["SLOT"])
91 + keywords = metadata["KEYWORDS"].split()
92 + pos = len(keywords)
93 + for i in xrange(len(self.profiles)):
94 + cpdict = self._pkeywords_list[i].get(cp, None)
95 + if cpdict:
96 + keys = list(cpdict)
97 + while keys:
98 + best_match = best_match_to_list(pkg, keys)
99 + if best_match:
100 + keys.remove(best_match)
101 + keywords.insert(pos, cpdict[best_match])
102 + else:
103 + break
104 + pos = len(keywords)
105 + return stack_lists(keywords, incremental=True)
106 +
107 def _getMissingKeywords(self, cpv, metadata):
108 """
109 Take a package and return a list of any KEYWORDS that the user may
110 @@ -2261,7 +2291,7 @@
111 # object (bug #139600)
112 egroups = self.configdict["backupenv"].get(
113 "ACCEPT_KEYWORDS", "").split()
114 - mygroups = metadata["KEYWORDS"].split()
115 + mygroups = self._getKeywords(cpv, metadata)
116 # Repoman may modify this attribute as necessary.
117 pgroups = self["ACCEPT_KEYWORDS"].split()
118 match=0
119 @@ -6963,7 +6993,7 @@
120
121 # keywords checking
122 eapi = metadata["EAPI"]
123 - mygroups = metadata["KEYWORDS"]
124 + mygroups = settings._getKeywords(mycpv, metadata)
125 licenses = metadata["LICENSE"]
126 slot = metadata["SLOT"]
127 if eapi.startswith("-"):
128 @@ -6974,7 +7004,6 @@
129 return ["EAPI %s" % eapi]
130 egroups = settings.configdict["backupenv"].get(
131 "ACCEPT_KEYWORDS", "").split()
132 - mygroups = mygroups.split()
133 pgroups = settings["ACCEPT_KEYWORDS"].split()
134 myarch = settings["ARCH"]
135 if pgroups and myarch not in pgroups: