#!/bin/sh
# 2003-2009 (c) Etersoft www.etersoft.ru
# Author: Vitaly Lipatov <lav@etersoft.ru>
# Public domain
#
# BSH - build source; use hasher
#
# Создаёт пакет(ы) по указанным спекам и собирает в hasher
# Поддерживает удалённую сборку пакета ( ключ -r)
# Присылка результата сборки по почте (ключ -m)
# TODO: Сжимать отправляемый лог
# TODO: присылать обратно собранные пакеты??

# load common functions, compatible with local and installed script
. `dirname $0`/../share/eterbuild/functions/common
load_mod rpm git

RESULT=0
REMCOM=
COMMIT=

#############################
Usage="Usage: $name [-r -s -u -m -i -c] spec..."
function mygetopts()
{
name=${0##*/}
Descr="$name - BSH - build source; use hasher"

phelp()
{
	echog "$Descr"
	echog "$Usage"
	echog "Options:"
	echog " -r - remote build"
	echog " -t - make temporary commit before build (rpmbb like behavior)"
	echog " -u - sign and upload after build"
	echog " -s - sign and and copy to upload dir (ETERDESTSRPM) after build"
	echog " -i - install built packages in test hasher"
	echog " -l - lazy cleanup (before build, not after)"
	echog " -c - build without stuff (previous built packages)"
}

while getopts :hrulsimt opt; do
    case $opt in
    h) phelp; exit 0;;
    r) REMOTEBUILD=1 ;;
    t) COMMIT="--commit" ;;
    +?) echog "$name: options should not be preceded by a '+'." 1>&2; exit 2;;
#    ?)  echog "$name: $OPTARG: bad option.  Use -h for help." 1>&2 ; exit 2;;
	?) OPTIND=$((OPTIND-1)); break;
    esac
done

## remove args that were options
if [ $# -gt 0 ]; then 
	shift $((OPTIND - 1))
fi

LISTRPMARGS=$@

}
#############################

if is_girar_name $1 ; then
	GIRARHOST=$1
	shift
fi

parse_cmd_pre "$@"
mygetopts $LISTARGS

[ -n "$LISTNAMES" ] || fatal "Run with exists specs as arg"

# TODO: skip for prev. packed src.rpm
# If fail, we already has correct changelog
add_changelog_helper "- new version" $LISTNAMES

# We do not not pass args for myhsh here...
# FIXME: не обрабатывает два пропускаемых вместе параметра
pack_src_rpm $COMMIT $(echo $LISTRPMARGS | sed -e "s|-[suUicl]||g")

# TODO: skip for prev. packed src.rpm
set_specdir $LISTNAMES

if  [ -n "$REMOTEBUILD" ] ; then
	check_key
	test -n "$BUILDSERVER" || fatal "Please set BUILDSERVER in config file"
	# FIXME - get via etersoft-build-utils
	test -n "$REMOTERPMDIR" || REMOTERPMDIR=`ssh $BUILDSERVER echo $HOME`/RPM
	LISTSRPM="$(echo $LISTBUILT | xargs -n1 basename)"
	echo
	echog "############ Build at build server '$BUILDSERVER' (with $LISTRPMARGS options) ############"
	echo
	echog "==== Copying to build server ====="
	rsync -vay --partial --progress --checksum \
		-e ssh $LISTBUILT $BUILDSERVER:$REMOTERPMDIR/SRPMS/ || fatal "Error with rsync"
	ssh -t $BUILDSERVER "cd $REMOTERPMDIR/SRPMS && time myhsh $MENVARG $LISTRPMARGS $LISTSRPM"
	RESULT=$?
	date
	echo "-------------------------------"
	test "$RESULT" = "0" && echog "It was remote build at $BUILDSERVER" || echog "There is error during remote build at $BUILDSERVER"
else
	time $ETERBUILDBIN/myhsh $MENVARG $LISTRPMARGS $LISTBUILT
	RESULT=$?

	date
	echo "-------------------------------"
fi


# make src.rpm if build OK and we have options for rpmbs
if [ ! "$RESULT" = "0" ] || [ -z "$LISTRPMARGS" ]; then
	exit $RESULT
fi

is_gear $SPECDIR && TSKLIST=$LISTNAMES || TSKLIST=$LISTBUILT

$ETERBUILDBIN/rpmbs $GIRARHOST $MENVARG $LISTRPMARGS $TSKLIST