#!/bin/bash borgRestoreSnapshot() { local idx="$1" local snapshot_id="$2" local target_dir="$3" local include_path="$4" if [[ -z "$snapshot_id" || -z "$target_dir" ]]; then isError "borgRestoreSnapshot requires snapshot_id and target_dir" return 1 fi borgEnvExport "$idx" || return 1 runFileOp mkdir -p "$target_dir" isNotice "Restoring $snapshot_id from $(resticLocationName "$idx") → $target_dir" local rc if [[ -n "$include_path" ]]; then local stripped="${include_path#/}" ( cd "$target_dir" && runBackupOp borg extract "::$snapshot_id" "$stripped" ) rc=$? else ( cd "$target_dir" && runBackupOp borg extract "::$snapshot_id" ) rc=$? fi borgEnvUnset return $rc } borgRestoreSystemLatest() { local idx="$1" local target_dir="$2" local host="${3:-$CFG_INSTALL_NAME}" borgEnvExport "$idx" || return 1 local snapshot_id snapshot_id=$(runBackupOp borg list --json --glob-archives "system-${host}-*" --last 1 2>/dev/null \ | grep -o '"name":"[^"]*"' | head -1 | cut -d'"' -f4) borgEnvUnset if [[ -z "$snapshot_id" ]]; then isError "No system-config archive found in $(resticLocationName "$idx") for host=$host" return 1 fi # Whole-archive extract into staging (no include subpath). borgRestoreSnapshot "$idx" "$snapshot_id" "$target_dir" } borgDumpFile() { local idx="$1" local snapshot_id="$2" local file_path="$3" local target_file="$4" borgEnvExport "$idx" || return 1 local stripped="${file_path#/}" if [[ -n "$target_file" ]]; then runBackupOp borg extract --stdout "::$snapshot_id" "$stripped" | runFileWrite "$target_file" else runBackupOp borg extract --stdout "::$snapshot_id" "$stripped" fi local rc=$? borgEnvUnset return $rc }