ask for changelog entry, use it in changelog and commit message
[claws.git] / commitHelper
1 #!/bin/sh
2 head -16 configure.ac | grep VERSION= > /tmp/commitTool.tmp
3 source /tmp/commitTool.tmp
4 if [ -z "$EXTRA_GTK2_VERSION" ]; then
5         EXTRA_VERSION=`echo $EXTRA_VERSION | awk -F'.' '{for (i=1;i<NF;i++){printf $i"."};printf $NF+1}'`
6         nextsversion="${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}cvs${EXTRA_VERSION}"
7         nextextra="$EXTRA_VERSION"
8         nextextratype="head"
9 else
10         EXTRA_GTK2_VERSION=`echo $EXTRA_GTK2_VERSION | awk -F'.' '{for (i=1;i<NF;i++){printf $i"."};printf $NF+1}'`
11         nextsversion="${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}cvs${EXTRA_VERSION}${EXTRA_GTK2_VERSION}"
12         nextextra="$EXTRA_GTK2_VERSION"
13         nextextratype="gtk2"
14 fi
15 rm /tmp/commitTool.tmp
16
17 IFS='
18 '
19 filelist=`cvs status $@ 2>/dev/null |grep ^File`
20
21 for file in $filelist; do
22         merge=`echo $file | grep Merge`
23         modif=`echo $file | grep Locally`
24
25         if [ "$merge" != "" ]; then
26                 echo $merge
27                 echo You have to update first
28                 exit
29         fi;
30         if [ "$modif" != "" ]; then
31                 echo $modif
32         fi;
33 done;
34 patchset="("
35 log=""
36 files=`cvs diff -u $@ 2>/dev/null |grep ^Index`
37 echo "--8<----------"
38 name=`whoami`
39 #change if your login isn't your name
40 if [ "$name" == "claws" ]; then
41         name="paul";
42 fi;
43 if [ "$name" == "reboot" ]; then
44         name="christoph";
45 fi;
46
47 log="`date +%Y-%m-%d` [$name]\t$nextsversion\n\n"
48 for line in $files; do
49         file=`echo $line | cut -d' ' -f2`
50         dir=`dirname $file`
51         filename=`basename $file`
52         cvsfile="$dir/CVS/Entries"
53         version=`grep "\/$filename\/" $cvsfile | cut -d'/' -f3`
54         nextversion=`echo $version | awk -F'.' '{for (i=1;i<NF;i++){printf $i"."};printf $NF+1}'`
55         
56         log="$log\t* $file\n"
57         patchset="$patchset cvs diff -u -r $version -r $nextversion $file;\
58 "
59 done;
60 patchset="$patchset ) > $nextsversion.patchset"
61 echo -e -n $log
62
63 if [ "$EDITOR" == "" ]; then
64         EDITOR=vi
65 fi;
66
67 echo -e "\n#please type in the changelog entry" > /tmp/logentry.$$
68 $EDITOR /tmp/logentry.$$
69 grep -v "^#" /tmp/logentry.$$ |grep -v "^$" | sed "s/^/         /" > /tmp/log.tmp.$$ \
70 && mv /tmp/log.tmp.$$ /tmp/logentry.$$
71 echo >> /tmp/logentry.$$ 
72 cat /tmp/logentry.$$
73
74 echo "--8<----------"
75 if [ -f ChangeLog-gtk2.claws ]; then
76         chlog="ChangeLog-gtk2.claws"
77 elif [ -f ChangeLog.claws ]; then
78         chlog="ChangeLog.claws"
79 else
80         chlog="ChangeLog"
81 fi
82 echo -n "Is it ok (write to $chlog and update configure.ac) [y/N]?"
83 read ans
84 if [ "$ans" == "y" ]; then
85         mv $chlog $chlog.old
86         echo -e -n $log > $chlog
87         cat /tmp/logentry.$$ >> $chlog
88         cat $chlog.old >> $chlog
89         rm $chlog.old
90
91         if [ "$nextextratype" == "head" ]; then
92                 cat configure.ac | sed "s/^EXTRA_VERSION=.*/EXTRA_VERSION=$nextextra/" > configure.ac.new \
93                 && mv configure.ac.new configure.ac ;
94         else
95                 cat configure.ac | sed "s/^EXTRA_GTK2_VERSION=.*/EXTRA_GTK2_VERSION=$nextextra/" > configure.ac.new \
96                 && mv configure.ac.new configure.ac ;
97         fi;
98         
99         echo "$patchset" >> PATCHSETS
100
101         if [ "$@" != "" ]; then
102                 echo commiting $@ PATCHSETS $chlog configure.ac
103                 cvs commit -m "`cat /tmp/logentry.$$`" $@ PATCHSETS $chlog configure.ac
104         else
105                 echo commiting recursively
106                 cvs commit -m "`cat /tmp/logentry.$$` "
107         fi;
108 fi
109 rm -f /tmp/logentry.$$