home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh
- PATH='/usr/local/bin;/bin;/usr/bin;/usr/ucb'
- # 'rcsfreeze' has the purpose of assigning a symbolic revision
- # number to a set of RCS files, which form a valid configuration.
- #
- # The idea is to run rcsfreeze each time a new version is checked
- # in. A unique symbolic revision number (C_[number], where number
- # is increased each time rcsfreeze is run) is then assigned to the most
- # recent revision of each RCS file of the main trunk.
- #
- # If the command is invoked with an argument, then this
- # argument is used as the symbolic name to freeze a configuration.
- # The unique identifier is still generated
- # and is listed in the log file but it will not appear as
- # part of the symbolic revision name in the actual RCS file.
- #
- # A log message is requested from the user which is saved for future
- # references.
- #
- # The shell script works only on all RCS files at one time.
- # It is important that all changed files are checked in (there are
- # no precautions against any error in this respect).
- # file names:
- # {RCS/}rcsfreeze.version for the version number
- # {RCS/}rscfreeze.log for the log messages, most recent
- # logmessage first.
-
- progname=`basename $0`
- DATE=`date`
- # Check whether we have an RCS subdirectory, so we can have the right
- # prefix for our paths.
- if [ -d RCS ] ; then
- RCSDIR=RCS
- else
- RCSDIR=.
- fi
-
- # Version number stuff, log message file
- VERSIONFILE=$RCSDIR/rcsfreez.ver
- LOGFILE=$RCSDIR/rcsfreez.log
- if [ ! -r $VERSIONFILE ] ; then
- # Initialize, rcsfreeze never run before in the current directory
- cat << EOF > $VERSIONFILE
- 0
- EOF
- touch $LOGFILE
- fi
-
- # Get Version number, increase it, write back to file.
- VERSIONNUMBER=`cat $VERSIONFILE`
- VERSIONNUMBER=`expr $VERSIONNUMBER + 1`
- cat << EOF > $VERSIONFILE
- $VERSIONNUMBER
- EOF
-
- # Symbolic Revision Number
- SYMREV=C_$VERSIONNUMBER
- # Allow the user to give a meaningful symbolic name to the revision.
- SYMREVNAME=${1-$SYMREV}
- echo "$progname: symbolic revision number computed: \"$SYMREV\""
- echo "$progname: symbolic revision number used: \"$SYMREVNAME\""
- echo "$progname: the two differ only when $progname invoked with argument"
-
- # Stamp the logfile. Because we order the logfile the most recent
- # first we will have to save everything right now in a temporary file.
- TMPLOG=/tmp/rcsfreeze.$$.log.tmp
- echo "Version: $SYMREVNAME($SYMREV), Date: $DATE" > $TMPLOG
- echo "-----------" >> $TMPLOG
- # Now ask for a log message, continously add to the log file
- echo "$progname: give log message, summarizing changes"
- echo " (terminate with ^D or single '.')"
- while read MESS ; do
- if [ "$MESS" = '.' ] ; then break ; fi
- echo " $MESS" >> $TMPLOG
- done
- echo "-----------" >> $TMPLOG
- echo >> $TMPLOG
-
- # combine old and new logfiles
- TMPLOG2=$TMPLOG.2
- cat $TMPLOG $LOGFILE > $TMPLOG2
- cp $TMPLOG2 $LOGFILE
- rm -f $TMPLOG $TMPLOG2
-
- # Now the real work begins by assigning a symbolic revision number
- # to each rcs file. Take the most recent version of the main trunk.
-
- for FILE in $RCSDIR/* ; do
- # get the revision number of the most recent revision
- REV=`rlog -h -d"$DATE" $FILE | fgrep 'head:' | awk ' { print $2 } ' `
- echo "$progname: file name: \"$FILE\", Revision Number: $REV"
- # assign symbolic name to it.
- rcs -q -n$SYMREVNAME:$REV $FILE
- done
-