#!/bin/sh
#=============================================================================#
#                         Edit changelog to RPM spec                          #
#=============================================================================#
# (C) Denis Smirnov <mithraen@altlinux.ru>			  2 Nov 2004  #
#=============================================================================#
PROG=${0##*/}

USAGE() {
    cat <<EOF

$PROG -- add changelog record to RPM specfile

Usage: $PROG [options] [specfile]

Valud options are:
-a, --add     add only (do not start editor, if changelog record already exists)
-h, --help    help
-e, --entry   changelog entry text

Without specfile parameter it would be autodetected (with specgen support)

EOF
    [ -n "$1" ] && exit "$1" || exit
}

TEMP=`getopt -n $PROG -o a,h,e: -l add,entry:,help -- "$@"` || USAGE
eval set -- "$TEMP"

add_changelog() {
    if [ "$ADD_CHANGELOG_PARAM" = "" ]; then
        /usr/bin/add_changelog "$@"
    else
        /usr/bin/add_changelog "$ADD_CHANGELOG_PARAM" "$@"
    fi
}


while :; do
        case "$1" in
            # Add only
            -a|--add) shift; ADD_ONLY=1
                ;;
            -e|--entry) shift; ADD_CHANGELOG_PARAM="--entry=$1"; shift
                ;;
            -h|--help) USAGE 0
                ;;
            --) shift; break
                ;;
            *) echo "$PROG: unrecognized option: $1" >&2; exit 1
                ;;
        esac
done

SPEC=$1

# Если не указано имя файла со spec'ом, пытаемся его определить автоматически
if [ "$SPEC" = "" ] && [ -d .git ]; then
    SPEC=$(gear --command sh -- -c 'printf %s"$gear_specfile"')
    # Поддержка specgen
    if [ "$SPEC" != "" ] && [ -f "specs/$SPEC" ]; then
        SPEC="specs/$SPEC"
    fi
fi

if [ -z "$SPEC" ]; then
    echo "Use: $0 [<spec-filename>]"
    exit -1
fi  

run_edit() {
    N=`grep -n '^%changelog' $SPEC | head -n 1 | sed s!:.*!!g`
    N=$(($N + 2))
    ${EDITOR:-vim} +$N "$1"
}

if [ "$ADD_ONLY" = "1" ]; then
    if add_changelog "$SPEC"; then
        if [ "$ADD_CHANGELOG_PARAM" = "" ]; then
	    run_edit "$SPEC"
        fi
    fi
else
    add_changelog "$SPEC" ||:
    if [ "$ADD_CHANGELOG_PARAM" = "" ]; then
	run_edit "$SPEC"
    fi
fi
