#!/bin/sh
echo "Executing $0 "$@""
prog=`basename $0`
usage()
{
echo
echo "$prog <codeline> <product label> <base codeline> <base label>"
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