root/cherokee/trunk/changelog-update.sh

Revision 4031, 2.6 kB (checked in by alo, 3 months ago)

Fixes the changelog update script. Now, the Changelog can be updated
even if there are local commits that have not been pushed upstream.

  • Property svn:executable set to *
Line 
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
Note: See TracBrowser for help on using the browser.