#!/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 < where is a tag of the ldiskfs module and 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"