--- /dev/null
+#!/bin/bash
+
+LC_COLLATE="C"
+progname="${0##*/}"
+
+warn ()
+{
+ [ "$1" ] && echo >&2
+ [ "$1" ] && echo "$progname: $1" >&2
+ [ "$1" ] && echo >&2
+}
+
+fatal ()
+{
+ warn "$2"
+ exit "$1"
+}
+
+usage ()
+{
+ cat <<EOF
+Usage: $progname <tag> <pindate>
+ where <tag> is a tag of the ldiskfs module
+ and <pindate> is an optional quoted timestamp suitable for cvs -D
+EOF
+}
+
+if [ -z "$LDISKFSCVS_UPDATED" ] ; then
+ echo "$progname: updating ldiskfscvs"
+ cvs up -l || fatal 1 "Error updating ldiskfscvs"
+ export LDISKFSCVS_UPDATED=yes
+ exec "$0" "$@"
+fi
+
+[ "$1" = "-r" ] && shift
+
+buildtag="HEAD"
+tag="$1"
+shift
+pindate=$1
+shift
+
+if [ "$*" ] ; then
+ usage >&2
+ exit 1
+fi
+
+case "$tag" in
+ '')
+ warn "a tag is required."
+ usage >&2
+ exit 1
+ ;;
+ --help | -h)
+ usage
+ exit 0
+ ;;
+
+ # this is the branch table
+ # keep this list sorted alphabetically!
+
+ # So far there's just HEAD.
+
+ *)
+ buildtag="HEAD"
+ ;;
+esac
+
+error_modules=
+cvs_cmd ()
+{
+ dir="$1"
+ module="$2"
+ tag="$3"
+ cotag=""
+ update=""
+
+ if [ "$tag" = "HEAD" ] ; then
+ cotag=""
+ uptag="-A"
+ elif [ "$tag" ] ; then
+ cotag="-r $tag"
+ uptag="-r $tag"
+ else
+ # silently skip if no tag was specified
+ return
+ fi
+
+ # create a cvs date format that will survive shell expansion
+ if [ -n "$pindate" ]; then
+ datecmd=$(date -u +%s -d "$pindate")
+ datecmd="-D @$datecmd"
+ else
+ datecmd=""
+ fi
+
+ if [ -d "$dir" ] ; then
+ echo "$progname: Updating $dir to $tag"
+ ( cd "$dir" && cvs up $datecmd -dAP $uptag )
+ else
+ echo "$progname: Checking out $dir from $tag"
+ cvs co $datecmd -P $cotag -d "$dir" "$module"
+ fi
+ if [ $? != 0 ] ; then
+ error_modules="$dir $error_modules"
+ fi
+}
+
+cvs_cmd build lustre-build "$buildtag"