Whamcloud - gitweb
b=10960
[fs/lustre-release.git] / lustrecvs
index e9c8b9a..fa24a01 100755 (executable)
--- a/lustrecvs
+++ b/lustrecvs
@@ -1,5 +1,6 @@
-#!/bin/sh
+#!/bin/bash
 
+LC_COLLATE="C"
 progname="${0##*/}"
 
 warn ()
@@ -18,32 +19,33 @@ fatal ()
 usage ()
 {
     cat <<EOF
-Usage: $progname command lustretag [other tags]
-  where command is checkout, rtag, tag, or update
-  where lustretag is a logical tag across the modules
+Usage: $progname <lustretag> <pindate>
+  where <lustretag> is a tag of the lustre-core module
+  and <pindate> is an optional quoted timestamp suitable for cvs -D
 EOF
 }
 
-case "$1" in
-    '')
-       warn "a command is required."
-       usage >&2
-       exit 1
-       ;;
-    --help | -h)
-       usage
-       exit 0
-       ;;
-    checkout | co | get | rtag | rt | rfreeze | tag | ta | freeze | update | up | upd)
-       cvscommand="$1"
-       ;;
-    *)
-       usage >&2
-       exit 1
-       ;;
-esac
+if [ -z "$LUSTRECVS_UPDATED" ] ; then
+    echo "$progname: updating lustrecvs"
+    cvs up -l || fatal 1 "Error updating lustrecvs"
+    export LUSTRECVS_UPDATED=yes
+    exec "$0" "$@"
+fi
+
+[ "$1" = "-r" ] && shift
 
-case "$2" in
+buildtag="HEAD"
+lustretag="$1"
+shift
+pindate=$1
+shift
+
+if [ "$*" ] ; then
+    usage >&2
+    exit 1
+fi
+
+case "$lustretag" in
     '')
         warn "a lustretag is required."
        usage >&2
@@ -57,27 +59,81 @@ case "$2" in
     # this is the branch table
     # keep this list sorted alphabetically!
 
-    b1_4)
-       portalstag="HEAD"
-       lustretag="b1_4"
-       ;;
-    b1_4_bgl)
-       portalstag="b1_4_bgl"
-       lustretag="b1_4_bgl"
-       ;;
-    b_cray)
-       portalstag="HEAD"
-       lustretag="b_cray"
-       ;;
-    HEAD)
-       portalstag="HEAD"
-       lustretag="HEAD"
-       ;;
+    # These use special build directories 
+
+    b1_4*) buildtag="b1_4" ;;
+
+    b_release_1_4_6-patchless) buildtag="b1_4" ;;
+    b_release_1_4_7-test) buildtag="b_release_1_4_7" ;;
+
+    b_release*) buildtag=$lustretag ;;
+
+    b_uoss) buildtag=$lustretag ;;
+
+    # These releases did not get build tagged for them because they
+    # this build system didn't exist when they were tagged
+    v1_2_8|v1_4_0) 
+        buildtag="b1_4"
+        ;;
+    
+    v*) buildtag=$lustretag ;;
+
+    # this is the branch table
+    # keep this list sorted alphabetically!
 
     *)
-       fatal 1 "This script does not contain branch information for $2.  Please update the branch table if necessary."
+        buildtag="HEAD"
        ;;
 esac
 
-cvs $cvscommand -r $portalstag portals
-cvs $cvscommand -r $lustretag -d lustre lustre-core
+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"
+
+if [ -f build/buildcvs ] ; then
+    . build/buildcvs
+else
+    fatal 1 "build/buildcvs does not exist; not updating other modules."
+fi
+
+if [ "$error_modules" ] ; then
+    fatal 1 "There were errors checking out the following directories: $error_modules"
+fi