#!/bin/bash # pre_test.sh — Revert agent modifications to test folders before each test run # F73 / pre_test spec set -euo pipefail echo "=== agent-repo/v1 pre_test.sh ===" WORKING_DIR="${AGENT_WORKING_DIR:-/workspace/project}" AGENT_OUTPUT_DIR="${AGENT_OUTPUT_DIR:-/workspace/.agent-output}" PROTECTED_FOLDERS="${PROTECTED_TEST_FOLDERS:-}" mkdir -p "$AGENT_OUTPUT_DIR" if [ -z "$PROTECTED_FOLDERS" ]; then echo "No PROTECTED_TEST_FOLDERS set — nothing to revert" echo '{"reverted": 0}' > "$AGENT_OUTPUT_DIR/.pre-test-result.json" exit 0 fi total_reverted=0 IFS=',' read -ra FOLDERS <<< "$PROTECTED_FOLDERS" for folder in "${FOLDERS[@]}"; do folder=$(echo "$folder" | xargs) # trim whitespace [ -z "$folder" ] && continue echo "Reverting: $folder" # Revert tracked modifications git -C "$WORKING_DIR" reset HEAD -- "$folder" 2>/dev/null || true git -C "$WORKING_DIR" checkout HEAD -- "$folder" 2>/dev/null || true # Remove untracked files git -C "$WORKING_DIR" clean -fd -- "$folder" 2>/dev/null || true # Count what was reverted modified=$(git -C "$WORKING_DIR" diff --name-only HEAD -- "$folder" 2>/dev/null | wc -l) untracked=$(git -C "$WORKING_DIR" ls-files --others --exclude-standard -- "$folder" 2>/dev/null | wc -l) count=$((modified + untracked)) if [ "$count" -gt 0 ]; then echo " Reverted $count item(s) from $folder" total_reverted=$((total_reverted + count)) fi done # Also revert test infrastructure files for infra in conftest.py pyproject.toml pytest.ini setup.cfg tox.ini; do if git -C "$WORKING_DIR" diff --name-only HEAD -- "$infra" 2>/dev/null | grep -q .; then git -C "$WORKING_DIR" checkout HEAD -- "$infra" 2>/dev/null || true echo " Reverted infrastructure file: $infra" total_reverted=$((total_reverted + 1)) fi done echo "Total reverted: $total_reverted" # Atomic write via mktemp + mv (required contract) RESULT_FILE=$(mktemp) echo "{\"reverted\": $total_reverted}" > "$RESULT_FILE" mv "$RESULT_FILE" "$AGENT_OUTPUT_DIR/.pre-test-result.json" chmod 0644 "$AGENT_OUTPUT_DIR/.pre-test-result.json" echo "=== pre_test.sh complete ===" exit 0