Woo hoo! We'll test this here the next time we upgrade. Could you send-pr this, so it doesn't get lost?
Thanks! ==ml On Tue, Jan 13, 2004 at 02:46:23AM -0500, Michael R. Wayne wrote: > > Although Doug Barton has written a wonderful tool, it has always > seemed to have a major deficiency: it completely ignores the > existance of RCS files. I've exchanged some email with Doug and > he has no interest in adding RCS support to mergemaster. So I did. > > Doug has mentioned that some people solve this problem by using > the precompare script or by checking out all RCS files before > running mergemaster then checking them in afterwards. These > solutions are highly unattractive to me since they require sysadmins > to remember far too much, especially given that systems are often > upgraded at off hours to minimize user impact. > > The attached patch to the mergemaster in 4.9-RELEASE-p1 addresses > this issue. Specifically, it does the following, automatically: > > For every file that mergemaster replaces, check for the existance > of an associated RCS log file in the RCS subdirectory. (I do > NOT check for the logfile in the current directory). > If such a logfile exists > If the file is currently checked out, check it in with an automated comment. > Check the file out. > Apply the upgrade. > Check the file in with an automated comment. > If the file was originally checked out, check it back out again. > If no associated RCS log file exists, there is no change in the > operation of mergemaster. > > I take care to leave the log file in the original checked in/out > state: People have tools that "know" the state of logfiles and > these tools should not be broken. > > This seems to work for us. Comments/suggestions welcome. > > /\/\ \/\/ > > > *** /usr/sbin/mergemaster Thu Jan 8 17:03:30 2004 > --- mergemaster+rcs Fri Jan 9 08:45:19 2004 > *************** > *** 8,20 **** > # Copyright 1998-2003 Douglas Barton > # [EMAIL PROTECTED] > > # $FreeBSD: src/usr.sbin/mergemaster/mergemaster.sh,v 1.6.2.18 2003/08/25 08:27:41 > dougb Exp $ > > PATH=/bin:/usr/bin:/usr/sbin > > display_usage () { > VERSION_NUMBER=`grep "[$]FreeBSD:" $0 | cut -d ' ' -f 4` > ! echo "mergemaster version ${VERSION_NUMBER}" > echo 'Usage: mergemaster [-scrvahipCP] [-m /path]' > echo ' [-t /path] [-d] [-u N] [-w N] [-D /path]' > echo "Options:" > --- 8,22 ---- > # Copyright 1998-2003 Douglas Barton > # [EMAIL PROTECTED] > > + # Automated support for RCS log files added 2004 by [EMAIL PROTECTED] > + > # $FreeBSD: src/usr.sbin/mergemaster/mergemaster.sh,v 1.6.2.18 2003/08/25 08:27:41 > dougb Exp $ > > PATH=/bin:/usr/bin:/usr/sbin > > display_usage () { > VERSION_NUMBER=`grep "[$]FreeBSD:" $0 | cut -d ' ' -f 4` > ! echo "mergemaster version ${VERSION_NUMBER} with RCS support" > echo 'Usage: mergemaster [-scrvahipCP] [-m /path]' > echo ' [-t /path] [-d] [-u N] [-w N] [-D /path]' > echo "Options:" > *************** > *** 646,653 **** > --- 648,695 ---- > ;; > esac > > + # Begin part 1 of 2 support for RCS added by [EMAIL PROTECTED] > + # Deals with RCS log files in the RCS subdirectory, first checking > + # in previous changes (if any), checks in the changes made by > + # mergemaster and leaves the file in the original checked in/out state. > + # > + # Assume we will not need to check this file in. > + local MM_RCS > + MM_RCS=0 > + if [ -d ${3}/RCS ]; then > + # The RCS directory exists, check it for this logfile > + if [ -e ${3}/RCS/${2##*/},v ]; then > + # The RCS logfile exists, now we need to know it's existing state > + if [ -z `rlog -L -R ${3}/${2##*/}` ]; then > + # Target file is unlocked, check it out > + co -l ${3}/${2##*/} > + # Remember to leave file unlocked after install > + MM_RCS=1 > + else > + # File is already locked, check it in before we mess with it > + ci -l -m"Mergemaster auto checkin of locked file." ${3}/${2##*/} > + # Remember to leave file locked after install > + MM_RCS=2 > + fi > + fi > + fi > + # End part 1 of 2 support for RCS added by [EMAIL PROTECTED] > + > install -m "${1}" "${2}" "${3}" && > rm -f "${2}" > + > + # Begin part 2 of 2 support for RCS added by [EMAIL PROTECTED] > + if [ $MM_RCS -eq 1 ]; then > + # Checkin the file, leaving it unlocked > + ci -u -m"Mergemaster auto checkin after updates" ${3}/${2##*/} > + elif [ $MM_RCS -eq 2 ]; then > + # Checkin the file, leaving it locked > + ci -l -m"Mergemaster auto checkin after updates" ${3}/${2##*/} > + else > + # Do nothing, no RCS log file exists > + fi > + # End part 2 of 2 support for RCS added by [EMAIL PROTECTED] > + > } > > find_mode () { > _______________________________________________ > [EMAIL PROTECTED] mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "[EMAIL PROTECTED]" -- Michael Lucas [EMAIL PROTECTED], [EMAIL PROTECTED] Today's chance of throwing it all away to start a goat farm: 41.8% http://www.BlackHelicopters.org/~mwlucas/ Absolute OpenBSD: http://www.AbsoluteOpenBSD.com/ _______________________________________________ [EMAIL PROTECTED] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"