1 |
Author: zmedico |
2 |
Date: 2010-02-28 04:09:59 +0000 (Sun, 28 Feb 2010) |
3 |
New Revision: 15490 |
4 |
|
5 |
Added: |
6 |
main/trunk/pym/portage/util/mtimedb.py |
7 |
Modified: |
8 |
main/trunk/pym/portage/__init__.py |
9 |
main/trunk/pym/portage/_deprecated.py |
10 |
Log: |
11 |
Move the MtimeDB class to portage.util.mtimedb and deprecate the commit_mtimedb |
12 |
function. |
13 |
|
14 |
|
15 |
Modified: main/trunk/pym/portage/__init__.py |
16 |
=================================================================== |
17 |
--- main/trunk/pym/portage/__init__.py 2010-02-28 03:42:22 UTC (rev 15489) |
18 |
+++ main/trunk/pym/portage/__init__.py 2010-02-28 04:09:59 UTC (rev 15490) |
19 |
@@ -131,12 +131,14 @@ |
20 |
'portage.util.ExtractKernelVersion:ExtractKernelVersion', |
21 |
'portage.util.listdir:cacheddir,listdir', |
22 |
'portage.util.movefile:movefile', |
23 |
+ 'portage.util.mtimedb:MtimeDB', |
24 |
'portage.versions', |
25 |
'portage.versions:best,catpkgsplit,catsplit,cpv_getkey,' + \ |
26 |
'cpv_getkey@getCPFromCPV,endversion_keys,' + \ |
27 |
'suffix_value@endversion,pkgcmp,pkgsplit,vercmp,ververify', |
28 |
'portage.xpak', |
29 |
- 'portage._deprecated:dep_virtual,digestParseFile,getvirtuals,pkgmerge', |
30 |
+ 'portage._deprecated:commit_mtimedb,dep_virtual,' + \ |
31 |
+ 'digestParseFile,getvirtuals,pkgmerge', |
32 |
) |
33 |
|
34 |
import portage.const |
35 |
@@ -535,92 +537,18 @@ |
36 |
writemsg("\n\n", noiselevel=-1) |
37 |
return True |
38 |
|
39 |
-def commit_mtimedb(mydict=None, filename=None): |
40 |
- if mydict is None: |
41 |
- global mtimedb |
42 |
- if "mtimedb" not in globals() or mtimedb is None: |
43 |
- return |
44 |
- mtimedb.commit() |
45 |
- return |
46 |
- if filename is None: |
47 |
- global mtimedbfile |
48 |
- filename = mtimedbfile |
49 |
- mydict["version"] = VERSION |
50 |
- d = {} # for full backward compat, pickle it as a plain dict object. |
51 |
- d.update(mydict) |
52 |
- try: |
53 |
- f = atomic_ofstream(filename, mode='wb') |
54 |
- pickle.dump(d, f, protocol=2) |
55 |
- f.close() |
56 |
- portage.util.apply_secpass_permissions(filename, |
57 |
- uid=uid, gid=portage_gid, mode=0o644) |
58 |
- except (IOError, OSError) as e: |
59 |
- pass |
60 |
- |
61 |
def portageexit(): |
62 |
- global uid,portage_gid,portdb,db |
63 |
- if secpass and os.environ.get("SANDBOX_ON") != "1": |
64 |
+ if secpass > 1 and os.environ.get("SANDBOX_ON") != "1": |
65 |
close_portdbapi_caches() |
66 |
- commit_mtimedb() |
67 |
+ try: |
68 |
+ mtimedb |
69 |
+ except NameError: |
70 |
+ pass |
71 |
+ else: |
72 |
+ mtimedb.commit() |
73 |
|
74 |
atexit_register(portageexit) |
75 |
|
76 |
-class MtimeDB(dict): |
77 |
- def __init__(self, filename): |
78 |
- dict.__init__(self) |
79 |
- self.filename = filename |
80 |
- self._load(filename) |
81 |
- |
82 |
- def _load(self, filename): |
83 |
- try: |
84 |
- f = open(_unicode_encode(filename), 'rb') |
85 |
- mypickle = pickle.Unpickler(f) |
86 |
- try: |
87 |
- mypickle.find_global = None |
88 |
- except AttributeError: |
89 |
- # TODO: If py3k, override Unpickler.find_class(). |
90 |
- pass |
91 |
- d = mypickle.load() |
92 |
- f.close() |
93 |
- del f |
94 |
- except (IOError, OSError, EOFError, ValueError, pickle.UnpicklingError) as e: |
95 |
- if isinstance(e, pickle.UnpicklingError): |
96 |
- writemsg(_("!!! Error loading '%s': %s\n") % \ |
97 |
- (filename, str(e)), noiselevel=-1) |
98 |
- del e |
99 |
- d = {} |
100 |
- |
101 |
- if "old" in d: |
102 |
- d["updates"] = d["old"] |
103 |
- del d["old"] |
104 |
- if "cur" in d: |
105 |
- del d["cur"] |
106 |
- |
107 |
- d.setdefault("starttime", 0) |
108 |
- d.setdefault("version", "") |
109 |
- for k in ("info", "ldpath", "updates"): |
110 |
- d.setdefault(k, {}) |
111 |
- |
112 |
- mtimedbkeys = set(("info", "ldpath", "resume", "resume_backup", |
113 |
- "starttime", "updates", "version")) |
114 |
- |
115 |
- for k in list(d): |
116 |
- if k not in mtimedbkeys: |
117 |
- writemsg(_("Deleting invalid mtimedb key: %s\n") % str(k)) |
118 |
- del d[k] |
119 |
- self.update(d) |
120 |
- self._clean_data = copy.deepcopy(d) |
121 |
- |
122 |
- def commit(self): |
123 |
- if not self.filename: |
124 |
- return |
125 |
- d = {} |
126 |
- d.update(self) |
127 |
- # Only commit if the internal state has changed. |
128 |
- if d != self._clean_data: |
129 |
- commit_mtimedb(mydict=d, filename=self.filename) |
130 |
- self._clean_data = copy.deepcopy(d) |
131 |
- |
132 |
def create_trees(config_root=None, target_root=None, trees=None): |
133 |
if trees is None: |
134 |
trees = {} |
135 |
|
136 |
Modified: main/trunk/pym/portage/_deprecated.py |
137 |
=================================================================== |
138 |
--- main/trunk/pym/portage/_deprecated.py 2010-02-28 03:42:22 UTC (rev 15489) |
139 |
+++ main/trunk/pym/portage/_deprecated.py 2010-02-28 04:09:59 UTC (rev 15490) |
140 |
@@ -16,6 +16,11 @@ |
141 |
from portage.manifest import Manifest |
142 |
from portage.util import writemsg, writemsg_stdout |
143 |
|
144 |
+def commit_mtimedb(mydict=None, filename=None): |
145 |
+ warnings.warn("portage.commit_mtimedb() is deprecated, " + \ |
146 |
+ "use portage.mtimedb.commit() instead", |
147 |
+ DeprecationWarning, stacklevel=2) |
148 |
+ |
149 |
def digestParseFile(myfilename, mysettings=None): |
150 |
"""(filename) -- Parses a given file for entries matching: |
151 |
<checksumkey> <checksum_hex_string> <filename> <filesize> |
152 |
|
153 |
Added: main/trunk/pym/portage/util/mtimedb.py |
154 |
=================================================================== |
155 |
--- main/trunk/pym/portage/util/mtimedb.py (rev 0) |
156 |
+++ main/trunk/pym/portage/util/mtimedb.py 2010-02-28 04:09:59 UTC (rev 15490) |
157 |
@@ -0,0 +1,77 @@ |
158 |
+# Copyright 2010 Gentoo Foundation |
159 |
+# Distributed under the terms of the GNU General Public License v2 |
160 |
+# $Id$ |
161 |
+ |
162 |
+__all__ = ['MtimeDB'] |
163 |
+ |
164 |
+import copy |
165 |
+ |
166 |
+from portage import pickle, VERSION, _unicode_encode |
167 |
+from portage.data import portage_gid, uid |
168 |
+from portage.localization import _ |
169 |
+from portage.util import apply_secpass_permissions, atomic_ofstream, writemsg |
170 |
+ |
171 |
+class MtimeDB(dict): |
172 |
+ def __init__(self, filename): |
173 |
+ dict.__init__(self) |
174 |
+ self.filename = filename |
175 |
+ self._load(filename) |
176 |
+ |
177 |
+ def _load(self, filename): |
178 |
+ try: |
179 |
+ f = open(_unicode_encode(filename), 'rb') |
180 |
+ mypickle = pickle.Unpickler(f) |
181 |
+ try: |
182 |
+ mypickle.find_global = None |
183 |
+ except AttributeError: |
184 |
+ # TODO: If py3k, override Unpickler.find_class(). |
185 |
+ pass |
186 |
+ d = mypickle.load() |
187 |
+ f.close() |
188 |
+ del f |
189 |
+ except (IOError, OSError, EOFError, ValueError, pickle.UnpicklingError) as e: |
190 |
+ if isinstance(e, pickle.UnpicklingError): |
191 |
+ writemsg(_("!!! Error loading '%s': %s\n") % \ |
192 |
+ (filename, str(e)), noiselevel=-1) |
193 |
+ del e |
194 |
+ d = {} |
195 |
+ |
196 |
+ if "old" in d: |
197 |
+ d["updates"] = d["old"] |
198 |
+ del d["old"] |
199 |
+ if "cur" in d: |
200 |
+ del d["cur"] |
201 |
+ |
202 |
+ d.setdefault("starttime", 0) |
203 |
+ d.setdefault("version", "") |
204 |
+ for k in ("info", "ldpath", "updates"): |
205 |
+ d.setdefault(k, {}) |
206 |
+ |
207 |
+ mtimedbkeys = set(("info", "ldpath", "resume", "resume_backup", |
208 |
+ "starttime", "updates", "version")) |
209 |
+ |
210 |
+ for k in list(d): |
211 |
+ if k not in mtimedbkeys: |
212 |
+ writemsg(_("Deleting invalid mtimedb key: %s\n") % str(k)) |
213 |
+ del d[k] |
214 |
+ self.update(d) |
215 |
+ self._clean_data = copy.deepcopy(d) |
216 |
+ |
217 |
+ def commit(self): |
218 |
+ if not self.filename: |
219 |
+ return |
220 |
+ d = {} |
221 |
+ d.update(self) |
222 |
+ # Only commit if the internal state has changed. |
223 |
+ if d != self._clean_data: |
224 |
+ d["version"] = VERSION |
225 |
+ try: |
226 |
+ f = atomic_ofstream(self.filename, mode='wb') |
227 |
+ except EnvironmentError: |
228 |
+ pass |
229 |
+ else: |
230 |
+ pickle.dump(d, f, protocol=2) |
231 |
+ f.close() |
232 |
+ apply_secpass_permissions(self.filename, |
233 |
+ uid=uid, gid=portage_gid, mode=0o644) |
234 |
+ self._clean_data = copy.deepcopy(d) |
235 |
|
236 |
|
237 |
Property changes on: main/trunk/pym/portage/util/mtimedb.py |
238 |
___________________________________________________________________ |
239 |
Added: svn:keywords |
240 |
+ Id |