| 1 |
#!/bin/sh |
|---|
| 2 |
|
|---|
| 3 |
# Renders a ChangeLog file by using the Subversion or Git commit logs |
|---|
| 4 |
# |
|---|
| 5 |
# Author: Alvaro Lopez Ortega <alvaro@alobbs.com> |
|---|
| 6 |
|
|---|
| 7 |
TZ=UTC |
|---|
| 8 |
|
|---|
| 9 |
# The current ChangeLog file starts at revision number.. |
|---|
| 10 |
FIRST_REV="3357" |
|---|
| 11 |
FIRST_ID="6cb69c1dc3c4ea293d05cc29f88e23548587be1f" |
|---|
| 12 |
|
|---|
| 13 |
# Local vars |
|---|
| 14 |
srcdir=`dirname $0` |
|---|
| 15 |
test -z "$srcdir" && srcdir=. |
|---|
| 16 |
test -z "$SVN" && SVN=svn |
|---|
| 17 |
test -z "$GIT" && GIT=git |
|---|
| 18 |
|
|---|
| 19 |
|
|---|
| 20 |
go_git() |
|---|
| 21 |
{ |
|---|
| 22 |
# Figure last ChangeLog entry |
|---|
| 23 |
LAST_COMMIT_ID=`head -n 3 ChangeLog 2>/dev/null | grep 'svn=' | sed 's/ *svn=.* git=\(.*\)/\1/'` |
|---|
| 24 |
|
|---|
| 25 |
if [ "x$LAST_COMMIT_ID" = "x" ]; then |
|---|
| 26 |
LAST_COMMIT_ID="$FIRST_ID" |
|---|
| 27 |
echo " * Creating a brand new ChangeLog file" |
|---|
| 28 |
else |
|---|
| 29 |
echo " * Last commit in the ChangeLog: $LAST_COMMIT_ID" |
|---|
| 30 |
fi |
|---|
| 31 |
|
|---|
| 32 |
# New log |
|---|
| 33 |
echo " * Appending commits since: $LAST_COMMIT_ID" |
|---|
| 34 |
$GIT log --stat --no-merges --date=short $LAST_COMMIT_ID..HEAD | python $srcdir/gitlog2changelog.py > $srcdir/ChangeLog.new |
|---|
| 35 |
|
|---|
| 36 |
if test ! -s $srcdir/ChangeLog.new ; then |
|---|
| 37 |
echo " * Changelog is already up-to-date." |
|---|
| 38 |
else |
|---|
| 39 |
if test -f $srcdir/ChangeLog ; then |
|---|
| 40 |
echo " * Merging new entries.." |
|---|
| 41 |
mv $srcdir/ChangeLog $srcdir/ChangeLog.prev |
|---|
| 42 |
cat $srcdir/ChangeLog.new $srcdir/ChangeLog.prev > ChangeLog |
|---|
| 43 |
else |
|---|
| 44 |
echo " * No previous entries.." |
|---|
| 45 |
mv $srcdir/ChangeLog.new $srcdir/ChangeLog |
|---|
| 46 |
fi |
|---|
| 47 |
fi |
|---|
| 48 |
|
|---|
| 49 |
echo " * Cleaning up" |
|---|
| 50 |
rm -f $srcdir/ChangeLog.new $srcdir/ChangeLog.prev |
|---|
| 51 |
} |
|---|
| 52 |
|
|---|
| 53 |
|
|---|
| 54 |
go_svn() |
|---|
| 55 |
{ |
|---|
| 56 |
# FOR THE RECORD: |
|---|
| 57 |
# Commit log messages can be modified by running (replace $REV): |
|---|
| 58 |
# svn propedit svn:log --revprop -r$REV . |
|---|
| 59 |
|
|---|
| 60 |
# Check what the latest revision of the ChangeLog file is |
|---|
| 61 |
if [ -e $srcdir/ChangeLog ]; then |
|---|
| 62 |
CHANGELOG_VERSION=`head -n 2 $srcdir/ChangeLog | tail -n 1 | awk {'print $2'} | sed 's|r||g; s|,||g'` |
|---|
| 63 |
else |
|---|
| 64 |
touch ChangeLog |
|---|
| 65 |
fi |
|---|
| 66 |
|
|---|
| 67 |
if [ x$CHANGELOG_VERSION = x ]; then |
|---|
| 68 |
CHANGELOG_VERSION=$FIRST_REV |
|---|
| 69 |
fi |
|---|
| 70 |
|
|---|
| 71 |
# Find the latest revision in the SVN |
|---|
| 72 |
SVN_VERSION=`svnversion -c . | sed -e 's/^[^:]*://;s/[A-Za-z]//'` |
|---|
| 73 |
if [ x$SVN_VERSION = x ]; then |
|---|
| 74 |
echo |
|---|
| 75 |
echo "WARNING: Couldn't get svn revision number." |
|---|
| 76 |
echo " Is svn or the .svn directories missing?" |
|---|
| 77 |
echo |
|---|
| 78 |
else |
|---|
| 79 |
if [ x$SVN_VERSION = x$CHANGELOG_VERSION ]; then |
|---|
| 80 |
echo "ChangeLog is already up-to-date." |
|---|
| 81 |
else |
|---|
| 82 |
echo "Updating ChangeLog from version $CHANGELOG_VERSION to $SVN_VERSION..." |
|---|
| 83 |
mv $srcdir/ChangeLog $srcdir/ChangeLog.prev |
|---|
| 84 |
$SVN log -v --xml -r $SVN_VERSION:$((CHANGELOG_VERSION+1)) $srcdir | python $srcdir/svnlog2changelog.py > $srcdir/ChangeLog |
|---|
| 85 |
cat $srcdir/ChangeLog.prev >> $srcdir/ChangeLog |
|---|
| 86 |
rm -f $srcdir/ChangeLog.prev |
|---|
| 87 |
fi |
|---|
| 88 |
fi |
|---|
| 89 |
} |
|---|
| 90 |
|
|---|
| 91 |
|
|---|
| 92 |
# main |
|---|
| 93 |
if [ -d .git ]; then |
|---|
| 94 |
go_git |
|---|
| 95 |
else |
|---|
| 96 |
go_svn |
|---|
| 97 |
fi |
|---|