From: <ai...@us...> - 2007-03-30 23:59:17
|
Revision: 7653 http://plplot.svn.sourceforge.net/plplot/?rev=7653&view=rev Author: airwin Date: 2007-03-30 16:59:17 -0700 (Fri, 30 Mar 2007) Log Message: ----------- The SF_cvs2svn_plplot.sh bash shell script contains the steps used to create svn dump files of the plplot and www CVS modules, to create a local svn repository from those dumpfiles, and to test that svn repository in a large number of ways. N.B. after the tests were completed, the dumpfiles were uploaded to SF, and used by svn software there to create our SF repository. When that repository was dowloaded and compared with the local repository they were identical except for some non-essential items like dates. Thus, all the tests that were passed by the local repository would necessarily also be passed by the SF version so no further testing of the SF repository was done except to use it. Part of those local tests involved comparing ChangeLogs generated from CVS and SVN repositories, and the xsl script cvs2cl.xsl helped format the CVS ChangeLog in the identical way to the SVN ChangeLog created by the svn2cl command. Both SF_cvs2svn_plplot.sh and cvs2cl.xsl are specific to PLPlot and unlikely to be used again, but I thought it was appropriate to commit them to the "old" directory for historical interest about exactly how our CVS repository was converted to an SVN repository and checked. Added Paths: ----------- trunk/old/SF_cvs2svn_plplot.sh trunk/old/cvs2cl.xsl Added: trunk/old/SF_cvs2svn_plplot.sh =================================================================== --- trunk/old/SF_cvs2svn_plplot.sh (rev 0) +++ trunk/old/SF_cvs2svn_plplot.sh 2007-03-30 23:59:17 UTC (rev 7653) @@ -0,0 +1,345 @@ +#!/bin/sh + +# SF_cvs2svn.sh -- shell script to automate most of the process of +# converting SourceForge CVS repositories to SVN repositories and doing some +# basic sanity checks on the results. + +### Edit the next 5 export lines as appropriate. +# All file changes will occur in ${PROJECT} subdirectories of this prefix +# directory +export PROJECT_PREFIX=/home/irwin/subversion_conversion + +# Change PROJECT for each different SourceForge project you need +# to convert to subversion. +export PROJECT=plplot + +# TAGS is a list of the tags where you want to check file contents +# between the CVS and SVN versions. I used all tags that could be obtained +# with svn list here with an old 'throwaway' cvs* tag that somehow has +# survived the perl script that was supposed to delete the +# throwaway tags. Also, all obvious release candidate tags are dropped. + +export TAGS=\ +'AT_mc1 '\ +'CFDIR_HEAD_bp '\ +'before_ATmerge '\ +'bp_AM-LT '\ +'bp_AT '\ +'bp_DEBIAN '\ +'bp_GNOME '\ +'bp_SHADE-EXCLUSION '\ +'bp_dyndrv_1 '\ +'bp_lss_1 '\ +'bp_mjl_fork_1 '\ +'bp_tea '\ +'bp_v5_0 '\ +'debian-woody-bp '\ +'debian_4-99j_11 '\ +'debian_5-0-1_0-potato-1 '\ +'debian_5-0-1_0-potato-2 '\ +'debian_5-0-1_0-potato-3 '\ +'debian_5-0-1_0-potato-4 '\ +'debian_5-0-2_0-potato-1 '\ +'debian_5-0-2_0-potato-3 '\ +'merge_debian_v5-0-1 '\ +'mp_MAIN_AM-LT_1 '\ +'mp_MAIN_AM-LT_2 '\ +'v4p99d '\ +'v4p99e '\ +'v5_0_0 '\ +'v5_0_1 '\ +'v5_0_2 '\ +'v5_0_3 '\ +'v5_0_4 '\ +'v5_1_0_final '\ +'v5_2_0_final '\ +'v5_2_1_final '\ +'v5_3_0_final '\ +'v5_3_1 '\ +'v5_5_0 '\ +'v5_5_1 '\ +'v5_5_2 '\ +'v5_5_3 '\ +'v5_6_0 '\ +'v5_6_1 '\ +'v5_7_0 '\ +'v5_7_1 '\ +'v5_7_2 '\ +'v5_7_3 '\ +'' + +# Branches is a list of branches that you want to +# (a) check head of branch file contents between CVS and SVN version. +# (b) check ChangeLog for entire branch between CVS and SVN versions. +# This list was created with the svn list command. I have investigated +# all the unlabeled branches further, and they were all created (for +# unknown reasons) by Rafael Laboissiere for a few files he was editing in +# 2004 and at least the first one cannot be extracted from CVS by the -r +# option even though cvs2svn was able to see it. Therefore, I feel these +# are a result of some CVS inconsistency so I will ignore them. +#'unlabeled-1.1.16 '\ +#'unlabeled-1.10.2 '\ +#'unlabeled-1.11.2 '\ +#'unlabeled-1.12.2 '\ +#'unlabeled-1.13.2 '\ +#'unlabeled-1.150.2 '\ +#'unlabeled-1.2.12 '\ +#'unlabeled-1.2.2 '\ +#'unlabeled-1.2.4 '\ +#'unlabeled-1.32.2 '\ +#'unlabeled-1.36.2 '\ +#'unlabeled-1.4.2 '\ +#'unlabeled-1.43.2 '\ +#'unlabeled-1.5.2 '\ +#'unlabeled-1.5.4 '\ +#'unlabeled-1.6.2 '\ +#'unlabeled-1.69.2 '\ +#'unlabeled-1.7.2 '\ +#'unlabeled-1.74.2 '\ + +# Also, I did a preliminary run to obtain the starting revision number of +# each branch (after the colon) to cut down on the duplicated diffs to check. + +export BRANCHES_REVISIONS=\ +'AM-LT:2998 '\ +'AT:4054 '\ +'CFDIR:5359 '\ +'DEBIAN:2474 '\ +'GNOME:2665 '\ +'SHADE-EXCLUSION:2731 '\ +'airwin:2147 '\ +'bp_pstex_driver:3017 '\ +'debian-woody:5649 '\ +'dyndrv_1:2873 '\ +'enhance_3dplots:3982 '\ +'lss_1:3547 '\ +'mjl_fork_1:6216 '\ +'plplot4p99f:608 '\ +'rlaboiss:2228 '\ +'sgml:2222 '\ +'tea:2124 '\ +'v5_0:2105 '\ +'v5_3_0:5245 '\ +'' + +# Change MODULE to the name of the module you are converting for your +# particular SF project. It is often the case that MODULE=${PROJECT} +# but in the case of PROJECT=plplot there is a module called plplot +# and a module called www, in which case this script must be called twice +# with MODULE=plplot and MODULE=www. +export MODULE=${PROJECT} +export MODULE1=www + +# tree diff options so that windows line endings won't mess up the comparison +# (--strip-trailing-cr) and file lines with $Id, $Revision (and Revision which +# $Revision spits out on a separate line), $Log, $Date, and +# $Name will be skipped since those automatic file modifiers give different +# results (Revision numbers and date format) for subversion. +export TREE_DIFF_OPTIONS=\ +'-Naur -I \$Id -I \$Revision -I Revision -I \$Log -I \$Date '\ +'-I \$Name --strip-trailing-cr' + +# N.B. this is the assumed encoding for the CVS commit messages. Change to +# the encoding you used for your CVS commits. It is often the case that +# CODING='iso-8859-1'. This covers the case where commits were by those +# who use western European languages. +export CODING='iso-8859-1' + +### Everything below this line should not need editing. + +# Create module directory (if needed) and cd to it. +mkdir -p ${PROJECT_PREFIX}/${MODULE} +cd ${PROJECT_PREFIX}/${MODULE} + +# rsync the SF CVS repository of ${PROJECT}. +rsync -av --delete \ +rsync://${PROJECT}.cvs.sourceforge.net/cvsroot/${PROJECT}/* \ +${PROJECT}-cvsbackup + +tar zcf ${PROJECT}-cvsbackup.tar.gz ${PROJECT}-cvsbackup + +# Create svn dumpfile from local CVS repo. Note this ignores CVSROOT module +# which is fine. May have to get creative later with multiple module results +# such as plplot and www. +# N.B. Could specify +# --trunk=${MODULE}/trunk \ +# --tags=${MODULE}/tags \ +# --branches=${MODULE}/branches \ +# options to put ${MODULE} at top of dump file hierarchy above TTB, but +# it appears from "svn list" experiments with CVS lasi SVN repository that +# the TTB directories should be at top of dump file hierarchy. +rm -f svndump cvs2svn.out +cvs2svn --encoding=${CODING} --dumpfile=svndump \ +${PROJECT}-cvsbackup/${MODULE} >& cvs2svn.out + +# Create an empty local subversion repository for ${MODULE}. +rm -rf ${PROJECT_PREFIX}/${MODULE}/subversion_repository +svnadmin create ${PROJECT_PREFIX}/${MODULE}/subversion_repository + +# Populate that repository. + +rm -f ${MODULE}_load.out +svnadmin load \ +${PROJECT_PREFIX}/${MODULE}/subversion_repository \ +< svndump >& ${MODULE}_load.out + +# checkout both kinds of repo from local repositories + +rm -rf ${MODULE}_cvs ${MODULE}_cvs_checkout.out +cvs -d \ +${PROJECT_PREFIX}/${MODULE}/${PROJECT}-cvsbackup/ \ +checkout -d ${MODULE}_cvs ${MODULE} >& ${MODULE}_cvs_checkout.out + +rm -rf ${MODULE}_svn ${MODULE}_svn_checkout.out +svn checkout \ +file://${PROJECT_PREFIX}/${MODULE}/subversion_repository/trunk \ +${MODULE}_svn >& ${MODULE}_svn_checkout.out + +# Check 0: Confirm top-level svn repository directories are TTB +svn list file://${PROJECT_PREFIX}/${MODULE}/subversion_repository + +# Check 1: Does fresh checkout of both kinds of repo give the same results? +diff ${TREE_DIFF_OPTIONS} --exclude=CVS --exclude=.svn \ +${MODULE}_cvs ${MODULE}_svn + +# Check 2: Are the commit messages the same? +# Use uniconv to convert from ${CODING} to utf-8, +# remove xmlns from result using sed transform, and +# use xslt to transform resulting xml to formatted text output that +# is in the same format as the svn2cl results (which are also done +# with xslt). +cd ${MODULE}_cvs +cvs2cl -l "-d<=now" --stdout --gmt --xml --show-dead --follow trunk| \ +uniconv -decode ${CODING} -encode 'utf-8' | \ +sed 's? xmlns=".*"??' | \ +xsltproc --stringparam reparagraph yes ${PROJECT_PREFIX}/cvs2cl.xsl - >| \ +../ChangeLog_cvs +cd .. + +cd ${MODULE}_svn +svn2cl --reparagraph --stdout >| ../ChangeLog_svn +cd .. + +diff -au ChangeLog_cvs ChangeLog_svn + +# Check 3: Are the tagged versions identical between CVS and SVN? +for tag in $TAGS ; do + echo "taking CVS-SVN diff of tag = ${tag}" + rm -rf ${MODULE}_cvs_export ${MODULE}_cvs_export.out + cvs -d \ + ${PROJECT_PREFIX}/${MODULE}/${PROJECT}-cvsbackup/ \ + export -r ${tag} -d ${MODULE}_cvs_export ${MODULE} \ + >& ${MODULE}_cvs_export.out + + rm -rf ${MODULE}_svn_export ${MODULE}_svn_export.out + svn export \ + file://${PROJECT_PREFIX}/${MODULE}/subversion_repository/tags/${tag} \ + ${MODULE}_svn_export >& ${MODULE}_svn_export.out + + diff ${TREE_DIFF_OPTIONS} ${MODULE}_cvs_export ${MODULE}_svn_export +done + +# Check 4: Are the Head of branches identical between CVS and SVN? +for branch_revision in $BRANCHES_REVISIONS ; do + branch=${branch_revision%:*} + echo "taking CVS-SVN diff of branch = ${branch}" + rm -rf ${MODULE}_cvs_export ${MODULE}_cvs_export.out + cvs -d \ + ${PROJECT_PREFIX}/${MODULE}/${PROJECT}-cvsbackup/ \ + export -r ${branch} -d ${MODULE}_cvs_export ${MODULE} \ + >& ${MODULE}_cvs_export.out + + rm -rf ${MODULE}_svn_export ${MODULE}_svn_export.out + svn export \ + file://${PROJECT_PREFIX}/${MODULE}/subversion_repository/branches/${branch} \ + ${MODULE}_svn_export >& ${MODULE}_svn_export.out + + diff ${TREE_DIFF_OPTIONS} ${MODULE}_cvs_export ${MODULE}_svn_export +done + +# Check 5: Are the ChangeLogs for branches identical between CVS and SVN? +for branch_revision in $BRANCHES_REVISIONS ; do + branch=${branch_revision%:*} + revision=${branch_revision#*:} + echo "taking CVS-SVN ChangeLog diff for branch = ${branch}" + echo "from revision ${revision} onward." + + rm -rf ${MODULE}_svn_branch ${MODULE}_svn_branch.out + svn checkout \ + file://${PROJECT_PREFIX}/${MODULE}/subversion_repository/branches/${branch} \ + ${MODULE}_svn_branch >& ${MODULE}_svn_branch.out + + cd ${MODULE}_cvs + cvs2cl -l "-d<=now" --stdout --gmt --xml --show-dead \ + --follow-only ${branch} --no-ancestors | \ + uniconv -decode ${CODING} -encode 'utf-8' | \ + sed 's? xmlns=".*"??' | \ + xsltproc --stringparam reparagraph yes ${PROJECT_PREFIX}/cvs2cl.xsl - >| \ + ../ChangeLog_cvs_branch + cd .. + + cd ${MODULE}_svn_branch + svn2cl --revision HEAD:${revision} --reparagraph --stdout \ + >| ../ChangeLog_svn_branch +# Find revision number corresponding to start of branch +# svn log |grep -B 2 'This commit was manufactured by cvs2svn' + cd .. + + diff -au ChangeLog_cvs_branch ChangeLog_svn_branch + +done + +# Checks for ${MODULE1} + +rm -f svndump_${MODULE1} cvs2svn_${MODULE1}.out +cvs2svn --encoding=${CODING} --dumpfile=svndump_${MODULE1} \ +--trunk=${MODULE1}/trunk \ +--tags=${MODULE1}/tags \ +--branches=${MODULE1}/branches \ +${PROJECT}-cvsbackup/${MODULE1} >& cvs2svn_${MODULE1}.out + +# Populate the existing repository. + +rm -f ${MODULE1}_load.out +svnadmin load \ +${PROJECT_PREFIX}/${MODULE}/subversion_repository \ +< svndump_${MODULE1} >& ${MODULE1}_load.out + +# checkout both kinds of repo from local repositories + +rm -rf ${MODULE1}_cvs ${MODULE1}_cvs_checkout.out +cvs -d \ +${PROJECT_PREFIX}/${MODULE}/${PROJECT}-cvsbackup/ \ +checkout -d ${MODULE1}_cvs ${MODULE1} >& ${MODULE1}_cvs_checkout.out + +rm -rf ${MODULE1}_svn ${MODULE1}_svn_checkout.out +svn checkout \ +file://${PROJECT_PREFIX}/${MODULE}/subversion_repository/${MODULE1}/trunk \ +${MODULE1}_svn >& ${MODULE1}_svn_checkout.out + +# Check 0: Confirm top-level svn repository directories are TTB +svn list file://${PROJECT_PREFIX}/${MODULE}/subversion_repository/${MODULE1} + +# Check 1: Does fresh checkout of both kinds of repo give the same results? +diff ${TREE_DIFF_OPTIONS} --exclude=CVS --exclude=.svn \ +${MODULE1}_cvs ${MODULE1}_svn + +# Check 2: Are the commit messages the same? +# Use uniconv to convert from ${CODING} to utf-8, +# remove xmlns from result using sed transform, and +# use xslt to transform resulting xml to formatted text output that +# is in the same format as the svn2cl results (which are also done +# with xslt). +cd ${MODULE1}_cvs +cvs2cl -l "-d<=now" --stdout --gmt --xml --show-dead --follow trunk| \ +uniconv -decode ${CODING} -encode 'utf-8' | \ +sed 's? xmlns=".*"??' | \ +xsltproc --stringparam reparagraph yes ${PROJECT_PREFIX}/cvs2cl.xsl - >| \ +../ChangeLog_${MODULE1}_cvs +cd .. + +cd ${MODULE1}_svn +svn2cl --reparagraph --stdout >| ../ChangeLog_${MODULE1}_svn +cd .. + +diff -au ChangeLog_${MODULE1}_cvs ChangeLog_${MODULE1}_svn Property changes on: trunk/old/SF_cvs2svn_plplot.sh ___________________________________________________________________ Name: svn:executable + * Added: trunk/old/cvs2cl.xsl =================================================================== --- trunk/old/cvs2cl.xsl (rev 0) +++ trunk/old/cvs2cl.xsl 2007-03-30 23:59:17 UTC (rev 7653) @@ -0,0 +1,457 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- + + cvs2cl.xsl - xslt stylesheet for converting cvs2cl xml output to a normal + changelog exactly following output formatting of svn2cl.xsl + + Copyright (C) 2004, 2005, 2006 Arthur de Jong. + Copyright (C) 2007 Alan W. Irwin. + + 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. + +--> + +<!DOCTYPE xsl:stylesheet [ + <!ENTITY tab "	"> + <!ENTITY newl " "> + <!ENTITY space " "> +]> + +<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 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'" /> + + <!-- 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" /> + + <!-- add newlines at the end of the changelog --> + <xsl:template match="changelog"> + <xsl:apply-templates /> + <xsl:text>&newl;</xsl:text> + </xsl:template> + + <!-- skip tagdate tag --> + <xsl:template match="tagdate"> + </xsl:template> + + <!-- format one entry from the log --> + <xsl:template match="entry"> + <xsl:choose> + <!-- if we're grouping we should omit some headers --> + <xsl:when test="$groupbyday='yes'"> + <!-- save log entry number --> + <xsl:variable name="pos" select="position()" /> + <!-- fetch previous entry's date --> + <xsl:variable name="prevdate"> + <xsl:apply-templates select="../entry[position()=(($pos)-1)]/isoDate" /> + </xsl:variable> + <!-- fetch previous entry's author --> + <xsl:variable name="prevauthor"> + <xsl:value-of select="normalize-space(../entry[position()=(($pos)-1)]/author)" /> + </xsl:variable> + <!-- fetch this entry's date --> + <xsl:variable name="date"> + <xsl:apply-templates select="isoDate" /> + </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>&newl;</xsl:text> + </xsl:if> + <!-- date --> + <xsl:value-of select="$isoDate" /> + <!-- two spaces --> + <xsl:text>&space;&space;</xsl:text> + <!-- author's name --> + <xsl:apply-templates select="author" /> + <!-- two newlines --> + <xsl:text>&newl;</xsl:text> + <xsl:if test="$separate-daylogs!='yes'"><xsl:text>&newl;</xsl:text></xsl:if> + </xsl:if> + </xsl:when> + <!-- write the log header --> + <xsl:otherwise> + <!-- add newline --> + <xsl:if test="not(position()=1)"> + <xsl:text>&newl;</xsl:text> + </xsl:if> + <!-- date --> + <xsl:apply-templates select="isoDate" /> + <!-- two spaces --> + <xsl:text>&space;&space;</xsl:text> + <!-- author's name --> + <xsl:apply-templates select="author" /> + <!-- two newlines --> + <xsl:text>&newl;&newl;</xsl:text> + </xsl:otherwise> + </xsl:choose> + <!-- get paths string --> + <xsl:variable name="paths"> + <xsl:for-each select="file/name"> + <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>,&space;</xsl:text> + </xsl:if> + <!-- print the path name --> + <xsl:apply-templates select="." /> + </xsl:for-each> + <xsl:text>:&space;</xsl:text> + </xsl:variable> + <!-- get revision number --> + <xsl:variable name="rev"> + <xsl:if test="$include-rev='yes'"> + <xsl:text>[r</xsl:text> + <xsl:value-of select="file/revision" /> + <xsl:text>]&space;</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>&newl;</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>&newl;</xsl:text></xsl:if> + <!-- first line is indented (other indents are done in wrap template) --> + <xsl:text>&tab;*&space;</xsl:text> + <!-- print the paths and message nicely wrapped --> + <xsl:call-template name="wrap"> + <xsl:with-param name="txt" select="concat($rev,$paths,$msg)" /> + </xsl:call-template> + </xsl:template> + + <!-- format date --> + <xsl:template match="isoDate"> + <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>&space;</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: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>,&space;</xsl:text> + </xsl:if> + <!++ print the path name ++> + <xsl:apply-templates select="." /> + </xsl:for-each> + </xsl:template> + --> + + <!-- transform path to something printable --> + <xsl:template match="file/name"> + <!-- fetch the pathname --> + <xsl:variable name="p1" select="normalize-space(.)" /> + <!-- strip leading slash --> + <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> + <!-- strip trailing slash from strip-prefix --> + <xsl:variable name="sp"> + <xsl:choose> + <xsl:when test="substring($strip-prefix,string-length($strip-prefix),1)='/'"> + <xsl:value-of select="substring($strip-prefix,1,string-length($strip-prefix)-1)" /> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$strip-prefix" /> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <!-- strip strip-prefix --> + <xsl:variable name="p3"> + <xsl:choose> + <xsl:when test="starts-with($p2,$sp)"> + <xsl:value-of select="substring($p2,1+string-length($sp))" /> + </xsl:when> + <xsl:otherwise> + <!-- TODO: do not print strings that do not begin with strip-prefix --> + <xsl:value-of select="$p2" /> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <!-- strip another slash --> + <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> + <!-- Add directory of .cvsignore files to match svn2cl result for cvn2svn- + generated SVN repositories. --> + <!-- "contains" should be "ends-with", but "ends-with" not implemented for + xsltproc --> + <xsl:if test="contains($p4,'.cvsignore')"> + <xsl:variable name="dir" select="substring-before($p4,'.cvsignore')" /> + <!-- translate empty directory to dot --> + <xsl:choose> + <xsl:when test="$dir = ''"> + <xsl:text>.</xsl:text> + </xsl:when> + <xsl:otherwise> + <!-- print $dir without trailing slash --> + <xsl:value-of select="substring($dir,1,string-length($dir)-1)" /> + </xsl:otherwise> + </xsl:choose> + <!-- append comma to directory --> + <xsl:text>,&space;</xsl:text> + </xsl:if> + <!-- translate empty string to dot --> + <xsl:choose> + <xsl:when test="$p4 = ''"> + <xsl:text>.</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$p4" /> + </xsl:otherwise> + </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,'&newl;')"> + <!-- text contains newlines, do the first line --> + <xsl:call-template name="wrap"> + <xsl:with-param name="txt" select="substring-before($txt,'&newl;')" /> + </xsl:call-template> + <!-- print tab --> + <xsl:text>&tab;&space;&space;</xsl:text> + <!-- wrap the rest of the text --> + <xsl:call-template name="wrap"> + <xsl:with-param name="txt" select="substring-after($txt,'&newl;')" /> + </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>&newl;</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>&newl;&tab;&space;&space;</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) = '&newl;'"> + <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) = '&newl;'"> + <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 paragrapgs, find the first one --> + <xsl:when test="$reparagraph='yes' and contains($txt,'&newl;&newl;')"> + <!-- remove newlines from first paragraph --> + <xsl:value-of select="normalize-space(substring-before($txt,'&newl;&newl;'))" /> + <!-- paragraph separator --> + <xsl:text>&newl;&newl;</xsl:text> + <!-- do the rest of the text --> + <xsl:call-template name="trim-newln"> + <xsl:with-param name="txt" select="substring-after($txt,'&newl;&newl;')" /> + </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>&newl;</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> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2007-03-31 01:17:32
|
Revision: 7654 http://plplot.svn.sourceforge.net/plplot/?rev=7654&view=rev Author: airwin Date: 2007-03-30 18:17:33 -0700 (Fri, 30 Mar 2007) Log Message: ----------- Change to svn:eol-style : native property. (This oversight lead me to the auto-props section of $HOME/.subversion/config where I have changed things so this property will be set properly and automatically from now on with new files.) Property Changed: ---------------- trunk/old/SF_cvs2svn_plplot.sh trunk/old/cvs2cl.xsl Property changes on: trunk/old/SF_cvs2svn_plplot.sh ___________________________________________________________________ Name: svn:eol-style + native Property changes on: trunk/old/cvs2cl.xsl ___________________________________________________________________ Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |