forgejo-ai-pr-review/scripts/generate-diff.sh

34 lines
1.2 KiB
Bash

#!/usr/bin/env bash
# Required env vars: (none)
# Optional env vars: PREV_SHA (if set, generates an incremental diff from that commit)
set -euo pipefail
git fetch origin main --depth=100
if [ -n "${PREV_SHA:-}" ] && git cat-file -e "${PREV_SHA}^{commit}" 2>/dev/null; then
OLD_BASE=$(git merge-base origin/main "$PREV_SHA")
NEW_BASE=$(git merge-base origin/main HEAD)
if [ "$OLD_BASE" = "$NEW_BASE" ]; then
echo "Generating incremental diff from ${PREV_SHA} to HEAD"
git diff "${PREV_SHA}..HEAD" > pr.diff
echo "incremental=true" >> "$GITHUB_OUTPUT"
else
echo "PR base changed (merge/rebase from main) — generating full diff"
git diff origin/main...HEAD > pr.diff
echo "incremental=false" >> "$GITHUB_OUTPUT"
fi
else
echo "Generating full diff from origin/main to HEAD"
git diff origin/main...HEAD > pr.diff
echo "incremental=false" >> "$GITHUB_OUTPUT"
fi
DIFF_SIZE=$(wc -c < pr.diff)
echo "Diff size: ${DIFF_SIZE} bytes"
if [ "$DIFF_SIZE" -gt 12288 ]; then
head -c 12288 pr.diff > pr_truncated.diff
printf '\n\n[... diff truncated due to size ...]' >> pr_truncated.diff
mv pr_truncated.diff pr.diff
echo "truncated=true" >> "$GITHUB_OUTPUT"
fi