From b958b846b0dd0f260c6a73f7f68f7c5fc1114b2c Mon Sep 17 00:00:00 2001 From: dougb Date: Mon, 5 Mar 2001 10:13:21 +0000 Subject: * Add two requested features, source'ing of /etc/mergemaster.rc, and asking the user to actually run the recommended commands related to installation of files such as aliases or login.conf. * Return to using grep for CVS $Id comparison. Using ident caused too many problems for people with local CVS/RCS tags in their stuff. Attempt to make portability a little easier to maintain in spite of this change by defining the name of the tag to search for. This is a slightly different change that solves the problem in the PR. PR: bin/24564 Submitted by: Tony Finch --- usr.sbin/mergemaster/mergemaster.8 | 10 ++++- usr.sbin/mergemaster/mergemaster.sh | 73 +++++++++++++++++++++++++++++-------- 2 files changed, 66 insertions(+), 17 deletions(-) diff --git a/usr.sbin/mergemaster/mergemaster.8 b/usr.sbin/mergemaster/mergemaster.8 index 932eba7..646bc48 100644 --- a/usr.sbin/mergemaster/mergemaster.8 +++ b/usr.sbin/mergemaster/mergemaster.8 @@ -1,4 +1,4 @@ -.\" Copyright (c) 1998-2000 Douglas Barton +.\" Copyright (c) 1998-2001 Douglas Barton .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd October 30, 2000 +.Dd February 5, 2001 .Dt MERGEMASTER 8 .Os FreeBSD .Sh NAME @@ -137,6 +137,12 @@ Because the named scripts are sourced from within .Nm , all of the script's variables are available for use in your custom script. +You can also use +.Pa /etc/mergemaster.rc +which will be read before +.Pa .mergemasterrc . +Options specified on the command line are updated last, +and therefore can override both files. .Pp The options are as follows: .Bl -tag -width Fl diff --git a/usr.sbin/mergemaster/mergemaster.sh b/usr.sbin/mergemaster/mergemaster.sh index 1f4d31a..03bd5c4 100755 --- a/usr.sbin/mergemaster/mergemaster.sh +++ b/usr.sbin/mergemaster/mergemaster.sh @@ -5,8 +5,8 @@ # Compare files created by /usr/src/etc/Makefile (or the directory # the user specifies) with the currently installed copies. -# Copyright 1998-2000 Douglas Barton -# Doug@gorean.org +# Copyright 1998-2001 Douglas Barton +# DougB@FreeBSD.org # $FreeBSD$ @@ -211,6 +211,12 @@ diff_loop () { # TEMPROOT='/var/tmp/temproot' +# Read /etc/mergemaster.rc first so the one in $HOME can override +# +if [ -r /etc/mergemaster.rc ]; then + . /etc/mergemaster.rc +fi + # Read .mergemasterrc before command line so CLI can override # if [ -r "$HOME/.mergemasterrc" ]; then @@ -342,6 +348,10 @@ DIFF_FLAG=${DIFF_FLAG:--u} # SOURCEDIR=${SOURCEDIR:-/usr/src/etc} +# Define what CVS $Id tag to look for to aid portability. +# +CVS_ID_TAG=FreeBSD + case "${RERUN}" in '') # Set up the loop to test for the existence of the @@ -681,16 +691,11 @@ for COMPFILE in `find . -type f -size +0`; do # If the files have the same $Id, delete the one in temproot so the # user will have less to wade through if files are left to merge by hand. # - # Reduce complexity and improve portability by using ident - # - CVSID1=`ident ${DESTDIR}${COMPFILE#.} 2>&1` - CVSID1="${CVSID1#${DESTDIR}}" - CVSID2=`ident ${COMPFILE} 2>&1` + CVSID1=`grep "[$]${CVS_ID_TAG}:" ${DESTDIR}${COMPFILE#.} 2>/dev/null` + CVSID2=`grep "[$]${CVS_ID_TAG}:" ${COMPFILE} 2>/dev/null` case "${CVSID2}" in - *'no id keywords'*) - ;; - ."${CVSID1}") + "${CVSID1}") echo " *** Temp ${COMPFILE} and installed have the same CVS Id, deleting" rm "${COMPFILE}" ;; @@ -763,21 +768,56 @@ esac case "${AUTO_INSTALLED_FILES}" in '') ;; *) - ( + case "${AUTO_RUN}" in + '') + ( + echo '' + echo '*** You chose the automatic install option for files that did not exist' + echo ' on your system. The following files were installed for you:' + echo "${AUTO_INSTALLED_FILES}" + ) | ${PAGER} + ;; + *) echo '' echo '*** You chose the automatic install option for files that did not exist' echo ' on your system. The following files were installed for you:' echo "${AUTO_INSTALLED_FILES}" - ) | ${PAGER} + ;; + esac ;; esac +run_it_now () { + case "${AUTO_RUN}" in + '') + unset YES_OR_NO + echo '' + echo -n ' Would you like to run it now? [y or n] ' + read YES_OR_NO + + echo '' + + case "${YES_OR_NO}" in + y) + echo " Running ${1}" + eval "${1}" + ;; + *) + echo " Make sure to run ${1} yourself" + ;; + esac + ;; + *) ;; + esac +} + case "${NEED_MAKEDEV}" in '') ;; *) echo '' echo "*** You installed a new /dev/MAKEDEV script, so make sure that you run" echo " 'cd /dev && /bin/sh MAKEDEV all' to rebuild your devices" + run_it_now 'cd /dev && /bin/sh MAKEDEV all' ;; esac @@ -786,7 +826,8 @@ case "${NEED_NEWALIASES}" in *) echo '' echo "*** You installed a new aliases file, so make sure that you run" - echo " 'newaliases' to rebuild your aliases database" + echo " '/usr/bin/newaliases' to rebuild your aliases database" + run_it_now '/usr/bin/newaliases' ;; esac @@ -795,7 +836,8 @@ case "${NEED_CAP_MKDB}" in *) echo '' echo "*** You installed a login.conf file, so make sure that you run" - echo " 'cap_mkdb /etc/login.conf' to rebuild your login.conf database" + echo " '/usr/bin/cap_mkdb /etc/login.conf' to rebuild your login.conf database" + run_it_now '/usr/bin/cap_mkdb /etc/login.conf' ;; esac @@ -804,7 +846,8 @@ case "${NEED_PWD_MKDB}" in *) echo '' echo "*** You installed a new master.passwd file, so make sure that you run" - echo " 'pwd_mkdb -p /etc/master.passwd' to rebuild your password files" + echo " '/usr/sbin/pwd_mkdb -p /etc/master.passwd' to rebuild your password files" + run_it_now '/usr/sbin/pwd_mkdb -p /etc/master.passwd' ;; esac -- cgit v1.1