feat: add auto-recovery for corrupted tags cache

This commit is contained in:
Paul Gauthier (aider) 2024-10-29 14:59:50 -07:00
parent e25a46c892
commit 7f027ff6e5

View file

@ -167,11 +167,39 @@ class RepoMap:
return fname
def tags_cache_error(self):
"""Handle SQLite errors by falling back to dict-based cache"""
if isinstance(self.TAGS_CACHE, Cache):
path = Path(self.root) / self.TAGS_CACHE_DIR
self.io.tool_warning(f"Unable to use tags cache, delete {path} to resolve.")
self.TAGS_CACHE = dict()
"""Handle SQLite errors by trying to recreate cache, falling back to dict if needed"""
if not isinstance(self.TAGS_CACHE, Cache):
return
path = Path(self.root) / self.TAGS_CACHE_DIR
# Try to recreate the cache
try:
# Delete existing cache dir
if path.exists():
import shutil
shutil.rmtree(path)
# Try to create new cache
new_cache = Cache(path)
# Test that it works
test_key = "test"
new_cache[test_key] = "test"
_ = new_cache[test_key]
del new_cache[test_key]
# If we got here, the new cache works
self.TAGS_CACHE = new_cache
return
except (SQLITE_ERRORS, OSError) as e:
# If anything goes wrong, warn and fall back to dict
self.io.tool_warning(f"Unable to use tags cache at {path}, falling back to memory cache")
if self.verbose:
self.io.tool_warning(f"Cache error: {str(e)}")
self.TAGS_CACHE = dict()
def load_tags_cache(self):
path = Path(self.root) / self.TAGS_CACHE_DIR