diff options
author | René 'Necoro' Neumann <necoro@necoro.net> | 2009-02-21 01:34:05 +0100 |
---|---|---|
committer | René 'Necoro' Neumann <necoro@necoro.net> | 2009-02-21 01:34:05 +0100 |
commit | 8e3257caa9f70192794d9594feb0da489bdfc720 (patch) | |
tree | d7a6907e14614044fac87b89a3f4bffe25a4eda3 /portato/db/sql.py | |
parent | 26942ea013e79d615eeca8ae0a38a39e5f945558 (diff) | |
parent | dd0919c900761bd76736ff790ca37f144e3de93d (diff) | |
download | portato-8e3257caa9f70192794d9594feb0da489bdfc720.tar.gz portato-8e3257caa9f70192794d9594feb0da489bdfc720.tar.bz2 portato-8e3257caa9f70192794d9594feb0da489bdfc720.zip |
Updates of 0.12
Diffstat (limited to 'portato/db/sql.py')
-rw-r--r-- | portato/db/sql.py | 68 |
1 files changed, 42 insertions, 26 deletions
diff --git a/portato/db/sql.py b/portato/db/sql.py index bee8a4a..cb252c1 100644 --- a/portato/db/sql.py +++ b/portato/db/sql.py @@ -17,7 +17,11 @@ try: except ImportError: from pysqlite2 import dbapi2 as sql -import anydbm +try: + import cPickle as pickle +except ImportError: + import pickle + import hashlib import os @@ -113,33 +117,45 @@ class SQLDatabase (Database): dbpath = os.path.join(SESSION_DIR, "portdirs.db") db_existed = os.path.exists(dbpath) - db = anydbm.open(dbpath, "c") - try: - if db_existed: - debug("portdirs.db already existant") - for key in set(db.keys())- set(hashes.keys()): - debug("Overlay '%s' has been removed", key) - del db[key] - changed = True - - for key in hashes.iterkeys(): - if key not in db.keys(): - debug("Overlay '%s' has been added.", key) - changed = True + if db_existed and "pickle" not in self.session: + debug("Removing old portdirs.db, as this looks like old DBM format. If it is not - well - no real harm ;)") + os.remove(dbpath) + db_existed = False - elif db[key] != hashes[key]: - debug("Overlay '%s' has been changed.", key) - changed = True - - db[key] = hashes[key] - else: - debug("portdirs.db not existant") - for key in hashes.iterkeys(): - db[key] = hashes[key] - - finally: - db.close() + self.session["pickle"] = True # no need for a certain value + + if db_existed: + debug("portdirs.db already existant") + with open(dbpath, "rb") as dbfile: + db = pickle.load(dbfile) + + # the following could be simplified - losing the debug possibilities + # so we keep it as is :) + # there shouldn't be so much overlays, that this would result + # in performance loss + + for key in set(db.keys()) - set(hashes.keys()): + debug("Overlay '%s' has been removed", key) + changed = True + + for key in hashes.iterkeys(): + + if key not in db: + debug("Overlay '%s' has been added.", key) + changed = True + + elif db[key] != hashes[key]: + debug("Overlay '%s' has been changed.", key) + changed = True + + else: + debug("portdirs.db not existant") + changed = True + + if changed: + with open(dbpath, "wb") as dbfile: + db = pickle.dump(hashes, dbfile, protocol = -1) return changed |