#!/bin/sh
# bootcdflopcp
# History 
#   28.07.2000 - Recognize empty files too.
#              - Do not depend on diff flag -N any longer.
#              - Ignore symbolic links to same target.
set -e

VERBOSE=""
if [ "$1" = "-v" ]; then
  VERBOSE="-v"
  shift
fi

if [ "$#" != "0" ]; then
  echo "Usage: bootcdflopcp [-v]"
  echo "  use man bootcdflopcp to get help"
  exit 1
fi

TMP=/tmp/flopcp$$
FLOPPY=/dev/fd0
MNTP=/tmp/floppy

mkdir -p $MNTP || exit 1
mount $FLOPPY $MNTP || exit 1
trap "umount $FLOPPY; rmdir $MNTP; rm -f $TMP" 0

touch $MNTP/remove $MNTP/change $MNTP/ignore $MNTP/execute
chmod 755 $MNTP/execute

IGNORE=""
CHANGE=""
REMOVE=""

# Search all Files that differ 
for i in etc home root
do
  diff --brief -r /$i.ro /$i 2>/dev/null | 
    # Files /etc.ro/hosts and /etc/hosts differ
    # Only in /etc.ro: resolv.conf

  sed "s| /$i.ro| /$i|g" |
    # Files /etc/hosts and /etc/hosts differ
    # Only in /etc: resolv.conf

  sed "s/Files .* and \(.*\) differ/\1/" |
  sed "s|Only in \(.*\): \(.*\)|\1/\2|"
    # /etc/hosts
    # /etc/resolv.conf
done |

# Ignore symbolic links that lead to the same file
while read f; do
  if [ -L $f ]; then 
    fro=`echo $f | sed "s|/\([^/]*\)/|/\1.ro/|"`
    if [ -L $fro ]; then 
      t=`/bin/ls -l $f | awk '{print $NF }'`
      tro=`/bin/ls -l $fro | awk '{print $NF }'`
      if [ "$t" = "$tro" ]; then
        [ "$VERBOSE" ] && echo "ignoring $f" >&2
        f=""
      fi
    fi
  fi
  [ "$f" ] && echo "$f"
done >$TMP

for f in `cat $TMP`; do
  if [ "`grep ^$f$ $MNTP/ignore`" ]; then
    IGNORE="$f $IGNORE"
    continue
  fi

  if [ -e "$f" ]; then
    if [ "`grep ^$f$ $MNTP/change`" ]; then
      CHANGE="$f $CHANGE"
      continue
    fi

    while :
    do
      echo -n "change $f (y/n) "
      read a
      if [ "$a" = "y" ]; then
        echo $f >> $MNTP/change
        CHANGE="$f $CHANGE"
        break
      elif [ "$a" = "n" ]; then
        echo $f >> $MNTP/ignore
        IGNORE="$f $IGNORE"
        break
      fi
    done
  else
    if [ "`grep ^$f$ $MNTP/remove`" ]; then
      REMOVE="$f $REMOVE"
      continue
    fi
    while :
    do
      echo -n "remove $f (y/n) "
      read a
      if [ "$a" = "y" ]; then
        echo $f >> $MNTP/remove
        REMOVE="$f $REMOVE"
        break
      elif [ "$a" = "n" ]; then
        echo $f >> $MNTP/ignore
        IGNORE="$f $IGNORE"
        break
      fi
    done
  fi
done

if [ "$VERBOSE" ]; then
  echo "Changing $CHANGE." >&2
  echo "Removing $REMOVE." >&2
  echo "Ignoring $IGNORE." >&2
fi

(cd /; tar cz -T $MNTP/change -f $MNTP/change.tgz)
exit 0
