1 |
Author: zmedico |
2 |
Date: 2008-06-26 00:49:10 +0000 (Thu, 26 Jun 2008) |
3 |
New Revision: 10797 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/portage/cache/mappings.py |
7 |
main/trunk/pym/portage/dbapi/bintree.py |
8 |
main/trunk/pym/portage/getbinpkg.py |
9 |
Log: |
10 |
Make PackageIndex use SlotDict for package metadata storage. The set of |
11 |
allowed keys is passed into the PackageIndex constructor (normal dict |
12 |
instances will be used if the set of keys is not passed in for some |
13 |
reason). A SlotDict.allowed_keys attribute now provides access to a |
14 |
frozenset of allowed keys. |
15 |
|
16 |
|
17 |
Modified: main/trunk/pym/portage/cache/mappings.py |
18 |
=================================================================== |
19 |
--- main/trunk/pym/portage/cache/mappings.py 2008-06-25 23:10:28 UTC (rev 10796) |
20 |
+++ main/trunk/pym/portage/cache/mappings.py 2008-06-26 00:49:10 UTC (rev 10797) |
21 |
@@ -125,8 +125,9 @@ |
22 |
|
23 |
class SlotDict(object): |
24 |
|
25 |
- _keys = keys_set |
26 |
- __slots__ = ("__weakref__",) + tuple("_val_" + k for k in _keys) |
27 |
+ allowed_keys = keys_set |
28 |
+ __slots__ = ("__weakref__",) + \ |
29 |
+ tuple("_val_" + k for k in allowed_keys) |
30 |
|
31 |
def __iter__(self): |
32 |
for k, v in self.iteritems(): |
33 |
@@ -142,7 +143,7 @@ |
34 |
return list(self) |
35 |
|
36 |
def iteritems(self): |
37 |
- for k in self._keys: |
38 |
+ for k in self.allowed_keys: |
39 |
try: |
40 |
yield (k, getattr(self, "_val_" + k)) |
41 |
except AttributeError: |
42 |
@@ -229,12 +230,12 @@ |
43 |
return c |
44 |
|
45 |
def clear(self): |
46 |
- for k in self._keys: |
47 |
+ for k in self.allowed_keys: |
48 |
try: |
49 |
delattr(self, "_val_" + k) |
50 |
except AttributeError: |
51 |
pass |
52 |
|
53 |
v = SlotDict |
54 |
- _slot_dict_classes[keys_set] = v |
55 |
+ _slot_dict_classes[v.allowed_keys] = v |
56 |
return v |
57 |
|
58 |
Modified: main/trunk/pym/portage/dbapi/bintree.py |
59 |
=================================================================== |
60 |
--- main/trunk/pym/portage/dbapi/bintree.py 2008-06-25 23:10:28 UTC (rev 10796) |
61 |
+++ main/trunk/pym/portage/dbapi/bintree.py 2008-06-26 00:49:10 UTC (rev 10797) |
62 |
@@ -18,7 +18,7 @@ |
63 |
|
64 |
import os, errno, stat |
65 |
import re |
66 |
-from itertools import izip |
67 |
+from itertools import chain, izip |
68 |
|
69 |
class bindbapi(fakedbapi): |
70 |
_known_keys = frozenset(list(fakedbapi._known_keys) + \ |
71 |
@@ -182,6 +182,16 @@ |
72 |
("repository" , "REPO"), |
73 |
) |
74 |
|
75 |
+ self._pkgindex_allowed_pkg_keys = set(chain( |
76 |
+ self._pkgindex_keys, |
77 |
+ self._pkgindex_aux_keys, |
78 |
+ self._pkgindex_hashes, |
79 |
+ self._pkgindex_default_pkg_data, |
80 |
+ self._pkgindex_inherited_keys, |
81 |
+ self._pkgindex_default_header_data, |
82 |
+ chain(*self._pkgindex_translated_keys) |
83 |
+ )) |
84 |
+ |
85 |
def move_ent(self, mylist): |
86 |
if not self.populated: |
87 |
self.populate() |
88 |
@@ -827,6 +837,7 @@ |
89 |
|
90 |
def _new_pkgindex(self): |
91 |
return portage.getbinpkg.PackageIndex( |
92 |
+ allowed_pkg_keys=self._pkgindex_allowed_pkg_keys, |
93 |
default_header_data=self._pkgindex_default_header_data, |
94 |
default_pkg_data=self._pkgindex_default_pkg_data, |
95 |
inherited_keys=self._pkgindex_inherited_keys, |
96 |
|
97 |
Modified: main/trunk/pym/portage/getbinpkg.py |
98 |
=================================================================== |
99 |
--- main/trunk/pym/portage/getbinpkg.py 2008-06-25 23:10:28 UTC (rev 10796) |
100 |
+++ main/trunk/pym/portage/getbinpkg.py 2008-06-26 00:49:10 UTC (rev 10797) |
101 |
@@ -4,6 +4,7 @@ |
102 |
# $Id$ |
103 |
|
104 |
from portage.output import red, yellow, green |
105 |
+from portage.cache.mappings import slot_dict_class |
106 |
import portage.xpak |
107 |
import HTMLParser |
108 |
import sys |
109 |
@@ -680,8 +681,17 @@ |
110 |
|
111 |
class PackageIndex(object): |
112 |
|
113 |
- def __init__(self, default_header_data=None, default_pkg_data=None, |
114 |
- inherited_keys=None, translated_keys=None): |
115 |
+ def __init__(self, |
116 |
+ allowed_pkg_keys=None, |
117 |
+ default_header_data=None, |
118 |
+ default_pkg_data=None, |
119 |
+ inherited_keys=None, |
120 |
+ translated_keys=None): |
121 |
+ |
122 |
+ self._pkg_slot_dict = None |
123 |
+ if allowed_pkg_keys is not None: |
124 |
+ self._pkg_slot_dict = slot_dict_class(allowed_pkg_keys) |
125 |
+ |
126 |
self._default_header_data = default_header_data |
127 |
self._default_pkg_data = default_pkg_data |
128 |
self._inherited_keys = inherited_keys |
129 |
@@ -696,8 +706,15 @@ |
130 |
self.packages = [] |
131 |
self.modified = True |
132 |
|
133 |
- def _readpkgindex(self, pkgfile): |
134 |
- d = {} |
135 |
+ def _readpkgindex(self, pkgfile, pkg_entry=True): |
136 |
+ |
137 |
+ allowed_keys = None |
138 |
+ if self._pkg_slot_dict is None or not pkg_entry: |
139 |
+ d = {} |
140 |
+ else: |
141 |
+ d = self._pkg_slot_dict() |
142 |
+ allowed_keys = d.allowed_keys |
143 |
+ |
144 |
for line in pkgfile: |
145 |
line = line.rstrip("\n") |
146 |
if not line: |
147 |
@@ -708,7 +725,11 @@ |
148 |
k, v = line |
149 |
if v: |
150 |
v = v[1:] |
151 |
- d[self._read_translation_map.get(k, k)] = v |
152 |
+ k = self._read_translation_map.get(k, k) |
153 |
+ if allowed_keys is not None and \ |
154 |
+ k not in allowed_keys: |
155 |
+ continue |
156 |
+ d[k] = v |
157 |
return d |
158 |
|
159 |
def _writepkgindex(self, pkgfile, items): |
160 |
@@ -722,7 +743,7 @@ |
161 |
self.readBody(pkgfile) |
162 |
|
163 |
def readHeader(self, pkgfile): |
164 |
- self.header.update(self._readpkgindex(pkgfile)) |
165 |
+ self.header.update(self._readpkgindex(pkgfile, pkg_entry=False)) |
166 |
|
167 |
def readBody(self, pkgfile): |
168 |
while True: |
169 |
|
170 |
-- |
171 |
gentoo-commits@l.g.o mailing list |