#!/bin/sh

# attempt to update /etc in a clean and polite manner
# (c) 2000 Jeremy C. Reed
# started 25/Oct/2000

# 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

CURRENTDIR=`pwd`
OLD=""
#NEW=NEW
NEW=/home/reed/netbsd/1.5_BETA/NEW
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 [$EDITOR -eq ""]; then
  EDITOR=vi
fi

cd $NEW/etc

#for f in * ; do

find . -type f -print | sed -e 's/^\.\///g' > $FILELIST

cd $CURRENTDIR

#while read filename; do
for filename in `cat $FILELIST`; do

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

    DIFFERENT=0
  
    if [ ! -e "$OLD/etc/$filename" ] ; then
      echo
      echo \*------------- $filename -----------------\*
      ls -l $NEW/etc/$filename
      echo "$OLD/etc/$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 
 - (Q)uit
HERE
    else

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

      if [ -s $DATAFILE ]; then
        echo
        echo \*------------- $filename -----------------\*
        ls -l $OLD/etc/$filename
        ls -l $NEW/etc/$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/etc/$filename
          ls -l $NEW/etc/$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/etc/$filename $OLD/etc/$filename
          echo Using new -- cp -p $NEW/etc/$filename $OLD/etc/$filename
          LOOP=0
        ;; 
        [Dd])
          echo Showing diff ...
          more $DATAFILE
        ;;
        [Ee])
          $EDITOR "$OLD/etc/$filename"
        ;;
        [Mm])
          echo Merge not implemented.
        ;;
        [Nn])
          echo Edit New file is not implemented.
        ;;
        [Qq])
          echo Quiting...
          exit
        ;;
        *)
          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.
