#!/bin/bash
#
cd ~ftpadmin/Mirror
#
SRC="rsync://ftp.gwdg.de/pub/suse/i386/update/"
DST="/LOCAL/suse/i386/update"
NAM="suse_update"
#
MAILTO="XXX@YYY.ZZ"
RSYNC_MAILTO="XXX@YYY.ZZ"
SUBJ="XXX rsync: ${NAM}"
#
#
# first - test (no harm):
#DRY="--dry-run"
#
#
# second - migrate from ftp to rsync without fetching existing files again
#  (needs rsync version 2.4.6  protocol version 24 or newer)
#DRY="--size-only --existing"
#
#
# third - really do it
#DRY=""
#
# --archive is -rlptgoD, use -rltD instead
# --checksum would make too much load for the server
#
OPTS="-rltDvvHb --safe-links --stats --partial --backup-dir=.old-saved"
#
#STRANGE="--delete --force"
STRANGE="--delete"
#STRANGE="--max-delete=1"
#
#SUFFIX="--suffix _until_`date +%y%m%d`"
#
EXCL_X=".XXX-mirror"
EXCL_X="${EXCL_X} lost+found"
#
#EXCL_X="${EXCL_X} /any_unwanted_full_path"
#EXCL_X="${EXCL_X} /9.0"
#
#EXCL_X="${EXCL_X} any_unwanted_partial_path"
#EXCL_X="${EXCL_X} x86_64"
#
EXCL="--exclude /.old-saved"
for i in ${EXCL_X}
do
  EXCL="${EXCL} --exclude $i"
done
#
DAT1="`date +%y%m%d.%H%M`"
PROT="/var/log/rsync.${NAM}.${DAT1}"
#
ALLOPTS="${OPTS} ${EXCL} ${SUFFIX} ${DRY} ${STRANGE}"
#echo ${ALLOPTS}
#
echo "==== start ========================== ${DAT1}" >>${PROT}
echo rsync ${ALLOPTS} ${SRC} ${DST} >>${PROT} 2>&1
rsync ${ALLOPTS} ${SRC} ${DST} >>${PROT} 2>&1
RC=$?
DAT2="`date +%y%m%d.%H%M`"
if test "${RC}" = "0" -o "${RC}" = "23" -o "${RC}" = "24"; then
  grep "^Total file size: " ${PROT} | \
   ( read a b c d e
     echo "${DAT2} ${NAM} size: $d bytes." >>${DST}/.XXX-mirror
   )
else
  touch ${DST}/.XXX-mirror
fi
echo "==== end   ======== RC=${RC} ============ ${DAT1} ${DAT2}" >>${PROT}
#

MAILIT=yes
if [ "${RC}" = "0" ]; then
  NUMFIL=`grep "^Number of files transferred:" ${PROT} | \
            (while read n o f t X; do echo -n ${X}; done)`
  if [ "${NUMFIL}" = "0" ]; then
    MAILIT=no
  fi
fi

if [ "${MAILIT}" = "yes" ]; then
  V1="is uptodate"
  V2="is a hard link"
  V3="^keep_backup "
  V4="^deleting "
  V5="^skipping non-regular file "
  grep -v "${V1}\|${V2}\|${V3}\|${V4}\|${V5}" ${PROT} | \
    mail -s"${SUBJ} (RC=${RC})" ${MAILTO}
#else
#  mail -s"${SUBJ} (RC=${RC}) __nomail__" ${MAILTO} <${PROT}
fi

#
#if [ ! "${RC}" = "0" ]; then
#  if [ ! "${RC}" = "23" ]; then
#    if [ ! "${RC}" = "24" ]; then
#      sleep 2000
#      exec ./rsync.suse_update
#    fi
#  fi
#fi
