1 |
Author: zmedico |
2 |
Date: 2008-10-28 09:07:39 +0000 (Tue, 28 Oct 2008) |
3 |
New Revision: 11732 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/_emerge/__init__.py |
7 |
main/trunk/pym/portage/sets/__init__.py |
8 |
Log: |
9 |
Make SetConfig.getSetAtoms() raise a PackageSetNotFound exception when |
10 |
necessary and add handling code in emerge. This solves an unhandled |
11 |
KeyError that was raise when a nested set did not exist. Thanks to |
12 |
ABCD for reporting. |
13 |
|
14 |
|
15 |
Modified: main/trunk/pym/_emerge/__init__.py |
16 |
=================================================================== |
17 |
--- main/trunk/pym/_emerge/__init__.py 2008-10-28 05:30:33 UTC (rev 11731) |
18 |
+++ main/trunk/pym/_emerge/__init__.py 2008-10-28 09:07:39 UTC (rev 11732) |
19 |
@@ -13698,15 +13698,22 @@ |
20 |
display_missing_pkg_set(root_config, s) |
21 |
return (None, 1) |
22 |
setconfig.active.append(s) |
23 |
+ try: |
24 |
+ set_atoms = setconfig.getSetAtoms(s) |
25 |
+ except portage.exception.PackageSetNotFound, e: |
26 |
+ writemsg_level(("emerge: the given set '%s' " + \ |
27 |
+ "contains a non-existent set named '%s'.\n") % \ |
28 |
+ (s, e), level=logging.ERROR, noiselevel=-1) |
29 |
+ return (None, 1) |
30 |
if myaction in unmerge_actions and \ |
31 |
not sets[s].supportsOperation("unmerge"): |
32 |
sys.stderr.write("emerge: the given set '%s' does " % s + \ |
33 |
"not support unmerge operations\n") |
34 |
retval = 1 |
35 |
- elif not setconfig.getSetAtoms(s): |
36 |
+ elif not set_atoms: |
37 |
print "emerge: '%s' is an empty set" % s |
38 |
elif myaction not in do_not_expand: |
39 |
- newargs.extend(setconfig.getSetAtoms(s)) |
40 |
+ newargs.extend(set_atoms) |
41 |
else: |
42 |
newargs.append(SETPREFIX+s) |
43 |
for e in sets[s].errors: |
44 |
|
45 |
Modified: main/trunk/pym/portage/sets/__init__.py |
46 |
=================================================================== |
47 |
--- main/trunk/pym/portage/sets/__init__.py 2008-10-28 05:30:33 UTC (rev 11731) |
48 |
+++ main/trunk/pym/portage/sets/__init__.py 2008-10-28 09:07:39 UTC (rev 11732) |
49 |
@@ -2,10 +2,14 @@ |
50 |
# Distributed under the terms of the GNU General Public License v2 |
51 |
# $Id$ |
52 |
|
53 |
+__all__ = ["SETPREFIX", "get_boolean", "SetConfigError", |
54 |
+ "SetConfig", "load_default_config"] |
55 |
+ |
56 |
import os |
57 |
from ConfigParser import SafeConfigParser, NoOptionError |
58 |
from portage import load_mod |
59 |
from portage.const import USER_CONFIG_PATH, GLOBAL_CONFIG_PATH |
60 |
+from portage.exception import PackageSetNotFound |
61 |
|
62 |
SETPREFIX = "@" |
63 |
|
64 |
@@ -131,7 +135,13 @@ |
65 |
return self.psets.copy() |
66 |
|
67 |
def getSetAtoms(self, setname, ignorelist=None): |
68 |
- myset = self.getSets()[setname] |
69 |
+ """ |
70 |
+ This raises PackageSetNotFound if the give setname does not exist. |
71 |
+ """ |
72 |
+ try: |
73 |
+ myset = self.getSets()[setname] |
74 |
+ except KeyError: |
75 |
+ raise PackageSetNotFound(setname) |
76 |
myatoms = myset.getAtoms() |
77 |
parser = self._parser |
78 |
extend = set() |
79 |
@@ -150,8 +160,12 @@ |
80 |
|
81 |
ignorelist.add(setname) |
82 |
for n in myset.getNonAtoms(): |
83 |
- if n.startswith(SETPREFIX) and n[len(SETPREFIX):] in self.psets: |
84 |
- extend.add(n[len(SETPREFIX):]) |
85 |
+ if n.startswith(SETPREFIX): |
86 |
+ s = n[len(SETPREFIX):] |
87 |
+ if s in self.psets: |
88 |
+ extend.add(n[len(SETPREFIX):]) |
89 |
+ else: |
90 |
+ raise PackageSetNotFound(s) |
91 |
|
92 |
for s in ignorelist: |
93 |
extend.discard(s) |