#!/bin/bash -e

usage() {
    echo "usage: $0 [--upload] [--formal] commit [name] [tarball] [user]"
    exit 1
}

[[ -f ~/.kvmreleaserc ]] && . ~/.kvmreleaserc

upload=
formal=

releasedir=~/sf-release
[[ -z "$TMP" ]] && TMP="/tmp"
tmpdir=`mktemp -d --tmpdir="$TMP" qemu-kvm-make-release.XXXXXXXXXX`
while [[ "$1" = -* ]]; do
    opt="$1"
    shift
    case "$opt" in
	--upload)
	    upload="yes"
	    ;;
	--formal)
	    formal="yes"
	    ;;
	*)
	    usage
	    ;;
    esac
done

commit="$1"
name="$2"

if [[ -z "$commit" ]]; then
    usage
fi

if [[ -z "$name" ]]; then
    name="$commit"
fi

tarball="$3"
if [[ -z "$tarball" ]]; then
    tarball="$releasedir/$name.tar.gz"
fi
#strip trailing .gz if any
tarball=${tarball/%.gz/}

cd "$(dirname "$0")"/../..
mkdir -p "$(dirname "$tarball")"
git archive --prefix="$name/" --format=tar "$commit" > "$tarball"

mtime=`git show --format=%ct "$commit""^{commit}" --`
tarargs="--owner=root --group=root --mtime=@$mtime"

mkdir -p "$tmpdir"
git cat-file -p "${commit}:roms" | awk ' { print $4, $3 } ' \
    > "$tmpdir/EXTERNAL_DEPENDENCIES"
tar -rf "$tarball" --transform "s,^,$name/," -C "$tmpdir" \
    $tarargs \
    "EXTERNAL_DEPENDENCIES"
rm -rf "$tmpdir"

if [[ -n "$formal" ]]; then
    mkdir -p "$tmpdir"
    echo "$name" > "$tmpdir/KVM_VERSION"
    tar -rf "$tarball" --transform "s,^,$name/," -C "$tmpdir" "KVM_VERSION" \
        $tarargs
    rm -rf "$tmpdir"
fi

rm -f "$tarball.gz"
gzip -9 "$tarball"
tarball="$tarball.gz"

if [[ -n "$upload" ]]; then
    rsync --progress -h "$tarball" avik@frs.sourceforge.net:uploads/
fi
