#!/bin/sh

# attempt to update /etc or other directories
# in a clean and polite manner
# (c) 2000 Jeremy C. Reed
# started 25/Oct/2000
# last updated 23/Jan/2001

# Either set environment variables for OLD (current)
# and NEW directories or define them below.
# The NEW directory is the directory created by src/etc/Makefile.
# Define SKIPSAME to 0 below if you want to see identical files.

# need to do:
#    save/backup old (in the meanwhile just backup yourself)
#    Edit (N)ew file
#    merge both and edit
#    check to make sure symlinks and permissions are correct
#    create new directory if doesn't exist
#    use for /var, /root, /tmp also

if [ -z "$OLD" ]; then
  OLD="/etc"
fi
if [ -z "$NEW" ]; then
  NEW=/home/reed/netbsd/1.5_BETA/NEW/etc
fi

SKIPSAME=1  ## set to zero if you want to see everything

TMPDIR=/tmp/_update_etc_dir.$$
if ! mkdir $TMPDIR; then
        echo can not create $TMPDIR.
        exit 1
fi

trap '/bin/rm -rf $TMPDIR ; exit 0' 0 2 3

FILELIST=$TMPDIR/compare_etc_file_list.$$
DATAFILE=$TMPDIR/compare_etc_data.$$

if [ -z "$EDITOR" ]; then
  EDITOR=vi
fi

# Only change directory temporarily
(cd $NEW ; find . -type f -print | sed -e 's/^\.\///g' > $FILELIST)

for filename in `cat $FILELIST`; do

  LOOP=1
  while [ $LOOP = 1 ]; do

    DIFFERENT=0
  
    if [ ! -e "$OLD/$filename" ] ; then
      echo
      echo \*------------- $filename -----------------\*
      ls -l $NEW/$filename
      echo "$OLD/$filename" does not exist
      DIFFERENT=1
      cat <<HERE
 - (C)ontinue (skip) or (I)gnore
 - (A)dd a new $filename
 - (E)dit to create new $filename 
 - (V)iew $NEW/$filename
 - (Q)uit
HERE
    else

      cp /dev/null $DATAFILE
      diff -u "$OLD/$filename" "$NEW/$filename" > $DATAFILE

      if [ -s $DATAFILE ]; then
        echo
        echo \*------------- $filename -----------------\*
        ls -l $OLD/$filename
        ls -l $NEW/$filename
        echo $filename is different
        DIFFERENT=1
        cat <<HERE
 - (C)ontinue (skip), use (O)ld or (I)gnore
 - (R)eplace with new $filename
 - show (D)ifferences between current and new
 - (E)dit old $filename
 - Edit (N)ew file
 - (M)erge
 - (Q)uit
HERE
      else
        if [ $SKIPSAME = 0 ] ; then
          echo
          echo \*------------- $filename -----------------\*
          ls -l $OLD/$filename
          ls -l $NEW/$filename
          echo $filename is the same
          cat <<HERE
 - (C)ontinue (skip), use (O)ld or (I)gnore
 - (Q)uit
HERE
        else
          LOOP=0
        fi
      fi
    fi

    if [ $DIFFERENT = 1 -o $SKIPSAME = 0 ] ; then
      echo -n "What do you want to do? "
      read choice
      echo

      case $choice in
        "")
          echo Keeping old -- skipping.
          LOOP=0
        ;;
        [CcOoIi])
          echo Keeping old -- skipping.
          LOOP=0
        ;;
        [AaRr])
          cp -p $NEW/$filename $OLD/$filename
          echo Using new -- cp -p $NEW/$filename $OLD/$filename
          LOOP=0
        ;; 
        [Dd])
          echo Showing diff ...
          more $DATAFILE
        ;;
        [Ee])
          $EDITOR "$OLD/$filename"
        ;;
        [Mm])
          echo Merge not implemented.
        ;;
        [Nn])
          echo Edit New file is not implemented.
        ;;
        [Qq])
          echo Quiting...
          exit
        ;;
	[Vv])
	  more $NEW/$filename
	;;
        *)
          echo Wrong input -- try again...
        ;;
      esac
    fi  # if you want to everything or if needs to be edited
  done

done
#done < $FILELIST

echo Looks like we are finished. Be sure to manually check also.
