Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r15490 - in main/trunk/pym/portage: . util
Date: Sun, 28 Feb 2010 04:10:04
Message-Id: E1NlaTg-00068w-Fp@stork.gentoo.org
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