UX fixes: fix Map tab crash, remove Edit/Delete buttons, update Help dialog and menu labels
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env bash
|
||||
# 🔄 Rotating Backup — keep N copies, replace oldest
|
||||
#
|
||||
# Usage:
|
||||
# ./rotate-backup.sh [--keep N] [--dir DIR] <path/to/database.db>
|
||||
#
|
||||
# Examples:
|
||||
# ./rotate-backup.sh /home/oplabs/projects/canteen-asset-tracker/assets.db
|
||||
# ./rotate-backup.sh --keep 5 --dir /backups/dbs /var/lib/app/data.db
|
||||
#
|
||||
# Default: keep 3 backups in /home/oplabs/backups/canteen-db/
|
||||
set -euo pipefail
|
||||
|
||||
KEEP=3
|
||||
BACKUP_DIR="/home/oplabs/backups/canteen-db"
|
||||
PREFIX="assets.db"
|
||||
|
||||
# ── Parse args ────────────────────────────────────────────────────────────────
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--keep) shift; KEEP="$1"; shift ;;
|
||||
--dir) shift; BACKUP_DIR="$1"; shift ;;
|
||||
--prefix) shift; PREFIX="$1"; shift ;;
|
||||
-h|--help)
|
||||
echo "Usage: $(basename "$0") [--keep N] [--dir DIR] [--prefix NAME] <database-path>"
|
||||
echo ""
|
||||
echo "Backs up a SQLite database with rotation (keep N, remove oldest)."
|
||||
echo ""
|
||||
echo " --keep N Number of backups to retain (default: 3)"
|
||||
echo " --dir DIR Target backup directory (default: /home/oplabs/backups/canteen-db)"
|
||||
echo " --prefix NAME Backup file name prefix (default: assets.db)"
|
||||
exit 0
|
||||
;;
|
||||
-*)
|
||||
echo "Unknown option: $1" >&2
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
DB_PATH="$1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -z "${DB_PATH:-}" ]]; then
|
||||
echo "❌ Usage: $(basename "$0") [--keep N] <database-path>" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$DB_PATH" ]]; then
|
||||
echo "❌ Database not found: $DB_PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ── Create backup ─────────────────────────────────────────────────────────────
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
|
||||
BACKUP_FILE="${BACKUP_DIR}/${PREFIX}-${TIMESTAMP}"
|
||||
|
||||
# Use sqlite3 .backup for safe online backup (consistent snapshot even if app is running)
|
||||
if command -v sqlite3 &>/dev/null; then
|
||||
sqlite3 "$DB_PATH" ".backup '$BACKUP_FILE'"
|
||||
echo "✅ $(basename "$DB_PATH") → $BACKUP_FILE (sqlite3 snapshot)"
|
||||
else
|
||||
cp "$DB_PATH" "$BACKUP_FILE"
|
||||
echo "✅ $(basename "$DB_PATH") → $BACKUP_FILE (file copy)"
|
||||
fi
|
||||
|
||||
# ── Rotate: keep only N most recent ───────────────────────────────────────────
|
||||
KEEP=$((KEEP + 0)) # ensure numeric
|
||||
REMOVE_COUNT=$((KEEP))
|
||||
REMOVE_FROM=$((REMOVE_COUNT + 1))
|
||||
|
||||
OLD_COUNT=$(ls -t "${BACKUP_DIR}/${PREFIX}-"* 2>/dev/null | wc -l)
|
||||
ls -t "${BACKUP_DIR}/${PREFIX}-"* 2>/dev/null | tail -n +${REMOVE_FROM} | xargs rm -f 2>/dev/null || true
|
||||
REMOVED=$((OLD_COUNT > KEEP ? OLD_COUNT - KEEP : 0))
|
||||
|
||||
echo " 📦 ${KEEP} kept · ${REMOVED} removed · ${BACKUP_DIR}"
|
||||
Reference in New Issue
Block a user