34 lines
1.2 KiB
Bash
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
|