421b802467
- Corrected the backup path in the `_in_backup` function to reflect the new structure under `mackup/`. - Improved error handling in `ssr::mackup::configure` to skip restore if the configuration file is not updated, providing user feedback. - Updated `ssr::sync` to conditionally execute backup based on configuration validity, enhancing robustness. - Revised documentation in configuration examples to clarify the new Mackup directory structure and its implications for users.
66 lines
2.5 KiB
Bash
66 lines
2.5 KiB
Bash
#!/usr/bin/env bash
|
|
# lib/cloud.sh — cloud storage provider abstraction.
|
|
# Resolves SSR_CLOUD_DIR based on SSR_CLOUD_PROVIDER from config.
|
|
|
|
ssr::cloud::resolve_dir() {
|
|
local provider="${SSR_CLOUD_PROVIDER:-icloud}" custom="${SSR_CLOUD_PATH:-}"
|
|
|
|
case "$provider" in
|
|
icloud)
|
|
printf '%s\n' "$HOME/Library/Mobile Documents/com~apple~CloudDocs"
|
|
;;
|
|
dropbox)
|
|
if [[ -d "$HOME/Library/CloudStorage" ]]; then
|
|
find "$HOME/Library/CloudStorage" -maxdepth 1 -type d -name 'Dropbox*' -print -quit 2>/dev/null \
|
|
|| printf '%s\n' "$HOME/Dropbox"
|
|
else
|
|
printf '%s\n' "$HOME/Dropbox"
|
|
fi
|
|
;;
|
|
googledrive)
|
|
find "$HOME/Library/CloudStorage" -maxdepth 1 -type d -name 'GoogleDrive-*' -print -quit 2>/dev/null \
|
|
|| ssr::die "Google Drive folder not found under ~/Library/CloudStorage"
|
|
;;
|
|
onedrive)
|
|
find "$HOME/Library/CloudStorage" -maxdepth 1 -type d -name 'OneDrive-*' -print -quit 2>/dev/null \
|
|
|| ssr::die "OneDrive folder not found under ~/Library/CloudStorage"
|
|
;;
|
|
custom)
|
|
[[ -n "$custom" ]] || ssr::die "SSR_CLOUD_PROVIDER=custom requires SSR_CLOUD_PATH"
|
|
printf '%s\n' "$custom"
|
|
;;
|
|
*)
|
|
ssr::die "Unknown SSR_CLOUD_PROVIDER: $provider (use: icloud|dropbox|googledrive|onedrive|custom)"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Returns the per-host backup directory under the cloud root.
|
|
ssr::cloud::backup_dir() {
|
|
local cloud host uuid
|
|
cloud="$(ssr::cloud::resolve_dir)"
|
|
host="$(hostname -s)"
|
|
uuid="$(/usr/sbin/system_profiler SPHardwareDataType 2>/dev/null \
|
|
| awk '/Hardware UUID/ { print $3 }')"
|
|
[[ -n "$uuid" ]] || uuid="no-uuid"
|
|
local subdir="${SSR_BACKUP_SUBDIR:-BACKUP}"
|
|
printf '%s/%s/%s - %s\n' "$cloud" "$subdir" "$host" "$uuid"
|
|
}
|
|
|
|
# Parent directory for Mackup file_system storage: same cloud subfolder as
|
|
# per-host backups (SSR_BACKUP_SUBDIR). ~/.mackup.cfg sets path=<this> and
|
|
# directory=mackup — Mackup places files under <this>/mackup/ (not SSR-controlled).
|
|
ssr::cloud::mackup_dir() {
|
|
local cloud subdir
|
|
cloud="$(ssr::cloud::resolve_dir)"
|
|
subdir="${SSR_BACKUP_SUBDIR:-BACKUP}"
|
|
printf '%s/%s\n' "$cloud" "$subdir"
|
|
}
|
|
|
|
ssr::cloud::ensure_available() {
|
|
local cloud
|
|
cloud="$(ssr::cloud::resolve_dir)"
|
|
[[ -d "$cloud" ]] || ssr::die "Cloud directory not available: $cloud"
|
|
ssr::ok "Cloud provider: ${SSR_CLOUD_PROVIDER:-icloud} → $cloud"
|
|
}
|