aboutsummaryrefslogtreecommitdiff
path: root/dev/tools
diff options
context:
space:
mode:
authorEmilio Jesus Gallego Arias2020-05-15 17:34:51 +0200
committerEmilio Jesus Gallego Arias2020-05-15 17:34:51 +0200
commit215990f9f2a23d406e8e886c9824a56a120d8347 (patch)
treef024ff6e5e64bde61e1aad354cc5cbc84183e68e /dev/tools
parenta5c9ad83071c99110fed464a0b9a0f5e73f1be9b (diff)
parent8208e5f7d99316d0549e5ef011c755bd722eb66c (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-xdev/tools/generate-release-changelog.sh92
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."