#!/bin/bash # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to you under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # DESIREDREVISION="" if [ "$1" != "" ] then DESIREDREVISION="-r $1" fi # You should NOT need to modify anything below. # NB: derby_source must be defined. # NB NB: Assumes a svn update IS done when run first time! # If neccessary do a svn up -rXXXXXX to a previous revision first. #--------------------------------------------- TOOLDIR="${DERBYDIR}/${BRANCH_DIR}/tools/testing/reporting/scripts" . ${TOOLDIR}/env SRCDIR=${derby_source} if [ ! -e ${SRCDIR} ] then echo "${SRCDIR} does not exist." exit fi SANDBOX=`basename ${DERBYDIR}` UPDATELOGDIR=${DERBYDIR}/UpdateLog UPDATEID=`date +%Y-%m-%d_%H-%M-%S` UPDATELOGDIRCUR=${UPDATELOGDIR}/${UPDATEID} mkdir -p ${UPDATELOGDIRCUR} if [ ! -e ${UPDATELOGDIRCUR} ] then echo "${UPDATELOGDIRCUR} does not exist." exit fi # First time... mkdir -p ${DERBYDIR}/testing SVNHOSTINFO=`uname -srpi` SVNHOST=`uname -n` SVNHOST=`host ${SVNHOST} | awk '{print $1}'` cd ${SRCDIR} rm -f ${UPDATELOGDIR}/updateOK svn --version > ${UPDATELOGDIRCUR}/svn--version LASTUPDATEREVISION=`head -1 ${REVISIONLIST}` OLDREVISION=`svn info | grep '^Revision:'` OLDREPOSITORY=`svn info | grep '^URL:'` echo "${SVNHOSTINFO}[${SVNHOST}]" > ${UPDATELOGDIRCUR}/status-u.out echo "${OLDREVISION} ${OLDREPOSITORY}" >> ${UPDATELOGDIRCUR}/status-u.out svn status -u >> ${UPDATELOGDIRCUR}/status-u.out 2> ${UPDATELOGDIRCUR}/status-u.err echo "${SVNHOSTINFO}[${SVNHOST}]" > ${UPDATELOGDIRCUR}/update.out STARTTIME=`date +%Y-%m-%d" "%H:%M:%S" "%Z` #################################### # Do the update # svn update ${DESIREDREVISION} >> ${UPDATELOGDIRCUR}/update.out 2> ${UPDATELOGDIRCUR}/update.err # #################################### REVISION=`svn info | grep '^Revision:'` REPOSITORY=`svn info | grep '^URL:'` REVISION=`echo ${REVISION} | gawk '{ print $2 }'` OLDREVISION=`echo ${OLDREVISION} | gawk '{ print $2 }'` echo "${REVISION} ${REPOSITORY}" >> ${UPDATELOGDIRCUR}/update.out svn status >> ${UPDATELOGDIRCUR}/update.out 2>> ${UPDATELOGDIRCUR}/update.err cp ${UPDATELOGDIRCUR}/update.out ${UPDATELOGDIR}/update.out echo "LASTUPDATEREVISION: ${LASTUPDATEREVISION}, OLDREVISION: ${OLDREVISION}, REVISION: ${REVISION}" # java/testing/README.htm is NOT readable by 'o' by default.... # I publish a web-link to it: chmod go+r java/testing/README.htm # Flag that update went OK: if [ -e ${UPDATELOGDIR}/${UPDATEID}/update.err ] then LNSERR=`wc -l ${UPDATELOGDIR}/${UPDATEID}/update.err | gawk '{ print $1 }'` echo "LNSERR: ${LNSERR}" if [ "${LNSERR}" = "0" ] then ls -l ${UPDATELOGDIR}/${UPDATEID}/update.out if [ -e ${UPDATELOGDIR}/${UPDATEID}/update.out ] then UPDATED=`grep "Updated to revision" ${UPDATELOGDIR}/${UPDATEID}/update.out | wc -l | gawk '{ print $1 }'` UNCHANGED=`grep "At revision" ${UPDATELOGDIR}/${UPDATEID}/update.out | wc -l | gawk '{ print $1 }'` echo "UPDATED: ${UPDATED}, UNCHANGED: ${UNCHANGED}." if [ "${UPDATED}" = "1" -o "${UNCHANGED}" = "1" ] then echo "LASTUPDATEREVISION: ${LASTUPDATEREVISION}, OLDREVISION: ${OLDREVISION}, REVISION: ${REVISION}" if [ "${UNCHANGED}" = "1" ] then echo "UNCHANGED is 1" STATUS="unchanged from revision ${LASTUPDATEREVISION}/${OLDREVISION} to" # echo "${TOOLDIR}/textMail \"Derby ${STATUS} ${REVISION}\" \"${MAILTOEXT}\" \"${UPDATELOGDIR}/update.out\"" # ${TOOLDIR}/textMail "Derby ${STATUS} ${REVISION}" "${MAILTOEXT}" "${UPDATELOGDIR}/update.out" # Remove ...../${UPDATEID}/ rm -rf ${UPDATELOGDIR}/${UPDATEID} echo "${STATUS} ${REVISION}" exit else echo "UNCHANGED is not 1" STATUS="updated to revision" echo ${REVISION} > ${REVISIONLIST}.this cp ${REVISIONLIST} ${REVISIONLIST}.prev cat ${REVISIONLIST}.this ${REVISIONLIST}.prev > ${REVISIONLIST} rm -f ${REVISIONLIST}.prev ${REVISIONLIST}.this echo "touch ${UPDATELOGDIR}/updateOK" touch ${UPDATELOGDIR}/updateOK UPDATEINFO="UpdateInfo" mkdir -p ${DERBYDIR}/${UPDATEINFO} REVLO="${DERBYDIR}/${UPDATEINFO}/${REVISION}.txt" echo "Changes from ${LASTUPDATEREVISION}/${OLDREVISION} to ${REVISION}:" > ${REVLO} ${TOOLDIR}/svnLogRevs.new ${OLDREVISION} ${REVISION} >> ${REVLO} echo " " >> ${REVLO} cat ${UPDATELOGDIR}/${UPDATEID}/update.out >> ${REVLO} LUREV="${DERBYDIR}/${UPDATEINFO}/LatestUpdateRevision.txt" echo ${REVISION} > ${LUREV} SRC="${REVLO} ${LUREV}" chmod go+r ${SRC} SCPUT=/usr/bin/scp # Do NOT block this one DST="${PUBLISHDIR}/${UPDATEINFO}/" echo "**** OBS! ${SCPUT} ${SRC} ${PUBLISHUSER}@${PUBLISHSITE}:${DST}" ### UNCOMMENT TO PUBLISH. ${SCPUT} ${SRC} ${PUBLISHUSER}@${PUBLISHSITE}:${DST} # echo "${TOOLDIR}/textMail \"${SANDBOX} ${STATUS} ${REVISION}\" \"${MAILTOEXT}\" \"${UPDATELOGDIR}/update.out\"" # ${TOOLDIR}/textMail "Derby ${STATUS} ${REVISION}" "${MAILTOEXT}" "${UPDATELOGDIR}/update.out" # Rename ...../${UPDATEID}/ to ...../${REVISION}/ mv ${UPDATELOGDIR}/${UPDATEID} ${UPDATELOGDIR}/${REVISION} echo ${STARTTIME} > ${UPDATELOGDIR}/${REVISION}/UpdateTime echo "Changes from ${LASTUPDATEREVISION}/${OLDREVISION} to ${REVISION}." exit fi echo "updateDerby 1" fi echo "updateDerby 2" fi echo "updateDerby 3" fi echo "updateDerby 4" fi echo "updateDerby 5" ### UNCOMMENT TO SEND MAIL. ${TOOLDIR}/textMail "${SANDBOX} update failed" "${MAILTOINT}" "${UPDATELOGDIR}/update.out ${UPDATELOGDIRCUR}/update.err" ### UNCOMMENT TO SEND MAIL. ${TOOLDIR}/textMail "${SANDBOX} update failed" "${MAILTOEXT}" "${UPDATELOGDIR}/update.out ${UPDATELOGDIRCUR}/update.err"