From 83cf08a6e63dcb71633a0a36c4e1c7394d4fbffe Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Mon, 4 Oct 2010 20:09:20 +0200 Subject: [PATCH] [entropy.client.interfaces.db] when updating repositories, after the actual update, always validate database file --- libraries/entropy/client/interfaces/db.py | 27 +++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/libraries/entropy/client/interfaces/db.py b/libraries/entropy/client/interfaces/db.py index 47da8e9da..de29d27f7 100644 --- a/libraries/entropy/client/interfaces/db.py +++ b/libraries/entropy/client/interfaces/db.py @@ -700,6 +700,28 @@ class AvailablePackagesRepositoryUpdater(object): rev_f.write(str(self._last_rev) + "\n") rev_f.flush() + def __validate_database(self): + def tell_error(err): + mytxt = "%s: %s" % (darkred(_("Repository is invalid")), + repr(err),) + self._entropy.output( + mytxt, + importance = 1, + level = "error", + header = "\t" + ) + try: + dbconn = self._entropy.open_repository(self.__repository_id) + except RepositoryError as err: + tell_error(err) + return False + try: + dbconn.validate() + except SystemDatabaseError as err: + tell_error(err) + return False + return True + def __database_indexing(self): # renice a bit, to avoid eating resources @@ -1974,6 +1996,11 @@ class AvailablePackagesRepositoryUpdater(object): except OSError: continue + valid = self.__validate_database() + if not valid: + # repository failed validation + return EntropyRepositoryBase.REPOSITORY_GENERIC_ERROR + self.__update_repository_revision() if self._entropy.indexing: self.__database_indexing()