diff options
author | James Mills <prologic@daisy.(none)> | 2006-11-14 09:01:22 +1000 |
---|---|---|
committer | James Mills <prologic@daisy.(none)> | 2006-11-14 09:01:22 +1000 |
commit | 70006e31d25693aa65fc985124ce9babbd3347fc (patch) | |
tree | f5d0078562a07b6fe3a22a630ea5310561d9b538 /svn2cl | |
parent | 797dcbebf82a5cee45294314ddd587d3a847932f (diff) | |
download | contrib-70006e31d25693aa65fc985124ce9babbd3347fc.tar.gz contrib-70006e31d25693aa65fc985124ce9babbd3347fc.tar.xz |
Imported from old-control
Diffstat (limited to 'svn2cl')
-rw-r--r-- | svn2cl/.footprint | 8 | ||||
-rw-r--r-- | svn2cl/.md5sum | 2 | ||||
-rw-r--r-- | svn2cl/Pkgfile | 16 | ||||
-rwxr-xr-x | svn2cl/svn2cl | 40 | ||||
-rw-r--r-- | svn2cl/svn2cl.xsl | 215 |
5 files changed, 281 insertions, 0 deletions
diff --git a/svn2cl/.footprint b/svn2cl/.footprint new file mode 100644 index 000000000..929c62f6f --- /dev/null +++ b/svn2cl/.footprint @@ -0,0 +1,8 @@ +drwxr-xr-x root/root usr/ +drwxr-xr-x root/root usr/bin/ +-rwxr-xr-x root/root usr/bin/svn2cl +drwxr-xr-x root/root usr/share/ +drwxr-xr-x root/root usr/share/xml/ +drwxr-xr-x root/root usr/share/xml/xsl/ +drwxr-xr-x root/root usr/share/xml/xsl/svn2cl/ +-rw-r--r-- root/root usr/share/xml/xsl/svn2cl/svn2cl.xsl diff --git a/svn2cl/.md5sum b/svn2cl/.md5sum new file mode 100644 index 000000000..769fec2c6 --- /dev/null +++ b/svn2cl/.md5sum @@ -0,0 +1,2 @@ +f0efe4860194c9d951f0a5d066864d7a svn2cl +8e186c772deb97b216a241877505b9ea svn2cl.xsl diff --git a/svn2cl/Pkgfile b/svn2cl/Pkgfile new file mode 100644 index 000000000..9605b9617 --- /dev/null +++ b/svn2cl/Pkgfile @@ -0,0 +1,16 @@ +# $Id: Pkgfile 1330 2006-11-13 20:54:04Z prologic $ +# Description: Script and XSL stylesheet to convert svn logs to ChangeLog. +# URL: None +# Maintainer: James Mills prologic at shortcircuit dot net dot au +# Packager: James Mills prologic at shortcircuit dot net dot au +# Depends on: libxslt + +name=svn2cl +version=1.1 +release=1 +source=(svn2cl.xsl svn2cl) + +build() { + install -D -m644 -groot -oroot svn2cl.xsl $PKG/usr/share/xml/xsl/$name/svn2cl.xsl + install -D -m755 -groot -oroot $name $PKG/usr/bin/$name +} diff --git a/svn2cl/svn2cl b/svn2cl/svn2cl new file mode 100755 index 000000000..ab35b404d --- /dev/null +++ b/svn2cl/svn2cl @@ -0,0 +1,40 @@ +#!/bin/sh +# Usage: svn2cl [-s path] +# +# This script uses a XSL stylesheet to parse and convert +# the output of a SubVersion log file (in XML) and +# produce a nice GNU Style ChangeLog file. +# +# Author: James Mills (prologic@shortcircuit.net.au) +# Version: 0.1.0 CopyRight 2005 (C) by James Mills +# Version: 0.1.1 "Added -s option" + +if [ ! -d .svn ]; then + echo "ERROR: `pwd` is not a subversion directory!" + exit 1 +fi + +usage="Usage: `basename $0` [-s path]" + +while getopts "s:h-" opt ; do + case "$opt" in + s) STRIP_PATH=$OPTARG;; + h) echo $usage; exit 0;; + -) break;; + *) echo $usage 1>&2; exit 1;; + esac +done + +shift $(($OPTIND - 1)) + +XSL=/usr/share/xml/xsl/svn2cl/svn2cl.xsl +TMPFILE=`mktemp /tmp/svn-log.XXXXXXXXXX` || exit 1 + +svn log --xml --verbose . > $TMPFILE +if [[ "$STRIP_PATH" = "" ]]; then + xsltproc $XSL $TMPFILE > ChangeLog +else + xsltproc --stringparam strip-prefix "$STRIP_PATH" $XSL $TMPFILE > ChangeLog +fi + +rm $TMPFILE diff --git a/svn2cl/svn2cl.xsl b/svn2cl/svn2cl.xsl new file mode 100644 index 000000000..f4226b5cf --- /dev/null +++ b/svn2cl/svn2cl.xsl @@ -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> |