#!/bin/bash
# -*- coding: utf-8 -*-
# Timestamp: 2026-02-09
# File: scripts/shell/restore_contents.sh
# Purpose: Restore content files from a snapshot created by initialize_contents.sh
# Usage: restore_contents.sh [snapshot-id]
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
cd "$PROJECT_ROOT"
# Help
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
echo "Usage: $(basename "$0") [snapshot-id]"
echo ""
echo "Restore content files from a snapshot created by 'make init'."
echo ""
echo "Arguments:"
echo " (none) List available snapshots"
echo " snapshot-id Restore all contents from the given snapshot"
echo ""
echo "Snapshot IDs include the doc type and timestamp, e.g.:"
echo " snapshot/pre-init-manuscript-20260209-071700"
echo " snapshot/pre-init-all-20260209-071700"
exit 0
fi
# Content paths to restore
CONTENT_PATHS=(
"00_shared/title.tex"
"00_shared/authors.tex"
"00_shared/keywords.tex"
"00_shared/journal_name.tex"
"00_shared/bib_files/"
"01_manuscript/contents/"
"02_supplementary/contents/"
"03_revision/contents/"
)
# --------------------------------------------------------------------------
# No argument: list available snapshots
# --------------------------------------------------------------------------
if [ $# -eq 0 ]; then
echo -e "${YELLOW}=== Available Snapshots ===${NC}"
echo ""
snapshots=$(git tag -l "snapshot/pre-init-*" --sort=-version:refname 2>/dev/null)
if [ -z "$snapshots" ]; then
echo "No snapshots found."
echo "Snapshots are created automatically by 'make init'."
exit 0
fi
while IFS= read -r tag; do
commit=$(git rev-list -1 "$tag" 2>/dev/null)
date=$(git log -1 --format="%ci" "$commit" 2>/dev/null | cut -d' ' -f1,2)
short=$(git log -1 --format="%s" "$commit" 2>/dev/null)
echo -e " ${GREEN}${tag}${NC} (${date}) ${short}"
done <<<"$snapshots"
echo ""
echo "Usage: make restore ID=<snapshot-tag>"
exit 0
fi
# --------------------------------------------------------------------------
# With argument: restore from snapshot
# --------------------------------------------------------------------------
SNAPSHOT_ID="$1"
if ! git rev-parse "$SNAPSHOT_ID" &>/dev/null; then
echo -e "${RED}Error: Snapshot '${SNAPSHOT_ID}' not found.${NC}"
echo "Run 'make restore' (without ID) to list available snapshots."
exit 1
fi
echo -e "${YELLOW}=== Restore Contents from Snapshot ===${NC}"
echo ""
echo "Snapshot: ${SNAPSHOT_ID}"
echo "Restoring:"
for p in "${CONTENT_PATHS[@]}"; do
echo " - ${p}"
done
echo ""
read -rp "Proceed with restore? (y/N): " confirm
if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
echo "Aborted."
exit 0
fi
echo ""
for p in "${CONTENT_PATHS[@]}"; do
if git ls-tree -r "$SNAPSHOT_ID" -- "$p" &>/dev/null; then
git checkout "$SNAPSHOT_ID" -- "$p" 2>/dev/null || true
echo -e " ${GREEN}Restored:${NC} ${p}"
else
echo -e " ${YELLOW}Skipped:${NC} ${p} (not in snapshot)"
fi
done
echo ""
echo -e "${GREEN}Contents restored from ${SNAPSHOT_ID}.${NC}"
echo "Review changes with: git diff"
###% EOF