#!/bin/bash
# 2009-2017 Etersoft www.etersoft.ru
# Author: Vitaly Lipatov <lav@etersoft.ru>
# Public domain

# TODO: rewrite with get_gear_rules_by_spec in mind
get_gear_rules()
{
	local DIR="$1"
	[ -z "$IGNOREGEAR" ] || return 1
	[ -f "$DIR" ] && DIR=$(dirname "$DIR")
	local GITDIR=$(get_root_git_dir $DIR)
	local rules="$GITDIR/.gear/rules"
	[ -r "$rules" ] || rules="$GITDIR/.gear-rules"
	[ -r "$rules" ] || return
	echo $rules
}

# TODO: move to gear file
get_gear_rules_by_spec()
{
	local SPECNAME="$1"
	local SPECDIR
	set_specdir
	# FIXME: move get rules file to separate function
	local BASESPECNAME=$(basename "$SPECNAME")
	local ALTGEARRULESFILE=.gear/rules-${BASESPECNAME/.spec/}
	local ALTGEARRULES=$(get_root_git_dir $SPECDIR)/$ALTGEARRULESFILE
	local GEARRULES=
	if [ -r "$ALTGEARRULES" ] ; then
		#echo "Build with alternate rules $ALTGEARRULESFILE"
		GEARRULES="--rules=$ALTGEARRULESFILE"
	fi
	echo "$GEARRULES"
}


print_gear_rules()
{
	is_gear || fatal "Can't get rules"
	# hack with @var@ replacement
	cat $(get_gear_rules) | grep -v "^#" | sed -e "s|@name@|$BASENAME|g" | sed -e "s|@version@|$VERSION|g" | sed -e "s|@release@|$RELEASE|g"
}

# args: tar_format, packaging_name
# uses: version
get_tardir_from_rules()
{
	# TODO: use get_gear_rules only once
	local tar="$1"
	local tarname="$2"
	local packname="$(basename "$tarname" .$tar)"
	local dir
	assert_var tar packname
	# firstly try get dir by name=
	dir=$(print_gear_rules | grep "$tar *:" | egrep "name=$packname([[:space:]]|$)" | sed -e "s|$tar *: *||g" | sed -e "s| .*||g" | head -n1)
	# if can't get by name, use first rule without name=
	if [ -z "$dir" ] ; then
		dir=$(print_gear_rules | grep "$tar *:" | grep -v "name=" | sed -e "s|$tar *: *||g" | sed -e "s| .*||g" | head -n1)
	fi
	# if copy, check for file equal
	if [ "$tarname" = "copy" ] && [ "$tarname" != "$dir" ] ; then
		return 1
	fi

	if [ -z "$dir" ] ; then
#			fatal "no $tar rules found in $(get_gear_rules) between
#$(print_gear_rules | grep "$tar *:")"
		return 1
	fi

	if [ "$dir" = "." ] || [ -z "$dir" ] || echo "$dir" | grep -q ":" ; then
		return 1
	fi

	realpath "$(get_root_git_dir)/$dir"
}

filter_gear_name()
{
	sed -e "s|\+|plus|g"
}

# FIXME: use in rpmbs, fix for package name from spec
get_gear_name()
{
	local gn
	local gitdir=$(get_root_git_dir)
	[ -n "$gitdir" ] || return
	gn=$(basename "$gitdir" | filter_gear_name)
	echo "$gn"
	[ -n "$gn" ]
}

