#!/bin/sh

doClone ()
{
	$0 0 $1 || exit 0
	$0 1 $1 || exit 0
	$0 2 $1 || exit 0
	$0 3 $1 || exit 0
	$0 4 $1 || exit 0
}

setBinDirectory ()
{
	BINDIR=/mnt/initfs/lib/modules/current
	[ ! -d $BINDIR ] && BINDIR=/mnt/initfs/lib/modules/2.6.18-omap1
	[ ! -d $BINDIR ] && BINDIR=/mnt/initfs/lib/modules/`uname -r`

	if [ ! -f $BINDIR/mbcache.ko ]; then
        	echo "Unable to locate mbcache.ko - aborting"
        	exit 1
	fi
}

DISTRO=${2-sardine}
BINDIR=

case $DISTRO in
	sardine) DNAME=Sardine;;
	herring) DNAME=Herring;;
	*)	 echo $DISTRO is not a recognised distribution;
		 exit 1;;
esac

if [ `id -u` != 0 ]; then
	echo "You must be logged in as root to execute this script"
	exit 0
fi

if [ $# = 0 ]; then
	echo Usage "upgrade.sh 0-6|clone [sardine | herring]"
	exit 1
fi

case $1 in
	0|1|5) setBinDirectory;;
	2|3|4|6) ;;
	clone) doClone $2; exit $?;;
	*)	echo Argument 1 value $1 is invalid - 0-6;
		exit 1;;
esac

if [ $1 = 0 ]; then
	echo "Reformatting Internal SD/MMC second partition #2 for ${DNAME} using ext2fs..."
	[ "`lsmod|grep mbcache`" = "" ] && insmod $BINDIR/mbcache.ko
	[ "`lsmod|grep ext2`" = "" ] && insmod $BINDIR/ext2.ko
	mke2fs -L $DNAME /dev/mmcblk0p2
	sync
	sync
	sync
fi

if [ $1 = 1 ]; then
	echo "Installing ext2.ko module and mounting Internal partition #2..."
	[ "`lsmod|grep mbcache`" = "" ] && insmod $BINDIR/mbcache.ko
	[ "`lsmod|grep ext2`" = "" ] && insmod $BINDIR/ext2.ko
	[ ! -d /opt ] && mkdir /opt
	[ "`grep "/opt " /etc/mtab`" = "" ] && mount /dev/mmcblk0p2 /opt
fi

if [ $1 = 2 ]; then
	echo "Mouting jffs2 root partition on /floppy loopback"
	[ ! -d /floppy ] && mkdir /floppy
	[ "`grep "/floppy " /etc/mtab`" = "" ] && mount -t jffs2 /dev/mtdblock4 /floppy -o rw,rpsize=1024,rpuid=0,rpuid=30000
fi

if [ $1 = 3 ]; then
	echo "Copying Flash filesystem to Internal partition #2"
	/home/user/bin/tar cf - -C /floppy . | /home/user/bin/tar xvf - -C /opt
	touch /opt/CLONE-COPY
fi

if [ $1 = 4 ]; then
	echo "Committing updates and Unmounting filesystems"
	sync
	sync
	sync
	[ "`grep "/opt " /etc/mtab`" != "" ] && umount /opt
	[ "`grep "/floppy " /etc/mtab`" != "" ] && umount /floppy
fi

# Steps 5 and 6 to upgrade to required distribution

if [ $1 = 5 ]; then
	echo "Mounting Internal partition #2 and changing root context"
	[ "`lsmod|grep mbcache`" = "" ] && insmod $BINDIR/mbcache.ko
	[ "`lsmod|grep ext2`" = "" ] && insmod $BINDIR/ext2.ko
	[ "`grep "/opt " /etc/mtab`" = "" ] && mount /dev/mmcblk0p2 /opt/
	chroot /opt/
fi

if [ $1 = 6 ]; then
	echo "Upgrading Internal partition #2 to ${DNAME}..."

	[ -f /CLONE-COPY ] && rm /CLONE-COPY
	touch /CLONE-`echo $DISTRO | tr 'a-z' 'A-Z'`

	cd /etc/apt

	mkdir /tmp/.run

	echo "#maemo:essential" >sources.list
	echo "deb http://repository.maemo.org/${DISTRO} unstable main non-free" >>sources.list

	if [ $DISTRO = sardine ]; then
		apt-get update
		apt-get install hildon-application-framework
		apt-get -y --force-yes upgrade
	else
		apt-get update
		apt-get -y --force-yes upgrade
	fi

	sync
	sync
	sync
fi

echo Done

