Skip to content

Instantly share code, notes, and snippets.

@onjin
Created March 7, 2014 07:41
Show Gist options
  • Save onjin/9407099 to your computer and use it in GitHub Desktop.
Save onjin/9407099 to your computer and use it in GitHub Desktop.
Script creates CHANGELOG.txt according to current git tags.
#!/bin/bash
#
# usage: ./mkchangelog
#
# author: Marek Wywiał <[email protected]>
#
# description: Script creates CHANGELOG.txt according to current git tags. Also
# supports commits without tags (git log HEAD...first_tag).
# Lines starting with 'Merge' will be skipped.
# Remember to add 'include CHANGELOG.txt' into your MANIFEST.in if
# you need it
#
rm -f CHANGELOG.txt
FIRST_TAG=`git tag|sort -Vr| head -1`
LAST_TAG=`git tag|sort -Vr| tail -1`
TAGS=`git tag|wc -l`
VERSIONS=`git tag |sort -Vr; git log --pretty=format:"%H" | tail -1`
DEV_COMMITS=`git log HEAD...${FIRST_TAG} --oneline|wc -l`
if [ ${DEV_COMMITS} -gt 0 -o ${TAGS} -eq 0 ]; then
date=`git log HEAD -1 --pretty=format:"%ci"`
echo "HEAD / ${date}:" >> CHANGELOG.txt
if [ ${TAGS} -eq 0 ]; then
git log HEAD --pretty=format:" - %s"|grep -v -i '^ - Merge' | grep -v 'BUMP VERSION' >> CHANGELOG.txt
else
git log HEAD...${FIRST_TAG} --pretty=format:" - %s"|grep -v -i '^ - Merge' | grep -v 'BUMP VERSION' >> CHANGELOG.txt
fi
echo >> CHANGELOG.txt
fi
prev=''
for version in ${VERSIONS}; do
if [ -z $prev ]; then
prev=${version}
else
date=`git log ${prev} -1 --pretty=format:"%ci"`
echo "${prev} / ${date}:" >> CHANGELOG.txt
if [ ${prev} == ${LAST_TAG} ]; then
git log ${prev} --pretty=format:" - %s"|grep -v -i '^ - Merge' | grep -v 'BUMP VERSION' >> CHANGELOG.txt
else
git log ${prev}...${version} --pretty=format:" - %s"|grep -v -i '^ - Merge' | grep -v 'BUMP VERSION' >> CHANGELOG.txt
fi
echo >> CHANGELOG.txt
prev=${version}
fi
done
@onjin
Copy link
Author

onjin commented Oct 7, 2024

Converted into package with more features:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment