commit:     a7a267a46660e168bc1d46c4b39c4e89bed20767
Author:     Devan Franchini <twitch153 <AT> gentoo <DOT> org>
AuthorDate: Sat Aug 15 08:00:35 2015 +0000
Commit:     Devan Franchini <twitch153 <AT> gentoo <DOT> org>
CommitDate: Sat Aug 15 08:00:37 2015 +0000
URL:        https://gitweb.gentoo.org/proj/layman.git/commit/?id=a7a267a4

Adds remove parameter to database write() function

This parameter has been added in order to obtain proper
parallelization support for layman sqlite databases. With this
additional parameter it prompts the sqlite db module's write function to
simply return when removing an overlay, preventing it from re-adding any
database entires and causing oddness, run-time errors, or other unwanted
badness.

 layman/db.py                             |  2 +-
 layman/db_modules/json_db/json_db.py     |  2 +-
 layman/db_modules/sqlite_db/sqlite_db.py | 11 +++++++----
 layman/db_modules/xml_db/xml_db.py       |  2 +-
 layman/dbbase.py                         |  4 ++--
 5 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/layman/db.py b/layman/db.py
index 673e6bf..a7ed1ce 100644
--- a/layman/db.py
+++ b/layman/db.py
@@ -149,7 +149,7 @@ class DB(DbBase):
             overlay.delete(self.config['storage'])
             repo_ok = self.repo_conf.delete(overlay)
             self.remove(overlay, self.path)
-            self.write(self.path)
+            self.write(self.path, remove=True)
         else:
             self.output.error('No local overlay named "' + overlay.name + '"!')
             return False

diff --git a/layman/db_modules/json_db/json_db.py 
b/layman/db_modules/json_db/json_db.py
index d466385..70e41d5 100644
--- a/layman/db_modules/json_db/json_db.py
+++ b/layman/db_modules/json_db/json_db.py
@@ -112,7 +112,7 @@ class DBHandler(object):
             del self.overlays[overlay.name]
 
 
-    def write(self, path):
+    def write(self, path, remove=False):
         '''
         Write the list of overlays to a file.
         '''

diff --git a/layman/db_modules/sqlite_db/sqlite_db.py 
b/layman/db_modules/sqlite_db/sqlite_db.py
index 6619699..22ae5f3 100644
--- a/layman/db_modules/sqlite_db/sqlite_db.py
+++ b/layman/db_modules/sqlite_db/sqlite_db.py
@@ -283,6 +283,9 @@ class DBHandler(object):
         owner_id = 0
         source_ids = []
 
+        if overlay.name in self.overlays:
+            del self.overlays[overlay.name]
+
         with self.__connect__(path) as connection:
             cursor = connection.cursor()
             
@@ -318,14 +321,14 @@ class DBHandler(object):
 
             connection.commit()
 
-        if overlay.name in self.overlays:
-            del self.overlays[overlay.name]
-
 
-    def write(self, path):
+    def write(self, path, remove=False):
         '''
         Write the list of overlays to the database.
         '''
+        if remove:
+            return
+
         try:
             with self.__connect__(path) as connection:
                 for overlay in self.overlays:

diff --git a/layman/db_modules/xml_db/xml_db.py 
b/layman/db_modules/xml_db/xml_db.py
index 316d8f9..fbd7a6a 100644
--- a/layman/db_modules/xml_db/xml_db.py
+++ b/layman/db_modules/xml_db/xml_db.py
@@ -157,7 +157,7 @@ class DBHandler(object):
             del self.overlays[overlay.name]
 
 
-    def write(self, path):
+    def write(self, path, remove=False):
         '''
         Write the list of overlays to a file.
         '''

diff --git a/layman/dbbase.py b/layman/dbbase.py
index cecbf5c..dc089d8 100644
--- a/layman/dbbase.py
+++ b/layman/dbbase.py
@@ -197,7 +197,7 @@ class DbBase(object):
         db_ctl.read_db(path, text=text)
 
 
-    def write(self, path, migrate_type=None):
+    def write(self, path, remove=False, migrate_type=None):
         '''
         Write the list of overlays to a file.
         '''
@@ -212,7 +212,7 @@ class DbBase(object):
                  self.ignore,
                  self.ignore_init_read_errors)
 
-        db_ctl.write(path)
+        db_ctl.write(path, remove=remove)
 
 
     def remove(self, overlay, path):

Reply via email to