#!/bin/sh

# script produces patch* in $WORKDIR and $CPs output
# to $OUT

# absolute dirs
WORKDIR=$PWD/work
GITTREE=$PWD/git
# where to copy patch* afterward
OUT=~/web/kernelgit/
CP=scp
# ketchup command
KETCHUP="ketchup -G"
# do a git pull on the dir first?
DOPULL=0

# script starts here

# save current pwd
EXPWD=$PWD

echo Workdir:  $WORKDIR
echo Git Tree: $GITTREE

if [ ! -d "$WORKDIR/snapshotbase" ]; then	
	mkdir -p "$WORKDIR/snapshotbase"
fi

if [ ! -d "$GITTREE" ]; then
	echo "Cannot find kernel tree"
	exit 1
fi

cd $GITTREE

if [ "$DOPULL" == "1" ]; then
	git pull origin
fi

HEAD=$(commit-id)

if [ -z $HEAD ]; then
	echo "Cannot find commit-id"
	cd $EXPWD
	exit 3
fi

echo Head: $HEAD
if [ -e $WORKDIR/head-$HEAD ]; then
	echo "Snapshot already exists"
	cd $EXPWD
	exit 2
fi

rm -rf "$WORKDIR/snapshot/"
checkout-cache --prefix="$WORKDIR/snapshot/" -a

cd "$WORKDIR/snapshotbase"
BASEVER=$($KETCHUP -m "$WORKDIR/snapshot/Makefile")
$KETCHUP "$BASEVER"
if [ "$($KETCHUP -m)" != $BASEVER ]; then
	echo "Ketchup to $BASEVER failed"
	cd $EXPWD
	exit 5
fi

cd "$WORKDIR/snapshot"
# get current N

COUNT="$WORKDIR/count-$BASEVER"

if [ ! -e "$COUNT" ]; then
	# new baseversion
	rm $WORKDIR/count-* 2>/dev/null
	N=1
else
	N=$(cat $COUNT 2>/dev/null)
	N=$(( N + 1))
fi

mv Makefile Makefile.tmp
sed -e "s/^EXTRAVERSION =\(.*\)/EXTRAVERSION =\1-git$N/" Makefile.tmp > Makefile
rm Makefile.tmp
echo $HEAD > git-commit-id

PATCHFILE=$WORKDIR/patch-$BASEVER-git$N
cd $WORKDIR
ln -s "$PATCHFILE" head-$HEAD
diff -urN snapshotbase snapshot > "$PATCHFILE"

if [ "$(wc -l $PATCHFILE)" == "3" ]; then
	echo only commit-id differs, no patches have been applied to the base version
	rm "$PATCHFILE"
	cd $EXPWD
	exit 4
fi

echo $N > $COUNT
bzip2 -9 -c "$PATCHFILE" > "$PATCHFILE.bz2"
gzip -9 -c "$PATCHFILE" > "$PATCHFILE.gz"
cd $EXPWD

$CP $PATCHFILE* $OUT/

echo "Produced $(basename $PATCHFILE)"
