#! /bin/sh -efu
#
# Copyright (C) 2011  Aleksey Avdeev <solo@altlinux.ru>
#
# Common shell functions for cronbuild scripts.
#
# This file 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 St, Fifth Floor, Boston, MA 02110-1301, USA.
#

PROG_NAME="${0##*/}"

exit_err()
{
	#
	# $1 -- exit code
	# $2 -- msg
	#

	[ -n "$2" ] && printf "%s: %s\n" "$PROG_NAME" "$2"

	exit $1
}

get_specfile()
{
	local specfilename="$(gear --command sh -- -c 'printf %s "$gear_specfile"')"
	if [ -z "$specfilename" ] || ! [ -e "$specfilename" ]; then
		specfilename=''
	fi
	printf "%s\n" "$specfilename"
}

get_packagename()
{
	gear --command sh -- -c 'printf %s "$gear_pkg_name"'
}

get_packageverionrel()
{
	#
	# $1 -- specfile
	#
	# Return version-release

	local specfile="$1"
	if [ -z "$specfile" ]; then
		specfile="$packagespecname"
	fi

	sed -n -r '
	/^%changelog[[:space:]]*$/,/^[[:space:]]*$/{
		/^\*/s/^\*.+>[[:space:]]+([^[:space:]]+)[[:space:]]*$/\1/p
	}' "$specfile"
}

get_newversion()
{
	#
	# $1 -- specfile
	#
	# Return X.Y.(Z+1)

	local specfile="$1"
	if [ -z "$specfile" ]; then
		specfile="$packagespecname"
	fi

	# Version: X.Y.Z
	local version="`get_packageverionrel "$specfile"`"
	local versionXY="`echo $version \
		| sed -n -r '/^[[:space:]]*[0-9]+\.[0-9]+\.[0-9]+([-.][^[:space:]]+|)[[:space:]]*$/s/^[[:space:]]*([0-9]+\.[0-9]+)\.[0-9]+([-.][^[:space:]]+|)[[:space:]]*$/\1/p'`"
	local versionZ="`echo $version \
		| sed -n -r '/^[[:space:]]*[0-9]+\.[0-9]+\.[0-9]+([-.][^[:space:]]+|)[[:space:]]*$/s/^[[:space:]]*[0-9]+\.[0-9]+\.([0-9]+)([-.][^[:space:]]+|)[[:space:]]*$/\1/p'`"

	let versionZ=$versionZ+1

	printf "%s.%s\n" "$versionXY" "$versionZ"
}

get_commitmsg()
{
	#
	# $1 -- specfile
	#
	# Return commitmsg

	local specfile="$1"
	if [ -z "$specfile" ]; then
		specfile="$packagespecname"
	fi

	sed -n -r '
	/^%changelog[[:space:]]*$/,/^[[:space:]]*$/{
		/^%changelog[[:space:]]*$/!{
			/^\*/!p
			/^\*/{
				s/^\*.+>[[:space:]]+([^[:space:]]+)[[:space:]]*$/\1/p
				a \

			}
		}
	}' "$specfile"
}

new_commitmsg()
{
	# Get commitmsg
	local commitmsg="`get_commitmsg "$packagespecname"`"
	[ -n "$commitmsg" ] || exit_err 1 "ERR set commitmsg"

	printf "%s\n\ngear-update-tag -ac\n" "$commitmsg"
}

new_tagmsg()
{
	# Get packagename
	local packagename="`get_packagename "$packagespecname"`"
	[ -n "$packagename" ] || exit_err 1 "ERR set packagename"

	# Get packageverionrel
	local packageverionrel="`get_packageverionrel "$packagespecname"`"
	[ -n "$packageverionrel" ] || exit_err 1 "ERR set packageverionrel"

	printf "%s %s\n" "$packagename" "$packageverionrel"
}

new_tagname()
{
	# Get packagename
	local packagename="`get_packagename "$packagespecname"`"
	[ -n "$packagename" ] || exit_err 1 "ERR set packagename"

	# Get packageverionrel
	local packageverionrel="`get_packageverionrel "$packagespecname"`"
	[ -n "$packageverionrel" ] || exit_err 1 "ERR set packageverionrel"

	printf "ALT/%s/%s\n" "$packagename" "$packageverionrel"
}

# Check packagespecname
if [ -z "$packagespecname" ]; then
	packagespecname="`get_specfile`"
fi
[ -n "$packagespecname" ] || exit_err 1 "ERR set specfile"
