Skip to content
Snippets Groups Projects
lustrecvs 4.01 KiB
Newer Older
scjody's avatar
scjody committed
#!/bin/bash
jacob's avatar
jacob committed

LC_COLLATE="C"
jacob's avatar
jacob committed
progname="${0##*/}"

warn ()
{
    [ "$1" ] && echo >&2
    [ "$1" ] && echo "$progname: $1" >&2
    [ "$1" ] && echo >&2
}

fatal ()
{
    warn "$2"
    exit "$1"
}

usage ()
{
    cat <<EOF
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
jacob's avatar
jacob committed
EOF
}

if [ -z "$LUSTRECVS_UPDATED" ] ; then
    echo "$progname: updating lustrecvs"
Andreas Dilger's avatar
Andreas Dilger committed

    # If checking out a specific tag, make sure all of the files here are also
    # checked out with the same tag to avoid later changes breaking things.
    case "$1" in
Andreas Dilger's avatar
Andreas Dilger committed
    v*|b_release_*) TAG="-r $1" ;;
Andreas Dilger's avatar
Andreas Dilger committed
    esac

    cvs update -l $TAG
    export LUSTRECVS_UPDATED=yes
    exec "$0" "$@"
fi

Andreas Dilger's avatar
Andreas Dilger committed
[ "$1" = "-r" ] && shift

jacob's avatar
jacob committed
buildtag="HEAD"
jacob's avatar
jacob committed
lustretag="$1"
pindate=$1
shift
jacob's avatar
jacob committed
case "$lustretag" in
jacob's avatar
jacob committed
    '')
        warn "a lustretag is required."
	usage >&2
	exit 1
	;;
    --help | -h)
	usage
	exit 0
	;;

Andreas Dilger's avatar
Andreas Dilger committed
    # this is the branch table
    # keep this list sorted alphabetically!

    # These use special build directories 

Andreas Dilger's avatar
Andreas Dilger committed
    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 ;;

Andreas Dilger's avatar
Andreas Dilger committed
    # These releases did not get build tagged for them because they
    # this build system didn't exist when they were tagged
Brian J. Murrell's avatar
Brian J. Murrell committed
        buildtag="b1_4"
Andreas Dilger's avatar
Andreas Dilger committed
    v*) buildtag=$lustretag ;;
Andreas Dilger's avatar
Andreas Dilger committed

jacob's avatar
jacob committed
    # this is the branch table
    # keep this list sorted alphabetically!

Andreas Dilger's avatar
Andreas Dilger committed
    *_gate) buildtag="b_build_gate" ;;

jacob's avatar
jacob committed
	;;
jacob's avatar
jacob committed
esac

jacob's avatar
jacob committed
error_modules=
jacob's avatar
jacob committed
cvs_cmd ()
{
jacob's avatar
jacob committed
    dir="$1"
    module="$2"
    tag="$3"
    cotag=""
    update=""
jacob's avatar
jacob committed

jacob's avatar
jacob committed
    if [ "$tag" = "HEAD" ] ; then
        cotag=""
        uptag="-A"
jacob's avatar
jacob committed
    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"
jacob's avatar
jacob committed
    else
        datecmd=""
jacob's avatar
jacob committed
    if [ -d "$dir" ] ; then
        echo "$progname: Updating $dir to $tag"
        ( cd "$dir" && cvs up $datecmd -dAP $uptag )
jacob's avatar
jacob committed
    else
        echo "$progname: Checking out $dir from $tag"
Andrew Perepechko's avatar
 
Andrew Perepechko committed
        cvs co $datecmd -P $cotag -d "$dir" "$module"
jacob's avatar
jacob committed
    fi
jacob's avatar
jacob committed
    if [ $? != 0 ] ; then
        error_modules="$dir $error_modules"
jacob's avatar
jacob committed
    fi
Ricardo M. Correia's avatar
Ricardo M. Correia committed
hg_cmd ()
{
    dir="$1"
    base_url="$2"
    repository="$3"

    if [ ! "$repository" ]; then
        return
    fi

Ricardo M. Correia's avatar
Ricardo M. Correia committed
    if ! which hg &> /dev/null; then
    cat <<EOF

Error: Mercurial is missing, try 'yum install mercurial', 'apt-get install
mercurial' or try http://rpmfind.net/linux/rpm2html/search.php?query=mercurial
EOF
        error_modules="$dir $error_modules"
        return
    fi

Ricardo M. Correia's avatar
Ricardo M. Correia committed
    url="$base_url/$repository"

    # create a cvs date format that will survive shell expansion
    if [ -n "$pindate" ]; then
        datecmd=$(date -u +%s -d "$pindate")
        datecmd="-d \"$datecmd 0\""
    else
        datecmd=""
    fi

    if [ -d "$dir" ]; then
        echo "$progname: Updating $dir"
        if [ -f "$dir/update.sh" ]; then
            ( cd "$dir" && ./update.sh $datecmd )
        else
            ( cd "$dir" && hg pull && hg update $datecmd )
        fi
    else
        echo "$progname: Checking out $dir"
        hg clone $url $dir
        if [ -f "$dir/setup.sh" ]; then
            ( cd "$dir" && ./setup.sh $datecmd )
        else
            ( cd "$dir" && hg update $datecmd )
        fi
    fi

    if [ $? != 0 ] ; then
        error_modules="$dir $error_modules"
    fi
}

jacob's avatar
jacob committed
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
jacob's avatar
jacob committed

if [ "$error_modules" ] ; then
    fatal 1 "There were errors checking out the following directories: $error_modules"
fi