Fix to transfer

This commit is contained in:
2026-07-29 12:04:08 +02:00
parent 0c8f662bee
commit c72c118d76
+19 -3
View File
@@ -18,6 +18,15 @@ Design:
Sync model: move everything, exclude a small denylist. The exclusions are large Sync model: move everything, exclude a small denylist. The exclusions are large
derived artifacts each side regenerates or ships on its own (rendered output, derived artifacts each side regenerates or ships on its own (rendered output,
preprocessed segments, downscales, chunk scratch), so they never travel over SSH. preprocessed segments, downscales, chunk scratch), so they never travel over SSH.
Master = the machine's local tree. The PROJECT sync runs with rsync --delete, so a
file deleted locally and then `up`'d is removed on the server, and `down` mirrors the
server onto the local tree (deletions included). The Mac is the intended master: it
`up`s, the rig `down`s. Excluded paths are PROTECTED from --delete (rsync does not
touch excluded files on the receiver), so rig-only artifacts — above all the big
`*_processed.*` preprocess outputs — are never deleted by a mirror from the Mac.
Shared assets are NOT --deleted (a cross-project library; blind deletion could wipe
pexels downloaded on the other side), so that pass stays purely additive.
""" """
import json import json
@@ -52,6 +61,7 @@ _SYNC_EXCLUDES = [
"media/narration/proxy/", "media/narration/proxy/",
"media/videos/proxy/", "media/videos/proxy/",
"**/chunks/", "**/chunks/",
"*_processed.*", # preprocess outputs — rig-only, never transfer OR --delete them
"*.tmp", "*.tmp",
".*", # rsync in-progress temp files (.filename.XXXXXX) and .DS_Store ".*", # rsync in-progress temp files (.filename.XXXXXX) and .DS_Store
] ]
@@ -147,9 +157,11 @@ def cmd_up(project_path: Path, verbose: bool, dry_run: bool) -> int:
shared_root = _find_shared_assets_root(project_path) shared_root = _find_shared_assets_root(project_path)
remote_shared = f"{server['path']}/shared_assets" remote_shared = f"{server['path']}/shared_assets"
# Pass 1: project files — whole tree, denylist excludes. # Pass 1: project files — whole tree, denylist excludes. --delete mirrors the local
# (master) tree onto the server: files deleted locally are removed there too.
# Excluded paths (processed outputs, out/, chunks, …) are protected from deletion.
rsync_cmd = [ rsync_cmd = [
"rsync", "-av", "--progress", "rsync", "-av", "--progress", "--delete",
"-e", f"ssh -p {server['port']}", "-e", f"ssh -p {server['port']}",
*[f"--exclude={p}" for p in _SYNC_EXCLUDES], *[f"--exclude={p}" for p in _SYNC_EXCLUDES],
f"{project_path}/", f"{project_path}/",
@@ -228,8 +240,12 @@ def cmd_down(project_path: Path, verbose: bool, dry_run: bool) -> int:
project_path.mkdir(parents=True, exist_ok=True) project_path.mkdir(parents=True, exist_ok=True)
# --delete mirrors the server (which the master `up`'d) onto this local tree:
# files gone from the server are removed here too. Excluded paths — above all the
# rig-only *_processed.* outputs — are protected, so a `down` on the rig never
# deletes its own preprocess artifacts.
rsync_cmd = [ rsync_cmd = [
"rsync", "-av", "--progress", "rsync", "-av", "--progress", "--delete",
"-e", f"ssh -p {server['port']}", "-e", f"ssh -p {server['port']}",
*[f"--exclude={p}" for p in _SYNC_EXCLUDES], *[f"--exclude={p}" for p in _SYNC_EXCLUDES],
f"{server['user']}@{server['host']}:{remote_project}/", f"{server['user']}@{server['host']}:{remote_project}/",