diff options
Diffstat (limited to 'pym/portage/__init__.py')
-rw-r--r-- | pym/portage/__init__.py | 92 |
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 = {} |