#!/bin/sh # # A script to determine the cvs (rcs) revision of a file # as tagged into a given release. # # Usage: # relrev # # Where # release is the relavent release. # # module is the file (unqualified if local), # or package/directory, or package. # # Information returned is dependent on information supplied. # If the file is specified, local or fully qualified # (package/directory/file) the the returned information # is relative to that file. # If the package/directory is specified, the returned information # is for each file in the directory. # If the package (only) is specified, the information is for each # file in the package. # release=${1} file_spec=${2} if [ -z "${file_spec}" ] then echo USAGE: ${0} 'release module' exit fi ocvsroot=$CVSROOT . `/bin/csh -fc '/bin/echo ~cdfsoft'`/cdf2.shrc setup cdfsoft2 development o_dir=`pwd` if [ -f $CDFSOFT2_DIR/Release/Scripts/Find_cvs_root ] then my_dir=$CDFSOFT2_DIR/Release/Scripts else mkdir -p /tmp/$USER/$$ tmp_dir=/tmp/$USER/$$ cd $tmp_dir cvs -Q checkout Release/Scripts if [ ! -f Release/Scripts/Find_cvs_root ] then echo "Cannot initialize Release tools" exit fi my_dir=$tmp_dir/Release/Scripts cd ${o_dir} fi work_space=`$my_dir/define_work_area` cd ${work_space} cvs -Q checkout Release/Releases/${release}.newrel 2>/dev/null cd $o_dir touch ${work_space}/$$.log if [ ! -f ${work_space}/Release/Releases/${release}.newrel ] then echo Release ${release} is not defined. ver_str=v`echo ${release} | tr '.' '_'` echo Will check if $file_spec is tagged $ver_str tag_check='1' fi export CVSROOT [ "$ocvsroot" != "" ] && CVSROOT=$ocvsroot if [ ! -f $file_spec ] then cd $work_space package=`echo ${file_spec} | cut -f1 -d'/'` [ -z "${ver_str}" ] && \ ver_str=`grep ${package} Release/Releases/${release}.newrel` if [ "${ver_str}" != "" ] then set ${ver_str} ver_str=${2} [ -z "${ver_str}" ] && ver_str=${1} else echo "Unable to determine version information for $file_spec" exit fi cvs -Q checkout ${file_spec} if [ ! -d ${package} ] then echo ${file_spec} unknown in cvs repository exit 2 fi cvs log -r${ver_str}:${ver_str} ${file_spec} 2>/dev/null >> \ ${work_space}/$$.log if [ "${tag_check}" = '1' -a \ "`grep ${ver_str}: ${work_space}/$$.log`" = "" ] then echo $file_spec is NOT tagged for $release not_tagged='1' fi elif [ -d CVS ] then root=/`cat CVS/Root | cut -f2- -d'/'` dir=`cat CVS/Repository | sed "s%${root}%%"` pkg=`echo $dir | cut -f2 -d'/'` [ -z "${ver_str}" ] && ver_str=`grep $pkg ${work_space}/Release/Releases/${release}.newrel \ | cut -f2 -d' '` cvs log -r${ver_str}:${ver_str} ${file_spec} 2>/dev/null >> \ ${work_space}/$$.log if [ "${tag_check}" = '1' -a \ "`grep ${ver_str}: ${work_space}/$$.log`" = "" ] then echo $file_spec is NOT tagged for $release not_tagged='1' fi fi files=`grep 'Working file:' ${work_space}/$$.log | wc -l` if [ $files -eq 1 ] then echo '' grep 'Working file:' ${work_space}/$$.log grep 'head:' ${work_space}/$$.log vstr=`grep "$ver_str:" ${work_space}/$$.log` echo ${vstr} elif [ "${not_tagged}" = "" ] then while read log_str do log_str=`echo ${log_str}` ist=`echo ${log_str} | cut -f1 -d':' -s` [ "${ist}" = "" ] && continue if [ "${ist}" = "Working file" ] then echo '' echo ${log_str} ' ' Release: ${release} fi [ "${ist}" = "head" ] && echo ${log_str} [ "${ist}" = "${ver_str}" ] && echo ${log_str} done < ${work_space}/$$.log else echo Nothing in $file_spec tagged for $release fi rm ${work_space}/$$.log [ -d ${work_space}/Release ] && rm -r ${work_space}/Release [ -f ${work_space}/file_spec ] && rm -r ${work_space}/file_spec