#!/bin/sh

#exit 0
mounts="$(cut -d" " -f2  /proc/mounts)"
echo "$mounts" | grep -qFx /mirror || exit 0
#echo "$mounts" | grep -qFx /opt5 || exit 0

ROOT=/mirror
[ -d $ROOT ] || exit 0

# D-C is slow-updating now :/
# 2008-12-26: now seems better, around 40min
MANDRIVAMIRROR="rsync://distrib-coffee.ipsl.jussieu.fr/mandrivalinux"
#MANDRIVAMIRROR="rsync://carroll.cac.psu.edu/MandrivaLinux"
PLFMIRROR="rsync://distrib-coffee.ipsl.jussieu.fr/plf"
MAGEIAMIRROR="rsync://distrib-coffee.ipsl.jussieu.fr/mageia"
#MAGEIAMIRROR="rsync://ftp.acc.umu.se/mirror/mageia"

# SECONDARY
#MANDRIVAMIRROR2="rsync://ftp.cica.es/mandrakelinux"
#PLFMIRROR="rsync://ftp.cica.es/plf"

TMPEXCLUDE=
# low-bandwidth temp option:
#TMPEXCLUDE="debug_*/ SRPMS/ source/ debug/ testing/ i586/ 2007.1/ 2008.0/ 2008.1/ 2009.0/ 2009.1/ 2010.0/"

# Mirror updating script by Anssi Hannula anssi.hannula@gmail.com
#SOURCES[0]='rsync://ftp.uninett.no/Mandrake-official/10.2/i586/'
#SOURCES[0]='rsync://rsync.planetmirror.com/plf/mandrake/non-free/cooker/'
#SOURCES[1]='rsync://rsync.planetmirror.com/plf/mandrake/free/cooker/'
#SOURCES[2]='rsync://rsync.planetmirror.com/plf/mandrake/non-free/2006.0/'
#SOURCES[3]='rsync://rsync.planetmirror.com/plf/mandrake/free/cooker/'
#SOURCES[3]='rsync://ftp.uninett.no/Mandrake-official/updates/10.2/RPMS/'
#SOURCES[4]='rsync://ftp.uninett.no/Mandrake-official/10.2/x86_64/'
#SOURCES[5]='rsync://ftp.uninett.no/Mandrake-official/updates/x86_64/10.2/RPMS/'
#SOURCES[0]='rsync://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/devel/cooker/x86_64/media/main/'
#SOURCES[1]='rsync://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/devel/cooker/i586/media/main/'
#SOURCES[0]="$MANDRIVAMIRROR/devel/cooker/"
#SOURCES[1]='rsync://distrib-coffee.ipsl.jussieu.fr/mandrivalinux/devel/2006.0/'
#SOURCES[4]='rsync://distrib-coffee.ipsl.jussieu.fr/mandrivalinux/official/2007.0/'
#SOURCES[1]="$PLFMIRROR/mandrake/"
#SOURCES[4]
#if false; then # 3G - low bandwidth
#SOURCES[3]="$MANDRIVAMIRROR/official/2010.0/"
#SOURCES[2]="$MANDRIVAMIRROR/official/2010.1/"
#SOURCES[4]="$MANDRIVAMIRROR/official/2008.1/"
#SOURCES[5]="$MANDRIVAMIRROR/official/2009.0/"

#SOURCES[4]="$MANDRIVAMIRROR/official/2009.1/"

SOURCES[0]="$MAGEIAMIRROR/distrib/"
#fi
#SOURCES[0]='rsync://ftp.uninett.no/Mandrivalinux/devel/cooker/'
#SOURCES[1]='rsync://ftp.cica.es/plf/mandrake/'
#SOURCES[3]='SRPMS'
#SOURCES[2]='rsync://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/devel/cooker/SRPMS/'
#SOURCES[2]='rsync://distrib-coffee.ipsl.jussieu.fr/pub/linux/plf/mandrake/free/src/'
#SOURCES[3]='rsync://distrib-coffee.ipsl.jussieu.fr/pub/linux/plf/mandrake/non-free/src/'
#SOURCES[4]='rsync://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/devel/2006.0/i586/media/main/media_info/hdlist.cz'
#SOURCES[5]='rsync://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/devel/2006.0/i586/media/contrib/media_info/hdlist.cz'
#SOURCES[6]='rsync://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/devel/2006.0/x86_64/media/main/media_info/hdlist.cz'
#SOURCES[7]='rsync://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/devel/2006.0/x86_64/media/contrib/media_info/hdlist.cz'
#SOURCES[8]='rsync://distrib-coffee.ipsl.jussieu.fr/pub/linux/plf/mandrake/non-free/2006.0/hdlist.cz'
#SOURCES[9]='rsync://distrib-coffee.ipsl.jussieu.fr/pub/linux/plf/mandrake/free/2006.0/hdlist.cz'

#SOURCES[4]='rsync://ftp.uninett.no/Mandrake-devel/cooker/SRPMS/cooker/'
# Not part of the delta rpm archive, for rpm building only
#SOURCES[5]='rsync://ftp.uninett.no/Mandrake-official/10.0/i586/Mandrake/RPMS/'
#SOURCES[6]='rsync://ftp.uninett.no/Mandrake-official/10.0/i586/Mandrake/base/hdlist.cz'
#SOURCES[7]='rsync://ftp.uninett.no/Mandrake-official/updates/10.0/RPMS/'
#SOURCES[8]='rsync://ftp.uninett.no/Mandrake-official/updates/10.0/base/hdlist.cz'
#SOURCES[9]='rsync://ftp.uninett.no/Mandrake-devel/10.1/i586/media/main/'
#DESTINATIONS[0]='mdk-10.2-i586'
#DESTINATIONS[0]='plf-nonfree-cooker'
#DESTINATIONS[1]='plf-free-cooker'
#DESTINATIONS[3]='mdk-updates-10.2-i586'
#DESTINATIONS[4]='mdk-10.2-x86_64'
#DESTINATIONS[5]='mdk-updates-10.2-x86_64'
#DESTINATIONS[0]='cooker'
#DESTINATIONS[0]='mdk-cooker-main-x86_64'
#DESTINATIONS[1]='mdk-2006.0'
#DESTINATIONS[4]='2007.0'
#DESTINATIONS[1]='plf'
#DESTINATIONS[3]='2010.0'
#DESTINATIONS[2]='2010.1'
#DESTINATIONS[4]='2008.1'
#DESTINATIONS[5]='2009.0'
#DESTINATIONS[4]='2009.1'
DESTINATIONS[0]='mageia'
#DESTINATIONS[1]='plf'
#DESTINATIONS[2]='plf-free-src'
#DESTINATIONS[3]='plf-nonfree-src'
#DESTINATIONS[4]='hdlists/2006.0-i586-main'
#DESTINATIONS[5]='hdlists/2006.0-i586-contrib'
#DESTINATIONS[6]='hdlists/2006.0-x86_64-main'
#DESTINATIONS[7]='hdlists/2006.0-x86_64-contrib'
#DESTINATIONS[8]='hdlists/2006.0-plf-nonfree'
#DESTINATIONS[9]='hdlists/2006.0-plf-free'
#DESTINATIONS[6]='old/10.0/base'
#DESTINATIONS[7]='old/10.0/updates/RPMS'
#DESTINATIONS[8]='old/10.0/updates/base'
#DESTINATIONS[9]='old/10.1/main'

LOCALEXCL[0]='1/ 2/ 3/'
#LOCALEXCL[0]='x86_64/media/debug_main x86_64/media/debug_contrib'
#LOCALEXCL[0]='debug_*/ debug_contrib/'
#LOCALEXCL[4]='debug/'
LOCALEXCL[3]='debug_*/ debug_contrib/ SRPMS/*/release/'
#LOCALEXCL[4]='debug_*/ debug_contrib/ SRPMS/*/release/'
#LOCALEXCL[4]='debug_*/ debug_contrib/ SRPMS/*/release/'
#LOCALEXCL[5]='debug_*/ debug_contrib/ SRPMS/*/release/'
LOCALEXCL[2]='SRPMS/*/release/'


EXCLUDET[0]='ppc/'
EXCLUDET[1]='sparc/'
EXCLUDET[2]='sparc64/'
EXCLUDET[3]='ia64/'
EXCLUDET[4]='8.0/'
EXCLUDET[5]='8.1/'
EXCLUDET[6]='8.2/'
EXCLUDET[7]='9.0/'
EXCLUDET[8]='9.1/'
EXCLUDET[9]='9.2/'
EXCLUDET[10]='10.0/'
EXCLUDET[11]='10.1/'
EXCLUDET[12]='10.2/'
EXCLUDET[13]='2005/'
EXCLUDET[14]='alpha/'
EXCLUDET[15]='sparcv9/'
EXCLUDET[16]='2007.0/'
EXCLUDET[17]='2006.0/'
EXCLUDET[18]='2007.1/'
EXCLUDET[19]='2008.0/'
EXCLUDET[20]='2008.1/'
EXCLUDET[21]='2009.0/'
EXCLUDET[22]='2009.1/'
#EXCLUDET[3]='*.ppc.rpm'
#EXCLUDET[4]='*.sparc.rpm'
#function runkomento {
#	echo "Suoritetaan komento: $@"
#	$*
#}
function makerpmshdlist {
	OLDDIR="`pwd`"
	cd $ROOT
	rm -rf RPMS RPMS64
	mkdir -p RPMS RPMS64
	cd RPMS
	find ../mdk-* ../plf-* -name '*.rpm' -and -not -name '*.src.rpm' -and -not -wholename '*x86_64*' -type f -exec ln -s \{\} . \;
	cd ..
	cd RPMS64
	find ../mdk-* ../plf-* -name '*.rpm' -and -not -name '*.src.rpm' -and -wholename '*x86_64*' -type f -exec ln -s \{\} . \;
	cd ..
	[[ "$OPTIONH" == "yes" ]] && genhdlist --nobadrpm RPMS
	[[ "$OPTIONH" == "yes" ]] && genhdlist --suffix .64 --nobadrpm RPMS64
#	if [ ! "${OPTIONS}" == "yes" ]; then
#		rm -rf SRPMS
#		mkdir -p SRPMS
#		cd SRPMS
#		find ../*-src -name '*.src.rpm' -type f -exec ln -s \{\} . \;
#		cd ..
#		genhdlist --suffix .src --nobadrpm SRPMS
#	fi
	cd "$OLDDIR"
}
function makesrpmshdlist {
	pushd $ROOT
	rm -rf SRPMS
	mkdir -p SRPMS
	cd SRPMS
	find ../cooker ../plf/cooker -name '*.src.rpm' -type f -exec ln -s \{\} . \;
	cd ..
	[[ "$OPTIONH" == "yes" ]] && genhdlist --suffix .src --nobadrpm SRPMS
	popd
}
#BWPARMS="--bwlimit=32"
BWPARMS=
#MAX_DELETE="--max-delete=250"
MAX_DELETE="--max-delete=25000"
[ "$1" == "full" ] && BWPARMS= && shift
[ "$1" == "-h" ] && OPTIONH=yes && shift
[ "$1" == "-s" ] && OPTIONS=yes && shift
[ "$1" == "-p" ] && OPTIONP=yes && shift
[ "$1" == "-r" ] && OPTIONR=yes && shift
[ "$1" == "-f" ] && OPTIONF=yes && shift
[ "$1" == "-d" ] && MAX_DELETE= && shift
[ "$1" == "-q" ] && OPTIONQ=yes && OPTIONQLONG="-q" && shift
[ "$1" == "-l" ] && OPTIONL=yes && OPTIONLOG="$2" && shift && shift

delete_excluded="--delete-excluded"
[ -z "$TMPEXCLUDE" ] || delete_excluded=

OTHERPID=$(cat /var/lock/updatemirror 2>/dev/null)
[ -n "$OTHERPID" ] && [ "$(readlink /proc/$OTHERPID/exe)" == "$(readlink /proc/$$/exe)" ] && [ "$OTHERPID" != "$$" ] && exit

echo $$ > /var/lock/updatemirror
[ "${OPTIONP}" == "yes" ] &&  makerpmshdlist && rm -f /var/lock/updatemirror && exit
[ ! "${OPTIONQ}" == "yes" ] && ADDITIONALP="--progress"
[ "${OPTIONL}" == "yes" ] && exec $0 -f $OPTIONQLONG 1> "${OPTIONLOG}" 2>&1
for exf in ${EXCLUDET[*]}
do
	EXCLUDELISTA="${EXCLUDELISTA} --exclude ${exf}"
done

TMPLISTA=
for exf in ${TMPEXCLUDE}; do
	TMPLISTA="$TMPLISTA --exclude $exf"
done

for kansio in ${DESTINATIONS[*]}
do
	mkdir -p $ROOT/${kansio}
done

CLEAN=
[ -e "$ROOT/.cleanup" ] || touch "$ROOT/.cleanup"
[ $(($(stat -c%Y "$ROOT/.cleanup") + 86400)) -le $(date +%s) ] && touch "$ROOT/.cleanup" && CLEAN=1

TOTAL=0
for down in ${SOURCES[*]}
do
	up=${DESTINATIONS[$TOTAL]}
	LOCALLISTA=""
	for exf in ${LOCALEXCL[$TOTAL]}; do
		LOCALLISTA="${LOCALLISTA} --exclude ${exf}"
	done

	TOTAL=$(($TOTAL+1))
	#if [ ${TYPE[$TOTAL]} == 'http' ]; then
	#wget -np -r -A rpm,cz -nH -P /opt/mirror/waschk --cut-dirs=3 -N -x -l inf http://wwwra.informatik.uni-rostock.de/~waschk/Mandrake/10.0/
	#wget -np -r -N -x -l inf -O /opt/mirror/${up} ${down}
#	if [[ ! "${down}" == *SRPMS* ]] || [ ! "${OPTIONS}" == "yes" ]; then
	[ "${down}" == "SRPMS" ] && ( makerpmshdlist; ( ( [ "${OPTIONS}" == "yes" ] && break ) || continue ) )
#	echo "Suoritetaan komento: rsync -av --stats ${ADDITIONALP} --delete-before --delete-excluded ${EXCLUDELISTA} ${LOCALLISTA} ${down} /opt/mdv/${up}"
set -x
#	MAX_DELETE=--max-delete=250
#	MAX_DELETE=

# -a = archive mode: recursive, symlinks, perms, times, group, owner, devices, specials
#
#VANHA TAPA
#	rsync -aHv $BWPARMS --timeout=60 --stats ${ADDITIONALP} ${MAX_DELETE} --exclude 'media_info/' --exclude '*.cz' --exclude 'MD5SUM' ${EXCLUDELISTA} ${LOCALLISTA} ${down} /opt/mdv/${up}
#	rsync -aHv $BWPARMS --timeout=60 --stats ${ADDITIONALP} ${MAX_DELETE} --delete-after --delete-excluded ${EXCLUDELISTA} ${LOCALLISTA} ${down} /opt/mdv/${up}

#UUSI TAPA
       nice -n 19 ionice -c 3 rsync -aHv --no-g --no-o $BWPARMS --timeout=60 --stats ${ADDITIONALP} ${MAX_DELETE} --delay-updates ${EXCLUDELISTA} ${LOCALLISTA} ${TMPLISTA} ${down} $ROOT/${up}

       if [ -n "$CLEAN" ]; then
	       nice -n 19 ionice -c 3 rsync -aHv --no-g --no-o $BWPARMS --timeout=60 --stats ${ADDITIONALP} ${MAX_DELETE} --delete-after $delete_excluded --delay-updates ${EXCLUDELISTA} ${LOCALLISTA} ${TMPLISTA} ${down} $ROOT/${up}
       else
	       nice -n 19 ionice -c 3 rsync -aHv --no-g --no-o $BWPARMS --timeout=60 --stats ${ADDITIONALP} ${MAX_DELETE} --exclude MD5SUM --delay-updates ${EXCLUDELISTA} ${LOCALLISTA} ${TMPLISTA} ${down} $ROOT/${up}
       fi

set +x
	#	for (( LIMIT=0 ; (($? > 0)) && ((${LIMIT} < 60)) ; LIMIT++ )); do
	#		sleep 30
	#		runkomento rsync -av --stats ${ADDITIONALP} --delete-excluded ${EXCLUDELISTA} ${down} /opt/mirror/${up}
	#	done
#	fi
done
[ "${OPTIONS}" == "yes" ] && makesrpmshdlist

rm -f /var/lock/updatemirror

