Fix missing import, add transaction safety, clean orphaned snapshots
- Add load_json to tab_timeline_ng imports (NameError on disk fallback) - Wrap save_history_tree in BEGIN/COMMIT transaction (was autocommitting each statement, risking partial writes on failure) - Clean up orphaned history_snapshots in sync_to_db when nodes are removed from the tree Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -312,6 +312,20 @@ def sync_to_db(db, project_name: str, file_path: Path, data: dict) -> None:
|
||||
"ON CONFLICT(data_file_id) DO UPDATE SET tree_data=excluded.tree_data, updated_at=excluded.updated_at",
|
||||
(df_id, json.dumps(slim_tree), now),
|
||||
)
|
||||
# Clean up orphaned snapshots for nodes no longer in tree
|
||||
current_node_ids = set(nodes.keys())
|
||||
if current_node_ids:
|
||||
placeholders = ",".join("?" for _ in current_node_ids)
|
||||
db.conn.execute(
|
||||
f"DELETE FROM history_snapshots WHERE data_file_id = ? "
|
||||
f"AND node_id NOT IN ({placeholders})",
|
||||
(df_id, *current_node_ids),
|
||||
)
|
||||
else:
|
||||
db.conn.execute(
|
||||
"DELETE FROM history_snapshots WHERE data_file_id = ?",
|
||||
(df_id,),
|
||||
)
|
||||
|
||||
db.conn.execute("COMMIT")
|
||||
except Exception:
|
||||
|
||||
Reference in New Issue
Block a user