feat: selective sub-path backup for volatile dot-dirs

Mackup with engine=file_system already uses symlinks for all backed-up
apps (/Users/osurke/.docker → <cloud>/Mackup/mackup/.docker). The copy PHASE
fails when the source dir contains sockets or dangling symlinks.

For dirs like .claude that have a volatile debug/ subdir, the clean fix
is to list only the stable sub-paths in the Mackup cfg rather than the
whole directory — debug/ is never touched.

_SSR_MACKUP_SELECTIVE: built-in overrides for .claude, .cursor, .codex,
.vscode, .factory — lists only config files (settings.json, CLAUDE.md,
skills, plugins, agents, …), skipping logs/, debug/, etc.

_ssr_mackup_resolve_paths(): resolves the [configuration_files] entries
for a given item using the selective table, falling back to the whole dir.

ssr mackup scan now shows '6 sub-path(s) of .claude/' in the plan
instead of '.claude/' to make the selective behaviour visible.

Configurable via SSR_MACKUP_SELECTIVE_PATHS in ssr.conf.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-12 14:58:16 +02:00
parent 36d4941c95
commit 93c23c60a9
3 changed files with 78 additions and 7 deletions
+5
View File
@@ -26,6 +26,11 @@ SSR_MACKUP_AUTODISCOVER=true
# Built-in defaults: .claude/debug .cursor/logs .vscode/logs .npm/_logs
# SSR_MACKUP_PRECLEAN_PATHS=".my-app/tmp .other-app/run"
# Selective sub-path overrides — back up only listed sub-paths for a dir
# instead of the whole directory (avoids sockets/debug symlinks in volatile dirs).
# Format: ".dir=subpath1,subpath2" Built-in defaults cover .claude, .cursor, etc.
# SSR_MACKUP_SELECTIVE_PATHS=".my-app=config.json,themes"
# Extra paths (relative to $HOME) to always include, space-separated.
# Example: ".easymcp .my-tool .config/my-cli"
# SSR_MACKUP_EXTRA_PATHS=""