h-1.flet.3/scripts/auto_recover_and_build.sh

118 lines
3 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# Usage:
# bash scripts/auto_recover_and_build.sh [PROJECT_DIR]
# Default PROJECT_DIR is current working directory.
PROJECT_DIR="${1:-$(pwd)}"
PROJECT_DIR="$(realpath "$PROJECT_DIR")"
TS="$(date +%Y%m%d_%H%M%S)"
if [[ ! -f "$PROJECT_DIR/main.py" ]]; then
echo "ERROR: main.py not found under PROJECT_DIR: $PROJECT_DIR" >&2
exit 1
fi
BACKUP_DIR="${PROJECT_DIR}.backup_${TS}"
TRASH_DIR="$PROJECT_DIR/trash/${TS}"
printf "[1/7] Backup project -> %s\n" "$BACKUP_DIR"
cp -a "$PROJECT_DIR" "$BACKUP_DIR"
printf "[2/7] Quarantine noisy/generated files -> %s\n" "$TRASH_DIR"
mkdir -p "$TRASH_DIR"
# Candidate directories to quarantine (safe move, no delete)
for d in \
apk_test \
helloworld \
build \
dist \
flutter.参考 \
__pycache__ \
.pytest_cache \
.mypy_cache
do
if [[ -e "$PROJECT_DIR/$d" ]]; then
mv "$PROJECT_DIR/$d" "$TRASH_DIR/"
fi
done
# Candidate files to quarantine (safe move, no delete)
shopt -s nullglob
for f in \
"$PROJECT_DIR"/app_*.py \
"$PROJECT_DIR"/test_*.py \
"$PROJECT_DIR"/debug_test.py \
"$PROJECT_DIR"/run_*.py \
"$PROJECT_DIR"/main_simple.py \
"$PROJECT_DIR"/minimal.py \
"$PROJECT_DIR"/*.spec
do
if [[ -e "$f" ]]; then
mv "$f" "$TRASH_DIR/"
fi
done
shopt -u nullglob
printf "[3/7] Ensure .gitignore has generated-file rules\n"
GITIGNORE="$PROJECT_DIR/.gitignore"
touch "$GITIGNORE"
append_if_missing() {
local line="$1"
grep -Fqx "$line" "$GITIGNORE" || echo "$line" >> "$GITIGNORE"
}
append_if_missing ""
append_if_missing "# build/cache"
append_if_missing "build/"
append_if_missing "dist/"
append_if_missing "__pycache__/"
append_if_missing "*.pyc"
append_if_missing ""
append_if_missing "# generated"
append_if_missing "generated_pdfs/"
append_if_missing "audit_export/"
append_if_missing "trash/"
append_if_missing ""
append_if_missing "# experiments"
append_if_missing "apk_test/"
append_if_missing "helloworld/"
printf "[4/7] Initialize git baseline if needed\n"
if [[ ! -d "$PROJECT_DIR/.git" ]]; then
git -C "$PROJECT_DIR" init
fi
printf "[5/7] Stage core project files\n"
# Stage only the likely core set; ignore errors for missing paths.
git -C "$PROJECT_DIR" add \
.gitignore \
README.md \
requirements.txt \
main.py \
models \
services \
components \
sales.db \
sales_assist.db \
scripts || true
if ! git -C "$PROJECT_DIR" diff --cached --quiet; then
git -C "$PROJECT_DIR" commit -m "baseline: quarantine generated files and stabilize project"
else
printf "No staged changes to commit.\n"
fi
printf "[6/7] Optional runtime check (python main.py)\n"
printf "Skipped by default. Run manually if needed:\n"
printf " source %s/.venv/bin/activate && python %s/main.py\n" "$PROJECT_DIR" "$PROJECT_DIR"
printf "[7/7] Optional APK build check\n"
printf "Run manually once your Flet build config is ready:\n"
printf " source %s/.venv/bin/activate && flet build apk %s\n" "$PROJECT_DIR" "$PROJECT_DIR"
printf "Done.\n"
printf "Backup: %s\n" "$BACKUP_DIR"
printf "Quarantine: %s\n" "$TRASH_DIR"