#!/bin/bash

# Copyright (C) 2009 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.

# This is a test script to ease development and testing on test clusters.
# It should not be used to update production environments.

# Usage: release v2.0.5
# Alternative: URL=file:///my/git/repo release e5823b7e2cd8a3...
# It will clone the given repository from the default or passed URL,
# checkout the given reference (a tag or branch) and then create a
# release archive; you will need to copy the archive and delete the
# temporary directory at the end

set -e

: ${URL:=git://git.ganeti.org/ganeti.git}
TAG="$1"

if [[ -z "$TAG" ]]; then
  echo "Usage: $0 <tree-ish>" >&2
  exit 1
fi

echo "Using Git repository $URL"

TMPDIR=$(mktemp -d -t gntrelease.XXXXXXXXXX)
cd $TMPDIR

echo "Cloning the repository under $TMPDIR ..."
git clone -q "$URL" dist
cd dist
git checkout $TAG

# Check minimum aclocal version for releasing
MIN_ACLOCAL_VERSION=( 1 11 1 )
ACLOCAL_VERSION=$(${ACLOCAL:-aclocal} --version | head -1 | \
                 sed -e 's/^[^0-9]*\([0-9\.]*\)$/\1/')

ACLOCAL_VERSION_REST=$ACLOCAL_VERSION
for v in ${MIN_ACLOCAL_VERSION[@]}; do
 ACLOCAL_VERSION_PART=${ACLOCAL_VERSION_REST%%.*}
 ACLOCAL_VERSION_REST=${ACLOCAL_VERSION_REST#$ACLOCAL_VERSION_PART.}
 if [[ $v -eq $ACLOCAL_VERSION_PART ]]; then
   continue
 elif [[ $v -lt $ACLOCAL_VERSION_PART ]]; then
   break
 else # gt
   echo "aclocal version $ACLOCAL_VERSION is too old (< 1.11.1)"
   exit 1
 fi
done

./autogen.sh
./configure

VERSION=$(sed -n -e '/^PACKAGE_VERSION =/ s/^PACKAGE_VERSION = // p' Makefile)

make distcheck-release
fakeroot make dist-release
tar tzvf ganeti-$VERSION.tar.gz

echo
echo 'MD5:'
md5sum ganeti-$VERSION.tar.gz
echo
echo 'SHA1:'
sha1sum ganeti-$VERSION.tar.gz
echo
echo "The archive is at $PWD/ganeti-$VERSION.tar.gz"
echo "Please copy it and remove the temporary directory when done."
