X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=build%2Fland1.sh;fp=build%2Fland1.sh;h=6b69eae5bdcd2ca0655f58edc0bdf3e493529c8f;hb=c9bd81d352c0e43db47d4846b97ee1ddd9565839;hp=0000000000000000000000000000000000000000;hpb=4e601864fdf650cca88a8c3b539fb0f36290a89b;p=fs%2Flustre-release.git diff --git a/build/land1.sh b/build/land1.sh new file mode 100755 index 0000000..6b69eae --- /dev/null +++ b/build/land1.sh @@ -0,0 +1,118 @@ +#!/bin/sh -e + +progname=${0##*/} + +CONFLICTS=cvs-merge-conflicts +CVS=cvs + +if [ -f .mergeinfo ] ; then + echo ".mergeinfo exists - clean up first" + exit +fi + +if [ -f $CONFLICTS ] ; then + echo "$CONFLICTS exists - clean up first" + exit +fi + +if [ $# -lt 2 -o $# -gt 3 ]; then + echo "This is phase 1 of merging branches. Usage: $0 parent child [dir]" + exit +fi + +parent=$1 +PARENT=`echo $parent | sed -e "s/^b_//" | tr "[a-z]" "[A-Z]"` +child=$2 +CHILD=`echo $child | sed -e "s/^b_//" | tr "[a-z]" "[A-Z]"` +date=`date +%Y%m%d_%H%M` + +dir=${3:-.} +module=$(<$dir/CVS/Repository) + +if [ "$module" = "lustre" ] ; then + echo >&2 "${progname}: You probably want to branch lustre or portals, not the whole tree." + echo >&2 "${progname}: Try using ${0} $parent $child lustre" + exit 1 +fi + +case $parent in + HEAD) : ;; + b_*|b[1-4]*) : ;; + *) parent="b_$parent" ;; +esac +case $child in + HEAD) : ;; + b_*|b[1-4]*) : ;; + *) child="b_$child" +esac + +if [ "$parent" != "HEAD" -a "`cat $dir/CVS/Tag 2> /dev/null`" != "T$parent" ]; then + echo "${progname}: this script must be run within the $parent branch" + exit 1 +fi + +TEST_FILE=${TEST_FILE:-ChangeLog} # does this need to be smarter? +check_tag() { + [ -z "$1" ] && echo "check_tag() missing arg" && exit3 + [ "$1" = "HEAD" ] && return + $CVS log $dir/$TEST_FILE 2> /dev/null | grep -q " $1: " && return + echo "${progname}: tag $1 not found in $dir/$TEST_FILE" + exit 2 +} + +check_tag $child +check_tag ${CHILD}_BASE + +cat << EOF > ".mergeinfo" +parent=$parent +PARENT=$PARENT +child=$child +CHILD=$CHILD +date=$date +module=$module +dir=$dir +CONFLICTS=$CONFLICTS +OPERATION=Land +OPERWHERE=onto +EOF + +echo PARENT $PARENT parent $parent CHILD $CHILD child $child date $date + +# Update your tree to the PARENT branch; HEAD is not really a branch, so you +# need to update -A instead of update -r HEAD, or the commit will fail. -p +echo -n "Updating to $parent ...." +if [ $parent == "HEAD" ]; then + $CVS update -AdP $dir +else + $CVS update -r $parent -dP $dir +fi +echo "done" + +echo -n "Tagging as ${PARENT}_${CHILD}_LAND_PARENT_$date ..." +$CVS tag ${PARENT}_${CHILD}_LAND_PARENT_$date $dir +echo "done" + +echo -n "Create land point on ${child} ${PARENT}_${CHILD}_LAND_CHILD_$date ..." +$CVS rtag -r ${child} ${PARENT}_${CHILD}_LAND_CHILD_$date $module $dir +echo "done" + +echo -n "Preserve old base tag ${CHILD}_BASE as ${CHILD}_BASE_PREV ..." +$CVS tag -F -r ${CHILD}_BASE ${CHILD}_BASE_PREV $dir +echo "done" + +# Apply all of the changes to your local tree: +echo -n "Updating as -j ${CHILD}_BASE -j ${PARENT}_${CHILD}_LAND_CHILD_$date ..." +$CVS update -j ${CHILD}_BASE -j ${PARENT}_${CHILD}_LAND_CHILD_$date $dir +echo "done" + +echo -n "Recording conflicts in $CONFLICTS ..." +if $CVS update | grep '^C' > $CONFLICTS; then + echo "Conflicts found, fix before committing." + cat $CONFLICTS +else + echo "No conflicts found" + rm -f $CONFLICTS +fi +echo "done" + +echo "Build, test, commit and then run land2.sh (no arguments)"