Mergemaster+RCS
Michael W. Lucas
mwlucas at blackhelicopters.org
Wed Jan 14 08:25:44 PST 2004
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
> # DougB at FreeBSD.org
>
> # $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
> # DougB at FreeBSD.org
>
> + # Automated support for RCS log files added 2004 by wayne at msen.com
> +
> # $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 wayne at msen.com
> + # 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 wayne at msen.com
> +
> install -m "${1}" "${2}" "${3}" &&
> rm -f "${2}"
> +
> + # Begin part 2 of 2 support for RCS added by wayne at msen.com
> + 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 wayne at msen.com
> +
> }
>
> find_mode () {
> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
--
Michael Lucas mwlucas at FreeBSD.org, mwlucas at BlackHelicopters.org
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/
More information about the freebsd-hackers
mailing list