#!/bin/sh if [ $# -ne 3 ] then echo "Error: Incorrect parameters passed to $0" echo "Usage: $0 " echo echo " would be something like '//oware/oware21/'" echo " would be '//build-clifford21/oware'" echo "These values will be prepended to the lines in the bom file to" echo "create the client spec view." echo " is a file list to be added to the view for the client" echo echo "Note: The behavior may be unexpected with unusual characters such as space" exit 1 fi stat=0 pass1=$1 pass2=$2 if [ "$DEBUG" = 0 ] then set -vx fi # Enclose roots in // index=0 for i in "$1" "$2" do index=`expr $index + 1` eval pass$count="$i" echo $i | grep ^/ > /dev/null || \ eval pass$index="//$i" echo $i | grep /$ > /dev/null && \ eval pass$index=`expr "$i" : '\(.*[a-z|0-9]\)'` done eval depot_root="$pass1" eval client_root="$pass2" bom_file=$3 client=`echo $client_root | awk -F/ '{print $3}'` if [ ! -f $bom_file ] then echo "$0, $bom_file does not exist" exit 1 fi if [ x$WORK_DIR = x ] then WORK_DIR=/tmp fi if [ ! -d "$WORK_DIR" ] then mkdir $WORK_DIR stat=`expr $stat + $?` fi # Create the client spec. # If a client's View is empty then create a view line first. p4 client -o $client | tee $WORK_DIR/client.tmp | grep ^View: > /dev/null \ || echo View: >> $WORK_DIR/client.tmp stat=`expr $stat + $?` bom_operator 'echo " "' $depot_root $client_root $bom_file >> \ $WORK_DIR/client.tmp stat=`expr $stat + $?` echo Modifying $client p4 -s -c $client client -i < $WORK_DIR/client.tmp stat=`expr $stat + $?` exit $stat # The following was old way. I stopped this because I'd rather assume that # we need to add the records each time. If there are duplifcates then it is # an error in usage. I want to discourage the use of updating the client spec # instead of release.bom # Only add records that are unique. pattern=`awk -v from=$depot_root -v to=$client_root \ '{print "\t"from$1,to$1}' $bom_file` stat=`expr $stat + $?` start=off modified=false for i in $pattern do if [ $start != "on" ] then start=on record=$i else record="$record $i" # use fgrep because it doesn't know of regular expressions. This allows it to # match files like *.txt. fgrep "$record" $WORK_DIR/client.tmp > /dev/null if [ $? -eq 1 ] then echo " "$record >> $WORK_DIR/client.tmp modified=true fi start=off fi done if [ "$modified" = "true" ] then echo $client modified p4 -s -c $client client -i < $WORK_DIR/client.tmp stat=`expr $stat + $?` fi exit $stat