#!/bin/sh
#############################################################################
# Name: check.sh
-# Purpose: Check embedded xslt
+# Purpose: Offline checker for the buildbot configuration files
# Author: Mike Wetherell
# RCS-ID: $Id$
# Copyright: (c) 2007 Mike Wetherell
usage() {
echo "Usage: $0 [options] FILE..."
- echo "Check embedded xslt"
+ echo "Offline checker for the buildbot configuration files"
echo
echo "Options:"
echo " -g generate xslt"
exit 1
}
+progcheck() {
+ prog="$1"
+ $prog --version >/dev/null 2>&1 || {
+ echo "$0: requires $prog, not found" >&2
+ exit 1
+ }
+}
+
GENERATE=1
PREPROCESS=2
VALIDATE=3
usage
fi
+XSLTPROC=xsltproc
+XMLLINT=xmllint
+
+progcheck $XSLTPROC
+progcheck $XMLLINT
+
DIR="`dirname $0`"
WORKDIR="${TMPDIR:-/tmp}/wx.$$"
mkdir "$WORKDIR" || exit
STDERR="$WORKDIR/STDERR"
ERR=0
+# Filter to show lines of genertated XSLT when they are mentioned.
+showxslt() {
+ awk '{
+ print;
+ if (sub(/.*generated XSLT line */, "") && sub(/[^0-9].*/, ""))
+ {
+ system("sed -ne "$0"p '$XSLT'");
+ }
+ }'
+}
+
+# Test it works as old version of awk don't have sub or system functions.
+if showxslt </dev/null 2>/dev/null; then
+ SHOWXSLT=showxslt
+else
+ SHOWXSLT=cat
+fi
+
# Change the names of the temporary files in an error message to something
# to something more informative
errout()
if [ -s "$STDERR" ]; then
sed "s|file ${WORKPAT}|${WORKPAT}|g;\
s|${WORKPAT}/XSLT|generated XSLT|g;\
- s|${WORKPAT}/PREP|$NAME (preprocessed)|g" "$STDERR" |
- awk '{
- print;
- if (sub(/.*generated XSLT line */, "") && sub(/[^0-9].*/, ""))
- {
- system("sed -ne "$0"p '$XSLT'");
- }
- }'
+ s|${WORKPAT}/PREP|$NAME (preprocessed)|g" "$STDERR" | $SHOWXSLT
fi
}
{
INPUT="$1"
- if xsltproc --xinclude -o "$XSLT" $DIR/embedded.xsl "$INPUT" 2>"$STDERR" &&
+ if $XSLTPROC --xinclude -o "$XSLT" $DIR/embedded.xsl "$INPUT" 2>"$STDERR" &&
test \! -s "$STDERR"
then
if [ $MODE -eq $GENERATE ]; then
return 0
fi
- if xsltproc --xinclude -o "$PREP" "$XSLT" "$INPUT" 2>"$STDERR" &&
+ if $XSLTPROC --xinclude -o "$PREP" "$XSLT" "$INPUT" 2>"$STDERR" &&
test \! -s "$STDERR"
then
if [ $MODE -eq $PREPROCESS ]; then
return 1
fi
}
-
+
validate()
{
NAME="$1"
return 0
fi
- if xmllint --noout --schema $DIR/bot.xsd "$PREP" 2>"$STDERR"
+ if $XMLLINT --noout --schema $DIR/bot.xsd "$PREP" 2>"$STDERR"
then
errout "$NAME"
else
errout "$NAME" >&2
ERR=1
}
-
+
rm -f "$XSLT" "$PREP" "$STDERR"
shift