sqlcache: cache OperationError when saving stable
authorPierre-Yves David <pierre-yves.david@octobus.net>
Mon, 27 Aug 2018 00:28:19 +0200
branchstable
changeset 4018 b3517f834f83
parent 4017 c307ce1d9009
child 4019 8a6a2c37c0fa
sqlcache: cache OperationError when saving This is a cache, so we should not crash when trying to operate on it. OperationError can happens when the database is seen as readonly or locked.
hgext3rd/evolve/obsdiscovery.py
hgext3rd/evolve/stablerangecache.py
--- a/hgext3rd/evolve/obsdiscovery.py	Mon Aug 27 00:18:06 2018 +0200
+++ b/hgext3rd/evolve/obsdiscovery.py	Mon Aug 27 00:28:19 2018 +0200
@@ -568,6 +568,12 @@
             repo.ui.warn(msg)
 
     def _save(self, repo):
+        try:
+            return self._trysave(repo)
+        except sqlite3.OperationalError as exc:
+            repo.ui.log('evoext-cache', 'error while saving new data: %s' % exc)
+
+    def _trysave(self, repo):
         if self._con is None:
             util.unlinkpath(self._path, ignoremissing=True)
             if '_con' in vars(self):
--- a/hgext3rd/evolve/stablerangecache.py	Mon Aug 27 00:18:06 2018 +0200
+++ b/hgext3rd/evolve/stablerangecache.py	Mon Aug 27 00:28:19 2018 +0200
@@ -223,6 +223,12 @@
         return con
 
     def _save(self, repo):
+        try:
+            return self._trysave(repo)
+        except sqlite3.OperationalError as exc:
+            repo.ui.log('evoext-cache', 'error while saving new data: %s' % exc)
+
+    def _trysave(self, repo):
         repo = repo.unfiltered()
         repo.depthcache.save(repo)
         repo.stablesort.save(repo)