#!/bin/sh echo "Executing $0 "$@"" prog=`basename $0` usage() { echo echo "$prog " echo echo "eg. $prog configbuilder CB.2.0.0.1 redcell22 RC.2.2.0.42" echo echo "$prog will integrate the nt install from the base codeline product to the" echo "product branch of the release depot. It then updates the setup.ini file" echo "and the raw files to the release depot." } if [ "$DEBUG" = "0" ] then set -vx fi stat=0 if [ $# -lt 2 ] then echo $prog, Error: Incorrect number of parameters passed usage exit 1 fi CODELINE=$1 # Make sure codeline is lower case. CODELINE=`echo $CODELINE | tr '[A-Z]' '[a-z]'` from="//release/internal/$3/CDLayout/install/nt" from_label=$4 to_label=$2 to="//release/internal/$CODELINE/CDLayout/install/nt" # setup environment. setenv $CODELINE > /tmp/env.$$ if [ $? != 0 ] then echo setenv $CODELINE failed exit 1 fi . /tmp/env.$$ if [ $? != 0 ] then echo setenv $CODELINE failed exit 1 fi rm /tmp/env.$$ PRODUCT=`echo $CODELINE | tr -d [0-9]` SOURCE_CODELINE=$CODELINE # CODELINE is changing from that defined by setenv here. Be sure that any # future reference to CODELINE is agreeable to this. if [ "$PRODUCT" = "$CODELINE" ] then VER=`echo $to_label | awk -F. '{ print $2$3}'` if [ $VER" = "" ] then echo "$prog, Error: Could not determine version from label $to_label" exit 1 fi CODELINE=$CODELINE$VER export CODELINE fi base=false if [ "$PRODUCT" != "oware" ] then base=true if [ x$from_label = x ] then echo $prog, Error: Incorrect number of parameters passed usage exit 1 fi fi # Verify that the label version and codeline version are the same. if [ $base = "true" ] then if [ "`echo $3 | tr -d '[a-z]'`" != "`echo $from_label | awk -F. '{print $2$3}'`" ] then echo "$prog, Error: Label $from_label and Codeline $3 are not compatible" exit 1 fi fi if [ "`echo $CODELINE | tr -d '[a-z]'`" != "`echo $to_label | awk -F. '{print $2$3}'`" ] then echo "$prog, Error: Label $to_label and $CODELINE are not compatible" exit 1 fi p4path="" # client-spec to perform operations. rel_client="scm-${CODELINE}-release" int_client="scm-${CODELINE}-integrate" build_client="scm-${CODELINE}-build" source_client="scm-${CODELINE}-source" environment_client="build-environment" BUILDENV_ROOT=`p4 -c $environment_client info | grep "Client root" | \ awk '{print $3}' | sed 's/\\\/\//g'` if [ "$BUILDENV_ROOT" != "" ] then BUILDENV_ROOT="$BUILDENV_ROOT/tmp/work/$CODELINE/buildenv" else echo "$prog, Error: BUILDENV_ROOT not defined." exit 1 fi # Get client root. release_root=`p4 -c $rel_client info | grep "Client root" | awk '{print $3}' \ | sed 's/\\\/\//g'` stat=`expr $? + $stat` build_root=`p4 -c $build_client info | grep "Client root" | awk '{print $3}' \ | sed 's/\\\/\//g'` stat=`expr $? + $stat` base_root=`p4 -c $source_client info | grep "Client root" | awk '{print $3}' \ | sed 's/\\\/\//g'` stat=`expr $? + $stat` if [ "$release_root" = "" -o "$build_root" = "" -o "$base_root" = "" ] then echo "$prog, Error: root undefined" exit 1 fi if [ x$LOG_DIR = x ] then LOG_DIR=$release_root/logs fi if [ -d $release_root ] then rm -fr $release_root/$CODELINE/* fi stat=`expr $? + $stat` if [ -d $build_root ] then rm -fr $build_root/* fi stat=`expr $? + $stat` if [ $stat -ne 0 ] then echo "$prog exiting due to errors" fi p4path="CDLayout/install/nt" # From files must be on client before integrate. # flush client workspace for integration. # I would send output to /dev/null but perforce exits with 0 on an error # The only way to know there is an error is to grep for error: if [ $base = "true" ] then echo "Using $int_client for integration" p4 -s -c $int_client flush -f $from/...@$from_label | grep ^error: if [ $? -eq 0 ] then echo "$prog, Error: 'p4 -s -c $int_client flush -f $from/...@$from_label' failed" stat=1 fi echo "Integrating $from/...@$from_label to $to/..." p4 -s -c $int_client integrate -i $from/...@$from_label \ $to/... | tee -a $LOG_DIR/integrate.out | \ grep -v "all revision(s) already integrated." | grep ^error: if [ $? -eq 0 ] then echo "$prog, Error: Integration failed." stat=1 fi # submit integration if [ $stat -eq 0 ] then echo "Submitting integration" p4_submit "Release integration from $3 @$from_label to $1 for $to_label" \ $int_client stat=`expr $? + $stat` else echo "$prog, Warning: Integration not submitted due to errors" fi fi # Get raw files from build_client, these map onto the release_client spec. # This should include both raw files from the source depot and the jars from # the build depot. echo "Pulling raw files from //$build_client/...@$to_label" p4 -s -c $build_client sync -f //$build_client/...@$to_label \ | tee $LOG_DIR/rawfiles.out | grep ^error: if [ $? -eq 0 ] then echo "$prog, Error: 'p4 -s -c $build_client sync -f $build_root/...@$to_label' failed." stat=1 fi if [ "$PRODUCT" = "oware" ] then echo "Adding files to release from //oware/$SOURCE_CODELINE/...@$to_label if they exist" p4 -c $rel_client sync -f //oware/$SOURCE_CODELINE/...@$to_label stat=`expr $? + $stat` # Create empty directories that perforce misses. if [ ! -f $BUILDENV_ROOT/release.bom ] then p4 -c $environment_client sync -f //build/$CODELINE/buildenv/release.bom stat=`expr $? + $stat` fi for file in `cat $BUILDENV_ROOT/release.bom | sed 's/\.\.\.//g'` do file=`echo $file | eval sed 's/^$CODELINE\\\\//$PRODUCT\\\\//g'` if [ "$file" = "" ] then echo "$prog, Error: "`echo $file | eval sed 's/^$CODELINE\\\\//$PRODUCT\\\\//g'` failed." stat=1 fi if [ ! -d "$build_root/$file" ] then if [ ! -f "$build_root/$file" ] then echo "$prog, Warning: $file does not exist." echo " Creating directory $build_root/$file" mkdir -p $build_root/$file stat=`expr $? + $stat` fi fi done install_root=$base_root/install-src/nt/$CODELINE if [ -d $install_root ] then echo "Error: install_root not defined." echo "$prog aborted" exit 1 fi rm -fr $install_root/* stat=`expr $? + $stat` echo "Pulling install source from $source_client to $install_root/..." p4 -s -c $source_client sync -f $install_root/... \ | tee $LOG_DIR/installsrc.out | grep "^error:" if [ $? -eq 0 ] then echo "$prog, Error: 'p4 -s -c $source_client sync -f $install_root/...' failed." stat=1 fi OWARE_VERSION=`echo $to_label | awk -F. \ 'BEGIN {ORS=""} {for (i=2; i<=NF-1; i++) print $i"."; print $NF}'` export OWARE_VERSION ; echo OWARE_VERSION = $OWARE_VERSION # Convert / to \ for dos. Temp until bash version of build_oware.bat used. PUBLISH_PATH=$release_root/$CODELINE/CDLayout/install/nt PUBLISH_PATH=`echo $PUBLISH_PATH | sed 's/\//\\\/g'` export PUBLISH_PATH ; echo PUBLISH_PATH = $PUBLISH_PATH STAGE_PATH=$build_root STAGE_PATH=`echo $STAGE_PATH | sed 's/\//\\\/g'` export STAGE_PATH ; echo STAGE_PATH = $STAGE_PATH PROJECT_PATH=$install_root/installshield/Install cd $PROJECT_PATH PROJECT_PATH=`echo $PROJECT_PATH | sed 's/\//\\\/g'` export PROJECT_PATH ; echo PROJECT_PATH = $PROJECT_PATH OWARE_SRC=$base_root/$SOURCE_CODELINE OWARE_SRC=`echo $OWARE_SRC | sed 's/\//\\\/g'` export OWARE_SRC ; echo OWARE_SRC = $OWARE_SRC OW3RD_SRC=$base_root/oware3rd OW3RD_SRC=`echo $OW3RD_SRC | sed 's/\//\\\/g'` export OW3RD_SRC ; echo OW3RD_SRC = $OW3RD_SRC if [ "$OWARE_VERSION" = "" -o \ "$PUBLISH_PATH" = "" -o \ ! -d "$STAGE_PATH" -o \ ! -d "$PROJECT_PATH" -o \ ! -d "$OWARE_SRC" -o \ ! -d "$OW3RD_SRC" ] then echo "$prog, Error: Environment not completely defined" exit 1 fi build_oware.bat update_depot -c $rel_client $release_root/$CODELINE/CDLayout/install/... stat=`expr $? + $stat` else setupini="$release_root/$CODELINE/$p4path/setup.ini" rawini="$build_root/$PRODUCT/install/setup.ini" echo "Modifying $setupini" eval sed 's/^Version=.*/Version=$to_label/' $rawini > $setupini stat=`expr $? + $stat` release_files=`dirname $setupini` update_depot -c $rel_client $release_files/... stat=`expr $? + $stat` fi # submit changes if [ $stat -eq 0 ] then echo "Submitting install files using client $rel_client" p4_submit "Install files for $to_label" $rel_client stat=`expr $? + $stat` echo "Adding files to label $to_label" p4 -s -c $rel_client labelsync -a -l $to_label $release_root/$CODELINE/... stat=`expr $? + $stat` else echo "$prog, Warning: Raw files not submitted due to errors" fi exit $stat