#!/bin/bash

function print_usage(){
    cat <<END
    Usage: $0  [-i itemFile] [-m maintainer] [-p ChangeLogPrev] [-v ver] <ChangeLog>
	This command updates ChangeLog file by merging the 
ChangeLog file and  ChangeLog item.

Parameters:
    ChangeLog: Filename of ChangeLog

Options:
    -i ItemFile: Filename that stores ChangeLog items, that is, 
       the latest change without the version header.
       If not specified, it will use stdin for change log item input.
    -m maintainer: Maintainer name and email.
    -p ChangeLogPrev: Filename of previos ChangeLog.
    -v ver: This version.
END
}

CHANGELOG_ITEM=
CHANGELOG_PREV=
MAINTAINER=

while getopts "i:m:p:v:" opt;do
    case $opt in
	i )
	    CHANGELOG_ITEM=$OPTARG
	    ;;
	m )
	    MAINTAINER=$OPTARG
	    ;;
	p )
	    CHANGELOG_PREV=$OPTARG
	    ;;
	v )
	    VERSION=$OPTARG 
	    ;;
	* )
	    ;;
    esac
done
shift $((OPTIND-1)) 

if [[ -z "${CHANGELOG_ITEM}" ]];then
    CHANGELOG_ITEM=/dev/stdin
fi

CHANGELOG=$1
shift

if [[ -z "${CHANGELOG}" ]];then
    echo "[Error] Need to specify ChangeLog file." > /dev/stderr
    exit -1
fi

if [[ "${CHANGELOG}" = "-" ]];then
    CHANGELOG=/dev/stdout
fi

if [[ -z "${VERSION}" ]];then
    echo "[Error] Need to specify -v <ver>." > /dev/stderr
    exit -1
fi

LC_ALL=C
_dateStr=`date --utc "+%a %b %d %Y"`
CHANGELOG_TMP="/tmp/cmake-fedora-changelog.tmp"
if [[ -r ${CHANGELOG} ]];then
    cp ${CHANGELOG} ${CHANGELOG_TMP}
else
    touch ${CHANGELOG_TMP}
fi

echo "* ${_dateStr} ${MAINTAINER} - ${VERSION}" > ${CHANGELOG}
cat ${CHANGELOG_ITEM} >> ${CHANGELOG}
echo -e "\n" >> ${CHANGELOG}

buf=`gawk -v ver="${VERSION}" 'BEGIN{pr=1} {n=match($0,/^[*] [A-Z][a-z]{2} [A-Z][a-z]{2} [0-9]+ [0-9]+ .* - ([[:graph:]]+)/, arr); if (n !=0) {if (arr[1]==ver) pr=0; else pr=1;}; if (pr==1) print $0}'  ${CHANGELOG_TMP}`

echo -e "${buf}" >> ${CHANGELOG}
