118 lines
3 KiB
Bash
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"
|