#!/bin/bash
# This is the script used to do basic janitor work and generate snapshots at
# http://people.openezx.org/wyrm/images/

DATE=`date +%Y%m%d%H%M`
JOBS="-j8"
CROSS="/home/wyrm/devel/arm/bin/arm-angstrom-linux-gnueabi-"
SERVER="people.openezx.org"
DIR="public_html/images"
EXPIRE="10 days ago"
TARGET=$1
FILES="config-$DATE md5sums topgit-layout.png buildlog-$DATE patches-$DATE.tar.bz2 zImage-$DATE modules-$DATE.tar.bz2"

echo "WM: Checking for changes on OpenEZX."
git checkout ezx/current
if [ "`git pull openezx ezx/current`" != "Already up-to-date." ]; then
	echo "WM: OpenEZX has changes!"
	tg remote --populate openezx
	tg update
fi

echo "WM: Checking for changes on mainline linux."
git checkout master
if [ "`git pull`" != "Already up-to-date." ]; then
	echo "WM: Linus has changes! Updating OpenEZX."
	git checkout ezx/current
	tg update
fi
git checkout ezx/current

echo "WM: Checking for changes on .config"
cp arch/arm/configs/ezx_defconfig .config
make ARCH=arm oldconfig
if [ "`wc -l .config | cut -f1 -d\" \"`" != "`wc -l arch/arm/configs/ezx_defconfig | cut -f1 -d\" \"`" ] || [ "`diff -B -I ^# arch/arm/configs/ezx_defconfig .config`" != "" ];then
	echo "WM: .config has changes! Updating OpenEZX defconfig."
	git checkout ezx/defconfig
	cp .config arch/arm/configs/ezx_defconfig
	git add arch/arm/configs/ezx_defconfig
	git commit -m "Automatic defconfig update"
	git checkout ezx/current
	tg update
fi

echo "WM: Pushing changes to OpenEZX."
git push openezx

echo "WM: Exporting topgit layout."
tg summary --graphviz | dot -Tpng -o topgit-layout.png

echo "WM: Exporting quilt patchset."
tg export --quilt patches

echo "WM: checkpatch.pl."
for p in `ls patches/*.diff patches/*/*.diff patches/*/*/*.diff`
do
	./scripts/checkpatch.pl $p >> $p
done

echo "WM: Packing patches."
tar -c patches | bzip2 > patches-$DATE.tar.bz2
rm -rf patches

if [ "$TARGET" == "build" ] || [ "$TARGET" == "upload" ]; then
	echo "WM: Starting build:"

	echo "WM: Cleaning up."
	make mrproper > /dev/null

	echo "WM: Tagging build with \"-ezx$DATE\"."
	cat arch/arm/configs/ezx_defconfig | sed "s/LOCALVERSION=\".*\"/LOCALVERSION=\"-ezx$DATE\"/" > .config

	cp .config config-$DATE

	echo "WM: Building zImage."
	make $JOBS ARCH=arm CROSS_COMPILE=$CROSS zImage > buildlog-$DATE 2>&1
	cp arch/arm/boot/zImage ./zImage-$DATE

	echo "WM: Building modules."
	make $JOBS ARCH=arm CROSS_COMPILE=$CROSS modules >> buildlog-$DATE 2>&1

	echo "WM: Packing modules."
	mkdir -p tmp-$DATE
	make ARCH=arm CROSS_COMPILE=$CROSS INSTALL_MOD_PATH=tmp-$DATE modules_install >> buildlog-$DATE 2>&1
	tar -C tmp-$DATE -c . | bzip2 > modules-$DATE.tar.bz2
	rm -rf tmp-$DATE

	if [ $TARGET == "upload" ]; then
		echo "WM: generating md5 checksums."
		md5sum zImage-$DATE > md5sums
		md5sum modules-$DATE.tar.bz2 >> md5sums
		md5sum patches-$DATE.tar.bz2 >> md5sums

		echo "WM: Setting up remote."
		ssh $SERVER "mkdir -p $DIR/$DATE && rm -f $DIR/latest && ln -s $DATE $DIR/latest"

		echo "WM: Uploading files."
		scp $FILES $SERVER:$DIR/$DATE

		echo "WM: Deleting files."
		rm -f $FILES 

		echo "WM: Unpacking patches on remote."
		ssh $SERVER "cd $DIR/$DATE/ && bzcat patches-$DATE.tar.bz2 | tar -x"

		echo "WM: Deleting old images on remote."
		YEAR="`date +%Y -d "$EXPIRE"`"
		MONTH="`date +%m -d "$EXPIRE"`"
		DAY="`date +%d -d "$EXPIRE"`"
		PREV_YEAR="`expr $YEAR - 1`"
		DEL_IMAGES="$PREV_YEAR*"
		PREV_MONTH="$MONTH"
		while [ $PREV_MONTH -gt 1 ];do
		        PREV_MONTH="`expr $PREV_MONTH - 1`"
		 	if [ $PREV_MONTH -lt 10 ]; then
	        		PREV_MONTH=0$PREV_MONTH
		        fi
		        DEL_IMAGES="$DEL_IMAGES $YEAR$PREV_MONTH*"
		done
		PREV_DAY="$DAY"
		while [ $PREV_DAY -gt 1 ];do
		        PREV_DAY="`expr $PREV_DAY - 1`"
		        if [ $PREV_DAY -lt 10 ]; then
		                PREV_DAY=0$PREV_DAY
		        fi
		        DEL_IMAGES="$DEL_IMAGES $YEAR$MONTH$PREV_DAY*"
		done

		ssh $SERVER "cd $DIR && rm -rf $DEL_IMAGES"
	fi
fi
echo "WM: Done."
