]> git.ipfire.org Git - people/stevee/pakfire.git/blobdiff - pakfire/repository/database.py
Simulate the in-memory database on disk because the backup seems to be broken.
[people/stevee/pakfire.git] / pakfire / repository / database.py
index 02a13eacd039cb7b044474c705d574de0e627b30..c2f7d015fdef37f55caadd864203c2a910e0a4c3 100644 (file)
@@ -2,6 +2,7 @@
 
 import logging
 import os
+import random
 import shutil
 import sqlite3
 import time
@@ -19,9 +20,18 @@ class Cursor(sqlite3.Cursor):
 class Database(object):
        def __init__(self, pakfire, filename):
                self.pakfire = pakfire
-               self.filename = filename
                self._db = None
 
+               self._tmp = False
+
+               if filename == ":memory:":
+                       self._tmp = True
+
+                       filename = "/tmp/.%s-%s" % \
+                               (random.randint(0, 1024**2), os.path.basename(filename))
+
+               self.filename = filename
+
                self.open()
 
        def __del__(self):
@@ -36,14 +46,11 @@ class Database(object):
                if not self._db:
                        logging.debug("Open database %s" % self.filename)
 
-                       database_exists = False
+                       dirname = os.path.dirname(self.filename)
+                       if not os.path.exists(dirname):
+                               os.makedirs(dirname)
 
-                       if not self.filename == ":memory:":
-                               dirname = os.path.dirname(self.filename)
-                               if not os.path.exists(dirname):
-                                       os.makedirs(dirname)
-
-                               database_exists = os.path.exists(self.filename)
+                       database_exists = os.path.exists(self.filename)
 
                        # Make a connection to the database.
                        self._db = sqlite3.connect(self.filename)
@@ -57,6 +64,9 @@ class Database(object):
                self._db.close()
                self._db = None
 
+               if self._tmp:
+                       os.unlink(self.filename)
+
        def commit(self):
                self._db.commit()
 
@@ -70,16 +80,9 @@ class Database(object):
                """
                        Save a copy of this database to a new one located at path.
                """
-               db2 = Database(self.pakfire, path)
-
-               script = ""
-               for line in self._db.iterdump():
-                       script += "%s\n" % line
-
-               db2.executescript(script)
-               db2.commit()
+               self.commit()
 
-               db2.close()
+               shutil.copy2(self.filename, path)
 
 
 class PackageDatabase(Database):