diff --git a/shopdb/core/api/shopdbbackups.py b/shopdb/core/api/shopdbbackups.py index 5e2a325e..acac2125 100644 --- a/shopdb/core/api/shopdbbackups.py +++ b/shopdb/core/api/shopdbbackups.py @@ -340,13 +340,30 @@ def _known_plugin_revisions(): if not manager: return {} + try: + from alembic.config import Config + from alembic.script import ScriptDirectory + except ImportError: + return {} + known = {} for plugin_name in manager.registry.get_all(): try: - revisions = manager.migration_manager.get_plugin_revisions(plugin_name) + migrations_dir = manager.migration_manager.get_migrations_dir(plugin_name) + if not migrations_dir: + continue + + # Point alembic at this plugin's migrations directory + config = Config() + config.set_main_option('script_location', str(migrations_dir)) + script = ScriptDirectory.from_config(config) + + # Walk all revisions (heads and ancestors) for this plugin + revisions = {rev.revision for rev in script.walk_revisions()} if revisions: - known[plugin_name] = set(revisions) + known[plugin_name] = revisions except Exception: + # Skip plugins that fail to load or have malformed migrations continue return known