aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2010-02-28 04:09:59 +0000
committerZac Medico <zmedico@gentoo.org>2010-02-28 04:09:59 +0000
commitc791599f2a768f87e63a68dc31d7f49bc3dfdd00 (patch)
tree84238fc0e57ef138fda7bd5ac66ec94347de5368 /pym/portage/__init__.py
parentFix vardbapi.move_ent and aux_update to clear relevant caches. (diff)
downloadportage-c791599f2a768f87e63a68dc31d7f49bc3dfdd00.tar.gz
portage-c791599f2a768f87e63a68dc31d7f49bc3dfdd00.tar.bz2
portage-c791599f2a768f87e63a68dc31d7f49bc3dfdd00.zip
Move the MtimeDB class to portage.util.mtimedb and deprecate the commit_mtimedb
function. svn path=/main/trunk/; revision=15490
Diffstat (limited to 'pym/portage/__init__.py')
-rw-r--r--pym/portage/__init__.py92
1 files changed, 10 insertions, 82 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index 595580fd0..5f1b05e76 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -131,12 +131,14 @@ try:
'portage.util.ExtractKernelVersion:ExtractKernelVersion',
'portage.util.listdir:cacheddir,listdir',
'portage.util.movefile:movefile',
+ 'portage.util.mtimedb:MtimeDB',
'portage.versions',
'portage.versions:best,catpkgsplit,catsplit,cpv_getkey,' + \
'cpv_getkey@getCPFromCPV,endversion_keys,' + \
'suffix_value@endversion,pkgcmp,pkgsplit,vercmp,ververify',
'portage.xpak',
- 'portage._deprecated:dep_virtual,digestParseFile,getvirtuals,pkgmerge',
+ 'portage._deprecated:commit_mtimedb,dep_virtual,' + \
+ 'digestParseFile,getvirtuals,pkgmerge',
)
import portage.const
@@ -535,92 +537,18 @@ def deprecated_profile_check(settings=None):
writemsg("\n\n", noiselevel=-1)
return True
-def commit_mtimedb(mydict=None, filename=None):
- if mydict is None:
- global mtimedb
- if "mtimedb" not in globals() or mtimedb is None:
- return
- mtimedb.commit()
- return
- if filename is None:
- global mtimedbfile
- filename = mtimedbfile
- mydict["version"] = VERSION
- d = {} # for full backward compat, pickle it as a plain dict object.
- d.update(mydict)
- try:
- f = atomic_ofstream(filename, mode='wb')
- pickle.dump(d, f, protocol=2)
- f.close()
- portage.util.apply_secpass_permissions(filename,
- uid=uid, gid=portage_gid, mode=0o644)
- except (IOError, OSError) as e:
- pass
-
def portageexit():
- global uid,portage_gid,portdb,db
- if secpass and os.environ.get("SANDBOX_ON") != "1":
+ if secpass > 1 and os.environ.get("SANDBOX_ON") != "1":
close_portdbapi_caches()
- commit_mtimedb()
+ try:
+ mtimedb
+ except NameError:
+ pass
+ else:
+ mtimedb.commit()
atexit_register(portageexit)
-class MtimeDB(dict):
- def __init__(self, filename):
- dict.__init__(self)
- self.filename = filename
- self._load(filename)
-
- def _load(self, filename):
- try:
- f = open(_unicode_encode(filename), 'rb')
- mypickle = pickle.Unpickler(f)
- try:
- mypickle.find_global = None
- except AttributeError:
- # TODO: If py3k, override Unpickler.find_class().
- pass
- d = mypickle.load()
- f.close()
- del f
- except (IOError, OSError, EOFError, ValueError, pickle.UnpicklingError) as e:
- if isinstance(e, pickle.UnpicklingError):
- writemsg(_("!!! Error loading '%s': %s\n") % \
- (filename, str(e)), noiselevel=-1)
- del e
- d = {}
-
- if "old" in d:
- d["updates"] = d["old"]
- del d["old"]
- if "cur" in d:
- del d["cur"]
-
- d.setdefault("starttime", 0)
- d.setdefault("version", "")
- for k in ("info", "ldpath", "updates"):
- d.setdefault(k, {})
-
- mtimedbkeys = set(("info", "ldpath", "resume", "resume_backup",
- "starttime", "updates", "version"))
-
- for k in list(d):
- if k not in mtimedbkeys:
- writemsg(_("Deleting invalid mtimedb key: %s\n") % str(k))
- del d[k]
- self.update(d)
- self._clean_data = copy.deepcopy(d)
-
- def commit(self):
- if not self.filename:
- return
- d = {}
- d.update(self)
- # Only commit if the internal state has changed.
- if d != self._clean_data:
- commit_mtimedb(mydict=d, filename=self.filename)
- self._clean_data = copy.deepcopy(d)
-
def create_trees(config_root=None, target_root=None, trees=None):
if trees is None:
trees = {}