|
|
1.1 ! root 1: #! /bin/sh ! 2: PATH=/usr/local/bin:/bin:/usr/bin:/usr/ucb ! 3: # 'rcsfreeze' has the purpose of assigning a symbolic revision ! 4: # number to a set of RCS files, which form a valid configuration. ! 5: # ! 6: # The idea is to run rcsfreeze each time a new version is checked ! 7: # in. A unique symbolic revision number (C_[number], where number ! 8: # is increased each time rcsfreeze is run) is then assigned to the most ! 9: # recent revision of each RCS file of the main trunk. ! 10: # ! 11: # If the command is invoked with an argument, then this ! 12: # argument is used as the symbolic name to freeze a configuration. ! 13: # The unique identifier is still generated ! 14: # and is listed in the log file but it will not appear as ! 15: # part of the symbolic revision name in the actual RCS file. ! 16: # ! 17: # A log message is requested from the user which is saved for future ! 18: # references. ! 19: # ! 20: # The shell script works only on all RCS files at one time. ! 21: # It is important that all changed files are checked in (there are ! 22: # no precautions against any error in this respect). ! 23: # file names: ! 24: # {RCS/}rcsfreeze.version for the version number ! 25: # {RCS/}rscfreeze.log for the log messages, most recent ! 26: # logmessage first. ! 27: ! 28: progname=`basename $0` ! 29: DATE=`date` ! 30: # Check whether we have an RCS subdirectory, so we can have the right ! 31: # prefix for our paths. ! 32: if [ -d RCS ] ; then ! 33: RCSDIR=RCS ! 34: else ! 35: RCSDIR=. ! 36: fi ! 37: ! 38: # Version number stuff, log message file ! 39: VERSIONFILE=$RCSDIR/.rcsfreeze.version ! 40: LOGFILE=$RCSDIR/.rcsfreeze.log ! 41: if [ ! -r $VERSIONFILE ] ; then ! 42: # Initialize, rcsfreeze never run before in the current directory ! 43: cat << EOF > $VERSIONFILE ! 44: 0 ! 45: EOF ! 46: touch $LOGFILE ! 47: fi ! 48: ! 49: # Get Version number, increase it, write back to file. ! 50: VERSIONNUMBER=`cat $VERSIONFILE` ! 51: VERSIONNUMBER=`expr $VERSIONNUMBER + 1` ! 52: cat << EOF > $VERSIONFILE ! 53: $VERSIONNUMBER ! 54: EOF ! 55: ! 56: # Symbolic Revision Number ! 57: SYMREV=C_$VERSIONNUMBER ! 58: # Allow the user to give a meaningful symbolic name to the revision. ! 59: SYMREVNAME=${1-$SYMREV} ! 60: echo "$progname: symbolic revision number computed: \"$SYMREV\"" ! 61: echo "$progname: symbolic revision number used: \"$SYMREVNAME\"" ! 62: echo "$progname: the two differ only when $progname invoked with argument" ! 63: ! 64: # Stamp the logfile. Because we order the logfile the most recent ! 65: # first we will have to save everything right now in a temporary file. ! 66: TMPLOG=/tmp/rcsfreeze.$$.log.tmp ! 67: echo "Version: $SYMREVNAME($SYMREV), Date: $DATE" > $TMPLOG ! 68: echo "-----------" >> $TMPLOG ! 69: # Now ask for a log message, continously add to the log file ! 70: echo "$progname: give log message, summarizing changes" ! 71: echo " (terminate with ^D or single '.')" ! 72: while read MESS ; do ! 73: if [ "$MESS" = '.' ] ; then break ; fi ! 74: echo " $MESS" >> $TMPLOG ! 75: done ! 76: echo "-----------" >> $TMPLOG ! 77: echo >> $TMPLOG ! 78: ! 79: # combine old and new logfiles ! 80: TMPLOG2=$TMPLOG.2 ! 81: cat $TMPLOG $LOGFILE > $TMPLOG2 ! 82: cp $TMPLOG2 $LOGFILE ! 83: rm -f $TMPLOG $TMPLOG2 ! 84: ! 85: # Now the real work begins by assigning a symbolic revision number ! 86: # to each rcs file. Take the most recent version of the main trunk. ! 87: ! 88: for FILE in $RCSDIR/* ; do ! 89: # get the revision number of the most recent revision ! 90: REV=`rlog -h -d"$DATE" $FILE | fgrep 'head:' | awk ' { print $2 } ' ` ! 91: echo "$progname: file name: \"$FILE\", Revision Number: $REV" ! 92: # assign symbolic name to it. ! 93: rcs -q -n$SYMREVNAME:$REV $FILE ! 94: done
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.