aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2008-11-09 10:46:45 +0000
committerMike Frysinger <vapier@gentoo.org>2008-11-09 10:46:45 +0000
commit0dfd082cabff2f6ecf5398313bd12aadaf6b1695 (patch)
tree0ec0a989fd63492d621ca67f68e00f1381122538 /scripts
parentlibsandbox: make code path in is_sandbox_on() a bit simpler (diff)
downloadsandbox-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-xscripts/svn2cl191
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/&/\&amp;/g;s/</\&lt;/g;s/>/\&gt;/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