#!/bin/sh
set -eu

if [ "$#" -ne 2 ]; then
  echo "Usage: $0 BACKUP_ROOT TARGET_ROOT" >&2
  exit 2
fi

BACKUP_ROOT=$1
TARGET_ROOT=$2

if [ ! -f "$BACKUP_ROOT/deployed_files.txt" ]; then
  echo "Invalid backup root: $BACKUP_ROOT" >&2
  exit 3
fi

if [ -f "$BACKUP_ROOT/new_files.txt" ]; then
  while IFS= read -r REL || [ -n "$REL" ]; do
    [ -n "$REL" ] || continue
    case "$REL" in /*|../*|*/../*|*/..|..) exit 4;; esac
    rm -f "$TARGET_ROOT/$REL"
  done < "$BACKUP_ROOT/new_files.txt"
fi

if [ -d "$BACKUP_ROOT/files" ]; then
  find "$BACKUP_ROOT/files" -type f -print | while IFS= read -r SRC; do
    REL=${SRC#"$BACKUP_ROOT/files/"}
    DST="$TARGET_ROOT/$REL"
    mkdir -p "$(dirname "$DST")"
    cp -p "$SRC" "$DST"
  done
fi

echo "ROLLBACK_OK backup=$BACKUP_ROOT"
