1
0

review-package 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/usr/bin/env bash
  2. # Generate a review package: commit list, stat summary, and the net
  3. # diff with extended context, written to a file the reviewer reads in one
  4. # call. Using the recorded per-task BASE (not HEAD~1) keeps multi-commit
  5. # tasks intact.
  6. #
  7. # Usage: review-package BASE HEAD [OUTFILE]
  8. # Default OUTFILE: <git-dir>/sdd/review-<base7>..<head7>.diff — unique per
  9. # repo instance and per range, so concurrent sessions cannot collide and a
  10. # re-review after fixes always gets a distinctly named fresh file.
  11. set -euo pipefail
  12. if [ $# -lt 2 ] || [ $# -gt 3 ]; then
  13. echo "usage: review-package BASE HEAD [OUTFILE]" >&2
  14. exit 2
  15. fi
  16. base=$1
  17. head=$2
  18. git rev-parse --verify --quiet "$base" >/dev/null || { echo "bad BASE: $base" >&2; exit 2; }
  19. git rev-parse --verify --quiet "$head" >/dev/null || { echo "bad HEAD: $head" >&2; exit 2; }
  20. if [ $# -eq 3 ]; then
  21. out=$3
  22. else
  23. dir=$(git rev-parse --git-path sdd)
  24. mkdir -p "$dir"
  25. dir=$(cd "$dir" && pwd)
  26. out="$dir/review-$(git rev-parse --short "$base")..$(git rev-parse --short "$head").diff"
  27. fi
  28. {
  29. echo "# Review package: ${base}..${head}"
  30. echo
  31. echo "## Commits"
  32. git log --oneline "${base}..${head}"
  33. echo
  34. echo "## Files changed"
  35. git diff --stat "${base}..${head}"
  36. echo
  37. echo "## Diff"
  38. git diff -U10 "${base}..${head}"
  39. } > "$out"
  40. commits=$(git rev-list --count "${base}..${head}")
  41. echo "wrote ${out}: ${commits} commit(s), $(wc -c < "$out" | tr -d ' ') bytes"