Add immutable revisions, PGVN editor, asset replacement, merge and rebase workflows, authenticated media delivery and reachability GC. Harden the script interpreter, pin unrpyc and remove tracked build metadata. Include current compatibility checks, Naninovel import and regression tests.
25 lines
1.0 KiB
Python
25 lines
1.0 KiB
Python
"""Capture every manifest change, including translation/import writers."""
|
|
import copy
|
|
from uuid import uuid4
|
|
|
|
from sqlalchemy import event, inspect
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.models import GameVersion, Revision
|
|
|
|
|
|
@event.listens_for(Session, "before_flush")
|
|
def capture_revisions(session, flush_context, instances):
|
|
for obj in list(session.new) + list(session.dirty):
|
|
if not isinstance(obj, GameVersion) or not obj.manifest or obj in session.deleted:
|
|
continue
|
|
if obj not in session.new and not inspect(obj).attrs.manifest.history.has_changes():
|
|
continue
|
|
parents = list(getattr(obj, "_revision_parents", None) or
|
|
([obj.revision_id] if obj.revision_id else []))
|
|
rid = str(uuid4())
|
|
session.add(Revision(id=rid, game_id=obj.game_id, user_id=session.info.get("user_id", obj.owner_id),
|
|
parents=parents, manifest=copy.deepcopy(obj.manifest)))
|
|
obj.revision_id = rid
|
|
obj._revision_parents = None
|