#!/bin/sh
#
# script to automate pushing rt-tests tarball and git branch to
# kernel.org.
#
# This won't work if you aren't me :)
#
#   Copyright 2009 Clark Williams <williams@redhat.com>
#

testing=0
TEMP=$(getopt -o t -l test -n do-git-push -- "$@")
if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
eval set -- "$TEMP"
while true; do
    case "$1" in
	-t|--test) testing=1 ; shift ;;
	--) shift ; break ;;
	*) echo "Internal Error!"; exit 1 ;;
    esac
done

if [ $# -lt 1 ]
then
    echo "usage: do-git-push <version>"
    exit -1
fi

version=$1
accnt=clrkwllms@master.kernel.org
destpath=/pub/linux/kernel/people/clrkwllms/
branch=$(git symbolic-ref -q HEAD)

if [ $testing -eq 1 ]; then
    echo "version:  $version"
    echo "accnt:    $accnt"
    echo "destpath: $destpath"
    echo "branch:   $branch"
fi

# sanity check
if [ ! -d .git ]
then
    echo "No .git directory found!"
    echo "cwd: $(pwd)"
    exit -1
fi

# make sure we're on the master branch
if [ $branch != 'refs/heads/master' ]; then
   echo "must be on master branch to push!"
   echo "(currently on branch: $branch)"
   exit -1
fi

# double sanity check
mkver=$(awk '$1 == "VERSION_STRING" {print $3; exit 0}' Makefile)
if [ $version != $mkver ]
then
    echo "parameter mismatch with Makefile!"
    echo "input parameter:  $version"
    echo "Makefile version: $mkver"
    exit -1
fi

# check the git tag
tag="v$version"
if rev=$(git rev-parse --verify -q "$tag")
then
	if [ "tag" = "$(git cat-file -t $rev)" ]; then
		echo "using existing tag $tag"
	else
		echo "$tag is not a tag"
		exit -1
	fi
else
	echo "Generating annotated tag $tag"
	if [ $testing -eq 0 ]; then
	    git tag -a $tag
	    if [ $? != 0 ]; then
		echo "No tag message; aborting!"
		exit -1
	    fi
	else
	    echo "testing: Generate Tag"
	fi
fi

# copy the tarball if it isn't already there
tar=rt-tests-$version.tar.gz
asc=rt-tests-$version.tar.asc

if [ ! -e $tar ];
then
    echo "Generating tarfile $tar"
    make release
else
    echo "Using existing tarfile $tar"
fi

if kup ls $destpath | grep $tar > /dev/null 2>&1
then
    echo "Tarfile $tar is already on kernel.org"
else
    echo "Copying tarfile $tar to kernel.org"
    if [ $testing -eq 0 ]; then
	kup put $tar $asc $destpath/$tar
    else
	echo "testing: copy tarfile"
    fi
fi

[ $testing -eq 1 ] && dryrun=--dry-run
echo "Pushing master and tags to kernel.org"
git push $dryrun --tags origin master
