diff options
| author | Emilio Jesus Gallego Arias | 2020-05-15 17:34:51 +0200 |
|---|---|---|
| committer | Emilio Jesus Gallego Arias | 2020-05-15 17:34:51 +0200 |
| commit | 215990f9f2a23d406e8e886c9824a56a120d8347 (patch) | |
| tree | f024ff6e5e64bde61e1aad354cc5cbc84183e68e /dev/tools | |
| parent | a5c9ad83071c99110fed464a0b9a0f5e73f1be9b (diff) | |
| parent | 8208e5f7d99316d0549e5ef011c755bd722eb66c (diff) | |
Merge PR #11979: Add a rudimentary script to generate release changelog.
Ack-by: SkySkimmer
Reviewed-by: ejgallego
Diffstat (limited to 'dev/tools')
| -rwxr-xr-x | dev/tools/generate-release-changelog.sh | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/dev/tools/generate-release-changelog.sh b/dev/tools/generate-release-changelog.sh new file mode 100755 index 0000000000..5b2d749b66 --- /dev/null +++ b/dev/tools/generate-release-changelog.sh @@ -0,0 +1,92 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +if [ $# != 1 ]; then + echo "Usage: $0 BRANCH" + exit +fi + +branch=$1 + +# Set SLOW_CONF to have the confirmation output wait for a newline +# Emacs doesn't send characters until the RET so we can't quick_conf +if [ -z ${SLOW_CONF+x} ] || [ -n "$INSIDE_EMACS" ]; then + quick_conf="-n 1" +else + quick_conf="" +fi + +ask_confirmation() { + read -p "Continue anyway? [y/N] " $quick_conf -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + exit 1 + fi +} + +if ! git diff --quiet; then + echo "Warning: current tree is dirty." + ask_confirmation +fi + +remote=$(git config --get "branch.${branch}.remote") + +if [ -z "$remote" ]; then + echo "Warning: branch $branch has no associated remote." + ask_confirmation +else + + if [ "$remote" != $(git config --get "branch.master.remote") ]; then + echo "Warning: branch master and branch $branch do not have the same remote." + ask_confirmation + fi + + official_remote_git_url="git@github.com:coq/coq" + official_remote_https_url="github.com/coq/coq" + remote_url=$(git remote get-url "$remote" --all) + + if [ "$remote_url" != "${official_remote_git_url}" ] && \ + [ "$remote_url" != "${official_remote_git_url}.git" ] && \ + [ "$remote_url" != "https://${official_remote_https_url}" ] && \ + [ "$remote_url" != "https://${official_remote_https_url}.git" ] && \ + [[ "$remote_url" != "https://"*"@${official_remote_https_url}" ]] && \ + [[ "$remote_url" != "https://"*"@${official_remote_https_url}.git" ]] ; then + echo "Warning: remote $remote does not point to the official Coq repo," + echo "that is $official_remote_git_url" + echo "It points to $remote_url instead." + ask_confirmation + fi + + git fetch "$remote" + + if [ $(git rev-parse master) != $(git rev-parse "${remote}/master") ]; then + echo "Warning: branch master is not up-to-date with ${remote}/master." + ask_confirmation + fi + + if [ $(git rev-parse "$branch") != $(git rev-parse "${remote}/${branch}") ]; then + echo "Warning: branch ${branch} is not up-to-date with ${remote}/${branch}." + ask_confirmation + fi + +fi + +git checkout $branch --detach +changelog_entries_with_title=$(ls doc/changelog/*/*.rst) +changelog_entries_no_title=$(echo "$changelog_entries_with_title" | grep -v "00000-title.rst") +git checkout master +for f in $changelog_entries_with_title; do + if [ -f "$f" ]; then + cat "$f" >> released.rst + else + echo "Warning: $f is missing in master branch." + fi +done +for f in $changelog_entries_no_title; do + if [ -f "$f" ]; then + git rm "$f" + fi +done +echo "Changelog written in released.rst. Move its content to a new section in doc/sphinx/changes.rst." |
