X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustrecvs;h=86eb3cbf2569094af1a73060cedc33f04324f29b;hp=e9c8b9a5864f855460fbe535f3ebf7cda00db196;hb=2c3286fa318daa55b5887274a4550d6669f2e56d;hpb=2ec4f8cc2c890edcd2199c92113438c8584b78b7 diff --git a/lustrecvs b/lustrecvs index e9c8b9a..86eb3cb 100755 --- a/lustrecvs +++ b/lustrecvs @@ -1,5 +1,6 @@ -#!/bin/sh +#!/bin/bash +LC_COLLATE="C" progname="${0##*/}" warn () @@ -18,32 +19,40 @@ fatal () usage () { cat < + where is a tag of the lustre-core module + and 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" + + # 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 + v*|b_release_*) TAG="-r $1" ;; + esac + + cvs update -l $TAG + export LUSTRECVS_UPDATED=yes + exec "$0" "$@" +fi + +[ "$1" = "-r" ] && shift + +buildtag="HEAD" +lustretag="$1" +shift +pindate=$1 +shift -case "$2" in +if [ "$*" ] ; then + usage >&2 + exit 1 +fi + +case "$lustretag" in '') warn "a lustretag is required." usage >&2 @@ -57,27 +66,201 @@ 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 + + # Maintenance mode -- isolate build system changes + b1_4*) buildtag="b1_4" ;; + + # Maintenance mode -- isolate build system changes + b1_6*) buildtag="b1_6" ;; + + 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! + + *_gate) buildtag="b_build_gate" ;; *) - 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 +} + +hg_cmd () +{ + dir="$1" + base_url="$2" + repository="$3" + + if [ ! "$repository" ]; then + return + fi + + if ! which hg &> /dev/null; then + cat < /dev/null; then + cat < /dev/null + + # Fetch new objects + git fetch "$url" "$branch" + + # Create branch if it doesn't exist already (e.g. we switched branches) + [ $? -eq 0 ] && $($(git branch -b $branch origin/$branch &> /dev/null) || true) + + # Rebase local commits + [ $? -eq 0 ] && git rebase origin/$branch $branch + + rc=$? + + popd > /dev/null + else + echo "$progname: Checking out $dir" + git clone "$url" "$dir" + rc=$? + + if [ $rc -eq 0 -a "$branch" != "master" ]; then + ( cd "$dir" && git checkout -b $branch origin/$branch ) + rc=$? + fi + fi + + if [ $rc -ne 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