#!/bin/bash

# Update public repo
[ "x${PUBUPDATE}" = "x0" ] && PUBUPDATE="0" || PUBUPDATE="1"
# Update ISO directories
[ "x${ISOUPDATE}" = "x1" ] && ISOUPDATE="1" || ISOUPDATE="0"

PUSER="lottc"
PHOST="10.13.5.5"
#BASEDIR="/home/lottc/sites/fugitol.com"
BASEDIR="/home/fiobuild/RPMS/fugitol.com"
EXTDIR="rpm/el"
SDIR=${PWD}

#REMOTE="${USER}@${HOST}:${BASEDIR}/${EXTDIR}"
REMOTE="${BASEDIR}/${EXTDIR}"

RPMPROCCMD="`echo ${@} | sed -e 's/\\///g'`"
RPMPROC=""
RPMPROCTMP=""

[ "x${1}" = "x" ] && RPMPROCTMP="main updates beta testing" || RPMPROCTMP="${RPMPROCCMD}"
for repo in `echo ${RPMPROCTMP}`; do
	if [ "${repo}" = "main" -o "${repo}" = "updates" -o "${repo}" = "beta" -o "${repo}" = "testing" ]; then
		RPMPROCCNT="`ls ${repo}/*.rpm 2> /dev/null | wc -l`"
		if [ "${RPMPROCCNT}" -gt 0 ]; then
			RPMPROC="${RPMPROC} ${repo}"
			SIGN="${SIGN} `ls ${repo}/*.rpm 2> /dev/null`"
		fi
	fi
done
[ "x${RPMPROC}" = "x" ] && RPMPROC=${RPMPROCCMD} || :
echo "==== Signing RPMs ===="
/usr/share/osdial-buildsys/rpmsign-unattended ${SIGN} > /dev/null 2>&1
echo "  === Confirming RPM Signatures ==="
sleep 2
unsigned=`rpmsign -K ${SIGN} | grep -v gpg | awk -F: '{ print $1 }'`
if [ -n "${unsigned}" ]; then
	echo "    == Re-Signing RPMs =="
	/usr/share/osdial-buildsys/rpmsign-unattended ${unsigned} > /dev/null 2>&1
	echo "      = Re-Confirming RPM Signatures ="
	sleep 2
	unsigned=`rpmsign -K ${unsigned} | grep -v gpg | awk -F: '{ print $1 }' | sort`
	if [ -n "${unsigned}" ]; then
		unsignedcnt=`echo ${unsigned} | tr " " "\n" | wc -l`
		echo
		echo "!! RPM Signing Failed !!"
		echo
		echo "${unsignedcnt} Unsigned RPMs."
		echo "------------------------------------------------------------------"
		echo ${unsigned} | tr " " "\n"
		echo
		exit 1
	fi
fi

echo
echo "==== Transfering RPMs ===="
function chkdir() {
	CDIR=${1}
	if [ -e "${CDIR}" ]; then
		if [ ! -d "${CDIR}" ]; then
			rm -f ${CDIR}
		fi
	fi
	mkdir -p ${CDIR}
}
function process_rpms {
	PDIR=${1}
	[ "${PDIR}" = "main" ] && PDIRtop="." || PDIRtop=${PDIR}
	cd ${PDIR}
	chkdir nonfree
	mv *nonfree*.rpm nonfree 2> /dev/null
	for file in `ls *.rpm 2> /dev/null`; do
		ISEL6=`basename ${file} | sed -e 's/.*\.el6.*/1/'`
		ELNUM="5"
		if [ "x${EL5}" = "x" ]; then
			if [ "${ISEL6}" = "1" -o "${EL6}" != "" ]; then
				ELNUM="6"
				PDIRtop=${PDIR}
			fi
		fi
		REMOTE2="${REMOTE}/${ELNUM}"
		if [ "`echo ${file} | grep noarch | grep -v debuginfo`" ]; then
			echo "== EL${ELNUM} ${PDIR} noarch ==  ${file}"
			chkdir ${REMOTE2}/${PDIRtop}/noarch
			chkdir ${REMOTE2}/${PDIRtop}/i386
			chkdir ${REMOTE2}/${PDIRtop}/x86_64
			scp ${file} ${REMOTE2}/${PDIRtop}/noarch
			cd ${REMOTE2}/${PDIRtop}/i386
			ln -sf ../noarch/${file} .
			cd ${REMOTE2}/${PDIRtop}/x86_64
			ln -sf ../noarch/${file} .
			cd ${SDIR}/${PDIR}
			if [ "${ISOUPDATE}" -gt 0 ]; then
				if [ "${PDIR}" = "main" -o "${PDIR}" = "updates" ]; then
					cp ${file} ../ISO-i386/Packages
					cp ${file} ../ISO-x86_64/Packages
				fi
			fi
			chkdir done/noarch
			mv -f ${file} done/noarch > /dev/null 2>&1
		elif [ "`echo ${file} | grep i386 | grep -v debuginfo`" ]; then
			echo "== EL${ELNUM} ${PDIR} i386 ==  ${file}"
			chkdir ${REMOTE2}/${PDIRtop}/i386
			scp ${file} ${REMOTE2}/${PDIRtop}/i386
			if [ "${ISOUPDATE}" -gt 0 ]; then
				if [ "${PDIR}" = "main" -o "${PDIR}" = "updates" ]; then
					cp ${file} ../ISO-i386/Packages
				fi
			fi
			chkdir done/i386
			mv -f ${file} done/i386 > /dev/null 2>&1
		elif [ "`echo ${file} | grep i686 | grep -v debuginfo`" ]; then
			echo "== EL${ELNUM} ${PDIR} i686 ==  ${file}"
			chkdir ${REMOTE2}/${PDIRtop}/i386
			scp ${file} ${REMOTE2}/${PDIRtop}/i386
			if [ "${ISOUPDATE}" -gt 0 ]; then
				if [ "${PDIR}" = "main" -o "${PDIR}" = "updates" ]; then
					cp ${file} ../ISO-i386/Packages
				fi
			fi
			chkdir done/i386
			mv -f ${file} done/i386 > /dev/null 2>&1
		elif [ "`echo ${file} | grep x86_64 | grep -v debuginfo`" ]; then
			echo "== EL${ELNUM} ${PDIR} x86_64 ==  ${file}"
			chkdir ${REMOTE2}/${PDIRtop}/x86_64
			scp ${file} ${REMOTE2}/${PDIRtop}/x86_64
			if [ "${ISOUPDATE}" -gt 0 ]; then
				if [ "${PDIR}" = "main" -o "${PDIR}" = "updates" ]; then
					cp ${file} ../ISO-x86_64/Packages
				fi
			fi
			chkdir done/x86_64
			mv -f ${file} done/x86_64 > /dev/null 2>&1
		elif [ "`echo ${file} | grep src.rpm | grep -v debuginfo`" ]; then
			echo "== EL${ELNUM} ${PDIR} src ==  ${file}"
			if [ "${PDIR}" != "testing" ]; then
				chkdir ${REMOTE2}/${PDIRtop}/SRPMS
				scp ${file} ${REMOTE2}/${PDIRtop}/SRPMS
			fi
			chkdir done/SRPMS
			mv -f ${file} done/SRPMS > /dev/null 2>&1
		elif [ "`echo ${file} | grep debuginfo`" ]; then
			echo "== EL${ELNUM} ${PDIR} debuginfo ==  ${file}"
			if [ "${PDIR}" != "testing" ]; then
				chkdir ${REMOTE2}/${PDIRtop}/debug
				if [ "`echo ${file} | grep noarch`" ]; then
					echo "  -- noarch --"
					chkdir ${REMOTE2}/${PDIRtop}/debug/noarch
					chkdir ${REMOTE2}/${PDIRtop}/debug/i386
					chkdir ${REMOTE2}/${PDIRtop}/debug/x86_64
					scp ${file} ${REMOTE2}/${PDIRtop}/debug/noarch
					cd ${REMOTE2}/${PDIRtop}/debug/i386
					ln -sf ../noarch/${file} .
					cd ${REMOTE2}/${PDIRtop}/debug/x86_64
					ln -sf ../noarch/${file} .
					cd ${SDIR}/${PDIR}
				elif [ "`echo ${file} | grep i386`" ]; then
					echo "  -- i386 --"
					chkdir ${REMOTE2}/${PDIRtop}/debug/i386
					scp ${file} ${REMOTE2}/${PDIRtop}/debug/i386
				elif [ "`echo ${file} | grep i686`" ]; then
					echo "  -- i686 --"
					chkdir ${REMOTE2}/${PDIRtop}/debug/i386
					scp ${file} ${REMOTE2}/${PDIRtop}/debug/i386
				elif [ "`echo ${file} | grep x86_64`" ]; then
					echo "  -- x86_64 --"
					chkdir ${REMOTE2}/${PDIRtop}/debug/x86_64
					scp ${file} ${REMOTE2}/${PDIRtop}/debug/x86_64
				fi
			fi
			chkdir done/debuginfo
			mv -f ${file} done/debuginfo > /dev/null 2>&1
		fi
	done
	cd ..

	cd ${PDIR}/nonfree
	[ "${PDIR}" = "main" ] && NFBASE="nonfree" || NFBASE="nonfree/${PDIRtop}"
	for file in `ls *.rpm 2> /dev/null`; do
		ISEL6=`basename ${file} | sed -e 's/.*\.el6.*/1/'`
		ELNUM="5"
		if [ "${ISEL6}" = "1" -o "${EL6}" != "" ]; then
			ELNUM="6"
			NFBASE="nonfree/${PDIRtop}"
		fi
		REMOTE2="${REMOTE}/${ELNUM}"
		if [ "`echo ${file} | grep noarch | grep -v debuginfo`" ]; then
			echo "== EL${ELNUM} ${PDIR} NONFREE noarch ==  ${file}"
			chkdir ${REMOTE2}/${NFBASE}/noarch
			chkdir ${REMOTE2}/${NFBASE}/i386
			chkdir ${REMOTE2}/${NFBASE}/x86_64
			scp ${file} ${REMOTE2}/${NFBASE}/noarch
			cd ${REMOTE2}/${NFBASE}/i386
			ln -sf ../noarch/${file} .
			cd ${REMOTE2}/${NFBASE}/x86_64
			ln -sf ../noarch/${file} .
			cd ${SDIR}/${PDIR}/nonfree
			chkdir done/noarch
			mv -f ${file} done/noarch > /dev/null 2>&1
		elif [ "`echo ${file} | grep i386 | grep -v debuginfo`" ]; then
			echo "== EL${ELNUM} ${PDIR} NONFREE i386 ==  ${file}"
			chkdir ${REMOTE2}/${NFBASE}/i386
			scp ${file} ${REMOTE2}/${NFBASE}/i386
			chkdir done/i386
			mv -f ${file} done/i386 > /dev/null 2>&1
		elif [ "`echo ${file} | grep i686 | grep -v debuginfo`" ]; then
			echo "== EL${ELNUM} ${PDIR} NONFREE i686 ==  ${file}"
			chkdir ${REMOTE2}/${NFBASE}/i386
			scp ${file} ${REMOTE2}/${NFBASE}/i386
			chkdir done/i386
			mv -f ${file} done/i386 > /dev/null 2>&1
		elif [ "`echo ${file} | grep x86_64 | grep -v debuginfo`" ]; then
			echo "== EL${ELNUM} ${PDIR} NONFREE x86_64 ==  ${file}"
			chkdir ${REMOTE2}/${NFBASE}/x86_64
			scp ${file} ${REMOTE2}/${NFBASE}/x86_64
			chkdir done/x86_64
			mv -f ${file} done/x86_64 > /dev/null 2>&1
		elif [ "`echo ${file} | grep src.rpm | grep -v debuginfo`" ]; then
			echo "== EL${ELNUM} ${PDIR} NONFREE src ==  ${file}"
			if [ "${PDIR}" != "testing" ]; then
				chkdir ${REMOTE2}/${NFBASE}/SRPMS
				scp ${file} ${REMOTE2}/${NFBASE}/SRPMS
			fi
			chkdir done/SRPMS
			mv -f ${file} done/SRPMS > /dev/null 2>&1
		elif [ "`echo ${file} | grep debuginfo`" ]; then
			echo "== EL${ELNUM} ${PDIR} NONFREE debuginfo ==  ${file}"
			if [ "${PDIR}" != "testing" ]; then
				chkdir ${REMOTE2}/${NFBASE}/debug
				if [ "`echo ${file} | grep noarch`" ]; then
					echo "  -- noarch --"
					chkdir ${REMOTE2}/${NFBASE}/debug/noarch
					chkdir ${REMOTE2}/${NFBASE}/debug/i386
					chkdir ${REMOTE2}/${NFBASE}/debug/x86_64
					scp ${file} ${REMOTE2}/${NFBASE}/debug/noarch
					cd ${REMOTE2}/${NFBASE}/debug/i386
					ln -sf ../noarch/${file} .
					cd ${REMOTE2}/${NFBASE}/debug/x86_64
					ln -sf ../noarch/${file} .
					cd ${SDIR}/${PDIR}
				elif [ "`echo ${file} | grep i386`" ]; then
					echo "  -- i386 --"
					chkdir ${REMOTE2}/${NFBASE}/debug/i386
					scp ${file} ${REMOTE2}/${NFBASE}/debug/i386
				elif [ "`echo ${file} | grep i686`" ]; then
					echo "  -- i686 --"
					chkdir ${REMOTE2}/${NFBASE}/debug/i386
					scp ${file} ${REMOTE2}/${NFBASE}/debug/i386
				elif [ "`echo ${file} | grep x86_64`" ]; then
					echo "  -- x86_64 --"
					chkdir ${REMOTE2}/${NFBASE}/debug/x86_64
					scp ${file} ${REMOTE2}/${NFBASE}/debug/x86_64
				fi
			fi
			chkdir done/debuginfo
			mv -f ${file} done/debuginfo > /dev/null 2>&1
		fi
	done
	cd ../..
}



for repo in `echo ${RPMPROC}`; do
	if [ "${repo}" = "main" -o "${repo}" = "updates" -o "${repo}" = "beta" -o "${repo}" = "testing" ]; then
		process_rpms ${repo}
	fi
done



echo
echo "==== Transfering comps.xml ===="
cp -au comps.xml ${REMOTE}/5
cp -au comps.xml ${REMOTE}/6

echo "==== Transfering osdial-version ===="
cp -au osdial-version ${BASEDIR}

echo
echo "==== Rebuilding Repository ===="
cd ${BASEDIR}
rebuildrepo ${RPMPROC}

echo "==== Syncing with private host ===="
ssh ${PUSER}@${PHOST} /home/lottc/sites/get_repo.sh

if [ "${PUBUPDATE}" -gt 0 ]; then
	if [ "${RPMPROCCMD}" != "testing" ]; then
		echo "==== Syncing with public host ===="
		ssh lottc@callcentersg.com /home/lottc/get-repo.sh
	fi
fi

echo
echo "==== Done ===="
echo
