# Created by Tobias Powalowski <tpowa@archlinux.org>

install ()
{
    ###  check for root
    if ! [ $UID -eq 0 ]; then 
	echo "ERROR: only works when run as root!"
	exit 1
    fi
    ### check for activated testing repository
    if ! [ "$(grep '^\[testing\]' /etc/pacman.conf)" = "" ]; then 
	echo "WARNING: TESTING REPOSITORY ACTIVATED"
	echo "-------------------------------------"
	echo "POSSIBILITY OF BROKEN BINARY PACKAGES ON INSTALL MEDIA!"
	echo "Use a chroot instead to avoid those problems."
	echo "5 seconds time to cancel with CTRL+C"
	sleep 5
    fi
    ### begin cvs part
    if ! [ "${LOCALSETUP}" = "yes" ]; then 
    	CVSTREE=$(mktemp /tmp/corecvs.XXXX)
	GIT_INSTALLER_TREE=$(mktemp /tmp/installer.git.XXXX)
    	rm ${CVSTREE}
	rm ${GIT_INSTALLER_TREE}
    	mkdir -p ${CVSTREE}
	mkdir -p ${GIT_INSTALLER_TREE}
    	# checkout actual core cvs
    	export CVSROOT=${CVSSETUP}
    else
    	CVSTREE=${CVSTREE}
	GIT_INSTALLER_TREE=${GIT_INSTALLER_TREE}
    fi
    cd ${CVSTREE}
    if ! [ "${LOCALSETUP}" = "yes" ]; then
    	cvs -z3 co -r ${TAG} core/
    	MAINCVSDIR="${CVSTREE}/core"
    	cd  ${MAINCVSDIR}
    	SEARCHCVS=$(find ./ -type d ! -name "CVS")
    else
    	cd ${MAINCVSDIR}
    	SEARCHCVS=$(find ./ -type d ! -name "CVS")
    fi

    if ! [ "${TEMPDIR}" = "" ]; then 
    	mkdir -p ${TEMPDIR}/core/pkg/
    	# Download all packages
    	PACKAGES=$(for i in ${SEARCHCVS};do ! [ "$(echo $i | awk -F/ '{print $3}')" = "" ] && echo -n "core/$(echo $i|  awk -F/ '{print $3}') ";done)
    	if ! [ "${LOCALSETUP}" = "yes" ]; then
    		pacman -Sy
    		if  ! [ "$(pacman -Sw --noconfirm ${PACKAGES})" ]; then 
    			echo "ABORTING: Something went wrong in package retrieving or md5sum check."
    			exit 1
    		fi
    	else
    		DBGENERATE="$(mktemp /tmp/db-generate.XXX)"
    		rm ${DBGENERATE}
    		mkdir -p ${DBGENERATE}
    		gensync ${MAINCVSDIR}/ ${DBGENERATE}/core.db.tar.gz ${PACKAGEDIR}
    		PACMANREPO="$(mktemp /tmp/pacman-repo.XXX)"
    		rm ${PACMANREPO}
    		mkdir -p ${PACMANREPO}
    		mount --bind ${PACKAGEDIR} ${PACMANREPO}
    		mv ${DBGENERATE}/core.db.tar.gz ${PACMANREPO}/
    		rm -r ${DBGENERATE}
    		PACMANCONF="$(mktemp /tmp/pacman-conf.XXX)"
    		echo "[core]" >> ${PACMANCONF}
    		echo "Server = file://${PACMANREPO}" >> ${PACMANCONF}
    		pacman -Sy --config ${PACMANCONF}
    		if ! [ "$(pacman -Sw --noconfirm --config ${PACMANCONF} ${PACKAGES})" ]; then 
    			echo "ABORTING: Something went wrong in package retrieving or md5sum check."
    			umount ${PACMANREPO}
    			exit 1
    		fi
    	fi
    	# collect the packages
    	cd ${MAINCVSDIR}
    	for COPY in ${SEARCHCVS};do
    		if ! [ "$(echo ${COPY} | awk -F/ '{print $3}')" = "" ]; then
    	 	source "${COPY}/PKGBUILD"
    		cp /var/cache/pacman/pkg/${pkgname}-${pkgver}-${pkgrel}-$(uname -m).pkg.tar.gz ${TEMPDIR}/core/pkg/
    		echo "$(echo ${COPY}| awk -F/ '{print $2}')/${pkgname}-${pkgver}-${pkgrel}-$(uname -m).pkg.tar.gz" >> ${TEMPDIR}/core/pkg/packages.txt
    		fi
    	done
    	# generate packages.txt
    	sort -u ${TEMPDIR}/core/pkg/packages.txt -o ${TEMPDIR}/core/pkg/packages.txt 
    fi
    SCRIPT=
    BINARIES=
    # always needed for every install
    cd ${GIT_INSTALLER_TREE}
    if ! [ "${LOCALSETUP}" = "yes" ]; then
	git-clone ${GIT_INSTALLER}
    fi
    # fix km script
    KM=$(mktemp /tmp/km.XXXX)
    if ! [ "${LOCALSETUP}" = "yes" ]; then 
    	cp -f /etc/archboot/scripts/km ${KM}
    else
    	cp -f ${KMSCRIPT} ${KM}
    fi
    sed -i -e 's#$BASEDIR/keymaps/##g' ${KM}
    chmod 755 ${KM}
    mkdir -p ${TEMPDIR}/arch
    add_file "${KM}" "/bin/km"
    # fix mirrors.txt
    if ! [ "${LOCALSETUP}" = "yes" ]; then
	sed -i -e "s/i686/$(uname -m)/g" ${GIT_INSTALLER_TREE}/installer/mirrors.txt
    	add_file "${GIT_INSTALLER_TREE}/installer/setup" "/arch/setup"
    	add_file "${GIT_INSTALLER_TREE}/installer/quickinst" "/arch/quickinst"
    	add_file "${GIT_INSTALLER_TREE}/installer/mirrors.txt" "/arch/mirrors.txt"
    else
	MIRRORTREE=$(mktemp /tmp/mirror.XXXX)
	rm ${MIRRORTREE}
	mkdir -p ${MIRRORTREE}
	cp ${GIT_INSTALLER_TREE}/mirrors.txt ${MIRRORTREE}/
    	sed -i -e "s/i686/$(uname -m)/g" ${MIRRORTREE}/mirrors.txt
    	add_file "${SETUP}" "/arch/setup"
    	add_file "${QUICKINST}" "/arch/quickinst"
    	add_file "${MIRRORTREE}/mirrors.txt" "/arch/mirrors.txt"
    fi
    DOCS=$(mktemp /tmp/docs.XXXX)
    if ! [ "${LOCALSETUP}" = "yes" ]; then 
    	cp -f ${GIT_INSTALLER_TREE}/installer/arch-install-guide.txt ${DOCS}
    else
    	cp -f ${DOCUMENTATION} ${DOCS}
    fi
    gzip -9 ${DOCS}
    add_file "${DOCS}.gz" "/arch/archdoc.txt.gz" 
    add_dir "/src"
    if ! [ "${LOCALSETUP}" = "yes" ]; then
    	if ! [ "${TEMPDIR}" = "" ]; then
    		cp ${GIT_INSTALLER_TREE}/installer/arch-install-guide.txt ${TEMPDIR}/arch/archdoc.txt
    		#cd ${TEMPDIR}/arch/pkg/setup/
    		#wget ${FTPSERVER}/$(uname -m)/setup/pacman.pkg.tar.gz 
    		cd ${TEMPDIR}/core/pkg/
    		snarf ${FTPSERVER}/$(uname -m)/core.db.tar.gz
    	fi
    else
    	if ! [ "${TEMPDIR}" = "" ]; then
    		cp -f ${DOCUMENTATION} ${TEMPDIR}/arch/archdoc.txt
    		#cp -f ${PACMANBINARY} ${TEMPDIR}/arch/pkg/setup/
    		mv ${PACMANREPO}/core.db.tar.gz ${TEMPDIR}/core/pkg/
    		umount ${PACMANREPO}
    	fi 
    fi

    # generate iso title name
    [ "${RUNPROGRAM}" = "mkbootcd" -o "${RUNPROGRAM}" = "mkbootcd-grub" ] && echo "Arch Linux CORE $(uname -m)" >> ${ISONAME}
}

help ()
{
cat <<HELPEOF
  This hook sets up all you need for a arch core install image.
HELPEOF
}
