mirror of
https://github.com/edeproject/ede.git
synced 2023-08-10 21:13:03 +03:00
Importing svn2cl as it is used from script that makes release archives.
Making code DBus optional; all DBus related code is wrapped inside EDELIB_HAVE_DBUS.
This commit is contained in:
@ -6,12 +6,21 @@ RELEASE_VERSION="2.0"
|
||||
|
||||
############################################
|
||||
|
||||
script_dir="$( cd "$( dirname "$0" )" && pwd )"
|
||||
release_dir="release-$RELEASE_VERSION"
|
||||
release_dir_full="`pwd`/$release_dir"
|
||||
|
||||
dprint() {
|
||||
echo "* $1"
|
||||
}
|
||||
|
||||
release_dir="release-$RELEASE_VERSION"
|
||||
release_dir_full="`pwd`/$release_dir"
|
||||
generate_changelog() {
|
||||
$script_dir/svn2cl/svn2cl.sh --authors=$script_dir/svn2cl/authors.xml -o $1/ChangeLog $1
|
||||
}
|
||||
|
||||
upload_file() {
|
||||
scp $1-$2.tar.gz karijes@frs.sourceforge.net:/home/frs/project/ede/$1/$2/$1-$2.tar.gz
|
||||
}
|
||||
|
||||
# prepare location dir
|
||||
rm -Rf $release_dir
|
||||
@ -31,13 +40,15 @@ svn copy "$ede_svn_trunk/edelib" "$ede_svn_tags/edelib-$RELEASE_VERSION" -m "Tag
|
||||
dprint "Tagging ede"
|
||||
svn copy "$ede_svn_trunk/ede2" "$ede_svn_tags/ede-$RELEASE_VERSION" -m "Tagging ede to $RELEASE_VERSION"
|
||||
|
||||
############################################
|
||||
###########################################
|
||||
|
||||
package="edelib-$RELEASE_VERSION"
|
||||
|
||||
dprint "Getting edelib..."
|
||||
svn co "$ede_svn_trunk/edelib" $package
|
||||
|
||||
generate_changelog $package
|
||||
|
||||
cd $package
|
||||
find . -name ".svn" -type d | xargs rm -Rf
|
||||
./autogen.sh
|
||||
@ -54,6 +65,8 @@ package="ede-$RELEASE_VERSION"
|
||||
dprint "Getting ede..."
|
||||
svn co "$ede_svn_trunk/ede2" $package
|
||||
|
||||
generate_changelog $package
|
||||
|
||||
cd $package
|
||||
find . -name ".svn" -type d | xargs rm -Rf
|
||||
./autogen.sh
|
||||
@ -77,3 +90,7 @@ cd ..
|
||||
tar -czpvf $package.tar.gz $package
|
||||
md5sum $package.tar.gz >> checksum
|
||||
|
||||
############################################
|
||||
|
||||
#upload_file edelib $RELEASE_VERSION
|
||||
#upload_file ede $RELEASE_VERSION
|
||||
|
9
tools/svn2cl/authors.xml
Normal file
9
tools/svn2cl/authors.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<authors xmlns:html="http://www.w3.org/1999/xhtml">
|
||||
<author uid="karijes">
|
||||
Sanel Zukan <karijes@users.sourceforge.net>
|
||||
</author>
|
||||
<author uid="vljubovic">
|
||||
Vedran Ljubovic <vljubovic@users.sourceforge.net>
|
||||
</author>
|
||||
</authors>
|
343
tools/svn2cl/svn2cl.sh
Executable file
343
tools/svn2cl/svn2cl.sh
Executable file
@ -0,0 +1,343 @@
|
||||
#!/bin/sh
|
||||
|
||||
# svn2cl.sh - front end shell script for svn2cl.xsl, calls xsltproc
|
||||
# with the correct parameters
|
||||
#
|
||||
# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 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
|
||||
# report unset variables
|
||||
set -u
|
||||
|
||||
# svn2cl version
|
||||
VERSION="0.13"
|
||||
|
||||
# set default parameters
|
||||
PWD=`pwd`
|
||||
STRIPPREFIX="AUTOMATICALLY-DETERMINED"
|
||||
LINELEN=75
|
||||
GROUPBYDAY="no"
|
||||
INCLUDEREV="no"
|
||||
BREAKBEFOREMSG="no"
|
||||
REPARAGRAPH="no"
|
||||
SEPARATEDAYLOGS="no"
|
||||
ACTIONS="no"
|
||||
CHANGELOG=""
|
||||
OUTSTYLE="cl"
|
||||
SVNLOGCMD="svn --verbose --xml log"
|
||||
SVNINFOCMD="svn --non-interactive info"
|
||||
AUTHORSFILE=""
|
||||
IGNORE_MESSAGE_STARTING=""
|
||||
TITLE="ChangeLog"
|
||||
REVISION_LINK="#r"
|
||||
TICKET_LINK=""
|
||||
TMPFILES=""
|
||||
AWK="awk"
|
||||
|
||||
# do command line checking
|
||||
prog=`basename "$0"`
|
||||
while [ $# -gt 0 ]
|
||||
do
|
||||
case "$1" in
|
||||
--strip-prefix)
|
||||
STRIPPREFIX="$2"
|
||||
shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
|
||||
;;
|
||||
--strip-prefix=*)
|
||||
STRIPPREFIX=`echo "$1" | sed 's/^--[a-z-]*=//'`
|
||||
shift
|
||||
;;
|
||||
--linelen)
|
||||
LINELEN="$2";
|
||||
shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
|
||||
;;
|
||||
--linelen=*)
|
||||
LINELEN=`echo "$1" | sed 's/^--[a-z-]*=//'`
|
||||
shift
|
||||
;;
|
||||
--group-by-day)
|
||||
GROUPBYDAY="yes";
|
||||
shift
|
||||
;;
|
||||
--separate-daylogs)
|
||||
SEPARATEDAYLOGS="yes"
|
||||
shift
|
||||
;;
|
||||
-i|--include-rev)
|
||||
INCLUDEREV="yes";
|
||||
shift
|
||||
;;
|
||||
-a|--include-actions)
|
||||
ACTIONS="yes"
|
||||
shift
|
||||
;;
|
||||
--break-before-msg|--breaks-before-msg)
|
||||
# FIXME: if next argument is numeric use that as a parameter
|
||||
BREAKBEFOREMSG="yes"
|
||||
shift
|
||||
;;
|
||||
--break-before-msg=*|--breaks-before-msg=*)
|
||||
BREAKBEFOREMSG=`echo "$1" | sed 's/^--[a-z-]*=//'`
|
||||
shift
|
||||
;;
|
||||
--reparagraph)
|
||||
REPARAGRAPH="yes"
|
||||
shift
|
||||
;;
|
||||
--title)
|
||||
TITLE="$2"
|
||||
shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
|
||||
;;
|
||||
--title=*)
|
||||
TITLE=`echo "$1" | sed 's/^--[a-z-]*=//'`
|
||||
shift
|
||||
;;
|
||||
--revision-link)
|
||||
REVISION_LINK="$2"
|
||||
shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
|
||||
;;
|
||||
--revision-link=*)
|
||||
REVISION_LINK=`echo "$1" | sed 's/^--[a-z-]*=//'`
|
||||
shift
|
||||
;;
|
||||
--ticket-link)
|
||||
TICKET_LINKK="$2"
|
||||
shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
|
||||
;;
|
||||
--ticket-link=*)
|
||||
TICKET_LINK=`echo "$1" | sed 's/^--[a-z-]*=//'`
|
||||
shift
|
||||
;;
|
||||
--ignore-message-starting)
|
||||
IGNORE_MESSAGE_STARTING="$2"
|
||||
shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
|
||||
;;
|
||||
--ignore-message-starting=*)
|
||||
IGNORE_MESSAGE_STARTING=`echo "$1" | sed 's/^--[a-z-]*=//'`
|
||||
shift
|
||||
;;
|
||||
-f|--file|-o|--output)
|
||||
CHANGELOG="$2"
|
||||
shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
|
||||
;;
|
||||
--file=*|--output=*)
|
||||
CHANGELOG=`echo "$1" | sed 's/^--[a-z-]*=//'`
|
||||
shift
|
||||
;;
|
||||
--stdout)
|
||||
CHANGELOG="-"
|
||||
shift
|
||||
;;
|
||||
--authors)
|
||||
AUTHORSFILE="$2"
|
||||
shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
|
||||
;;
|
||||
--authors=*)
|
||||
AUTHORSFILE=`echo "$1" | sed 's/^--[a-z-]*=//'`
|
||||
shift
|
||||
;;
|
||||
--html)
|
||||
OUTSTYLE="html"
|
||||
shift
|
||||
;;
|
||||
-r|--revision|-c|--change|--targets|-l|--limit)
|
||||
# add these as extra options to the log command (with argument)
|
||||
arg=`echo "$2" | sed "s/'/'\"'\"'/g"`
|
||||
SVNLOGCMD="$SVNLOGCMD $1 '$arg'"
|
||||
shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
|
||||
;;
|
||||
--revision=*|--change=*|--targets=*|--limit=*)
|
||||
# these are single argument versions of the above (with argument)
|
||||
arg=`echo "$1" | sed "s/'/'\"'\"'/g"`
|
||||
SVNLOGCMD="$SVNLOGCMD '$arg'"
|
||||
shift
|
||||
;;
|
||||
--username|--password|--config-dir|--config-option)
|
||||
# add these as extra options to the log and info commands (with argument)
|
||||
arg=`echo "$2" | sed "s/'/'\"'\"'/g"`
|
||||
SVNLOGCMD="$SVNLOGCMD $1 '$arg'"
|
||||
SVNINFOCMD="$SVNINFOCMD $1 '$arg'"
|
||||
shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; }
|
||||
;;
|
||||
--username=*|--password=*|--config-dir=*|--config-option=*)
|
||||
# these are single argument versions of the above (with argument)
|
||||
arg=`echo "$1" | sed "s/'/'\"'\"'/g"`
|
||||
SVNLOGCMD="$SVNLOGCMD '$arg'"
|
||||
SVNINFOCMD="$SVNINFOCMD '$arg'"
|
||||
shift
|
||||
;;
|
||||
-g|--use-merge-history|--stop-on-copy)
|
||||
# add these as simple options to the log command
|
||||
SVNLOGCMD="$SVNLOGCMD $1"
|
||||
shift
|
||||
;;
|
||||
--no-auth-cache|--non-interactive|--trust-server-cert)
|
||||
# add these as simple options to both the log and info commands
|
||||
SVNLOGCMD="$SVNLOGCMD $1"
|
||||
SVNINFOCMD="$SVNINFOCMD $1"
|
||||
shift
|
||||
;;
|
||||
-V|--version)
|
||||
echo "$prog $VERSION";
|
||||
echo "Written by Arthur de Jong."
|
||||
echo ""
|
||||
echo "Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 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]... [PATH]..."
|
||||
echo "Generate a ChangeLog from a subversion repository."
|
||||
echo ""
|
||||
echo " --strip-prefix=NAME prefix to strip from all entries, defaults path"
|
||||
echo " inside the repository"
|
||||
echo " --linelen=NUM maximum length of an output line"
|
||||
echo " --group-by-day group changelog entries by day"
|
||||
echo " --separate-daylogs put a blank line between grouped by day entries"
|
||||
echo " -i, --include-rev include revision numbers"
|
||||
echo " -a, --include-actions add [ADD], [DEL] and [CPY] tags to files"
|
||||
echo " --break-before-msg[=NUM] add a line break (or multiple breaks)"
|
||||
echo " between the paths and the log message"
|
||||
echo " --reparagraph rewrap lines inside a paragraph"
|
||||
echo " --title=NAME title used in html file"
|
||||
echo " --revision-link=NAME link revision numbers in html output"
|
||||
echo " --ticket-link=NAME change #foo strings to links"
|
||||
echo " --ignore-message-starting=STRING"
|
||||
echo " ignore messages starting with the string"
|
||||
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 " --authors=FILE file to read for authors"
|
||||
echo " --html output as html instead of plain text"
|
||||
echo " -h, --help display this help and exit"
|
||||
echo " -V, --version output version information and exit"
|
||||
echo ""
|
||||
echo "PATH arguments and the following options are passed to the svn log"
|
||||
echo "command: -r, --revision, -g, --use-merge-history, -c, --change,"
|
||||
echo "--targets, --stop-on-copy, -l, --username, --password, --no-auth-cache,"
|
||||
echo "--non-interactive, --trust-server-cert, --config-dir and --config-option"
|
||||
echo "(see 'svn help log' for more information)."
|
||||
exit 0
|
||||
;;
|
||||
-*)
|
||||
echo "$prog: invalid option -- $1"
|
||||
echo "Try '$prog --help' for more information."
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
arg=`echo "$1" | sed "s/'/'\"'\"'/g"`
|
||||
SVNLOGCMD="$SVNLOGCMD '$arg'"
|
||||
SVNINFOCMD="$SVNINFOCMD '$arg'"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# find the directory that this script resides in
|
||||
prog="$0"
|
||||
while [ -h "$prog" ]
|
||||
do
|
||||
dir=`dirname "$prog"`
|
||||
prog=`ls -ld "$prog" | sed "s/^.*-> \(.*\)/\1/;/^[^/]/s,^,$dir/,"`
|
||||
done
|
||||
dir=`dirname "$prog"`
|
||||
dir=`cd "$dir" && pwd`
|
||||
XSL="$dir/svn2${OUTSTYLE}.xsl"
|
||||
|
||||
# check if the authors file is formatted as a legacy
|
||||
# colon separated file
|
||||
if [ -n "$AUTHORSFILE" ] && \
|
||||
egrep '^(#.*|[a-zA-Z0-9].*:)' "$AUTHORSFILE" > /dev/null 2>/dev/null
|
||||
then
|
||||
# create a temporary file
|
||||
tmpfile=`mktemp -t svn2cl.XXXXXX 2> /dev/null || tempfile -s .svn2cl 2> /dev/null || echo "$AUTHORSFILE.$$.xml"`
|
||||
arg=`echo "$tmpfile" | sed "s/'/'\"'\"'/g"`
|
||||
TMPFILES="$TMPFILES '$arg'"
|
||||
# generate an authors.xml file on the fly
|
||||
echo '<authors>' > "$tmpfile"
|
||||
sed -n 's/&/\&/g;s/</\</g;s/>/\>/g;s|^\([a-zA-Z0-9][^:]*\):\(.*\)$| <author uid="\1">\2</author>|p' \
|
||||
< "$AUTHORSFILE" >> "$tmpfile"
|
||||
echo '</authors>' >> "$tmpfile"
|
||||
AUTHORSFILE="$tmpfile"
|
||||
fi
|
||||
|
||||
# find the absolute path of the authors file
|
||||
# (otherwise xsltproc will find the file relative to svn2cl.xsl)
|
||||
pwd=`pwd`
|
||||
AUTHORSFILE=`echo "$AUTHORSFILE" | sed "/^[^/]/s|^|$pwd/|"`
|
||||
|
||||
# if no filename was specified, make one up
|
||||
if [ -z "$CHANGELOG" ]
|
||||
then
|
||||
CHANGELOG="ChangeLog"
|
||||
if [ "$OUTSTYLE" != "cl" ]
|
||||
then
|
||||
CHANGELOG="$CHANGELOG.$OUTSTYLE"
|
||||
fi
|
||||
fi
|
||||
|
||||
# try to determin a prefix to strip from all paths
|
||||
if [ "$STRIPPREFIX" = "AUTOMATICALLY-DETERMINED" ]
|
||||
then
|
||||
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]}}'`
|
||||
STRIPPREFIX=`echo "$STRIPPREFIX" | sed 's/%20/ /g'`
|
||||
fi
|
||||
|
||||
# redirect stdout to the changelog file if needed
|
||||
if [ "x$CHANGELOG" != "x-" ]
|
||||
then
|
||||
exec > "$CHANGELOG"
|
||||
fi
|
||||
|
||||
# actually run the command we need
|
||||
eval "$SVNLOGCMD" | \
|
||||
xsltproc --stringparam strip-prefix "$STRIPPREFIX" \
|
||||
--stringparam linelen "$LINELEN" \
|
||||
--stringparam groupbyday "$GROUPBYDAY" \
|
||||
--stringparam separate-daylogs "$SEPARATEDAYLOGS" \
|
||||
--stringparam include-rev "$INCLUDEREV" \
|
||||
--stringparam include-actions "$ACTIONS" \
|
||||
--stringparam breakbeforemsg "$BREAKBEFOREMSG" \
|
||||
--stringparam reparagraph "$REPARAGRAPH" \
|
||||
--stringparam authorsfile "$AUTHORSFILE" \
|
||||
--stringparam title "$TITLE" \
|
||||
--stringparam revision-link "$REVISION_LINK" \
|
||||
--stringparam ticket-link "$TICKET_LINK" \
|
||||
--stringparam ignore-message-starting "$IGNORE_MESSAGE_STARTING" \
|
||||
--nowrite \
|
||||
--nomkdir \
|
||||
--nonet \
|
||||
"$XSL" -
|
||||
|
||||
# clean up temporary files
|
||||
[ -n "$TMPFILES" ] && eval "rm -f $TMPFILES"
|
||||
|
||||
# we're done (the previous command could return false)
|
||||
exit 0
|
457
tools/svn2cl/svn2cl.xsl
Normal file
457
tools/svn2cl/svn2cl.xsl
Normal file
@ -0,0 +1,457 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
|
||||
svn2cl.xsl - xslt stylesheet for converting svn log to a normal
|
||||
changelog
|
||||
|
||||
version 0.13
|
||||
|
||||
Usage (replace ++ with two minus signs which aren't allowed
|
||||
inside xml comments):
|
||||
svn ++verbose ++xml log | \
|
||||
xsltproc ++stringparam strip-prefix `basename $(pwd)` \
|
||||
++stringparam linelen 75 \
|
||||
++stringparam groupbyday yes \
|
||||
++stringparam separate-daylogs yes \
|
||||
++stringparam include-rev yes \
|
||||
++stringparam include-actions yes \
|
||||
++stringparam breakbeforemsg yes/2 \
|
||||
++stringparam reparagraph yes \
|
||||
++stringparam authorsfile FILE \
|
||||
++stringparam ignore-message-starting \
|
||||
svn2cl.xsl - > 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, 2005, 2006, 2007, 2008, 2009 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.
|
||||
|
||||
-->
|
||||
|
||||
<xsl:stylesheet
|
||||
version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
|
||||
<xsl:output
|
||||
method="text"
|
||||
encoding="utf-8"
|
||||
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="'/'" />
|
||||
|
||||
<!-- the length of a line to wrap messages at -->
|
||||
<xsl:param name="linelen" select="75" />
|
||||
|
||||
<!-- whether entries should be grouped by day -->
|
||||
<xsl:param name="groupbyday" select="'no'" />
|
||||
|
||||
<!-- whether to seperate log messages by empty lines -->
|
||||
<xsl:param name="separate-daylogs" select="'no'" />
|
||||
|
||||
<!-- whether a revision number should be included -->
|
||||
<xsl:param name="include-rev" select="'no'" />
|
||||
|
||||
<!-- whether aaction labels should be added to files -->
|
||||
<xsl:param name="include-actions" select="'no'" />
|
||||
|
||||
<!-- whether the log message should start on a new line -->
|
||||
<xsl:param name="breakbeforemsg" select="'no'" />
|
||||
|
||||
<!-- whether the message should be rewrapped within one paragraph -->
|
||||
<xsl:param name="reparagraph" select="'no'" />
|
||||
|
||||
<!-- whether certain messages should be ignored -->
|
||||
<xsl:param name="ignore-message-starting" select="''" />
|
||||
|
||||
<!-- location of authors file if any -->
|
||||
<xsl:param name="authorsfile" select="''" />
|
||||
<xsl:key name="author-lookup" match="author" use="@uid" />
|
||||
<xsl:variable name="authors-top" select="document($authorsfile)/authors" />
|
||||
|
||||
<!-- determin the path part to strip -->
|
||||
<xsl:variable name="strip-path">
|
||||
<!-- if strip-prefix does not start with a slash, prepend it -->
|
||||
<xsl:if test="not(starts-with($strip-prefix,'/'))">
|
||||
<xsl:text>/</xsl:text>
|
||||
</xsl:if>
|
||||
<!-- the prefix itself -->
|
||||
<xsl:value-of select="$strip-prefix" />
|
||||
<!-- if strip-prefix does not start with a slash, append it -->
|
||||
<xsl:if test="substring($strip-prefix,string-length($strip-prefix),1)!='/'">
|
||||
<xsl:text>/</xsl:text>
|
||||
</xsl:if>
|
||||
</xsl:variable>
|
||||
|
||||
<!-- match the topmost log entry -->
|
||||
<xsl:template match="log">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$ignore-message-starting != ''">
|
||||
<!-- only handle logentries with don't contain the string -->
|
||||
<xsl:apply-templates select="logentry[not(starts-with(msg,$ignore-message-starting))]" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:apply-templates select="logentry" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<!-- add newlines at the end of the changelog -->
|
||||
<xsl:text> </xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
<!-- format one entry from the log -->
|
||||
<xsl:template match="logentry">
|
||||
<xsl:choose>
|
||||
<!-- if we're grouping we should omit some headers -->
|
||||
<xsl:when test="$groupbyday='yes'">
|
||||
<!-- fetch previous entry's date -->
|
||||
<xsl:variable name="prevdate">
|
||||
<xsl:apply-templates select="preceding-sibling::logentry[position()=1]/date" />
|
||||
</xsl:variable>
|
||||
<!-- fetch previous entry's author -->
|
||||
<xsl:variable name="prevauthor">
|
||||
<xsl:value-of select="normalize-space(preceding-sibling::logentry[position()=1]/author)" />
|
||||
</xsl:variable>
|
||||
<!-- fetch this entry's date -->
|
||||
<xsl:variable name="date">
|
||||
<xsl:apply-templates select="date" />
|
||||
</xsl:variable>
|
||||
<!-- fetch this entry's author -->
|
||||
<xsl:variable name="author">
|
||||
<xsl:value-of select="normalize-space(author)" />
|
||||
</xsl:variable>
|
||||
<!-- check if header is changed -->
|
||||
<xsl:if test="($prevdate!=$date) or ($prevauthor!=$author)">
|
||||
<!-- add newline -->
|
||||
<xsl:if test="not(position()=1)">
|
||||
<xsl:text> </xsl:text>
|
||||
</xsl:if>
|
||||
<!-- date -->
|
||||
<xsl:value-of select="$date" />
|
||||
<!-- two spaces -->
|
||||
<xsl:text>  </xsl:text>
|
||||
<!-- author's name -->
|
||||
<xsl:apply-templates select="author" />
|
||||
<!-- two newlines -->
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:if test="$separate-daylogs!='yes'"><xsl:text> </xsl:text></xsl:if>
|
||||
</xsl:if>
|
||||
</xsl:when>
|
||||
<!-- write the log header -->
|
||||
<xsl:otherwise>
|
||||
<!-- add newline -->
|
||||
<xsl:if test="not(position()=1)">
|
||||
<xsl:text> </xsl:text>
|
||||
</xsl:if>
|
||||
<!-- 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>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<!-- get paths string -->
|
||||
<xsl:variable name="paths">
|
||||
<xsl:apply-templates select="paths" />
|
||||
</xsl:variable>
|
||||
<!-- get revision number -->
|
||||
<xsl:variable name="rev">
|
||||
<xsl:if test="$include-rev='yes'">
|
||||
<xsl:text>[r</xsl:text>
|
||||
<xsl:value-of select="@revision" />
|
||||
<xsl:text>] </xsl:text>
|
||||
</xsl:if>
|
||||
</xsl:variable>
|
||||
<!-- trim trailing newlines -->
|
||||
<xsl:variable name="msg">
|
||||
<!-- add a line break before the log message -->
|
||||
<xsl:choose>
|
||||
<xsl:when test="$breakbeforemsg='yes'">
|
||||
<xsl:text> </xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="number($breakbeforemsg)>0">
|
||||
<xsl:call-template name="newlines">
|
||||
<xsl:with-param name="count" select="number($breakbeforemsg)" />
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
<xsl:call-template name="trim-newln">
|
||||
<xsl:with-param name="txt" select="msg" />
|
||||
</xsl:call-template>
|
||||
</xsl:variable>
|
||||
<!-- add newline here if separate-daylogs is in effect -->
|
||||
<xsl:if test="$groupbyday='yes' and $separate-daylogs='yes'"><xsl:text> </xsl:text></xsl:if>
|
||||
<!-- first line is indented (other indents are done in wrap template) -->
|
||||
<xsl:text>	* </xsl:text>
|
||||
<!-- set up the text to wrap -->
|
||||
<xsl:variable name="txt">
|
||||
<xsl:value-of select="$rev" />
|
||||
<xsl:if test="$paths!=''">
|
||||
<xsl:value-of select="concat($paths,': ')" />
|
||||
</xsl:if>
|
||||
<xsl:value-of select="$msg" />
|
||||
</xsl:variable>
|
||||
<!-- print the paths and message nicely wrapped -->
|
||||
<xsl:call-template name="wrap">
|
||||
<xsl:with-param name="txt" select="$txt" />
|
||||
</xsl:call-template>
|
||||
</xsl:template>
|
||||
|
||||
<!-- format date -->
|
||||
<xsl:template match="date">
|
||||
<xsl:variable name="date" select="normalize-space(.)" />
|
||||
<!-- output date part -->
|
||||
<xsl:value-of select="substring($date,1,10)" />
|
||||
<!-- output time part -->
|
||||
<xsl:if test="$groupbyday!='yes'">
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:value-of select="substring($date,12,5)" />
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<!-- format author -->
|
||||
<xsl:template match="author">
|
||||
<xsl:variable name="uid" select="normalize-space(.)" />
|
||||
<!-- try to lookup author in authorsfile -->
|
||||
<xsl:choose>
|
||||
<xsl:when test="$authorsfile!=''">
|
||||
<xsl:for-each select="$authors-top">
|
||||
<xsl:variable name="author" select="key('author-lookup',$uid)" />
|
||||
<!-- present result -->
|
||||
<xsl:choose>
|
||||
<xsl:when test="string($author/.)">
|
||||
<xsl:apply-templates select="$author/node()" mode="copy" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$uid" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:for-each>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$uid" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<!-- copy but normalize text -->
|
||||
<xsl:template match="text()" mode="copy">
|
||||
<xsl:value-of select="normalize-space(.)" />
|
||||
</xsl:template>
|
||||
|
||||
<!-- simple copy template -->
|
||||
<xsl:template match="@*|node()" mode="copy">
|
||||
<xsl:copy>
|
||||
<xsl:apply-templates select="@*|node()" mode="copy" />
|
||||
</xsl:copy>
|
||||
</xsl:template>
|
||||
|
||||
<!-- present a list of paths names -->
|
||||
<xsl:template match="paths">
|
||||
<xsl:choose>
|
||||
<!-- only handle paths that begin with the path and strip the path -->
|
||||
<xsl:when test="$strip-prefix != ''">
|
||||
<!-- filter on all entries within directory -->
|
||||
<xsl:for-each select="path[starts-with(concat(normalize-space(.),'/'),$strip-path)]">
|
||||
<xsl:sort select="normalize-space(.)" data-type="text" />
|
||||
<!-- unless we are the first entry, add a comma -->
|
||||
<xsl:if test="not(position()=1)">
|
||||
<xsl:text>, </xsl:text>
|
||||
</xsl:if>
|
||||
<!-- get path part -->
|
||||
<xsl:variable name="path" select="substring(normalize-space(.),string-length($strip-path)+1)" />
|
||||
<!-- translate empty string to dot and print result -->
|
||||
<xsl:if test="$path = ''">
|
||||
<xsl:text>.</xsl:text>
|
||||
</xsl:if>
|
||||
<xsl:value-of select="$path" />
|
||||
<!-- add the action flag -->
|
||||
<xsl:if test="$include-actions='yes'">
|
||||
<xsl:apply-templates select="." mode="action"/>
|
||||
</xsl:if>
|
||||
</xsl:for-each>
|
||||
</xsl:when>
|
||||
<!-- print a simple list of all paths -->
|
||||
<xsl:otherwise>
|
||||
<xsl:for-each select="path">
|
||||
<xsl:sort select="normalize-space(.)" data-type="text" />
|
||||
<!-- unless we are the first entry, add a comma -->
|
||||
<xsl:if test="not(position()=1)">
|
||||
<xsl:text>, </xsl:text>
|
||||
</xsl:if>
|
||||
<!-- print the path name -->
|
||||
<xsl:value-of select="normalize-space(.)" />
|
||||
<!-- add the action flag -->
|
||||
<xsl:if test="$include-actions='yes'">
|
||||
<xsl:apply-templates select="." mode="action"/>
|
||||
</xsl:if>
|
||||
</xsl:for-each>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="path" mode="action">
|
||||
<xsl:choose>
|
||||
<xsl:when test="@action='D'">
|
||||
<xsl:text>[DEL]</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="@copyfrom-path">
|
||||
<xsl:text>[CPY]</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="@action='A'">
|
||||
<xsl:text>[ADD]</xsl:text>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<!-- string-wrapping template -->
|
||||
<xsl:template name="wrap">
|
||||
<xsl:param name="txt" />
|
||||
<xsl:variable name="normtxt" select="normalize-space($txt)" />
|
||||
<xsl:choose>
|
||||
<xsl:when test="contains($txt,' ')">
|
||||
<!-- text contains newlines, do the first line -->
|
||||
<xsl:call-template name="wrap">
|
||||
<xsl:with-param name="txt" select="substring-before($txt,' ')" />
|
||||
</xsl:call-template>
|
||||
<!-- print tab -->
|
||||
<xsl:text>	  </xsl:text>
|
||||
<!-- wrap the rest of the text -->
|
||||
<xsl:call-template name="wrap">
|
||||
<xsl:with-param name="txt" select="substring-after($txt,' ')" />
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:when test="(string-length($normtxt) < (($linelen)-9)) or not(contains($normtxt,' '))">
|
||||
<!-- this is easy, nothing to do -->
|
||||
<xsl:value-of select="$normtxt" />
|
||||
<!-- add newline -->
|
||||
<xsl:text> </xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<!-- find the first line -->
|
||||
<xsl:variable name="tmp" select="substring($normtxt,1,(($linelen)-9))" />
|
||||
<xsl:variable name="line">
|
||||
<xsl:choose>
|
||||
<!-- if our attempt contains spaces wrap on that -->
|
||||
<xsl:when test="contains($tmp,' ')">
|
||||
<xsl:call-template name="find-line">
|
||||
<xsl:with-param name="txt" select="$tmp" />
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<!-- otherwise use the first non-space characters from the text -->
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="substring-before($normtxt,' ')" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<!-- print line -->
|
||||
<xsl:value-of select="$line" />
|
||||
<!-- print newline and tab -->
|
||||
<xsl:text> 	  </xsl:text>
|
||||
<!-- wrap the rest of the text -->
|
||||
<xsl:call-template name="wrap">
|
||||
<xsl:with-param name="txt" select="normalize-space(substring($normtxt,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="substring($txt,1,string-length($txt)-1)" />
|
||||
</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>
|
||||
|
||||
<!-- template to trim trailing and starting newlines -->
|
||||
<xsl:template name="trim-newln">
|
||||
<xsl:param name="txt" />
|
||||
<xsl:choose>
|
||||
<!-- find starting newlines -->
|
||||
<xsl:when test="substring($txt,1,1) = ' '">
|
||||
<xsl:call-template name="trim-newln">
|
||||
<xsl:with-param name="txt" select="substring($txt,2)" />
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<!-- find trailing newlines -->
|
||||
<xsl:when test="substring($txt,string-length($txt),1) = ' '">
|
||||
<xsl:call-template name="trim-newln">
|
||||
<xsl:with-param name="txt" select="substring($txt,1,string-length($txt)-1)" />
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<!-- if the message has paragraphs, find the first one -->
|
||||
<xsl:when test="$reparagraph='yes' and contains($txt,' ')">
|
||||
<!-- remove newlines from first paragraph -->
|
||||
<xsl:value-of select="normalize-space(substring-before($txt,' '))" />
|
||||
<!-- paragraph separator -->
|
||||
<xsl:text> </xsl:text>
|
||||
<!-- do the rest of the text -->
|
||||
<xsl:call-template name="trim-newln">
|
||||
<xsl:with-param name="txt" select="substring-after($txt,' ')" />
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<!-- remove more single newlines -->
|
||||
<xsl:when test="$reparagraph='yes'">
|
||||
<xsl:value-of select="normalize-space($txt)" />
|
||||
</xsl:when>
|
||||
<!-- no newlines found, we're done -->
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$txt" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<!-- insert a number of newlines -->
|
||||
<xsl:template name="newlines">
|
||||
<xsl:param name="count" />
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:if test="$count>1">
|
||||
<xsl:call-template name="newlines">
|
||||
<xsl:with-param name="count" select="($count)-1" />
|
||||
</xsl:call-template>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
Reference in New Issue
Block a user