ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/scripts/svn2cl
Revision: 1397
Committed: Mon Dec 7 22:11:59 2009 UTC (15 years, 4 months ago) by gezelter
File size: 11178 byte(s)
Log Message:
more changes to fix build process and divorce ourselves from CVS

File Contents

# User Rev Content
1 gezelter 1397 #!/bin/sh
2    
3     # svn2cl.sh - front end shell script for svn2cl.xsl, calls xsltproc
4     # with the correct parameters
5     #
6     # Copyright (C) 2005, 2006, 2007, 2008, 2009 Arthur de Jong.
7     #
8     # Redistribution and use in source and binary forms, with or without
9     # modification, are permitted provided that the following conditions
10     # are met:
11     # 1. Redistributions of source code must retain the above copyright
12     # notice, this list of conditions and the following disclaimer.
13     # 2. Redistributions in binary form must reproduce the above copyright
14     # notice, this list of conditions and the following disclaimer in
15     # the documentation and/or other materials provided with the
16     # distribution.
17     # 3. The name of the author may not be used to endorse or promote
18     # products derived from this software without specific prior
19     # written permission.
20     #
21     # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22     # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23     # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24     # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
25     # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26     # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
27     # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28     # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
29     # IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30     # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
31     # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32    
33     # exit on any failures
34     set -e
35     # report unset variables
36     set -u
37    
38     # svn2cl version
39     VERSION="0.12"
40    
41     # set default parameters
42     PWD=`pwd`
43     STRIPPREFIX="AUTOMATICALLY-DETERMINED"
44     LINELEN=75
45     GROUPBYDAY="no"
46     INCLUDEREV="no"
47     BREAKBEFOREMSG="no"
48     REPARAGRAPH="no"
49     SEPARATEDAYLOGS="no"
50     ACTIONS="no"
51     CHANGELOG=""
52     OUTSTYLE="cl"
53     SVNLOGCMD="svn --verbose --xml log"
54     SVNINFOCMD="svn --non-interactive info"
55     AUTHORSFILE=""
56     IGNORE_MESSAGE_STARTING=""
57     TITLE="ChangeLog"
58     REVISION_LINK="#r"
59     TMPFILES=""
60     AWK="awk"
61    
62     # do command line checking
63     prog=`basename $0`
64     while [ $# -gt 0 ]
65     do
66     case "$1" in
67     --strip-prefix)
68     STRIPPREFIX="$2"
69     shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
70     ;;
71     --strip-prefix=*)
72     STRIPPREFIX=`echo "$1" | sed 's/^--[a-z-]*=//'`
73     shift
74     ;;
75     --linelen)
76     LINELEN="$2";
77     shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
78     ;;
79     --linelen=*)
80     LINELEN=`echo "$1" | sed 's/^--[a-z-]*=//'`
81     shift
82     ;;
83     --group-by-day)
84     GROUPBYDAY="yes";
85     shift
86     ;;
87     --separate-daylogs)
88     SEPARATEDAYLOGS="yes"
89     shift
90     ;;
91     -i|--include-rev)
92     INCLUDEREV="yes";
93     shift
94     ;;
95     -a|--include-actions)
96     ACTIONS="yes"
97     shift
98     ;;
99     --break-before-msg|--breaks-before-msg)
100     # FIXME: if next argument is numeric use that as a parameter
101     BREAKBEFOREMSG="yes"
102     shift
103     ;;
104     --break-before-msg=*|--breaks-before-msg=*)
105     BREAKBEFOREMSG=`echo "$1" | sed 's/^--[a-z-]*=//'`
106     shift
107     ;;
108     --reparagraph)
109     REPARAGRAPH="yes"
110     shift
111     ;;
112     --title)
113     TITLE="$2"
114     shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
115     ;;
116     --title=*)
117     TITLE=`echo "$1" | sed 's/^--[a-z-]*=//'`
118     shift
119     ;;
120     --revision-link)
121     REVISION_LINK="$2"
122     shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
123     ;;
124     --revision-link=*)
125     REVISION_LINK=`echo "$1" | sed 's/^--[a-z-]*=//'`
126     shift
127     ;;
128     --ignore-message-starting)
129     IGNORE_MESSAGE_STARTING="$2"
130     shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
131     ;;
132     --ignore-message-starting=*)
133     IGNORE_MESSAGE_STARTING=`echo "$1" | sed 's/^--[a-z-]*=//'`
134     shift
135     ;;
136     -f|--file|-o|--output)
137     CHANGELOG="$2"
138     shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
139     ;;
140     --file=*|--output=*)
141     CHANGELOG=`echo "$1" | sed 's/^--[a-z-]*=//'`
142     shift
143     ;;
144     --stdout)
145     CHANGELOG="-"
146     shift
147     ;;
148     --authors)
149     AUTHORSFILE="$2"
150     shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
151     ;;
152     --authors=*)
153     AUTHORSFILE=`echo "$1" | sed 's/^--[a-z-]*=//'`
154     shift
155     ;;
156     --html)
157     OUTSTYLE="html"
158     shift
159     ;;
160     -r|--revision|--targets|--limit)
161     # add these as extra options to the command (with argument)
162     arg=`echo "$2" | sed "s/'/'\"'\"'/g"`
163     SVNLOGCMD="$SVNLOGCMD $1 '$arg'"
164     shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
165     ;;
166     --username|--password|--config-dir)
167     # add these as extra options to the command (with argument)
168     arg=`echo "$2" | sed "s/'/'\"'\"'/g"`
169     SVNLOGCMD="$SVNLOGCMD $1 '$arg'"
170     # also add to svn info command
171     SVNINFOCMD="$SVNINFOCMD $1 '$arg'"
172     shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
173     ;;
174     --revision=*|--targets=*|--limit=*)
175     # these are single argument versions of the above
176     arg=`echo "$1" | sed "s/'/'\"'\"'/g"`
177     SVNLOGCMD="$SVNLOGCMD '$arg'"
178     shift
179     ;;
180     --username=*|--password=*|--config-dir=*)
181     # these are single argument versions of the above
182     arg=`echo "$1" | sed "s/'/'\"'\"'/g"`
183     SVNLOGCMD="$SVNLOGCMD '$arg'"
184     # also add to svn info command
185     SVNINFOCMD="$SVNINFOCMD '$arg'"
186     shift
187     ;;
188     --stop-on-copy)
189     # add these as simple options
190     SVNLOGCMD="$SVNLOGCMD $1"
191     shift
192     ;;
193     --no-auth-cache|--non-interactive)
194     # add these as simple options
195     SVNLOGCMD="$SVNLOGCMD $1"
196     # also add to svn info command
197     SVNINFOCMD="$SVNINFOCMD $1"
198     shift
199     ;;
200     -V|--version)
201     echo "$prog $VERSION";
202     echo "Written by Arthur de Jong."
203     echo ""
204     echo "Copyright (C) 2005, 2006, 2007, 2008, 2009 Arthur de Jong."
205     echo "This is free software; see the source for copying conditions. There is NO"
206     echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
207     exit 0
208     ;;
209     -h|--help)
210     echo "Usage: $prog [OPTION]... [PATH]..."
211     echo "Generate a ChangeLog from a subversion repository."
212     echo ""
213     echo " --strip-prefix=NAME prefix to strip from all entries, defaults"
214     echo " path inside the repository"
215     echo " --linelen=NUM maximum length of an output line"
216     echo " --group-by-day group changelog entries by day"
217     echo " --separate-daylogs put a blank line between grouped by day entries"
218     echo " -i, --include-rev include revision numbers"
219     echo " -a, --include-actions add [ADD], [DEL] and [CPY] tags to files"
220     echo " --break-before-msg[=NUM] add a line break (or multiple breaks)"
221     echo " between the paths and the log message"
222     echo " --reparagraph rewrap lines inside a paragraph"
223     echo " --title=NAME title used in html file"
224     echo " --revision-link=NAME link revision numbers in html output"
225     echo " --ignore-message-starting=STRING"
226     echo " ignore messages starting with the string"
227     echo " -o, --output=FILE output to FILE instead of ChangeLog"
228     echo " -f, --file=FILE alias for -o, --output"
229     echo " --stdout output to stdout instead of ChangeLog"
230     echo " --authors=FILE file to read for authors"
231     echo " --html output as html instead of plain text"
232     echo " -h, --help display this help and exit"
233     echo " -V, --version output version information and exit"
234     echo ""
235     echo "PATH arguments and the following options are passed to the svn log"
236     echo "command: -r, --revision, --targets --stop-on-copy, --username,"
237     echo "--password, --no-auth-cache, --non-interactive, --config-dir and"
238     echo "--limit (see 'svn help log' for more information)."
239     exit 0
240     ;;
241     -*)
242     echo "$prog: invalid option -- $1"
243     echo "Try '$prog --help' for more information."
244     exit 1
245     ;;
246     *)
247     arg=`echo "$1" | sed "s/'/'\"'\"'/g"`
248     SVNLOGCMD="$SVNLOGCMD '$arg'"
249     SVNINFOCMD="$SVNINFOCMD '$arg'"
250     shift
251     ;;
252     esac
253     done
254    
255     # find the directory that this script resides in
256     prog="$0"
257     while [ -h "$prog" ]
258     do
259     dir=`dirname "$prog"`
260     prog=`ls -ld "$prog" | sed "s/^.*-> \(.*\)/\1/;/^[^/]/s,^,$dir/,"`
261     done
262     dir=`dirname "$prog"`
263     dir=`cd "$dir" && pwd`
264     XSL="$dir/svn2${OUTSTYLE}.xsl"
265    
266     # check if the authors file is formatted as a legacy
267     # colon separated file
268     if [ -n "$AUTHORSFILE" ] && \
269     egrep '^(#.*|[a-zA-Z0-9].*:)' "$AUTHORSFILE" > /dev/null 2>/dev/null
270     then
271     # create a temporary file
272     tmpfile=`mktemp -t svn2cl.XXXXXX 2> /dev/null || tempfile -s .svn2cl 2> /dev/null || echo "$AUTHORSFILE.$$.xml"`
273     arg=`echo "$tmpfile" | sed "s/'/'\"'\"'/g"`
274     TMPFILES="$TMPFILES '$arg'"
275     # generate an authors.xml file on the fly
276     echo '<authors>' > "$tmpfile"
277     sed -n 's/&/\&amp;/g;s/</\&lt;/g;s/>/\&gt;/g;s|^\([a-zA-Z0-9][^:]*\):\(.*\)$| <author uid="\1">\2</author>|p' \
278     < "$AUTHORSFILE" >> "$tmpfile"
279     echo '</authors>' >> "$tmpfile"
280     AUTHORSFILE="$tmpfile"
281     fi
282    
283     # find the absolute path of the authors file
284     # (otherwise xsltproc will find the file relative to svn2cl.xsl)
285     pwd=`pwd`
286     AUTHORSFILE=`echo "$AUTHORSFILE" | sed "/^[^/]/s|^|$pwd/|"`
287    
288     # if no filename was specified, make one up
289     if [ -z "$CHANGELOG" ]
290     then
291     CHANGELOG="ChangeLog"
292     if [ "$OUTSTYLE" != "cl" ]
293     then
294     CHANGELOG="$CHANGELOG.$OUTSTYLE"
295     fi
296     fi
297    
298     # try to determin a prefix to strip from all paths
299     if [ "$STRIPPREFIX" = "AUTOMATICALLY-DETERMINED" ]
300     then
301     STRIPPREFIX=`LANG=C eval "$SVNINFOCMD" | $AWK '/^URL:/{url=$2} /^Repository Root:/{root=$3} END{if(root){print substr(url,length(root)+2)}else{n=split(url,u,"/");print u[n]}}'`
302     STRIPPREFIX=`echo "$STRIPPREFIX" | sed 's/%20/ /g'`
303     fi
304    
305     # redirect stdout to the changelog file if needed
306     if [ "x$CHANGELOG" != "x-" ]
307     then
308     exec > "$CHANGELOG"
309     fi
310    
311     # actually run the command we need
312     eval "$SVNLOGCMD" | \
313     xsltproc --stringparam strip-prefix "$STRIPPREFIX" \
314     --stringparam linelen "$LINELEN" \
315     --stringparam groupbyday "$GROUPBYDAY" \
316     --stringparam separate-daylogs "$SEPARATEDAYLOGS" \
317     --stringparam include-rev "$INCLUDEREV" \
318     --stringparam include-actions "$ACTIONS" \
319     --stringparam breakbeforemsg "$BREAKBEFOREMSG" \
320     --stringparam reparagraph "$REPARAGRAPH" \
321     --stringparam authorsfile "$AUTHORSFILE" \
322     --stringparam title "$TITLE" \
323     --stringparam revision-link "$REVISION_LINK" \
324     --stringparam ignore-message-starting "$IGNORE_MESSAGE_STARTING" \
325     --nowrite \
326     --nomkdir \
327     --nonet \
328     "$XSL" -
329    
330     # clean up temporary files
331     [ -n "$TMPFILES" ] && eval "rm -f $TMPFILES"
332    
333     # we're done (the previous command could return false)
334     exit 0

Properties

Name Value
svn:executable *