- Add support for automatic ChangeLog creation with svn2cl
git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@171 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
parent
d41e5ff4b8
commit
9f0ed52cbf
4 changed files with 402 additions and 37 deletions
130
config/svn2cl.sh
Executable file
130
config/svn2cl.sh
Executable file
|
@ -0,0 +1,130 @@
|
|||
#!/bin/sh
|
||||
|
||||
# svn2cl.sh - front end shell script for svn2cl.xsl, calls xsltproc
|
||||
# with the correct parameters
|
||||
#
|
||||
# Copyright (C) 2005 Arthur de Jong.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# 3. The name of the author may not be used to endorse or promote
|
||||
# products derived from this software without specific prior
|
||||
# written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
# exit on any failures
|
||||
set -e
|
||||
|
||||
# svn2cl version
|
||||
VERSION="0.3"
|
||||
|
||||
# set default parameters
|
||||
STRIPPREFIX=`basename $(pwd)`
|
||||
LINELEN=75
|
||||
GROUPBYDAY="no"
|
||||
INCLUDEREV="no"
|
||||
CHANGELOG="ChangeLog"
|
||||
|
||||
# do command line checking
|
||||
prog=`basename $0`
|
||||
while [ -n "$1" ]
|
||||
do
|
||||
case "$1" in
|
||||
--strip-prefix)
|
||||
STRIPPREFIX="$2"
|
||||
shift 2
|
||||
;;
|
||||
--linelen)
|
||||
LINELEN="$2";
|
||||
shift 2
|
||||
;;
|
||||
--group-by-day)
|
||||
GROUPBYDAY="yes";
|
||||
shift
|
||||
;;
|
||||
-r|--include-rev)
|
||||
INCLUDEREV="yes";
|
||||
shift
|
||||
;;
|
||||
-o|--output)
|
||||
CHANGELOG="$2"
|
||||
shift 2
|
||||
;;
|
||||
--stdout)
|
||||
CHANGELOG="-"
|
||||
shift
|
||||
;;
|
||||
-V|--version)
|
||||
echo "$prog $VERSION";
|
||||
echo "Written by Arthur de Jong."
|
||||
echo ""
|
||||
echo "Copyright (C) 2005 Arthur de Jong."
|
||||
echo "This is free software; see the source for copying conditions. There is NO"
|
||||
echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
||||
exit 0
|
||||
;;
|
||||
-h|--help)
|
||||
echo "Usage: $prog [OPTION]..."
|
||||
echo "Generate a ChangeLog from a checked out subversion repository."
|
||||
echo ""
|
||||
echo " --strip-prefix NAME prefix to strip from all entries, defaults"
|
||||
echo " to the name of the current directory"
|
||||
echo " --linelen NUM maximum length of an output line"
|
||||
echo " --group-by-day group changelog entries by day"
|
||||
echo " -r, --include-rev include revision numbers"
|
||||
echo " -o, --output FILE output to FILE instead of ChangeLog"
|
||||
echo " -f, --file FILE alias for -o, --output"
|
||||
echo " --stdout output to stdout instead of ChangeLog"
|
||||
echo " -h, --help display this help and exit"
|
||||
echo " -V, --version output version information and exit"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "$prog: invalid option -- $1"
|
||||
echo "Try \`$prog --help' for more information."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# find the directory that this script resides in
|
||||
prog="$0"
|
||||
while [ -h "$prog" ]
|
||||
do
|
||||
prog=`ls -ld "$prog" | sed "s/^.*-> \(.*\)/\1/;/^[^/]/s,^,$(dirname "$prog")/,"`
|
||||
done
|
||||
dir=`dirname $prog`
|
||||
dir=`cd $dir && pwd`
|
||||
XSL="$dir/svn2cl.xsl"
|
||||
|
||||
# redirect stdout to the changelog file if needed
|
||||
if [ "x$CHANGELOG" != "x-" ]
|
||||
then
|
||||
exec > "$CHANGELOG"
|
||||
fi
|
||||
|
||||
# actually run the command we need
|
||||
svn --verbose --xml log | \
|
||||
xsltproc --stringparam strip-prefix "$STRIPPREFIX" \
|
||||
--stringparam linelen $LINELEN \
|
||||
--stringparam groupbyday $GROUPBYDAY \
|
||||
--stringparam include-rev $INCLUDEREV \
|
||||
"$XSL" -
|
215
config/svn2cl.xsl
Normal file
215
config/svn2cl.xsl
Normal file
|
@ -0,0 +1,215 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
|
||||
svn2cl.xsl - xslt stylesheet for converting svn log to a normal
|
||||
changelog
|
||||
|
||||
This file is based on several implementations of this conversion
|
||||
that I was not completely happy with and some other common
|
||||
xslt constructs found on the web.
|
||||
|
||||
Copyright (C) 2004 Arthur de Jong.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. The name of the author may not be used to endorse or promote
|
||||
products derived from this software without specific prior
|
||||
written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
-->
|
||||
|
||||
<!--
|
||||
TODO
|
||||
- make external lookups of author names possible
|
||||
- find a place for revision numbers
|
||||
- mark deleted files as such
|
||||
- combine paths
|
||||
- make stripping of characters nicer
|
||||
-->
|
||||
|
||||
<xsl:stylesheet
|
||||
version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns="http://www.w3.org/1999/xhtml">
|
||||
|
||||
<xsl:output
|
||||
method="text"
|
||||
encoding="iso-8859-15"
|
||||
media-type="text/plain"
|
||||
omit-xml-declaration="yes"
|
||||
standalone="yes"
|
||||
indent="no" />
|
||||
|
||||
<xsl:strip-space elements="*" />
|
||||
|
||||
<!-- the prefix of pathnames to strip -->
|
||||
<xsl:param name="strip-prefix" select="'/'" />
|
||||
|
||||
<!-- format one entry from the log -->
|
||||
<xsl:template match="logentry">
|
||||
<!-- date -->
|
||||
<xsl:apply-templates select="date" />
|
||||
<!-- two spaces -->
|
||||
<xsl:text> </xsl:text>
|
||||
<!-- author's name -->
|
||||
<xsl:apply-templates select="author" />
|
||||
<!-- two newlines -->
|
||||
<xsl:text>
|
||||
|
||||
</xsl:text>
|
||||
<!-- the log message -->
|
||||
<xsl:apply-templates select="msg" />
|
||||
<!-- another two newlines -->
|
||||
<xsl:text>
|
||||
|
||||
</xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
<!-- format date -->
|
||||
<xsl:template match="date">
|
||||
<xsl:variable name="date" select="normalize-space(.)" />
|
||||
<xsl:value-of select="substring($date,1,10)" />
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:value-of select="substring($date,12,5)" />
|
||||
</xsl:template>
|
||||
|
||||
<!-- format author -->
|
||||
<xsl:template match="author">
|
||||
<xsl:value-of select="normalize-space(.)" />
|
||||
</xsl:template>
|
||||
|
||||
<!-- format log message -->
|
||||
<xsl:template match="msg">
|
||||
<!-- first line is indented (other indents are done in wrap template) -->
|
||||
<xsl:text> * </xsl:text>
|
||||
<!-- get paths string -->
|
||||
<xsl:variable name="paths">
|
||||
<xsl:apply-templates select="../paths" />
|
||||
</xsl:variable>
|
||||
<!-- print the paths and message nicely wrapped -->
|
||||
<xsl:call-template name="wrap">
|
||||
<xsl:with-param name="txt" select="concat($paths,': ',normalize-space(.))" />
|
||||
</xsl:call-template>
|
||||
</xsl:template>
|
||||
|
||||
<!-- present paths nice -->
|
||||
<xsl:template match="paths">
|
||||
<xsl:for-each select="path">
|
||||
<xsl:sort select="normalize-space(.)" data-type="text" />
|
||||
<xsl:if test="not(position()=1)">
|
||||
<xsl:text>, </xsl:text>
|
||||
</xsl:if>
|
||||
<xsl:variable name="p1" select="normalize-space(.)" />
|
||||
<xsl:variable name="p2">
|
||||
<xsl:choose>
|
||||
<xsl:when test="starts-with($p1,'/')">
|
||||
<xsl:value-of select="substring($p1,2)" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$p1" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="p3">
|
||||
<xsl:choose>
|
||||
<xsl:when test="starts-with($p2,$strip-prefix)">
|
||||
<xsl:value-of select="substring($p2,1+string-length($strip-prefix))" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$p2" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="p4">
|
||||
<xsl:choose>
|
||||
<xsl:when test="starts-with($p3,'/')">
|
||||
<xsl:value-of select="substring($p3,2)" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$p3" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$p4 = ''">
|
||||
<xsl:value-of select="'.'" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$p4" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:for-each>
|
||||
</xsl:template>
|
||||
|
||||
<!-- string-wrapping template -->
|
||||
<xsl:template name="wrap">
|
||||
<xsl:param name="txt" />
|
||||
<xsl:variable name="linelen" select="67" />
|
||||
<xsl:choose>
|
||||
<xsl:when test="(string-length($txt) < $linelen) or not(contains($txt,' '))">
|
||||
<!-- this is easy, nothing to do -->
|
||||
<xsl:value-of select="$txt" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<!-- find the first line -->
|
||||
<xsl:variable name="tmp" select="substring($txt,1,$linelen)" />
|
||||
<xsl:variable name="line">
|
||||
<xsl:choose>
|
||||
<xsl:when test="contains($tmp,' ')">
|
||||
<xsl:call-template name="find-line">
|
||||
<xsl:with-param name="txt" select="$tmp" />
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="substring-before($txt,' ')" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<!-- print line and newline -->
|
||||
<xsl:value-of select="$line" />
|
||||
<xsl:text>
|
||||
</xsl:text>
|
||||
<!-- wrap the rest of the text -->
|
||||
<xsl:call-template name="wrap">
|
||||
<xsl:with-param name="txt" select="normalize-space(substring($txt,string-length($line)+1))" />
|
||||
</xsl:call-template>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<!-- template to trim line to contain space as last char -->
|
||||
<xsl:template name="find-line">
|
||||
<xsl:param name="txt" />
|
||||
<xsl:choose>
|
||||
<xsl:when test="substring($txt,string-length($txt),1) = ' '">
|
||||
<xsl:value-of select="normalize-space($txt)" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:call-template name="find-line">
|
||||
<xsl:with-param name="txt" select="substring($txt,1,string-length($txt)-1)" />
|
||||
</xsl:call-template>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
Loading…
Add table
Add a link
Reference in a new issue