diff options
author | 2008-11-09 10:46:45 +0000 | |
---|---|---|
committer | 2008-11-09 10:46:45 +0000 | |
commit | 0dfd082cabff2f6ecf5398313bd12aadaf6b1695 (patch) | |
tree | 0ec0a989fd63492d621ca67f68e00f1381122538 /scripts | |
parent | libsandbox: make code path in is_sandbox_on() a bit simpler (diff) | |
download | sandbox-0dfd082cabff2f6ecf5398313bd12aadaf6b1695.tar.gz sandbox-0dfd082cabff2f6ecf5398313bd12aadaf6b1695.tar.bz2 sandbox-0dfd082cabff2f6ecf5398313bd12aadaf6b1695.zip |
svn2cl: update to 0.9
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/svn2cl | 191 |
1 files changed, 159 insertions, 32 deletions
diff --git a/scripts/svn2cl b/scripts/svn2cl index 06eba0e..c8f15c9 100755 --- a/scripts/svn2cl +++ b/scripts/svn2cl @@ -3,7 +3,7 @@ # svn2cl.sh - front end shell script for svn2cl.xsl, calls xsltproc # with the correct parameters # -# Copyright (C) 2005 Arthur de Jong. +# Copyright (C) 2005, 2006, 2007 Arthur de Jong. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -36,17 +36,26 @@ set -e set -u # svn2cl version -VERSION="0.5" +VERSION="0.9" # set default parameters PWD=`pwd` -STRIPPREFIX=`basename $PWD` +STRIPPREFIX="AUTOMATICALLY-DETERMINED" LINELEN=75 GROUPBYDAY="no" INCLUDEREV="no" +BREAKBEFOREMSG="no" +REPARAGRAPH="no" +SEPARATEDAYLOGS="no" CHANGELOG="" OUTSTYLE="cl" -SVNCMD="svn --verbose --xml log" +SVNLOGCMD="svn --verbose --xml log" +SVNINFOCMD="svn info" +AUTHORSFILE="" +IGNORE_MESSAGE_STARTING="" +TITLE="ChangeLog" +REVISION_LINK="#r" +TMPFILES="" # do command line checking prog=`basename $0` @@ -58,7 +67,7 @@ do shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; } ;; --strip-prefix=*) - STRIPPREFIX="`echo "$1" | sed 's/--strip-prefix=//'`" + STRIPPREFIX=`echo "$1" | sed 's/^--[a-z-]*=//'` shift ;; --linelen) @@ -66,55 +75,127 @@ do shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; } ;; --linelen=*) - LINELEN="`echo "$1" | sed 's/--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 ;; + --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 + ;; + --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/--[^=]*=//'`" + 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|--targets|--username|--password|--config-dir|--limit) + -r|--revision|--targets|--limit) + # add these as extra options to the command (with argument) + arg=`echo "$2" | sed "s/'/'\"'\"'/g"` + SVNLOGCMD="$SVNLOGCMD $1 '$arg'" + shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; } + ;; + --username|--password|--config-dir) # add these as extra options to the command (with argument) arg=`echo "$2" | sed "s/'/'\"'\"'/g"` - SVNCMD="$SVNCMD $1 '$arg'" + SVNLOGCMD="$SVNLOGCMD $1 '$arg'" + # also add to svn info command + SVNINFOCMD="$SVNINFOCMD $1 '$arg'" shift 2 || { echo "$prog: option requires an argument -- $1";exit 1; } ;; - --revision=*|--targets=*|--username=*|--password=*|--config-dir=*|--limit=*) + --revision=*|--targets=*|--limit=*) + # these are single argument versions of the above + arg=`echo "$1" | sed "s/'/'\"'\"'/g"` + SVNLOGCMD="$SVNLOGCMD '$arg'" + shift + ;; + --username=*|--password=*|--config-dir=*) # these are single argument versions of the above arg=`echo "$1" | sed "s/'/'\"'\"'/g"` - SVNCMD="$SVNCMD '$arg'" + SVNLOGCMD="$SVNLOGCMD '$arg'" + # also add to svn info command + SVNINFOCMD="$SVNINFOCMD '$arg'" + shift + ;; + --stop-on-copy) + # add these as simple options + SVNLOGCMD="$SVNLOGCMD $1" shift ;; - --stop-on-copy|--no-auth-cache|--non-interactive) + --no-auth-cache|--non-interactive) # add these as simple options - SVNCMD="$SVNCMD $1" + SVNLOGCMD="$SVNLOGCMD $1" + # also add to svn info command + SVNINFOCMD="$SVNINFOCMD $1" shift ;; -V|--version) echo "$prog $VERSION"; echo "Written by Arthur de Jong." echo "" - echo "Copyright (C) 2005 Arthur de Jong." + echo "Copyright (C) 2005, 2006, 2007 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 @@ -124,20 +205,29 @@ do echo "Generate a ChangeLog from a subversion repository." echo "" echo " --strip-prefix=NAME prefix to strip from all entries, defaults" - echo " to the name of the current directory" + echo " path 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 " --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 " --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, --target --stop-on-copy, --username," - echo "--password, --no-auth-cache, --non-interactive, --config-dir," + echo "command: -r, --revision, --targets --stop-on-copy, --username," + echo "--password, --no-auth-cache, --non-interactive, --config-dir and" echo "--limit (see \`svn help log' for more information)." exit 0 ;; @@ -148,22 +238,36 @@ do ;; *) arg=`echo "$1" | sed "s/'/'\"'\"'/g"` - SVNCMD="$SVNCMD '$arg'" + 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" +XSL="/usr/share/svn2cl/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" ] @@ -172,6 +276,13 @@ then [ "$OUTSTYLE" != "cl" ] && CHANGELOG="$CHANGELOG.$OUTSTYLE" fi +# try to determin a prefix to strip from all paths +if [ "$STRIPPREFIX" = "AUTOMATICALLY-DETERMINED" ] +then + STRIPPREFIX=`LANG=C eval "$SVNINFOCMD" 2> /dev/null | awk '/^URL:/{url=$2} /^Repository Root:/{root=$3} END{if(root){print substr(url,length(root)+2)}else{gsub("^.*/","",url);print url}}'` + STRIPPREFIX=`echo "$STRIPPREFIX" | sed 's/%20/ /g'` +fi + # redirect stdout to the changelog file if needed if [ "x$CHANGELOG" != "x-" ] then @@ -179,9 +290,25 @@ then fi # actually run the command we need -eval "$SVNCMD" | \ +eval "$SVNLOGCMD" | \ xsltproc --stringparam strip-prefix "$STRIPPREFIX" \ - --stringparam linelen $LINELEN \ - --stringparam groupbyday $GROUPBYDAY \ - --stringparam include-rev $INCLUDEREV \ + --stringparam linelen "$LINELEN" \ + --stringparam groupbyday "$GROUPBYDAY" \ + --stringparam separate-daylogs "$SEPARATEDAYLOGS" \ + --stringparam include-rev "$INCLUDEREV" \ + --stringparam breakbeforemsg "$BREAKBEFOREMSG" \ + --stringparam reparagraph "$REPARAGRAPH" \ + --stringparam authorsfile "$AUTHORSFILE" \ + --stringparam title "$TITLE" \ + --stringparam revision-link "$REVISION_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 |