|
|
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.