synq-core-os/scripts/synq-watch.sh
Synq Imaging a9c7030552 [autosave] milestone/2.1-stream-ui @ 2026-05-08T09:31:36-07:00
2 files changed, +34/-908 lines

M	Cargo.lock
M	Cargo.toml
2026-05-08 09:31:36 -07:00

78 lines
2.6 KiB
Bash
Executable file

#!/bin/bash
# ═══════════════════════════════════════════════════════════════
# Synq Watch — Real-time Auto-Backup Watcher
# Triggers synq-auto-backup.sh after files change and a quiet
# period of 30 seconds elapses.
#
# Usage:
# synq-watch.sh [project-dir]
#
# Requires: inotifywait (install with: sudo apt install inotify-tools)
# ═══════════════════════════════════════════════════════════════
set -euo pipefail
PROJECT_DIR="${1:-$(pwd)}"
QUIET_SECONDS=30
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
# ── Check dependency ──────────────────────────────────────────
if ! command -v inotifywait >/dev/null 2>&1; then
echo "✗ inotifywait not found. Install it with:"
echo " sudo apt install inotify-tools"
exit 1
fi
# ── Config ────────────────────────────────────────────────────
# File patterns to watch
WATCH_PATTERNS=(
-e modify -e create -e move -e delete
)
# Paths to exclude from watching
EXCLUDE_PATTERNS=(
--exclude 'target/'
--exclude 'node_modules/'
--exclude '.git/'
--exclude 'dist/'
--exclude 'build/'
--exclude '*.tmp'
--exclude '*.swp'
--exclude '*.log'
)
echo "═══ Synq Watch Started ═══"
echo " Project: $PROJECT_DIR"
echo " Quiet: ${QUIET_SECONDS}s after last change"
echo " Trigger: $SCRIPT_DIR/synq-auto-backup.sh"
echo ""
echo "Press Ctrl+C to stop"
echo ""
# ── Debounced backup loop ─────────────────────────────────────
while true; do
# Wait for any file event
inotifywait -r -q \
"${WATCH_PATTERNS[@]}" \
"${EXCLUDE_PATTERNS[@]}" \
"$PROJECT_DIR" 2>/dev/null || true
echo " [$(date +%H:%M:%S)] Change detected — waiting ${QUIET_SECONDS}s for quiet..."
# Debounce: keep resetting timer while changes keep coming
while true; do
if inotifywait -r -q -t "$QUIET_SECONDS" \
"${WATCH_PATTERNS[@]}" \
"${EXCLUDE_PATTERNS[@]}" \
"$PROJECT_DIR" 2>/dev/null; then
echo " [$(date +%H:%M:%S)] More changes — resetting timer..."
continue
fi
break
done
# Quiet period elapsed — run backup
echo " [$(date +%H:%M:%S)] Quiet period reached — running backup..."
"$SCRIPT_DIR/synq-auto-backup.sh" "$PROJECT_DIR"
echo ""
done