git-lfs/script/changelog

89 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Interactively generates a changelog over a range of commits:
commit_summary() {
local hash=$1
pr=$(git show $hash | grep -o "#\([0-9]*\)" | cut -c 2-)
prjson="$(curl -n https://api.github.com/repos/github/git-lfs/pulls/$pr 2>/dev/null)"
title="$(echo $prjson | jq -r -e ".title")"
id="$(echo $prjson | jq -r -e ".number")"
author="$(echo $prjson | jq -r -e ".user.login")"
# If the title begins with "Backport", then strip everything until the actual
# pull-request title.
if grep -q "Backport" <(echo $title); then
title="$(echo $title | sed 's/^[^:]*: //g')"
fi
echo "* $title #$id (@$author)"
}
range=$1
if [ "$range" = "" ]; then
echo "Usage: $0 [options] base..next"
exit 1
fi
features=""
bugs=""
misc=""
for rev in $(git rev-list --merges $range); do
git show $rev
processed=0
while [ $processed -eq 0 ]; do
echo "Categorize this change: [f,b,m,s,?] ?"
read -n 1 opt
echo ""
case $opt in
[fbms])
processed=1
;;
?)
echo "f - mark this merge as a feature"
echo "b - mark this merge as a bugfix"
echo "m - make this merge as a misc. change"
echo "s - skip this merge, excluding it from the changelog"
echo "? - display this help message"
;;
*)
echo "Unknown option: $opt, try again."
;;
esac
done
if [ $opt != "s" ]; then
summary="$(commit_summary $rev)"
fi
case $opt in
f)
features="$(printf "%s\n%s\n" "$features" "$summary")"
;;
b)
bugs="$(printf "%s\n%s\n" "$bugs" "$summary")"
;;
m)
misc="$(printf "%s\n%s\n" "$misc" "$summary")"
;;
esac
done
echo "" >&2
cat <<- EOF
### Features
$features
### Bugs
$bugs
### Misc
$misc
EOF