#!/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
LANG=C

VERBOSE=""
FLOPPY=/dev/fd0

err()
{
  echo "ERROR: $1" >&2
  exit 1
}

while [ "$*" ]; do

  if [ "$1" = "-v" ]; then
    VERBOSE="-v"
    shift
  elif [ "$1" = "-d" ]; then
    FLOPPY=$2
    shift 2
  elif [ "$*" ]; then
    echo "Usage: bootcdflopcp [-v] [-d <device>]"
    echo "  use man bootcdflopcp to get help" >&2
    echo "  device can be another device instead of /dev/floppy" >&2
    exit 1
  fi

done

TMP=/tmp/flopcp$$
MNTP=/mnt/floppy

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

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

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

mkdir -p /mnt/bootcd.root
[ "$(mount | grep "on /mnt/bootcd.root\>")" ] || mount --bind / /mnt/bootcd.root
[ "$(mount | grep "on /mnt/bootcd.ro\>")" ] || err "/mnt/bootcd.ro is not mounted"


# Search all Files that differ 
find /mnt/bootcd.aufs -type f|grep -v "/\.wh\.\.wh\."|sed "s|/\.wh\.|/|" >$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
      # Next line handles EOF from a pipe as "n"
      [ $? -ne 0 ] && a="n"
      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
      # Next line handles EOF from a pipe as "n"
      [ $? -ne 0 ] && a="n"
      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
