rust-clippy/util/fetch_prs_between.sh

43 lines
1.4 KiB
Bash
Executable file

#!/bin/bash
# Fetches the merge commits between two git commits and prints the PR URL
# together with the full commit message
#
# If you want to use this to update the Clippy changelog, be sure to manually
# exclude the non-user facing changes like 'rustup' PRs, typo fixes, etc.
set -e
IFS='
'
for pr in $(git log --oneline --merges --first-parent "$1...$2"); do
id=$(echo "$pr" | rg -o '#[0-9]{3,5}' | cut -c 2-)
commit=$(echo "$pr" | cut -d' ' -f 1)
message=$(git --no-pager show --pretty=medium "$commit")
if [[ -z "$newest_pr" ]]; then
newest_pr="$id"
fi
oldest_pr="$id"
if [[ -n $(echo "$message" | rg "^[\s]{4}changelog: [nN]one\.*$") ]]; then
continue
fi
echo "URL: https://github.com/rust-lang/rust-clippy/pull/$id"
echo "Markdown URL: [#$id](https://github.com/rust-lang/rust-clippy/pull/$id)"
echo "$message"
echo "---------------------------------------------------------"
echo
done
newest_merged_at="$(gh pr view -R rust-lang/rust-clippy --json mergedAt $newest_pr -q .mergedAt)"
oldest_merged_at="$(gh pr view -R rust-lang/rust-clippy --json mergedAt $oldest_pr -q .mergedAt)"
query="merged:$oldest_merged_at..$newest_merged_at base:master"
encoded_query="$(echo $query | sed 's/ /+/g; s/:/%3A/g')"
pr_link="https://github.com/rust-lang/rust-clippy/pulls?q=$encoded_query"
count="$(gh api -X GET search/issues -f "q=$query repo:rust-lang/rust-clippy" -q .total_count)"
echo "[View all $count merged pull requests]($pr_link)"