Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r14462 - main/trunk/pym/_emerge
Date: Tue, 29 Sep 2009 19:35:08
Message-Id: E1MsiTa-00086f-Dh@stork.gentoo.org
1 Author: zmedico
2 Date: 2009-09-29 19:35:05 +0000 (Tue, 29 Sep 2009)
3 New Revision: 14462
4
5 Modified:
6 main/trunk/pym/_emerge/Package.py
7 Log:
8 Add back _PackageMetadataWrapper__setitem__, removed in r14280, since removing
9 it seems to cause problems. Thanks to Jeremy Olexa <darkside@g.o> for
10 reporting, and Marat Radchenko <marat@××××××××××××.org> for bisecting to find
11 the revision.
12
13
14 Modified: main/trunk/pym/_emerge/Package.py
15 ===================================================================
16 --- main/trunk/pym/_emerge/Package.py 2009-09-29 06:04:42 UTC (rev 14461)
17 +++ main/trunk/pym/_emerge/Package.py 2009-09-29 19:35:05 UTC (rev 14462)
18 @@ -162,46 +162,42 @@
19 """
20
21 __slots__ = ("_pkg",)
22 + _wrapped_keys = frozenset(
23 + ["COUNTER", "INHERITED", "IUSE", "SLOT", "_mtime_"])
24 _use_conditional_keys = frozenset(
25 ['LICENSE', 'PROPERTIES', 'PROVIDE', 'RESTRICT',])
26
27 def __init__(self, pkg, metadata):
28 + dict.__init__(self)
29 self._pkg = pkg
30 if not pkg.built:
31 # USE is lazy, but we want it to show up in self.keys().
32 self['USE'] = ''
33 +
34 self.update(metadata)
35 - for k, v in self.items():
36 - if k == 'INHERITED':
37 - if isinstance(v, basestring):
38 - v = frozenset(v.split())
39 - self._pkg.inherited = v
40 - elif k == 'SLOT':
41 - self._pkg.slot = v
42 - elif k == 'IUSE':
43 - self._pkg.iuse = self._pkg._iuse(
44 - v.split(), self._pkg.root_config.iuse_implicit)
45 - elif k == 'COUNTER':
46 - if isinstance(v, basestring):
47 - try:
48 - v = long(v.strip())
49 - except ValueError:
50 - v = 0
51 - self['COUNTER'] = str(v)
52 - self._pkg.counter = v
53 - elif k == '_mtime_':
54 - if isinstance(v, basestring):
55 - try:
56 - v = long(v.strip())
57 - except ValueError:
58 - v = 0
59 - self._pkg.mtime = v
60 - elif k in self._use_conditional_keys:
61 - try:
62 - use_reduce(paren_reduce(v), matchall=1)
63 - except portage.exception.InvalidDependString as e:
64 - self._pkg._invalid_metadata(k + ".syntax", "%s: %s" % (k, e))
65
66 + def update(self, *args, **kwargs):
67 + """dict.update() bypasses __setitem__, so override it."""
68 + if len(args) > 1:
69 + raise TypeError(
70 + "expected at most 1 positional argument, got " + \
71 + repr(len(args)))
72 +
73 + other = None
74 + if args:
75 + other = args[0]
76 +
77 + if other is not None:
78 + try:
79 + i = other.items()
80 + except AttributeError:
81 + i = other
82 + for k, v in i:
83 + self[k] = v
84 +
85 + if kwargs:
86 + self.update(kwargs)
87 +
88 def __getitem__(self, k):
89 v = dict.__getitem__(self, k)
90 if k in self._use_conditional_keys:
91 @@ -227,6 +223,44 @@
92
93 return v
94
95 + def __setitem__(self, k, v):
96 + dict.__setitem__(self, k, v)
97 + if k in self._wrapped_keys:
98 + getattr(self, "_set_" + k.lower())(k, v)
99 + elif k in self._use_conditional_keys:
100 + try:
101 + use_reduce(paren_reduce(v), matchall=1)
102 + except portage.exception.InvalidDependString, e:
103 + self._pkg._invalid_metadata(k + ".syntax", "%s: %s" % (k, e))
104 +
105 + def _set_inherited(self, k, v):
106 + if isinstance(v, basestring):
107 + v = frozenset(v.split())
108 + self._pkg.inherited = v
109 +
110 + def _set_iuse(self, k, v):
111 + self._pkg.iuse = self._pkg._iuse(
112 + v.split(), self._pkg.root_config.iuse_implicit)
113 +
114 + def _set_slot(self, k, v):
115 + self._pkg.slot = v
116 +
117 + def _set_counter(self, k, v):
118 + if isinstance(v, basestring):
119 + try:
120 + v = long(v.strip())
121 + except ValueError:
122 + v = 0
123 + self._pkg.counter = v
124 +
125 + def _set__mtime_(self, k, v):
126 + if isinstance(v, basestring):
127 + try:
128 + v = long(v.strip())
129 + except ValueError:
130 + v = 0
131 + self._pkg.mtime = v
132 +
133 @property
134 def properties(self):
135 return self['PROPERTIES'].split()